aboutsummaryrefslogtreecommitdiff
path: root/src/lib/program.ld
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2015-09-05 12:59:26 -0500
committerAaron Durbin <adurbin@chromium.org>2015-09-09 19:35:30 +0000
commitdde7629e9cccf7b3a9b2e468ac8439f91d13cf97 (patch)
treef855ce91134e77665b4019efbaaee019dc36c774 /src/lib/program.ld
parente5bad5cd3d828eba06f1db66f43948f966e7b0e0 (diff)
rmodule: use program.ld for linking
Bring rmodule linking into the common linking method. The __rmodule_entry symbol was removed while using a more common _start symbol. The rmodtool will honor the entry point found within the ELF header. Add ENV_RMODULE so that one can distinguish the environment when generating linker scripts for rmodules. Lastly, directly use program.ld for the rmodule.ld linker script. BUG=chrome-os-partner:44827 BRANCH=None TEST=Built rambi and analyzed the relocatable ramstage, sipi_vector, and smm rmodules. Change-Id: Iaa499eb229d8171272add9ee6d27cff75e7534ac Signed-off-by: Aaron Durbin <adubin@chromium.org> Reviewed-on: http://review.coreboot.org/11517 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/lib/program.ld')
-rw-r--r--src/lib/program.ld15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/lib/program.ld b/src/lib/program.ld
index cf011e9b08..d6e3e54c09 100644
--- a/src/lib/program.ld
+++ b/src/lib/program.ld
@@ -38,14 +38,14 @@
*(.text);
*(.text.*);
-#if ENV_RAMSTAGE || ENV_ROMSTAGE
+#if ENV_RAMSTAGE || ENV_ROMSTAGE || ENV_RMODULE
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_cbmem_init_hooks = .;
KEEP(*(.rodata.cbmem_init_hooks));
_ecbmem_init_hooks = .;
#endif
-#if ENV_RAMSTAGE
+#if ENV_RAMSTAGE || ENV_RMODULE
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_pci_drivers = .;
KEEP(*(.rodata.pci_driver));
@@ -79,13 +79,20 @@
.data : {
. = ALIGN(ARCH_CACHELINE_ALIGN_SIZE);
_data = .;
+
+#if ENV_RMODULE
+ _rmodule_params = .;
+ KEEP(*(.module_parameters));
+ _ermodule_params = .;
+#endif
+
*(.data);
*(.data.*);
#ifdef __PRE_RAM__
PROVIDE(_preram_cbmem_console = .);
PROVIDE(_epreram_cbmem_console = _preram_cbmem_console);
-#elif ENV_RAMSTAGE
+#elif ENV_RAMSTAGE || ENV_RMODULE
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_bs_init_begin = .;
KEEP(*(.bs_init));
@@ -116,7 +123,7 @@
.heap : {
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_heap = .;
- . += CONFIG_HEAP_SIZE;
+ . += (ENV_RMODULE ? __heap_size : CONFIG_HEAP_SIZE);
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_eheap = .;
}