xref: /DragonStub/gnuefi/elf_arm_efi.lds (revision deb8a7f267d96299b9aa41300539f617db54c2a9)
1OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
2OUTPUT_ARCH(arm)
3ENTRY(_start)
4SECTIONS
5{
6  .text 0 : {
7    *(.text.head)
8    _text = .;
9    *(.text)
10    *(.text.*)
11    *(.gnu.linkonce.t.*)
12    *(.plt)
13    . = ALIGN(16);
14    _evtext = .;
15    . = ALIGN(4096);
16    _etext = .;
17  } =0
18  _text_vsize = _evtext - _text;
19  _text_size = _etext - _text;
20  . = ALIGN(4096);
21  _reloc = .;
22  .areloc : {
23    *(.areloc)
24    _evreloc = .;
25    . = ALIGN(4096);
26    _ereloc = .;
27  } =0
28  _reloc_vsize = _evreloc - _reloc;
29  _reloc_size = _ereloc - _reloc;
30  . = ALIGN(4096);
31  _data = .;
32  .dynamic  : { *(.dynamic) }
33  . = ALIGN(4096);
34  .data :
35  {
36   *(.sdata)
37   *(.data)
38   *(.data1)
39   *(.data.*)
40   *(.got.plt)
41   *(.got)
42
43   /*
44    * Note that these aren't the using the GNU "CONSTRUCTOR" output section
45    * command, so they don't start with a size.  Because of p2align and the
46    * end/END definitions, and the fact that they're mergeable, they can also
47    * have NULLs which aren't guaranteed to be at the end.
48    */
49   . = ALIGN(16);
50   __init_array_start = .;
51   *(SORT(.init_array.*))
52   *(.init_array)
53   __init_array_end = .;
54  . = ALIGN(16);
55   __CTOR_LIST__ = .;
56   *(SORT(.ctors.*))
57   *(.ctors)
58   __CTOR_END__ = .;
59  . = ALIGN(16);
60   __DTOR_LIST__ = .;
61   *(SORT(.dtors.*))
62   *(.dtors)
63   __DTOR_END__ = .;
64   . = ALIGN(16);
65   __fini_array_start = .;
66   *(SORT(.fini_array.*))
67   *(.fini_array)
68   __fini_array_end = .;
69
70   /* the EFI loader doesn't seem to like a .bss section, so we stick
71      it all into .data: */
72   . = ALIGN(16);
73   _bss = .;
74   *(.sbss)
75   *(.scommon)
76   *(.dynbss)
77   *(.bss)
78   *(.bss.*)
79   *(COMMON)
80   . = ALIGN(16);
81   _bss_end = .;
82   _evdata = .;
83   . = ALIGN(4096);
84   _edata = .;
85  } =0
86  _data_vsize = _evdata - _data;
87  _data_size = _edata - _data;
88
89  . = ALIGN(4096);
90  _rodata = .;
91  .rel :
92  {
93    *(.rel.text*)
94    *(.rel.data*)
95    *(.rel.got)
96    *(.rel.dyn)
97    *(.rel.stab)
98    *(.rel.init_array*)
99    *(.rel.fini_array*)
100    *(.rel.ctors*)
101    *(.rel.dtors*)
102
103  }
104  . = ALIGN(4096);
105  .rel.plt : { *(.rel.plt) }
106  . = ALIGN(4096);
107  .rodata : {
108    *(.rodata*)
109    _evrodata = .;
110    . = ALIGN(4096);
111    _erodata = .;
112  } =0
113  _rodata_vsize = _evrodata - _rodata;
114  _rodata_size = _erodata - _rodata;
115  _image_end = .;
116  _alldata_size = _image_end - _reloc;
117
118  . = ALIGN(4096);
119  .dynsym   : { *(.dynsym) }
120  . = ALIGN(4096);
121  .dynstr   : { *(.dynstr) }
122  . = ALIGN(4096);
123  .note.gnu.build-id : { *(.note.gnu.build-id) }
124  . = ALIGN(4096);
125  .hash : { *(.hash) }
126  . = ALIGN(4096);
127  .gnu.hash : { *(.gnu.hash) }
128  . = ALIGN(4096);
129  .ARM.exidx : { *(.ARM.exidx*) }
130  .ARM.extab : { *(.ARM.extab*) }
131  /DISCARD/ :
132  {
133    *(.rel.areloc)
134    *(.note.GNU-stack)
135  }
136  .comment 0 : { *(.comment) }
137}
138