1
/* Script for -z combreloc: combine and sort reloc sections */
2
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
6
SEARCH_DIR("/usr/aarch64-linux-gnu/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/usr/local/lib/aarch64-linux-gnu"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib/aarch64-linux-gnu"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib/aarch64-linux-gnu"); SEARCH_DIR("=/usr/lib"); SEARCH_DIR("/usr/aarch64-linux-gnu/lib");
9
/* Read-only sections, merged into text segment: */
10
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + 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) }
23
*(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
25
*(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
26
*(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
27
*(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
28
*(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
32
*(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
38
PROVIDE_HIDDEN (__rela_iplt_start = .);
40
PROVIDE_HIDDEN (__rela_iplt_end = .);
44
KEEP (*(SORT_NONE(.init)))
46
.plt : ALIGN(16) { *(.plt) *(.iplt) }
49
*(.text.unlikely .text.*_unlikely)
50
*(.text.exit .text.exit.*)
51
*(.text.startup .text.startup.*)
52
*(.text.hot .text.hot.*)
53
*(.text .stub .text.* .gnu.linkonce.t.*)
54
/* .gnu.warning sections are handled specially by elf32.em. */
59
KEEP (*(SORT_NONE(.fini)))
61
PROVIDE (__etext = .);
64
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
65
.rodata1 : { *(.rodata1) }
66
.eh_frame_hdr : { *(.eh_frame_hdr) }
67
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
68
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
69
.gcc_except_table.*) }
70
/* These sections are generated by the Sun/Oracle C++ compiler. */
71
.exception_ranges : ONLY_IF_RO { *(.exception_ranges
73
/* Adjust the address for the data segment. We want to adjust up to
74
the same address within the page on the next page up. */
75
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
76
/* Exception handling */
77
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
78
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
79
.exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
80
/* Thread Local Storage sections */
81
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
82
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
85
PROVIDE_HIDDEN (__preinit_array_start = .);
86
KEEP (*(.preinit_array))
87
PROVIDE_HIDDEN (__preinit_array_end = .);
91
PROVIDE_HIDDEN (__init_array_start = .);
92
KEEP (*(SORT(.init_array.*)))
93
KEEP (*(.init_array ))
94
PROVIDE_HIDDEN (__init_array_end = .);
98
PROVIDE_HIDDEN (__fini_array_start = .);
99
KEEP (*(SORT(.fini_array.*)))
100
KEEP (*(.fini_array ))
101
PROVIDE_HIDDEN (__fini_array_end = .);
105
/* gcc uses crtbegin.o to find the start of
106
the constructors, so we make sure it is
107
first. Because this is a wildcard, it
108
doesn't matter if the user does not
109
actually link against crtbegin.o; the
110
linker won't look for a file to match a
111
wildcard. The wildcard also means that it
112
doesn't matter which directory crtbegin.o
114
KEEP (*crtbegin.o(.ctors))
115
KEEP (*crtbegin?.o(.ctors))
116
/* We don't want to include the .ctor section from
117
the crtend.o file until after the sorted ctors.
118
The .ctor section from the crtend file contains the
119
end of ctors marker and it must be last */
120
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
121
KEEP (*(SORT(.ctors.*)))
126
KEEP (*crtbegin.o(.dtors))
127
KEEP (*crtbegin?.o(.dtors))
128
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
129
KEEP (*(SORT(.dtors.*)))
132
.jcr : { KEEP (*(.jcr)) }
133
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
134
.dynamic : { *(.dynamic) }
135
.got : { *(.got) *(.igot) }
136
. = DATA_SEGMENT_RELRO_END (24, .);
137
.got.plt : { *(.got.plt) *(.igot.plt) }
140
PROVIDE (__data_start = .);
141
*(.data .data.* .gnu.linkonce.d.*)
144
.data1 : { *(.data1) }
145
_edata = .; PROVIDE (edata = .);
152
*(.bss .bss.* .gnu.linkonce.b.*)
154
/* Align here to ensure that the .bss section occupies space up to
155
_end. Align after .bss to ensure correct alignment even if the
156
.bss section disappears because there are no input sections.
157
FIXME: Why do we need it? When there is no .bss section, we don't
158
pad the .data section. */
159
. = ALIGN(. != 0 ? 64 / 8 : 1);
161
_bss_end__ = . ; __bss_end__ = . ;
163
. = SEGMENT_START("ldata-segment", .);
166
_end = .; PROVIDE (end = .);
167
. = DATA_SEGMENT_END (.);
168
/* Stabs debugging sections. */
169
.stab 0 : { *(.stab) }
170
.stabstr 0 : { *(.stabstr) }
171
.stab.excl 0 : { *(.stab.excl) }
172
.stab.exclstr 0 : { *(.stab.exclstr) }
173
.stab.index 0 : { *(.stab.index) }
174
.stab.indexstr 0 : { *(.stab.indexstr) }
175
.comment 0 : { *(.comment) }
176
/* DWARF debug sections.
177
Symbols in the DWARF debugging sections are relative to the beginning
178
of the section so we begin them at 0. */
180
.debug 0 : { *(.debug) }
181
.line 0 : { *(.line) }
182
/* GNU DWARF 1 extensions */
183
.debug_srcinfo 0 : { *(.debug_srcinfo) }
184
.debug_sfnames 0 : { *(.debug_sfnames) }
185
/* DWARF 1.1 and DWARF 2 */
186
.debug_aranges 0 : { *(.debug_aranges) }
187
.debug_pubnames 0 : { *(.debug_pubnames) }
189
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
190
.debug_abbrev 0 : { *(.debug_abbrev) }
191
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
192
.debug_frame 0 : { *(.debug_frame) }
193
.debug_str 0 : { *(.debug_str) }
194
.debug_loc 0 : { *(.debug_loc) }
195
.debug_macinfo 0 : { *(.debug_macinfo) }
196
/* SGI/MIPS DWARF 2 extensions */
197
.debug_weaknames 0 : { *(.debug_weaknames) }
198
.debug_funcnames 0 : { *(.debug_funcnames) }
199
.debug_typenames 0 : { *(.debug_typenames) }
200
.debug_varnames 0 : { *(.debug_varnames) }
202
.debug_pubtypes 0 : { *(.debug_pubtypes) }
203
.debug_ranges 0 : { *(.debug_ranges) }
204
/* DWARF Extension. */
205
.debug_macro 0 : { *(.debug_macro) }
206
.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
207
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
208
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }