diff options
author | Aaron Durbin <adurbin@chromium.org> | 2015-09-05 12:59:26 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2015-09-09 19:35:30 +0000 |
commit | dde7629e9cccf7b3a9b2e468ac8439f91d13cf97 (patch) | |
tree | f855ce91134e77665b4019efbaaee019dc36c774 /src/lib/program.ld | |
parent | e5bad5cd3d828eba06f1db66f43948f966e7b0e0 (diff) | |
download | coreboot-dde7629e9cccf7b3a9b2e468ac8439f91d13cf97.tar.xz |
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.ld | 15 |
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 = .; } |