]> git.proxmox.com Git - qemu.git/blame - ppc64.ld
Version 1.0.1
[qemu.git] / ppc64.ld
CommitLineData
810260a8 1/* Script for -z combreloc: combine and sort reloc sections */
2OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc",
dc28c732 3 "elf64-powerpc")
810260a8 4OUTPUT_ARCH(powerpc:common64)
5ENTRY(_start)
4bf6b55b 6/* __DYNAMIC = 0; */
810260a8 7SECTIONS
8{
9 /* Read-only sections, merged into text segment: */
10 PROVIDE (__executable_start = 0x60000000); . = 0x60000000 + SIZEOF_HEADERS;
11 .interp : { *(.interp) }
12 .hash : { *(.hash) }
13 .dynsym : { *(.dynsym) }
14 .dynstr : { *(.dynstr) }
15 .gnu.version : { *(.gnu.version) }
16 .gnu.version_d : { *(.gnu.version_d) }
17 .gnu.version_r : { *(.gnu.version_r) }
18 .rel.dyn :
19 {
20 *(.rel.init)
21 *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
22 *(.rel.fini)
23 *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
24 *(.rel.data.rel.ro*)
25 *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
26 *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
27 *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
28 *(.rel.ctors)
29 *(.rel.dtors)
30 *(.rel.got)
31 *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
32 *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
33 *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
34 *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
35 *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
36 }
37 .rela.dyn :
38 {
39 *(.rela.init)
40 *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
41 *(.rela.fini)
42 *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
43 *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
44 *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
45 *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
46 *(.rela.ctors)
47 *(.rela.dtors)
48 *(.rela.got)
49 *(.rela.toc)
50 *(.rela.opd)
51 *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
52 *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
53 *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
54 *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
55 *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
56 }
fbcf305e
AG
57 .rel.plt :
58 {
59 *(.rel.plt)
60 PROVIDE (__rel_iplt_start = .);
61 *(.rel.iplt)
62 PROVIDE (__rel_iplt_end = .);
63 }
64 .rela.plt :
65 {
66 *(.rela.plt)
67 PROVIDE (__rela_iplt_start = .);
68 *(.rela.iplt)
69 PROVIDE (__rela_iplt_end = .);
70 }
dc28c732 71 .rela.tocbss : { *(.rela.tocbss) }
810260a8 72 .init :
73 {
74 KEEP (*(.init))
75 } =0x60000000
76 .text :
77 {
78 *(.text .stub .text.* .gnu.linkonce.t.*)
79 KEEP (*(.text.*personality*))
80 /* .gnu.warning sections are handled specially by elf32.em. */
81 *(.gnu.warning)
82 *(.sfpr .glink)
83 } =0x60000000
84 .fini :
85 {
86 KEEP (*(.fini))
87 } =0x60000000
88 PROVIDE (__etext = .);
89 PROVIDE (_etext = .);
90 PROVIDE (etext = .);
91 .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
92 .rodata1 : { *(.rodata1) }
93 .sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
94 .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
95 .eh_frame_hdr : { *(.eh_frame_hdr) }
7c0a3409
AF
96 /* Adjust the address for the data segment. We want to adjust up to
97 the same address within the page on the next page up. */
dc28c732 98 . = ALIGN (0x10000) - ((0x10000 - .) & (0x10000 - 1)); . = DATA_SEGMENT_ALIGN
99(0x10000, 0x1000); /* Exception handling */
8733f609
GH
100 .eh_frame : { KEEP (*(.eh_frame)) }
101 .gcc_except_table : { KEEP (*(.gcc_except_table))
dc28c732 102*(.gcc_except_table.*) } /* Thread Local Storage sections */
103 .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
104 .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
810260a8 105 /* Ensure the __preinit_array_start label is properly aligned. We
106 could instead move the label definition inside the section, but
107 the linker would then create the section even if it turns out to
108 be empty, which isn't pretty. */
109 . = ALIGN(64 / 8);
110 PROVIDE (__preinit_array_start = .);
111 .preinit_array : { KEEP (*(.preinit_array)) }
112 PROVIDE (__preinit_array_end = .);
113 PROVIDE (__init_array_start = .);
114 .init_array : { KEEP (*(.init_array)) }
115 PROVIDE (__init_array_end = .);
116 PROVIDE (__fini_array_start = .);
117 .fini_array : { KEEP (*(.fini_array)) }
118 PROVIDE (__fini_array_end = .);
119 .ctors :
120 {
121 /* gcc uses crtbegin.o to find the start of
122 the constructors, so we make sure it is
123 first. Because this is a wildcard, it
124 doesn't matter if the user does not
125 actually link against crtbegin.o; the
126 linker won't look for a file to match a
127 wildcard. The wildcard also means that it
128 doesn't matter which directory crtbegin.o
129 is in. */
130 KEEP (*crtbegin*.o(.ctors))
131 /* We don't want to include the .ctor section from
132 from the crtend.o file until after the sorted ctors.
133 The .ctor section from the crtend file contains the
134 end of ctors marker and it must be last */
135 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
136 KEEP (*(SORT(.ctors.*)))
137 KEEP (*(.ctors))
138 }
139 .dtors :
140 {
141 KEEP (*crtbegin*.o(.dtors))
142 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
143 KEEP (*(SORT(.dtors.*)))
144 KEEP (*(.dtors))
145 }
146 .jcr : { KEEP (*(.jcr)) }
147 .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }
148 .dynamic : { *(.dynamic) }
149 . = DATA_SEGMENT_RELRO_END (0, .);
150 .data :
151 {
152 *(.data .data.* .gnu.linkonce.d.*)
153 KEEP (*(.gnu.linkonce.d.*personality*))
154 SORT(CONSTRUCTORS)
155 }
156 .data1 : { *(.data1) }
dc28c732 157 .toc1 ALIGN(8) : { *(.toc1) }
158 .opd ALIGN(8) : { KEEP (*(.opd)) }
159 .got ALIGN(8) : { *(.got .toc) }
810260a8 160 /* We want the small data sections together, so single-instruction offsets
161 can access them all, and initialized data all before uninitialized, so
162 we can shorten the on-disk segment size. */
163 .sdata :
164 {
165 *(.sdata .sdata.* .gnu.linkonce.s.*)
166 }
167 _edata = .;
168 PROVIDE (edata = .);
169 __bss_start = .;
dc28c732 170 .tocbss ALIGN(8) : { *(.tocbss)}
810260a8 171 .sbss :
172 {
173 PROVIDE (__sbss_start = .);
174 PROVIDE (___sbss_start = .);
175 *(.dynsbss)
176 *(.sbss .sbss.* .gnu.linkonce.sb.*)
177 *(.scommon)
178 PROVIDE (__sbss_end = .);
179 PROVIDE (___sbss_end = .);
180 }
181 .plt : { *(.plt) }
182 .bss :
183 {
184 *(.dynbss)
185 *(.bss .bss.* .gnu.linkonce.b.*)
186 *(COMMON)
187 /* Align here to ensure that the .bss section occupies space up to
188 _end. Align after .bss to ensure correct alignment even if the
189 .bss section disappears because there are no input sections. */
190 . = ALIGN(64 / 8);
191 }
192 . = ALIGN(64 / 8);
193 _end = .;
194 PROVIDE (end = .);
195 . = DATA_SEGMENT_END (.);
196 /* Stabs debugging sections. */
197 .stab 0 : { *(.stab) }
198 .stabstr 0 : { *(.stabstr) }
199 .stab.excl 0 : { *(.stab.excl) }
200 .stab.exclstr 0 : { *(.stab.exclstr) }
201 .stab.index 0 : { *(.stab.index) }
202 .stab.indexstr 0 : { *(.stab.indexstr) }
203 .comment 0 : { *(.comment) }
204 /* DWARF debug sections.
205 Symbols in the DWARF debugging sections are relative to the beginning
206 of the section so we begin them at 0. */
207 /* DWARF 1 */
208 .debug 0 : { *(.debug) }
209 .line 0 : { *(.line) }
210 /* GNU DWARF 1 extensions */
211 .debug_srcinfo 0 : { *(.debug_srcinfo) }
212 .debug_sfnames 0 : { *(.debug_sfnames) }
213 /* DWARF 1.1 and DWARF 2 */
214 .debug_aranges 0 : { *(.debug_aranges) }
215 .debug_pubnames 0 : { *(.debug_pubnames) }
216 /* DWARF 2 */
217 .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
218 .debug_abbrev 0 : { *(.debug_abbrev) }
219 .debug_line 0 : { *(.debug_line) }
220 .debug_frame 0 : { *(.debug_frame) }
221 .debug_str 0 : { *(.debug_str) }
222 .debug_loc 0 : { *(.debug_loc) }
223 .debug_macinfo 0 : { *(.debug_macinfo) }
224 /* SGI/MIPS DWARF 2 extensions */
225 .debug_weaknames 0 : { *(.debug_weaknames) }
226 .debug_funcnames 0 : { *(.debug_funcnames) }
227 .debug_typenames 0 : { *(.debug_typenames) }
228 .debug_varnames 0 : { *(.debug_varnames) }
229 /DISCARD/ : { *(.note.GNU-stack) }
230}