source: trunk/libs/newlib/src/libgloss/mep/default.ld @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 9.8 KB
Line 
1/******************************************************************************
2begin-header
3
4  DO NOT EDIT. THIS FILE IS MACHINE-GENERATED
5  FROM THE TEMPLATE FILE gmap_default.ld.
6  ALL EDITS WILL BE ERASED WITH NEXT MeP-Integrator RUN.
7
8  Custom linker script for the MeP Module default.
9end-header
10*******************************************************************************/
11
12OUTPUT_FORMAT("elf32-mep-little", "elf32-mep",
13              "elf32-mep-little")
14OUTPUT_ARCH(mep)
15ENTRY(_reset)
16
17MEMORY
18{
19/* begin-memory */
20  VEC   (r) : ORIGIN = 0x00000000, LENGTH = 0x000000b8
21  VEC_WARM      (w) : ORIGIN = 0x00200000, LENGTH = 0x000000b8
22  HWINIT        (r) : ORIGIN = 0x000000b8, LENGTH = 0x00000148
23  RAM1  (r) : ORIGIN = 0x00000200, LENGTH = 0x001ffe00
24  RAM2  (w) : ORIGIN = 0x00800000, LENGTH = 0x00800000
25/*RAM3  (w) : ORIGIN = 0x80000000, LENGTH = 0x00800000 */
26  IMEM0 (w) : ORIGIN = 0x002000b8, LENGTH = 0x00003f48
27  IMEM1 (w) : ORIGIN = 0x00204000, LENGTH = 0x00004000
28  DMEM0 (w) : ORIGIN = 0x00220000, LENGTH = 0x00008000
29  DMEM1 (w) : ORIGIN = 0x00228000, LENGTH = 0x00008000
30  DMEM2 (w) : ORIGIN = 0x00230000, LENGTH = 0x00008000
31  DMEM3 (w) : ORIGIN = 0x00238000, LENGTH = 0x00008000
32/* end-memory */
33}
34
35SECTIONS
36{
37  /* Sections to be placed in the vec area.  */
38  .vec : { *(.vec) } >VEC /* VEC-section */
39
40  /* Sections to be placed in the HWINIT area.  */
41  .hwinit : { *(.hwinit) } >HWINIT /* HWINIT-section */
42
43  /* Sections to be placed in the ROM area.  */
44  .gnu.version   : { *(.gnu.version)    } >RAM1 /* ROM-section */
45  .gnu.version_d : { *(.gnu.version_d)  } >RAM1 /* ROM-section */
46  .gnu.version_r : { *(.gnu.version_r)  } >RAM1 /* ROM-section */
47
48  /* Sections to be placed in the romdata.s area.  */
49  .srodata :
50  {
51    __sdabase = . + 0x8000;
52    *(.srodata) *(.srodata.*) *(.gnu.linkonce.srd.*)
53  } >RAM2 /* DATA-section */
54
55  /* Sections to be placed in the data.s area.  */
56  .sdata     :
57  {
58    *(.sdata)
59    *(.sdata.*)
60    *(.gnu.linkonce.s.*)
61  } >RAM2 /* DATA-section */
62  .sbss      :
63  {
64    PROVIDE (__sbss_start = .);
65    PROVIDE (___sbss_start = .);
66    *(.dynsbss)
67    *(.sbss)
68    *(.sbss.*)
69    *(.gnu.linkonce.sb.*)
70    *(.scommon)
71    PROVIDE (__sbss_end = .);
72    PROVIDE (___sbss_end = .);
73    /* Assert maximum size */
74    __assert_tiny_size = ASSERT ((. < __sdabase) || ((. - __sdabase) <= 0x8000),
75                                 "tiny section overflow");
76  } >RAM2 /* DATA-section */
77
78  /* Sections to be placed in the data.m area.  */
79  .data    :
80  {
81    __data_start = . ;
82    *(.data)
83    *(.data.*)
84    *(.gnu.linkonce.d.*)
85    SORT(CONSTRUCTORS)
86  } >RAM2 /* DATA-section */
87  .data1   : { *(.data1) } >RAM2 /* DATA-section */
88  .eh_frame : { KEEP (*(.eh_frame))} >RAM2 /* DATA-section */
89  .gcc_except_table : { *(.gcc_except_table) *(.gcc_except_table.*) } >RAM2 /* DATA-section */
90  .dynamic       : { *(.dynamic) } >RAM2 /* DATA-section */
91  .ctors   :
92  {
93    /* gcc uses crtbegin.o to find the start of
94       the constructors, so we make sure it is
95       first.  Because this is a wildcard, it
96       doesn't matter if the user does not
97       actually link against crtbegin.o; the
98       linker won't look for a file to match a
99       wildcard.  The wildcard also means that it
100       doesn't matter which directory crtbegin.o
101       is in.  */
102    KEEP (*crtbegin.o(.ctors))
103    /* We don't want to include the .ctor section from
104       from the crtend.o file until after the sorted ctors.
105       The .ctor section from the crtend file contains the
106       end of ctors marker and it must be last */
107    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
108    KEEP (*(SORT(.ctors.*)))
109    KEEP (*(.ctors))
110  } >RAM2 /* DATA-section */
111  .dtors         :
112  {
113    KEEP (*crtbegin.o(.dtors))
114    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
115    KEEP (*(SORT(.dtors.*)))
116    KEEP (*(.dtors))
117  } >RAM2 /* DATA-section */
118  .jcr :
119  {
120    . = ALIGN(4);
121    *(.jcr)
122  } >RAM2 /* DATA-section */
123  .got :
124  {
125    *(.got.plt) *(.got)
126    _edata = .;
127    PROVIDE (edata = .);
128  } >RAM2 /* DATA-section */
129  .based :
130  {
131    __tpbase = .;
132    *(.based) *(.based.*) *(.gnu.linkonce.based.*)
133    /* Assert maximum size */
134    __assert_based_size = ASSERT ((. - __tpbase) <= 0x80,
135                                  "based section overflow");
136  } >RAM2 /* DATA-section */
137
138  .bss       :
139  {
140    __bss_start = .;
141    *(.dynbss)
142    *(.bss)
143    *(.bss.*)
144    *(.gnu.linkonce.b.*)
145    *(COMMON)
146    /* Align here to ensure that the .bss section occupies space up to
147      _end.  Align after .bss to ensure correct alignment even if the
148      .bss section disappears because there are no input sections.  */
149    . = ALIGN(32 / 8);
150    _end = .;
151    PROVIDE (end = .);
152  } >RAM2 /* DATA-section */
153
154  /* Sections to be placed in the code.m area.  */
155  .init          :
156  {
157    KEEP (*(.init))
158  } >RAM2 /* CODE-section */
159  .plt      : { *(.plt) } >RAM2 /* DATA-section */
160  .text      :
161  {
162    *(.text)
163    *(.text.*)
164    *(.stub)
165    /* .gnu.warning sections are handled specially by elf32.em.  */
166    *(.gnu.warning)
167    *(.gnu.linkonce.t.*)
168  } >RAM2 /* CODE-section */ =0
169  .vtext ALIGN(8)    :
170  {
171    *(.vtext) *(.vtext.*) *(.gnu.linkonce.v.*)
172  } >RAM2 /* CODE-section */
173  .fini      :
174  {
175    KEEP (*(.fini))
176    PROVIDE (__etext = .);
177    PROVIDE (_etext = .);
178    PROVIDE (etext = .);
179  } >RAM2 /* CODE-section */ =0
180
181  /* Sections to be placed in the romdata.m area.  */
182  .rodata   : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } >RAM2 /* DATA-section */
183  .rodata1   : { *(.rodata1) } >RAM2 /* DATA-section */
184
185  /* Sections to be placed in the code.l area.  */
186  .ftext : {  *(.ftext) *(.ftext.*) *(.gnu.linkonce.ft.*) } >RAM2 /* CODE-section */
187  .vftext ALIGN(8)    :
188  {
189    *(.vftext) *(.vftext.*) *(.gnu.linkonce.vf.*)
190  } >RAM2 /* CODE-section */
191
192  /* Sections to be placed in the romdata.l area.  */
193  .frodata :
194  {
195    *(.frodata) *(.frodata.*) *(.gnu.linkonce.frd.*)
196    __assert_near_size = ASSERT (. <= 0x1000000, "near section overflow");
197  } >RAM2 /* DATA-section */
198
199  /* Sections to be placed in the data.l area.  */
200  .far : { *(.far) *(.far.*) *(.gnu.linkonce.far.*) } >RAM2 /* DATA-section */
201  .farbss :
202  { PROVIDE (__farbss_start = .);
203    *(.farbss) *(.farbss.*)
204    PROVIDE (__farbss_end = .);
205  } >RAM2 /* DATA-section */
206
207  /* END-mep-sections */
208
209  .vec_warm :
210  {
211    /* vec_warm is a place for the startup code to write the interrupt
212       vectors.  Allow 0xb8 bytes of space aligned on a 4 byte boundary.  */
213    . = ALIGN(4);
214    vec_warm = .;
215    . += 0xb8;
216  } >VEC_WARM
217
218  /* begin-stack-table */
219  __stack50 = (__stack - (0 *  (__stack_size / 1)) + 15) / 16 * 16;
220
221  .rostacktab :
222  {
223    /* Emit a table describing the location of the different stacks.  */
224    . = ALIGN(4);
225    __stack_table = .;
226    LONG (__stack50);
227    LONG (__stack50);
228    LONG (__stack50);
229    LONG (__stack50);
230    LONG (__stack50);
231    LONG (__stack50);
232    LONG (__stack50);
233    LONG (__stack50);
234    LONG (__stack50);
235    LONG (__stack50);
236    LONG (__stack50);
237    LONG (__stack50);
238    LONG (__stack50);
239    LONG (__stack50);
240    LONG (__stack50);
241    LONG (__stack50);
242    LONG (__stack50);
243    LONG (__stack50);
244    LONG (__stack50);
245    LONG (__stack50);
246    LONG (__stack50);
247    LONG (__stack50);
248    LONG (__stack50);
249    LONG (__stack50);
250    LONG (__stack50);
251    LONG (__stack50);
252    LONG (__stack50);
253    LONG (__stack50);
254    LONG (__stack50);
255    LONG (__stack50);
256    LONG (__stack50);
257    LONG (__stack50);
258    LONG (__stack50);
259    LONG (__stack50);
260    LONG (__stack50);
261    LONG (__stack50);
262    LONG (__stack50);
263    LONG (__stack50);
264    LONG (__stack50);
265    LONG (__stack50);
266    LONG (__stack50);
267    LONG (__stack50);
268    LONG (__stack50);
269    LONG (__stack50);
270    LONG (__stack50);
271    LONG (__stack50);
272    LONG (__stack50);
273    LONG (__stack50);
274    LONG (__stack50);
275    LONG (__stack50);
276    LONG (__stack50);
277    __stack_end = .;
278  } >RAM2
279  /* end-stack-table */
280
281  /* begin-heap */
282  /* End of DATA is 0x00800000 + 0x00800000. That's where the heap will end.  */
283  __heap_end = 0x00800000 + 0x00800000 - 1;
284  /* end-heap */
285
286  /* Default stack size is 1M.  That's where the heap will start if there's
287     room.  If there's not enough room, allocate half of the remaining space
288     for stack and half for heap.  Align the heap on a 16 byte boundary.  */
289  __stack_size = (__stack_end + 0x100000 <= __heap_end + 1
290                  ? 0x100000
291                  : ((__heap_end + 1 - __stack_end) / 2));
292  __heap = (__stack_end + __stack_size + 15) / 16 * 16;
293
294  /* Leave 16 bytes between the stack and the heap.  */
295  __stack = __heap - 0x10;
296
297  /* Stabs debugging sections.  */
298  .stab 0 : { *(.stab) }
299  .stabstr 0 : { *(.stabstr) }
300  .stab.excl 0 : { *(.stab.excl) }
301  .stab.exclstr 0 : { *(.stab.exclstr) }
302  .stab.index 0 : { *(.stab.index) }
303  .stab.indexstr 0 : { *(.stab.indexstr) }
304  .comment 0 : { *(.comment) }
305  /* DWARF debug sections.
306     Symbols in the DWARF debugging sections are relative to the beginning
307     of the section so we begin them at 0.  */
308  /* DWARF 1 */
309  .debug          0 : { *(.debug) }
310  .line           0 : { *(.line) }
311  /* GNU DWARF 1 extensions */
312  .debug_srcinfo  0 : { *(.debug_srcinfo) }
313  .debug_sfnames  0 : { *(.debug_sfnames) }
314  /* DWARF 1.1 and DWARF 2 */
315  .debug_aranges  0 : { *(.debug_aranges) }
316  .debug_pubnames 0 : { *(.debug_pubnames) }
317  /* DWARF 2 */
318  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
319  .debug_abbrev   0 : { *(.debug_abbrev) }
320  .debug_line     0 : { *(.debug_line) }
321  .debug_frame    0 : { *(.debug_frame) }
322  .debug_str      0 : { *(.debug_str) }
323  .debug_loc      0 : { *(.debug_loc) }
324  .debug_macinfo  0 : { *(.debug_macinfo) }
325  .debug_ranges   0 : { *(.debug_ranges) }
326  /* SGI/MIPS DWARF 2 extensions */
327  .debug_weaknames 0 : { *(.debug_weaknames) }
328  .debug_funcnames 0 : { *(.debug_funcnames) }
329  .debug_typenames 0 : { *(.debug_typenames) }
330  .debug_varnames  0 : { *(.debug_varnames) }
331  /* These must appear regardless of  .  */
332}
Note: See TracBrowser for help on using the repository browser.