On 18 October 2026 09:35:08 BST, Josef Schlehofer <[email protected]> wrote: >With LTO, keep-syms-lto.o puts pointers to linker list entries in >.discard.addressable to prevent the entries from being removed. On >mpc85xx, -mrelocatable creates .fixup entries for these pointers, and >the linker scripts keep all .fixup input sections, leaving >.discard.addressable in the image. > >Discard .discard* sections and the .fixup entries of keep-syms-lto.o, >which point into them. Otherwise, ld leaves zero words in the fixup >table, which start.S treats as addresses to relocate. With them, the >Turris NOR build with LTO hung after the DRAM message. >
I don't see any wrong with this ;) Reviewed-by: Bradley Morgan <[email protected]> >Signed-off-by: Josef Schlehofer <[email protected]> >Cc: Marek BehĂșn <[email protected]> >--- >Changes in v2: >- shorter commit message >--- > arch/powerpc/cpu/mpc85xx/u-boot-spl.lds | 11 ++++++++++- > arch/powerpc/cpu/mpc85xx/u-boot.lds | 11 ++++++++++- > 2 files changed, 20 insertions(+), 2 deletions(-) > >diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds >b/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds >index d918b4395bf..dd4d18bc24b 100644 >--- a/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds >+++ b/arch/powerpc/cpu/mpc85xx/u-boot-spl.lds >@@ -35,7 +35,7 @@ SECTIONS > KEEP(*(.got2)) > KEEP(*(.got)) > _FIXUP_TABLE_ = .; >- KEEP(*(.fixup)) >+ KEEP(*(EXCLUDE_FILE(*keep-syms-lto.o) .fixup)) > } > __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1; > __fixup_entries = (. - _FIXUP_TABLE_) >> 2; >@@ -63,6 +63,15 @@ SECTIONS > __init_end = .; > _end = .; > >+ /* >+ * .discard.addressable of keep-syms-lto.o only keeps the linker lists >+ * alive during an LTO link. Drop it, and its fixups with it. >+ */ >+ /DISCARD/ : { >+ *(.discard*) >+ *keep-syms-lto.o(.fixup) >+ } >+ > #if CONFIG_IS_ENABLED(SYS_MPC85XX_NO_RESETVEC) > #if defined(CONFIG_SDCARD) && !defined(CFG_SYS_MMC_U_BOOT_OFFS) > mmc_u_boot_offs = .; >diff --git a/arch/powerpc/cpu/mpc85xx/u-boot.lds >b/arch/powerpc/cpu/mpc85xx/u-boot.lds >index bedd2d47472..4bb9b4ecfb2 100644 >--- a/arch/powerpc/cpu/mpc85xx/u-boot.lds >+++ b/arch/powerpc/cpu/mpc85xx/u-boot.lds >@@ -49,7 +49,7 @@ SECTIONS > KEEP(*(.got2)) > KEEP(*(.got)) > _FIXUP_TABLE_ = .; >- KEEP(*(.fixup)) >+ KEEP(*(EXCLUDE_FILE(*keep-syms-lto.o) .fixup)) > } > __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1; > __fixup_entries = (. - _FIXUP_TABLE_) >> 2; >@@ -107,6 +107,15 @@ SECTIONS > #endif > #endif > >+ /* >+ * .discard.addressable of keep-syms-lto.o only keeps the linker lists >+ * alive during an LTO link. Drop it, and its fixups with it. >+ */ >+ /DISCARD/ : { >+ *(.discard*) >+ *keep-syms-lto.o(.fixup) >+ } >+ > __bss_start = .; > .bss (NOLOAD) : > { > --- Thanks! "I'm not a very positive person" - Linus torvalds
