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>
This commit is contained in:
Arthur Heymans
2024-04-05 09:00:06 +02:00
parent e27a26bdef
commit 8406fb4e27
2 changed files with 17 additions and 0 deletions

View File

@@ -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);

View File

@@ -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);