
On Tue, Mar 28, 2023 at 11:54 AM Tom Rini trini@konsulko.com wrote:
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 pinskia@gcc.gnu.org
Suggested-by: Andrew Pinski apinski@marvell.com
Other than that it looks good. Reviewed-by: Andrew Pinski apinski@marvell.com
Thanks, Andrew Pinski
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108915 Signed-off-by: Tom Rini trini@konsulko.com
Andrew, please feel free to reply with any further tags you want here, I wasn't exactly sure of the best way to attribute this to you. Thanks!
include/linker_lists.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/include/linker_lists.h b/include/linker_lists.h index d3da9d44e853..f9a2ee0c762a 100644 --- a/include/linker_lists.h +++ b/include/linker_lists.h @@ -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__ */
2.34.1