
In order to prepare for slight size growth due to reworking linker list support, enable LTO here to save more space again.
Signed-off-by: Tom Rini trini@konsulko.com --- Cc: Heiko Schocher hs@denx.de --- configs/smartweb_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/smartweb_defconfig b/configs/smartweb_defconfig index 4cbdab0b37d8..836e0c002dee 100644 --- a/configs/smartweb_defconfig +++ b/configs/smartweb_defconfig @@ -24,6 +24,7 @@ CONFIG_SPL_SYS_MALLOC_F_LEN=0x400 CONFIG_SPL=y CONFIG_ENV_OFFSET_REDUND=0x180000 CONFIG_SYS_LOAD_ADDR=0x22000000 +CONFIG_LTO=y CONFIG_FIT=y CONFIG_NAND_BOOT=y CONFIG_BOOTDELAY=3

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 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__ */

On Wed, 29 Mar 2023 at 07:55, 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 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(-)
Reviewed-by: Simon Glass sjg@chromium.org

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

On Tue, Mar 28, 2023 at 02:54:51PM -0400, Tom Rini 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 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
Applied to u-boot/master, thanks!

Hello Tom,
On 28.03.23 20:54, Tom Rini wrote:
In order to prepare for slight size growth due to reworking linker list support, enable LTO here to save more space again.
Signed-off-by: Tom Rini trini@konsulko.com
Cc: Heiko Schocher hs@denx.de
configs/smartweb_defconfig | 1 + 1 file changed, 1 insertion(+)
Reviewed-by: Heiko Schocher hs@denx.de
bye, Heiko

On Tue, Mar 28, 2023 at 02:54:50PM -0400, Tom Rini wrote:
In order to prepare for slight size growth due to reworking linker list support, enable LTO here to save more space again.
Signed-off-by: Tom Rini trini@konsulko.com Reviewed-by: Heiko Schocher hs@denx.de
Applied to u-boot/master, thanks!
participants (4)
-
Andrew Pinski
-
Heiko Schocher
-
Simon Glass
-
Tom Rini