| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- /* -*- sh -*- */
-
- /*
- * Linker script for EFI images
- *
- */
-
- EXTERN ( efi_entry )
-
- SECTIONS {
-
- /* The file starts at a virtual address of zero, and sections are
- * contiguous. Each section is aligned to at least _max_align,
- * which defaults to 32. Load addresses are equal to virtual
- * addresses.
- */
-
- . = 0;
- PROVIDE ( _max_align = 32 );
-
- /*
- * The prefix
- *
- */
-
- .prefix : {
- _prefix = .;
- *(.prefix)
- *(.prefix.*)
- _mprefix = .;
- } .prefix_bss (NOLOAD) : {
- _eprefix = .;
- }
- _prefix_filesz = ABSOLUTE ( _mprefix - _prefix );
- _prefix_memsz = ABSOLUTE ( _eprefix - _prefix );
-
- /*
- * The text section
- *
- */
-
- . = ALIGN ( _max_align );
- .text : {
- _text = .;
- *(.text)
- *(.text.*)
- _mtext = .;
- } .text_bss (NOLOAD) : {
- _etext = .;
- }
- _text_filesz = ABSOLUTE ( _mtext - _text );
- _text_memsz = ABSOLUTE ( _etext - _text );
-
- /*
- * The rodata section
- *
- */
-
- . = ALIGN ( _max_align );
- .rodata : {
- _rodata = .;
- *(.rodata)
- *(.rodata.*)
- _mrodata = .;
- } .rodata_bss (NOLOAD) : {
- _erodata = .;
- }
- _rodata_filesz = ABSOLUTE ( _mrodata - _rodata );
- _rodata_memsz = ABSOLUTE ( _erodata - _rodata );
-
- /*
- * The data section
- *
- */
-
- . = ALIGN ( _max_align );
- .data : {
- _data = .;
- *(.data)
- *(.data.*)
- *(SORT(.tbl.*)) /* Various tables. See include/tables.h */
- /* EFI seems to not support proper bss sections */
- *(.bss)
- *(.bss.*)
- *(COMMON)
- *(.stack)
- *(.stack.*)
- _mdata = .;
- } .data_bss (NOLOAD) : {
- _edata = .;
- }
- _data_filesz = ABSOLUTE ( _mdata - _data );
- _data_memsz = ABSOLUTE ( _edata - _data );
-
- /*
- * The bss section
- *
- */
-
- . = ALIGN ( _max_align );
- .bss : {
- _bss = .;
- /* EFI seems to not support proper bss sections */
- _mbss = .;
- } .bss_bss (NOLOAD) : {
- _ebss = .;
- }
- _bss_filesz = ABSOLUTE ( _mbss - _bss );
- _bss_memsz = ABSOLUTE ( _ebss - _bss );
-
- /*
- * The reloc section
- *
- */
-
- . = ALIGN ( _max_align );
- .reloc : {
- _reloc = .;
- /* Provide some dummy contents to force ld to include this
- * section. It will be created by the efilink utility.
- */
- . += 1;
- _mreloc = .;
- } .reloc_bss (NOLOAD) : {
- _ereloc = .;
- }
- _reloc_filesz = ABSOLUTE ( _mreloc - _reloc );
- _reloc_memsz = ABSOLUTE ( _ereloc - _reloc );
-
- _filesz = ABSOLUTE ( . );
-
- /*
- * Weak symbols that need zero values if not otherwise defined
- *
- */
-
- .weak 0x0 : {
- _weak = .;
- *(.weak)
- _eweak = .;
- }
- _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
-
- /*
- * Dispose of the comment and note sections to make the link map
- * easier to read
- *
- */
-
- /DISCARD/ : {
- *(.comment)
- *(.note)
- }
-
- /*
- * Load address calculations.
- *
- */
-
- _prefix_lma = ABSOLUTE ( _prefix );
- _text_lma = ABSOLUTE ( _text );
- _rodata_lma = ABSOLUTE ( _rodata );
- _data_lma = ABSOLUTE ( _data );
- _bss_lma = ABSOLUTE ( _bss );
- _reloc_lma = ABSOLUTE ( _reloc );
-
- /*
- * Load addresses required by the prefix
- *
- */
- efi_entry_lma = ABSOLUTE ( efi_entry );
- debugdir_lma = ABSOLUTE ( debugdir );
- codeview_rsds_lma = ABSOLUTE ( codeview_rsds );
- }
|