blob: 53c4f57e7436befc2a677c8a1c83618924e6a044 [file] [log] [blame]
Ben Cheng09ebc132013-10-18 00:02:49 -07001/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */
2OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
3 "elf32-littlearm")
4OUTPUT_ARCH(arm)
5ENTRY(_start)
6SECTIONS
7{
8 /* Read-only sections, merged into text segment: */
9 PROVIDE (__executable_start = 0x8000); . = 0x8000;
10 .interp : { *(.interp) }
11 .note.gnu.build-id : { *(.note.gnu.build-id) }
12 .hash : { *(.hash) }
13 .gnu.hash : { *(.gnu.hash) }
14 .dynsym : { *(.dynsym) }
15 .dynstr : { *(.dynstr) }
16 .gnu.version : { *(.gnu.version) }
17 .gnu.version_d : { *(.gnu.version_d) }
18 .gnu.version_r : { *(.gnu.version_r) }
19 .rel.dyn :
20 {
21 *(.rel.init)
22 *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
23 *(.rel.fini)
24 *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
25 *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
26 *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
27 *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
28 *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
29 *(.rel.ctors)
30 *(.rel.dtors)
31 *(.rel.got)
32 *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
33 PROVIDE_HIDDEN (__rel_iplt_start = .);
34 *(.rel.iplt)
35 PROVIDE_HIDDEN (__rel_iplt_end = .);
36 PROVIDE_HIDDEN (__rela_iplt_start = .);
37 PROVIDE_HIDDEN (__rela_iplt_end = .);
38 }
39 .rela.dyn :
40 {
41 *(.rela.init)
42 *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
43 *(.rela.fini)
44 *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
45 *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
46 *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
47 *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
48 *(.rela.ctors)
49 *(.rela.dtors)
50 *(.rela.got)
51 *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
52 PROVIDE_HIDDEN (__rel_iplt_start = .);
53 PROVIDE_HIDDEN (__rel_iplt_end = .);
54 PROVIDE_HIDDEN (__rela_iplt_start = .);
55 *(.rela.iplt)
56 PROVIDE_HIDDEN (__rela_iplt_end = .);
57 }
58 .rel.plt :
59 {
60 *(.rel.plt)
61 }
62 .rela.plt :
63 {
64 *(.rela.plt)
65 }
66 .init :
67 {
68 KEEP (*(SORT_NONE(.init)))
69 }
70 .plt : { *(.plt) }
71 .iplt : { *(.iplt) }
72 .text :
73 {
Ben Cheng7334f0a2014-04-30 14:28:17 -070074 *(.text.unlikely .text.*_unlikely .text.unlikely.*)
Ben Cheng09ebc132013-10-18 00:02:49 -070075 *(.text.exit .text.exit.*)
76 *(.text.startup .text.startup.*)
77 *(.text.hot .text.hot.*)
78 *(.text .stub .text.* .gnu.linkonce.t.*)
79 /* .gnu.warning sections are handled specially by elf32.em. */
80 *(.gnu.warning)
81 *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
82 }
83 .fini :
84 {
85 KEEP (*(SORT_NONE(.fini)))
86 }
87 PROVIDE (__etext = .);
88 PROVIDE (_etext = .);
89 PROVIDE (etext = .);
90 .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
91 .rodata1 : { *(.rodata1) }
92 .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
93 PROVIDE_HIDDEN (__exidx_start = .);
94 .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
95 PROVIDE_HIDDEN (__exidx_end = .);
96 .eh_frame_hdr : { *(.eh_frame_hdr) }
97 .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
98 .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
99 .gcc_except_table.*) }
100 /* These sections are generated by the Sun/Oracle C++ compiler. */
101 .exception_ranges : ONLY_IF_RO { *(.exception_ranges
102 .exception_ranges*) }
Ben Cheng61719eb2014-02-07 12:27:51 -0800103 /* Adjust the address for the data segment. For 32 bits we want to align
104 at exactly a page boundary to make life easier for apriori. */
Ben Cheng09ebc132013-10-18 00:02:49 -0700105 . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
106 /* Exception handling */
107 .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
108 .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
109 .exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
110 /* Thread Local Storage sections */
111 .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
112 .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
113 /* Ensure the __preinit_array_start label is properly aligned. We
114 could instead move the label definition inside the section, but
115 the linker would then create the section even if it turns out to
116 be empty, which isn't pretty. */
117 . = ALIGN(32 / 8);
118 PROVIDE_HIDDEN (__preinit_array_start = .);
119 .preinit_array :
120 {
121 KEEP (*(.preinit_array))
122 }
123 PROVIDE_HIDDEN (__preinit_array_end = .);
124 PROVIDE_HIDDEN (__init_array_start = .);
125 .init_array :
126 {
127 KEEP (*crtbegin*.o(.init_array))
128 KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
Ben Cheng7334f0a2014-04-30 14:28:17 -0700129 KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
Ben Cheng09ebc132013-10-18 00:02:49 -0700130 }
131 PROVIDE_HIDDEN (__init_array_end = .);
132 PROVIDE_HIDDEN (__fini_array_start = .);
133 .fini_array :
134 {
135 KEEP (*crtbegin*.o(.fini_array))
136 KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
Ben Cheng7334f0a2014-04-30 14:28:17 -0700137 KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
Ben Cheng09ebc132013-10-18 00:02:49 -0700138 }
139 PROVIDE_HIDDEN (__fini_array_end = .);
140 .ctors :
141 {
142 /* gcc uses crtbegin.o to find the start of
143 the constructors, so we make sure it is
144 first. Because this is a wildcard, it
145 doesn't matter if the user does not
146 actually link against crtbegin.o; the
147 linker won't look for a file to match a
148 wildcard. The wildcard also means that it
149 doesn't matter which directory crtbegin.o
150 is in. */
151 KEEP (*crtbegin.o(.ctors))
152 KEEP (*crtbegin*.o(.ctors))
153 /* We don't want to include the .ctor section from
154 the crtend.o file until after the sorted ctors.
155 The .ctor section from the crtend file contains the
156 end of ctors marker and it must be last */
157 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend*.o ) .ctors))
158 KEEP (*(SORT(.ctors.*)))
159 KEEP (*(.ctors))
160 }
161 .dtors :
162 {
163 KEEP (*crtbegin.o(.dtors))
164 KEEP (*crtbegin*.o(.dtors))
165 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend*.o ) .dtors))
166 KEEP (*(SORT(.dtors.*)))
167 KEEP (*(.dtors))
168 }
169 .jcr : { KEEP (*(.jcr)) }
170 .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
171 .dynamic : { *(.dynamic) }
172 .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
173 .data :
174 {
175 __data_start = . ;
176 *(.data .data.* .gnu.linkonce.d.*)
177 SORT(CONSTRUCTORS)
178 }
179 .data1 : { *(.data1) }
180 _edata = .; PROVIDE (edata = .);
181 . = .;
182 __bss_start = .;
183 __bss_start__ = .;
184 .bss :
185 {
186 *(.dynbss)
187 *(.bss .bss.* .gnu.linkonce.b.*)
188 *(COMMON)
189 /* Align here to ensure that the .bss section occupies space up to
190 _end. Align after .bss to ensure correct alignment even if the
191 .bss section disappears because there are no input sections. */
192 . = ALIGN(32 / 8);
193 }
194 _bss_end__ = . ; __bss_end__ = . ;
195 . = ALIGN(32 / 8);
Ben Cheng7334f0a2014-04-30 14:28:17 -0700196 . = SEGMENT_START("ldata-segment", .);
Ben Cheng09ebc132013-10-18 00:02:49 -0700197 . = ALIGN(32 / 8);
198 __end__ = . ;
199 _end = .;
200 _bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
201 PROVIDE (end = .);
202 /* Stabs debugging sections. */
203 .stab 0 : { *(.stab) }
204 .stabstr 0 : { *(.stabstr) }
205 .stab.excl 0 : { *(.stab.excl) }
206 .stab.exclstr 0 : { *(.stab.exclstr) }
207 .stab.index 0 : { *(.stab.index) }
208 .stab.indexstr 0 : { *(.stab.indexstr) }
209 .comment 0 : { *(.comment) }
210 /* DWARF debug sections.
211 Symbols in the DWARF debugging sections are relative to the beginning
212 of the section so we begin them at 0. */
213 /* DWARF 1 */
214 .debug 0 : { *(.debug) }
215 .line 0 : { *(.line) }
216 /* GNU DWARF 1 extensions */
217 .debug_srcinfo 0 : { *(.debug_srcinfo) }
218 .debug_sfnames 0 : { *(.debug_sfnames) }
219 /* DWARF 1.1 and DWARF 2 */
220 .debug_aranges 0 : { *(.debug_aranges) }
221 .debug_pubnames 0 : { *(.debug_pubnames) }
222 /* DWARF 2 */
223 .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
224 .debug_abbrev 0 : { *(.debug_abbrev) }
Ben Cheng7334f0a2014-04-30 14:28:17 -0700225 .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
Ben Cheng09ebc132013-10-18 00:02:49 -0700226 .debug_frame 0 : { *(.debug_frame) }
227 .debug_str 0 : { *(.debug_str) }
228 .debug_loc 0 : { *(.debug_loc) }
229 .debug_macinfo 0 : { *(.debug_macinfo) }
230 /* SGI/MIPS DWARF 2 extensions */
231 .debug_weaknames 0 : { *(.debug_weaknames) }
232 .debug_funcnames 0 : { *(.debug_funcnames) }
233 .debug_typenames 0 : { *(.debug_typenames) }
234 .debug_varnames 0 : { *(.debug_varnames) }
235 /* DWARF 3 */
236 .debug_pubtypes 0 : { *(.debug_pubtypes) }
237 .debug_ranges 0 : { *(.debug_ranges) }
238 /* DWARF Extension. */
239 .debug_macro 0 : { *(.debug_macro) }
240 .stack 0x80000 :
241 {
242 _stack = .;
243 *(.stack)
244 }
245 .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
246 .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
247 /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.mdebug.*) }
248}