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