xref: /minix3/libexec/ld.elf_so/arch/powerpc/ld.so.script (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1e83f7ba2SBen GrasOUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
2e83f7ba2SBen Gras	      "elf32-powerpc")
3*0a6a1f1dSLionel SambucOUTPUT_ARCH(powerpc:common)
4e83f7ba2SBen GrasENTRY(_start)
5e83f7ba2SBen Gras/* Do we need any of these for elf?
6e83f7ba2SBen Gras   __DYNAMIC = 0;    */
7e83f7ba2SBen GrasPROVIDE (__stack = 0); PROVIDE (___stack = 0);
8e83f7ba2SBen GrasSECTIONS
9e83f7ba2SBen Gras{
10e83f7ba2SBen Gras  /* Read-only sections, merged into text segment: */
11e83f7ba2SBen Gras  . = 0 + SIZEOF_HEADERS;
12e83f7ba2SBen Gras  .hash          : { *(.hash)		}
13e83f7ba2SBen Gras  .dynsym        : { *(.dynsym)		}
14e83f7ba2SBen Gras  .dynstr        : { *(.dynstr)		}
15e83f7ba2SBen Gras  .gnu.version   : { *(.gnu.version)	}
16e83f7ba2SBen Gras  .gnu.version_d   : { *(.gnu.version_d)	}
17e83f7ba2SBen Gras  .gnu.version_r   : { *(.gnu.version_r)	}
18e83f7ba2SBen Gras  .rel.init      : { *(.rel.init)	}
19e83f7ba2SBen Gras  .rela.init     : { *(.rela.init)	}
20e83f7ba2SBen Gras  .rel.text      :
21e83f7ba2SBen Gras    {
22e83f7ba2SBen Gras      *(.rel.text)
23e83f7ba2SBen Gras      *(.rel.text.*)
24e83f7ba2SBen Gras      *(.rel.gnu.linkonce.t.*)
25e83f7ba2SBen Gras    }
26e83f7ba2SBen Gras  .rela.text     :
27e83f7ba2SBen Gras    {
28e83f7ba2SBen Gras      *(.rela.text)
29e83f7ba2SBen Gras      *(.rela.text.*)
30e83f7ba2SBen Gras      *(.rela.gnu.linkonce.t.*)
31e83f7ba2SBen Gras    }
32e83f7ba2SBen Gras  .rel.fini      : { *(.rel.fini)	}
33e83f7ba2SBen Gras  .rela.fini     : { *(.rela.fini)	}
34e83f7ba2SBen Gras  .rel.rodata    :
35e83f7ba2SBen Gras    {
36e83f7ba2SBen Gras      *(.rel.rodata)
37e83f7ba2SBen Gras      *(.rel.rodata.*)
38e83f7ba2SBen Gras      *(.rel.gnu.linkonce.r.*)
39e83f7ba2SBen Gras    }
40e83f7ba2SBen Gras  .rela.rodata   :
41e83f7ba2SBen Gras    {
42e83f7ba2SBen Gras      *(.rela.rodata)
43e83f7ba2SBen Gras      *(.rela.rodata.*)
44e83f7ba2SBen Gras      *(.rela.gnu.linkonce.r.*)
45e83f7ba2SBen Gras    }
46e83f7ba2SBen Gras  .rel.data      :
47e83f7ba2SBen Gras    {
48e83f7ba2SBen Gras      *(.rel.data)
49e83f7ba2SBen Gras      *(.rel.data.*)
50e83f7ba2SBen Gras      *(.rel.gnu.linkonce.d.*)
51e83f7ba2SBen Gras    }
52e83f7ba2SBen Gras  .rela.data     :
53e83f7ba2SBen Gras    {
54e83f7ba2SBen Gras      *(.rela.data)
55e83f7ba2SBen Gras      *(.rela.data.*)
56e83f7ba2SBen Gras      *(.rela.gnu.linkonce.d.*)
57e83f7ba2SBen Gras    }
58e83f7ba2SBen Gras  .rel.ctors     : { *(.rel.ctors)	}
59e83f7ba2SBen Gras  .rela.ctors    : { *(.rela.ctors)	}
60e83f7ba2SBen Gras  .rel.dtors     : { *(.rel.dtors)	}
61e83f7ba2SBen Gras  .rela.dtors    : { *(.rela.dtors)	}
62e83f7ba2SBen Gras  .rel.got       : { *(.rel.got)		}
63e83f7ba2SBen Gras  .rela.got      : { *(.rela.got)		}
64e83f7ba2SBen Gras  .rel.sdata     :
65e83f7ba2SBen Gras    {
66e83f7ba2SBen Gras      *(.rel.sdata)
67e83f7ba2SBen Gras      *(.rel.sdata.*)
68e83f7ba2SBen Gras      *(.rel.gnu.linkonce.s.*)
69e83f7ba2SBen Gras    }
70e83f7ba2SBen Gras  .rela.sdata     :
71e83f7ba2SBen Gras    {
72e83f7ba2SBen Gras      *(.rela.sdata)
73e83f7ba2SBen Gras      *(.rela.sdata.*)
74e83f7ba2SBen Gras      *(.rela.gnu.linkonce.s.*)
75e83f7ba2SBen Gras    }
76e83f7ba2SBen Gras  .rel.sbss      :
77e83f7ba2SBen Gras    {
78e83f7ba2SBen Gras      *(.rel.sbss)
79e83f7ba2SBen Gras      *(.rel.sbss.*)
80e83f7ba2SBen Gras      *(.rel.gnu.linkonce.sb.*)
81e83f7ba2SBen Gras    }
82e83f7ba2SBen Gras  .rela.sbss     :
83e83f7ba2SBen Gras    {
84e83f7ba2SBen Gras      *(.rela.sbss)
85e83f7ba2SBen Gras      *(.rela.sbss.*)
86e83f7ba2SBen Gras      *(.rel.gnu.linkonce.sb.*)
87e83f7ba2SBen Gras    }
88e83f7ba2SBen Gras  .rel.sdata2    :
89e83f7ba2SBen Gras    {
90e83f7ba2SBen Gras      *(.rel.sdata2)
91e83f7ba2SBen Gras      *(.rel.sdata2.*)
92e83f7ba2SBen Gras      *(.rel.gnu.linkonce.s2.*)
93e83f7ba2SBen Gras    }
94e83f7ba2SBen Gras  .rela.sdata2   :
95e83f7ba2SBen Gras    {
96e83f7ba2SBen Gras      *(.rela.sdata2)
97e83f7ba2SBen Gras      *(.rela.sdata2.*)
98e83f7ba2SBen Gras      *(.rela.gnu.linkonce.s2.*)
99e83f7ba2SBen Gras    }
100e83f7ba2SBen Gras  .rel.sbss2     :
101e83f7ba2SBen Gras    {
102e83f7ba2SBen Gras      *(.rel.sbss2)
103e83f7ba2SBen Gras      *(.rel.sbss2.*)
104e83f7ba2SBen Gras      *(.rel.gnu.linkonce.sb2.*)
105e83f7ba2SBen Gras    }
106e83f7ba2SBen Gras  .rela.sbss2    :
107e83f7ba2SBen Gras    {
108e83f7ba2SBen Gras      *(.rela.sbss2)
109e83f7ba2SBen Gras      *(.rela.sbss2.*)
110e83f7ba2SBen Gras      *(.rela.gnu.linkonce.sb2.*)
111e83f7ba2SBen Gras    }
112e83f7ba2SBen Gras  .rel.bss       :
113e83f7ba2SBen Gras    {
114e83f7ba2SBen Gras      *(.rel.bss)
115e83f7ba2SBen Gras      *(.rel.bss.*)
116e83f7ba2SBen Gras      *(.rel.gnu.linkonce.b.*)
117e83f7ba2SBen Gras    }
118e83f7ba2SBen Gras  .rela.bss      :
119e83f7ba2SBen Gras    {
120e83f7ba2SBen Gras      *(.rela.bss)
121e83f7ba2SBen Gras      *(.rela.bss.*)
122e83f7ba2SBen Gras      *(.rela.gnu.linkonce.b.*)
123e83f7ba2SBen Gras    }
124e83f7ba2SBen Gras  .rel.plt       : { *(.rel.plt)		}
125e83f7ba2SBen Gras  .rela.plt      : { *(.rela.plt)		}
126e83f7ba2SBen Gras  .init          :
127e83f7ba2SBen Gras  {
128e83f7ba2SBen Gras    KEEP (*(.init))
129e83f7ba2SBen Gras  } =0
130e83f7ba2SBen Gras  .text      :
131e83f7ba2SBen Gras  {
132e83f7ba2SBen Gras    *(.text)
133e83f7ba2SBen Gras    *(.text.*)
134e83f7ba2SBen Gras    *(.stub)
135e83f7ba2SBen Gras    /* .gnu.warning sections are handled specially by elf32.em.  */
136e83f7ba2SBen Gras    *(.gnu.warning)
137e83f7ba2SBen Gras    *(.gnu.linkonce.t.*)
138e83f7ba2SBen Gras  } =0
139e83f7ba2SBen Gras  .fini      :
140e83f7ba2SBen Gras  {
141e83f7ba2SBen Gras    KEEP (*(.fini))
142e83f7ba2SBen Gras  } =0
143e83f7ba2SBen Gras  PROVIDE (__etext = .);
144e83f7ba2SBen Gras  PROVIDE (_etext = .);
145e83f7ba2SBen Gras  PROVIDE (etext = .);
146e83f7ba2SBen Gras  .rodata   : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) }
147e83f7ba2SBen Gras  .rodata1   : { *(.rodata1) }
148e83f7ba2SBen Gras  /* Adjust the address for the data segment.  We want to adjust up to
149e83f7ba2SBen Gras     the same address within the page on the next page up.  */
150e83f7ba2SBen Gras  . = ALIGN(8);
151e83f7ba2SBen Gras  .data    :
152e83f7ba2SBen Gras  {
153e83f7ba2SBen Gras    *(.data)
154e83f7ba2SBen Gras    *(.data.*)
155e83f7ba2SBen Gras    *(.gnu.linkonce.d.*)
156e83f7ba2SBen Gras    SORT(CONSTRUCTORS)
157e83f7ba2SBen Gras  }
158e83f7ba2SBen Gras  .data1   : { *(.data1) }
159e83f7ba2SBen Gras  .eh_frame : { KEEP (*(.eh_frame)) }
160e83f7ba2SBen Gras  .gcc_except_table : { *(.gcc_except_table) }
161e83f7ba2SBen Gras  .fixup	: { *(.fixup) }
162e83f7ba2SBen Gras  .got1		: { *(.got1) }
163e83f7ba2SBen Gras  .got2		: { *(.got2) }
164e83f7ba2SBen Gras  .ctors   :
165e83f7ba2SBen Gras  {
166e83f7ba2SBen Gras    /* gcc uses crtbegin.o to find the start of
167e83f7ba2SBen Gras       the constructors, so we make sure it is
168e83f7ba2SBen Gras       first.  Because this is a wildcard, it
169e83f7ba2SBen Gras       doesn't matter if the user does not
170e83f7ba2SBen Gras       actually link against crtbegin.o; the
171e83f7ba2SBen Gras       linker won't look for a file to match a
172e83f7ba2SBen Gras       wildcard.  The wildcard also means that it
173e83f7ba2SBen Gras       doesn't matter which directory crtbegin.o
174e83f7ba2SBen Gras       is in.  */
175e83f7ba2SBen Gras    KEEP (*crtbegin.o(.ctors))
176e83f7ba2SBen Gras    /* We don't want to include the .ctor section from
177e83f7ba2SBen Gras       from the crtend.o file until after the sorted ctors.
178e83f7ba2SBen Gras       The .ctor section from the crtend file contains the
179e83f7ba2SBen Gras       end of ctors marker and it must be last */
180e83f7ba2SBen Gras    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
181e83f7ba2SBen Gras    KEEP (*(SORT(.ctors.*)))
182e83f7ba2SBen Gras    KEEP (*(.ctors))
183e83f7ba2SBen Gras  }
184e83f7ba2SBen Gras   .dtors         :
185e83f7ba2SBen Gras  {
186e83f7ba2SBen Gras    KEEP (*crtbegin.o(.dtors))
187e83f7ba2SBen Gras    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
188e83f7ba2SBen Gras    KEEP (*(SORT(.dtors.*)))
189e83f7ba2SBen Gras    KEEP (*(.dtors))
190e83f7ba2SBen Gras  }
191e83f7ba2SBen Gras  .got		  : { *(.got.plt) *(.got) }
192e83f7ba2SBen Gras  PROVIDE (_GOT_END_ = .);
193e83f7ba2SBen Gras  .sdata2   : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) }
194e83f7ba2SBen Gras  .sbss2   : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
195e83f7ba2SBen Gras  .dynamic       : { *(.dynamic) }
196e83f7ba2SBen Gras  /* We want the small data sections together, so single-instruction offsets
197e83f7ba2SBen Gras     can access them all, and initialized data all before uninitialized, so
198e83f7ba2SBen Gras     we can shorten the on-disk segment size.  */
199e83f7ba2SBen Gras  .sdata     :
200e83f7ba2SBen Gras  {
201e83f7ba2SBen Gras    *(.sdata)
202e83f7ba2SBen Gras    *(.sdata.*)
203e83f7ba2SBen Gras    *(.gnu.linkonce.s.*)
204e83f7ba2SBen Gras  }
205e83f7ba2SBen Gras  _edata = .;
206e83f7ba2SBen Gras  PROVIDE (edata = .);
207e83f7ba2SBen Gras  __bss_start = .;
208e83f7ba2SBen Gras  .sbss      :
209e83f7ba2SBen Gras  {
210e83f7ba2SBen Gras    PROVIDE (__sbss_start = .);
211e83f7ba2SBen Gras    PROVIDE (___sbss_start = .);
212e83f7ba2SBen Gras    *(.dynsbss)
213e83f7ba2SBen Gras    *(.sbss)
214e83f7ba2SBen Gras    *(.sbss.*)
215e83f7ba2SBen Gras    *(.gnu.linkonce.sb.*)
216e83f7ba2SBen Gras    *(.scommon)
217e83f7ba2SBen Gras    PROVIDE (__sbss_end = .);
218e83f7ba2SBen Gras    PROVIDE (___sbss_end = .);
219e83f7ba2SBen Gras  }
220e83f7ba2SBen Gras  .plt      : { *(.plt)	}
221e83f7ba2SBen Gras  .bss       :
222e83f7ba2SBen Gras  {
223e83f7ba2SBen Gras   *(.dynbss)
224e83f7ba2SBen Gras   *(.bss)
225e83f7ba2SBen Gras   *(.bss.*)
226e83f7ba2SBen Gras   *(.gnu.linkonce.b.*)
227e83f7ba2SBen Gras   *(COMMON)
228e83f7ba2SBen Gras   /* Align here to ensure that the .bss section occupies space up to
229e83f7ba2SBen Gras      _end.  Align after .bss to ensure correct alignment even if the
230e83f7ba2SBen Gras      .bss section disappears because there are no input sections.  */
231e83f7ba2SBen Gras   . = ALIGN(8);
232e83f7ba2SBen Gras  }
233e83f7ba2SBen Gras  . = ALIGN(8);
234e83f7ba2SBen Gras  _end = .;
235e83f7ba2SBen Gras  __end = .;
236e83f7ba2SBen Gras  PROVIDE (end = .);
237e83f7ba2SBen Gras  /* Stabs debugging sections.  */
238e83f7ba2SBen Gras  .stab 0 : { *(.stab) }
239e83f7ba2SBen Gras  .stabstr 0 : { *(.stabstr) }
240e83f7ba2SBen Gras  .stab.excl 0 : { *(.stab.excl) }
241e83f7ba2SBen Gras  .stab.exclstr 0 : { *(.stab.exclstr) }
242e83f7ba2SBen Gras  .stab.index 0 : { *(.stab.index) }
243e83f7ba2SBen Gras  .stab.indexstr 0 : { *(.stab.indexstr) }
244e83f7ba2SBen Gras  .comment 0 : { *(.comment) }
245e83f7ba2SBen Gras  /* DWARF debug sections.
246e83f7ba2SBen Gras     Symbols in the DWARF debugging sections are relative to the beginning
247e83f7ba2SBen Gras     of the section so we begin them at 0.  */
248e83f7ba2SBen Gras  /* DWARF 1 */
249e83f7ba2SBen Gras  .debug          0 : { *(.debug) }
250e83f7ba2SBen Gras  .line           0 : { *(.line) }
251e83f7ba2SBen Gras  /* GNU DWARF 1 extensions */
252e83f7ba2SBen Gras  .debug_srcinfo  0 : { *(.debug_srcinfo) }
253e83f7ba2SBen Gras  .debug_sfnames  0 : { *(.debug_sfnames) }
254e83f7ba2SBen Gras  /* DWARF 1.1 and DWARF 2 */
255e83f7ba2SBen Gras  .debug_aranges  0 : { *(.debug_aranges) }
256e83f7ba2SBen Gras  .debug_pubnames 0 : { *(.debug_pubnames) }
257e83f7ba2SBen Gras  /* DWARF 2 */
258e83f7ba2SBen Gras  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
259e83f7ba2SBen Gras  .debug_abbrev   0 : { *(.debug_abbrev) }
260e83f7ba2SBen Gras  .debug_line     0 : { *(.debug_line) }
261e83f7ba2SBen Gras  .debug_frame    0 : { *(.debug_frame) }
262e83f7ba2SBen Gras  .debug_str      0 : { *(.debug_str) }
263e83f7ba2SBen Gras  .debug_loc      0 : { *(.debug_loc) }
264e83f7ba2SBen Gras  .debug_macinfo  0 : { *(.debug_macinfo) }
265e83f7ba2SBen Gras  /* SGI/MIPS DWARF 2 extensions */
266e83f7ba2SBen Gras  .debug_weaknames 0 : { *(.debug_weaknames) }
267e83f7ba2SBen Gras  .debug_funcnames 0 : { *(.debug_funcnames) }
268e83f7ba2SBen Gras  .debug_typenames 0 : { *(.debug_typenames) }
269e83f7ba2SBen Gras  .debug_varnames  0 : { *(.debug_varnames) }
270e83f7ba2SBen Gras  /* These must appear regardless of  .  */
271e83f7ba2SBen Gras}
272