[RFC PATCH 2/2] global-data.h: add build-time sanity check of sizeof(struct global_data)

Tom Rini trini at konsulko.com
Thu Jul 1 23:54:54 CEST 2021


On Tue, May 18, 2021 at 11:19:47AM +0200, Rasmus Villemoes wrote:

> The layout and contents of struct global_data depends on a lot of
> CONFIG_* preprocessor macros, not all of which are entirely converted
> to Kconfig - not to mention weird games played here and there. This
> can result in one translation unit using one definition of struct
> global_data while the actual layout is another.
> 
> That can be very hard to debug. But we already have a mechanism that
> can help catch such bugs at build time, namely the asm-offsets
> machinery which is necessary anyway to provide assembly code with the
> necessary constants. So make sure that every C translation unit that
> include global_data.h actually sees the same size of struct
> global_data as that which was seen by the asm-offsets.c TU.
> 
> It is likely that this patch will break the build of some boards. For
> example, without the patch from Matt Merhar
> (https://lists.denx.de/pipermail/u-boot/2021-May/450135.html) or some
> other fix, this breaks P2041RDB_defconfig:
> 
>   CC      arch/powerpc/lib/traps.o
>   AS      arch/powerpc/cpu/mpc85xx/start.o
> In file included from include/asm-generic/global_data.h:26,
>                  from ./arch/powerpc/include/asm/global_data.h:109,
>                  from include/init.h:21,
>                  from arch/powerpc/lib/traps.c:7:
> include/linux/build_bug.h:99:41: error: static assertion failed: "sizeof(struct global_data) == GD_SIZE"
>    99 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
>       |                                         ^~~~~~~~~~~~~~
> include/linux/build_bug.h:98:34: note: in expansion of macro ‘__static_assert’
>    98 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
>       |                                  ^~~~~~~~~~~~~~~
> include/asm-generic/global_data.h:470:1: note: in expansion of macro ‘static_assert’
>   470 | static_assert(sizeof(struct global_data) == GD_SIZE);
>       | ^~~~~~~~~~~~~
> make[1]: *** [scripts/Makefile.build:266: arch/powerpc/lib/traps.o] Error 1
> make: *** [Makefile:1753: arch/powerpc/lib] Error 2
> make: *** Waiting for unfinished jobs....
> 
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
> Reviewed-by: Simon Glass <sjg at chromium.org>

Applied to u-boot/next, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210701/c60fb9ce/attachment.sig>


More information about the U-Boot mailing list