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