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