9cb5a3af34
We have no need for these sections winding up in the build leading to possible overlaps, such as in the case of Clang builds. Discard sections from inclusion into the resulting binary. Change-Id: Ie807e5809594dcc6e94660a64e359e3b2ca1a0f6 Signed-off-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> Reviewed-on: http://review.coreboot.org/7439 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
103 lines
2.3 KiB
Text
103 lines
2.3 KiB
Text
/*
|
|
* This linker script is used to link rmodules (relocatable modules). It
|
|
* links at zero so that relocation fixups are easy when placing the binaries
|
|
* anywhere in the address space.
|
|
*
|
|
* NOTE: The program's loadable sections (text, module_params, and data) are
|
|
* packed into the flat blob. The rmodule loader assumes the entire program
|
|
* resides in one contiguous address space. Therefore, alignment for a given
|
|
* section (if required) needs to be done at the end of the preceeding section.
|
|
* e.g. if the data section should be aligned to an 8 byte address the text
|
|
* section should have ALIGN(8) at the end of its section. Otherwise there
|
|
* won't be a consistent mapping between the flat blob and the loaded program.
|
|
*/
|
|
|
|
BASE_ADDRESS = 0x00000;
|
|
|
|
SECTIONS
|
|
{
|
|
. = BASE_ADDRESS;
|
|
|
|
.payload : {
|
|
/* C code of the module. */
|
|
_ram_seg = .;
|
|
*(.textfirst);
|
|
*(.text);
|
|
*(.text.*);
|
|
/* C read-only data. */
|
|
. = ALIGN(16);
|
|
|
|
__CTOR_LIST__ = .;
|
|
*(.ctors);
|
|
LONG(0);
|
|
LONG(0);
|
|
__CTOR_END__ = .;
|
|
|
|
/* The driver sections are to allow linking coreboot's
|
|
* ramstage with the rmodule linker. Any changes made in
|
|
* ramstage.ld should be made here as well. */
|
|
. = ALIGN(8);
|
|
pci_drivers = . ;
|
|
*(.rodata.pci_driver)
|
|
epci_drivers = . ;
|
|
. = ALIGN(8);
|
|
cpu_drivers = . ;
|
|
*(.rodata.cpu_driver)
|
|
ecpu_drivers = . ;
|
|
. = ALIGN(8);
|
|
_bs_init_begin = .;
|
|
*(.bs_init)
|
|
_bs_init_end = .;
|
|
|
|
. = ALIGN(8);
|
|
|
|
*(.rodata);
|
|
*(.rodata.*);
|
|
. = ALIGN(8);
|
|
|
|
/* The parameters section can be used to pass parameters
|
|
* to a module, however there has to be an prior agreement
|
|
* on how to interpret the parameters. */
|
|
_module_params_begin = .;
|
|
*(.module_parameters);
|
|
_module_params_end = .;
|
|
. = ALIGN(8);
|
|
|
|
/* Data section. */
|
|
_sdata = .;
|
|
*(.data);
|
|
*(.data.*);
|
|
. = ALIGN(8);
|
|
_edata = .;
|
|
|
|
. = ALIGN(8);
|
|
}
|
|
|
|
.bss (NOLOAD) : {
|
|
/* C uninitialized data of the module. */
|
|
_bss = .;
|
|
*(.bss);
|
|
*(.bss.*)
|
|
*(.sbss)
|
|
*(.sbss.*)
|
|
*(COMMON);
|
|
. = ALIGN(8);
|
|
_ebss = .;
|
|
|
|
/*
|
|
* Place the heap after BSS. The heap size is passed in by
|
|
* by way of ld --defsym=__heap_size=<>
|
|
*/
|
|
_heap = .;
|
|
. = . + __heap_size;
|
|
_eheap = .;
|
|
_eram_seg = .;
|
|
}
|
|
|
|
/DISCARD/ : {
|
|
/* Drop unnecessary sections. */
|
|
*(.eh_frame);
|
|
*(.note);
|
|
*(.note.*);
|
|
}
|
|
}
|