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