linker_lists: Rework start/end macros to not rely on undefined behavior
Per the GCC bug listed below, the way we do linker lists is relying on undefined behavior that seems to work in gcc, but doesn't always work in clang. Andrew suggests rewriting our start/end macros in a different way (as implemented here, from what he said in comment 1) to avoid these problems. Reported-by: AdityaK <appujee@google.com> Suggested-by: Andrew Pinski <apinski@marvell.com> Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108915 Signed-off-by: Tom Rini <trini@konsulko.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Andrew Pinski <apinski@marvell.com>
This commit is contained in:
parent
65fa29d6c3
commit
d0e3378ad7
1 changed files with 12 additions and 4 deletions
|
@ -127,7 +127,9 @@
|
|||
static char start[0] __aligned(CONFIG_LINKER_LIST_ALIGN) \
|
||||
__attribute__((unused)) \
|
||||
__section("__u_boot_list_2_"#_list"_1"); \
|
||||
(_type *)&start; \
|
||||
_type * tmp = (_type *)&start; \
|
||||
asm("":"+r"(tmp)); \
|
||||
tmp; \
|
||||
})
|
||||
|
||||
/**
|
||||
|
@ -153,7 +155,9 @@
|
|||
({ \
|
||||
static char end[0] __aligned(4) __attribute__((unused)) \
|
||||
__section("__u_boot_list_2_"#_list"_3"); \
|
||||
(_type *)&end; \
|
||||
_type * tmp = (_type *)&end; \
|
||||
asm("":"+r"(tmp)); \
|
||||
tmp; \
|
||||
})
|
||||
/**
|
||||
* ll_entry_count() - Return the number of elements in linker-generated array
|
||||
|
@ -247,7 +251,9 @@
|
|||
({ \
|
||||
static char start[0] __aligned(4) __attribute__((unused)) \
|
||||
__section("__u_boot_list_1"); \
|
||||
(_type *)&start; \
|
||||
_type * tmp = (_type *)&start; \
|
||||
asm("":"+r"(tmp)); \
|
||||
tmp; \
|
||||
})
|
||||
|
||||
/**
|
||||
|
@ -270,7 +276,9 @@
|
|||
({ \
|
||||
static char end[0] __aligned(4) __attribute__((unused)) \
|
||||
__section("__u_boot_list_3"); \
|
||||
(_type *)&end; \
|
||||
_type * tmp = (_type *)&end; \
|
||||
asm("":"+r"(tmp)); \
|
||||
tmp; \
|
||||
})
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
|
Loading…
Reference in a new issue