diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2024-04-05 09:00:06 +0200 |
---|---|---|
committer | Arthur Heymans <arthur@aheymans.xyz> | 2024-04-08 00:02:18 +0000 |
commit | 8406fb4e271d2f47a3a73f24500912aec2896806 (patch) | |
tree | f848449d18973678dee7bfe4bd2d280f6d801f1f /src | |
parent | e27a26bdefdee6fda89dbd8228cc123dfd95859e (diff) |
lib/program.ld: Account for large code model sections
Starting with version 18 LLVM puts code and data generated with
-ffunction-section -mcmodel=large inside sections with an 'l' prefix.
Change-Id: Ib755673dfa9e71172bbef0a5aec075154c89a97b
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/81675
Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
Reviewed-by: Felix Singer <service+coreboot-gerrit@felixsinger.de>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/x86/car.ld | 4 | ||||
-rw-r--r-- | src/lib/program.ld | 13 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld index 8e1af15df3..f99304f396 100644 --- a/src/arch/x86/car.ld +++ b/src/arch/x86/car.ld @@ -72,6 +72,8 @@ /* Allow global uninitialized variables for stages without CAR teardown. */ *(.bss) *(.bss.*) + *(.lbss) + *(.lbss.*) *(.sbss) *(.sbss.*) . = ALIGN(ARCH_POINTER_ALIGN_SIZE); @@ -97,6 +99,8 @@ _bogus = ASSERT(_etext == ALIGN(_etext, ARCH_POINTER_ALIGN_SIZE), "Cache-As-RAM _data = .; *(.data); *(.data.*); + *(.ldata); + *(.ldata.*); *(.sdata); *(.sdata.*); . = ALIGN(ARCH_POINTER_ALIGN_SIZE); diff --git a/src/lib/program.ld b/src/lib/program.ld index 178444733c..b3ddc0b762 100644 --- a/src/lib/program.ld +++ b/src/lib/program.ld @@ -10,6 +10,11 @@ * SoC's entry points due to artificial alignment restrictions, see * https://sourceware.org/binutils/docs/ld/Output-Section-Address.html */ + +/* Starting with version 18 LLVM the combination -ffunction-section -mcmodel=large + * puts code and data in '.ltext, '.lrodata', '.ldata' and '.lbss' + */ + .text . : { _program = .; _text = .; @@ -23,6 +28,8 @@ KEEP(*(.metadata_hash_anchor)); *(.text); *(.text.*); + *(.ltext); + *(.ltext.*); #if ENV_HAS_CBMEM . = ALIGN(ARCH_POINTER_ALIGN_SIZE); @@ -55,6 +62,8 @@ . = ALIGN(ARCH_POINTER_ALIGN_SIZE); *(.rodata); *(.rodata.*); + *(.lrodata); + *(.lrodata.*); . = ALIGN(ARCH_POINTER_ALIGN_SIZE); _etext = .; RECORD_SIZE(text) @@ -93,6 +102,8 @@ *(.data); *(.data.*); + *(.ldata); + *(.ldata.*); *(.sdata); *(.sdata.*); @@ -122,6 +133,8 @@ _bss = .; *(.bss) *(.bss.*) + *(.lbss) + *(.lbss.*) *(.sbss) *(.sbss.*) . = ALIGN(ARCH_POINTER_ALIGN_SIZE); |