1
/* Script for -n: mix text and data on same page */
2
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
6
SEARCH_DIR("/usr/aarch64-linux-gnu/lib");
9
/* Read-only sections, merged into text segment: */
10
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00008000)); . = SEGMENT_START("text-segment", 0x00008000) + SIZEOF_HEADERS;
11
.interp : { *(.interp) }
12
.note.gnu.build-id : { *(.note.gnu.build-id) }
14
.gnu.hash : { *(.gnu.hash) }
15
.dynsym : { *(.dynsym) }
16
.dynstr : { *(.dynstr) }
17
.gnu.version : { *(.gnu.version) }
18
.gnu.version_d : { *(.gnu.version_d) }
19
.gnu.version_r : { *(.gnu.version_r) }
20
.rel.init : { *(.rel.init) }
21
.rela.init : { *(.rela.init) }
22
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
23
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
24
.rel.fini : { *(.rel.fini) }
25
.rela.fini : { *(.rela.fini) }
26
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
27
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
28
.rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
29
.rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
30
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
31
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
32
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
33
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
34
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
35
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
36
.rel.ctors : { *(.rel.ctors) }
37
.rela.ctors : { *(.rela.ctors) }
38
.rel.dtors : { *(.rel.dtors) }
39
.rela.dtors : { *(.rela.dtors) }
40
.rel.got : { *(.rel.got) }
41
.rela.got : { *(.rela.got) }
42
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
43
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
46
PROVIDE_HIDDEN (__rel_iplt_start = .);
48
PROVIDE_HIDDEN (__rel_iplt_end = .);
52
PROVIDE_HIDDEN (__rela_iplt_start = .);
54
PROVIDE_HIDDEN (__rela_iplt_end = .);
66
KEEP (*(SORT_NONE(.init)))
72
*(.text.unlikely .text.*_unlikely)
73
*(.text.exit .text.exit.*)
74
*(.text.startup .text.startup.*)
75
*(.text.hot .text.hot.*)
76
*(.text .stub .text.* .gnu.linkonce.t.*)
77
/* .gnu.warning sections are handled specially by elf32.em. */
79
*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
83
KEEP (*(SORT_NONE(.fini)))
85
PROVIDE (__etext = .);
88
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
89
.rodata1 : { *(.rodata1) }
90
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
91
PROVIDE_HIDDEN (__exidx_start = .);
92
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
93
PROVIDE_HIDDEN (__exidx_end = .);
94
.eh_frame_hdr : { *(.eh_frame_hdr) }
95
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
96
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
97
.gcc_except_table.*) }
98
/* These sections are generated by the Sun/Oracle C++ compiler. */
99
.exception_ranges : ONLY_IF_RO { *(.exception_ranges
100
.exception_ranges*) }
101
/* Adjust the address for the data segment. We want to adjust up to
102
the same address within the page on the next page up. */
103
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
104
/* Exception handling */
105
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
106
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
107
.exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
108
/* Thread Local Storage sections */
109
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
110
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
113
PROVIDE_HIDDEN (__preinit_array_start = .);
114
KEEP (*(.preinit_array))
115
PROVIDE_HIDDEN (__preinit_array_end = .);
119
PROVIDE_HIDDEN (__init_array_start = .);
120
KEEP (*(SORT(.init_array.*)))
121
KEEP (*(.init_array ))
122
PROVIDE_HIDDEN (__init_array_end = .);
126
PROVIDE_HIDDEN (__fini_array_start = .);
127
KEEP (*(SORT(.fini_array.*)))
128
KEEP (*(.fini_array ))
129
PROVIDE_HIDDEN (__fini_array_end = .);
133
/* gcc uses crtbegin.o to find the start of
134
the constructors, so we make sure it is
135
first. Because this is a wildcard, it
136
doesn't matter if the user does not
137
actually link against crtbegin.o; the
138
linker won't look for a file to match a
139
wildcard. The wildcard also means that it
140
doesn't matter which directory crtbegin.o
142
KEEP (*crtbegin.o(.ctors))
143
KEEP (*crtbegin?.o(.ctors))
144
/* We don't want to include the .ctor section from
145
the crtend.o file until after the sorted ctors.
146
The .ctor section from the crtend file contains the
147
end of ctors marker and it must be last */
148
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
149
KEEP (*(SORT(.ctors.*)))
154
KEEP (*crtbegin.o(.dtors))
155
KEEP (*crtbegin?.o(.dtors))
156
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
157
KEEP (*(SORT(.dtors.*)))
160
.jcr : { KEEP (*(.jcr)) }
161
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
162
.dynamic : { *(.dynamic) }
163
. = DATA_SEGMENT_RELRO_END (0, .);
164
.got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
167
PROVIDE (__data_start = .);
168
*(.data .data.* .gnu.linkonce.d.*)
171
.data1 : { *(.data1) }
172
_edata = .; PROVIDE (edata = .);
179
*(.bss .bss.* .gnu.linkonce.b.*)
181
/* Align here to ensure that the .bss section occupies space up to
182
_end. Align after .bss to ensure correct alignment even if the
183
.bss section disappears because there are no input sections.
184
FIXME: Why do we need it? When there is no .bss section, we don't
185
pad the .data section. */
186
. = ALIGN(. != 0 ? 32 / 8 : 1);
188
_bss_end__ = . ; __bss_end__ = . ;
190
. = SEGMENT_START("ldata-segment", .);
193
_end = .; PROVIDE (end = .);
194
. = DATA_SEGMENT_END (.);
195
/* Stabs debugging sections. */
196
.stab 0 : { *(.stab) }
197
.stabstr 0 : { *(.stabstr) }
198
.stab.excl 0 : { *(.stab.excl) }
199
.stab.exclstr 0 : { *(.stab.exclstr) }
200
.stab.index 0 : { *(.stab.index) }
201
.stab.indexstr 0 : { *(.stab.indexstr) }
202
.comment 0 : { *(.comment) }
203
/* DWARF debug sections.
204
Symbols in the DWARF debugging sections are relative to the beginning
205
of the section so we begin them at 0. */
207
.debug 0 : { *(.debug) }
208
.line 0 : { *(.line) }
209
/* GNU DWARF 1 extensions */
210
.debug_srcinfo 0 : { *(.debug_srcinfo) }
211
.debug_sfnames 0 : { *(.debug_sfnames) }
212
/* DWARF 1.1 and DWARF 2 */
213
.debug_aranges 0 : { *(.debug_aranges) }
214
.debug_pubnames 0 : { *(.debug_pubnames) }
216
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
217
.debug_abbrev 0 : { *(.debug_abbrev) }
218
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
219
.debug_frame 0 : { *(.debug_frame) }
220
.debug_str 0 : { *(.debug_str) }
221
.debug_loc 0 : { *(.debug_loc) }
222
.debug_macinfo 0 : { *(.debug_macinfo) }
223
/* SGI/MIPS DWARF 2 extensions */
224
.debug_weaknames 0 : { *(.debug_weaknames) }
225
.debug_funcnames 0 : { *(.debug_funcnames) }
226
.debug_typenames 0 : { *(.debug_typenames) }
227
.debug_varnames 0 : { *(.debug_varnames) }
229
.debug_pubtypes 0 : { *(.debug_pubtypes) }
230
.debug_ranges 0 : { *(.debug_ranges) }
231
/* DWARF Extension. */
232
.debug_macro 0 : { *(.debug_macro) }
233
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
234
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
235
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }