summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Heymans <arthur@aheymans.xyz>2024-02-29 15:05:15 +0100
committerNico Huber <nico.h@gmx.de>2024-03-05 21:22:59 +0000
commit67166a7eb231dcb3cff5c5b8b407cebcfe6f753f (patch)
tree860fd9e1ab0a4470059b58b9f86032832eb9505d
parentee1cb8f46362576880f4c326ee6c5a51aa9c5af3 (diff)
lib/program.ld: Make (NOLOAD) and to_load more explicit
(NOLOAD) indicates that the section occupies no space in the file, but does take up space in memory during process execution. It's typically used for bss sections which contain uninitialized global/static variables. to_load makes sure the section is part of the program headers. This is needed for instance with relocatable stages to know how much memory the program will use. Although the BFD linker makes some good guesses making this a NOOP, other linkers like LLD need to mark these sections more explicitly. Change-Id: Ic14543ba580abe7a34c69bba714eae8cce504977 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/80803 Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Reviewed-by: Maximilian Brune <maximilian.brune@9elements.com>
-rw-r--r--src/lib/program.ld12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lib/program.ld b/src/lib/program.ld
index 21f4be8d32..178444733c 100644
--- a/src/lib/program.ld
+++ b/src/lib/program.ld
@@ -68,7 +68,7 @@
LONG(0);
LONG(0);
__CTOR_END__ = .;
-}
+} : to_load
#endif
/* Include data, bss, and heap in that order. Not defined for all stages. */
@@ -113,11 +113,11 @@
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_edata = .;
RECORD_SIZE(data)
-}
+} : to_load
#endif
#if !ENV_SEPARATE_DATA_AND_BSS
-.bss . : {
+.bss . (NOLOAD) : {
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_bss = .;
*(.bss)
@@ -127,18 +127,18 @@
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_ebss = .;
RECORD_SIZE(bss)
-}
+} : to_load
#endif
#if ENV_HAS_HEAP_SECTION
-.heap . : {
+.heap . (NOLOAD) : {
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_heap = .;
. += CONFIG_HEAP_SIZE;
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_eheap = .;
RECORD_SIZE(heap)
-}
+} : to_load
#endif
#if ENV_RAMSTAGE && CONFIG(ASAN_IN_RAMSTAGE)