source: trunk/libs/newlib/src/libgloss/msp430/msp430-sim.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: 8.4 KB
Line 
1/* Copyright (c) 2013-2015 Red Hat, Inc. All rights reserved.
2
3   This copyrighted material is made available to anyone wishing to use, modify,
4   copy, or redistribute it subject to the terms and conditions of the BSD
5   License.   This program is distributed in the hope that it will be useful,
6   but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties
7   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  A copy of this license
8   is available at http://www.opensource.org/licenses. Any Red Hat trademarks that
9   are incorporated in the source code or documentation are not subject to the BSD
10   License and may only be used or replicated with the express permission of
11   Red Hat, Inc.  */
12
13/* Default linker script, for normal MSP430 executables.  */
14
15OUTPUT_ARCH(msp430)
16ENTRY(_start)
17
18INCLUDE intr_vectors.ld
19
20MEMORY
21{
22  RAM (w) : ORIGIN = 0x00500, LENGTH = 0x0eb00
23}
24
25SECTIONS
26{
27  .resetvec :
28  {
29    *(.resetvec)
30  } > VECT31
31
32  .rodata :
33  {
34    . = ALIGN(2);
35    *(.plt)
36    . = ALIGN(2);
37    *(.lower.rodata.* .lower.rodata)
38    . = ALIGN(2);
39    *(.rodata .rodata.* .gnu.linkonce.r.* .const .const:*)
40    . = ALIGN(2);
41    *(.either.rodata.* .either.rodata)
42    . = ALIGN(2);
43    *(.rodata1)
44
45    KEEP (*(.gcc_except_table)) *(.gcc_except_table.*)
46    PROVIDE (__preinit_array_start = .);
47    KEEP (*(.preinit_array))
48    PROVIDE (__preinit_array_end = .);
49    PROVIDE (__init_array_start = .);
50    KEEP (*(SORT(.init_array.*)))
51    KEEP (*(.init_array))
52    PROVIDE (__init_array_end = .);
53    PROVIDE (__fini_array_start = .);
54    KEEP (*(.fini_array))
55    KEEP (*(SORT(.fini_array.*)))
56    PROVIDE (__fini_array_end = .);
57
58  } > RAM
59
60  /* Note: This is a separate .rodata section for sections which are
61     read only but which older linkers treat as read-write.
62     This prevents older linkers from marking the entire .rodata
63     section as read-write.  */
64  .rodata2 :
65  {
66    . = ALIGN(2);
67    *(.eh_frame_hdr)
68    KEEP (*(.eh_frame))
69
70    /* gcc uses crtbegin.o to find the start of the constructors, so
71       we make sure it is first.  Because this is a wildcard, it
72       doesn't matter if the user does not actually link against
73       crtbegin.o; the linker won't look for a file to match a
74       wildcard.  The wildcard also means that it doesn't matter which
75       directory crtbegin.o is in.  */
76    KEEP (*crtbegin*.o(.ctors))
77
78    /* We don't want to include the .ctor section from from the
79       crtend.o file until after the sorted ctors.  The .ctor section
80       from the crtend file contains the end of ctors marker and it
81       must be last */
82    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
83    KEEP (*(SORT(.ctors.*)))
84    KEEP (*(.ctors))
85
86    KEEP (*crtbegin*.o(.dtors))
87    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
88    KEEP (*(SORT(.dtors.*)))
89    KEEP (*(.dtors))
90  } > RAM
91
92  .text :
93  {
94    . = ALIGN(2);
95    PROVIDE (_start = .);
96    KEEP (*(SORT(.crt_*)))
97    *(.lowtext)
98    *(.lower.text.* .lower.text)
99    *(.text .stub .text.* .gnu.linkonce.t.* .text:*)
100    *(.either.text.* .either.text)
101    KEEP (*(.text.*personality*))
102    /* .gnu.warning sections are handled specially by elf32.em.  */
103    *(.gnu.warning)
104    *(.interp .hash .dynsym .dynstr .gnu.version*)
105    PROVIDE (__etext = .);
106    PROVIDE (_etext = .);
107    PROVIDE (etext = .);
108    . = ALIGN(2);
109    KEEP (*(.init))
110    KEEP (*(.fini))
111    KEEP (*(.tm_clone_table))
112  } > RAM
113
114  .data :
115  {
116    . = ALIGN(2);
117    PROVIDE (__datastart = .);
118
119    *(.lower.data.* .lower.data)
120
121    *(.data .data.* .gnu.linkonce.d.*)
122
123    *(.either.data.* .either.data)
124
125    KEEP (*(.jcr))
126    *(.data.rel.ro.local) *(.data.rel.ro*)
127    *(.dynamic)
128
129    KEEP (*(.gnu.linkonce.d.*personality*))
130    SORT(CONSTRUCTORS)
131    *(.data1)
132    *(.got.plt) *(.got)
133
134    /* We want the small data sections together, so single-instruction offsets
135       can access them all, and initialized data all before uninitialized, so
136       we can shorten the on-disk segment size.  */
137    . = ALIGN(2);
138    *(.sdata .sdata.* .gnu.linkonce.s.* D_2 D_1)
139
140    . = ALIGN(2);
141    _edata = .;
142    PROVIDE (edata = .);
143    PROVIDE (__dataend = .);
144  } > RAM
145
146  /* Note that crt0 assumes this is a multiple of two; all the
147     start/stop symbols are also assumed word-aligned.  */
148  PROVIDE(__romdatastart = LOADADDR(.data));
149  PROVIDE (__romdatacopysize = SIZEOF(.data));
150
151  .bss :
152  {
153    . = ALIGN(2);
154    PROVIDE (__bssstart = .);
155    *(.lower.bss.* .lower.bss)
156    *(.dynbss)
157    *(.sbss .sbss.*)
158    *(.bss .bss.* .gnu.linkonce.b.*)
159    *(.either.bss.* .either.bss)
160    . = ALIGN(2);
161    *(COMMON)
162    . = ALIGN(2);
163    PROVIDE (__bssend = .);
164  } > RAM
165  PROVIDE (__bsssize = SIZEOF(.bss));
166
167  /* This section contains data that is not initialised during load
168     *or* application reset.  */
169  .noinit (NOLOAD) :
170  {
171    . = ALIGN(2);
172    PROVIDE (__noinit_start = .);
173    *(.noinit)
174    . = ALIGN(2);
175    PROVIDE (__noinit_end = .);
176  } > RAM
177
178  /* This section is intended to contain data that *is* initialised during load
179     but *not* on application reset.  Normally the section would be stored in
180     FLASH RAM, but this is not available here.  We just have to hope that the
181     programmer knows what they are doing.  */
182  .persistent :
183  {
184    . = ALIGN(2);
185    PROVIDE (__persistent_start = .);
186    *(.persistent)
187    . = ALIGN(2);
188    PROVIDE (__persistent_end = .);
189  } > RAM
190 
191  _end = .;
192  PROVIDE (end = .);
193
194  /* The __stack_size value of 0x100 is just a guess, but since it is
195     PROVIDEd the user can override it on the command line.  It has to be
196     set here, rather than inside the .stack section, as symbols defined
197     inside sections are only evaluated during the final phase of the link,
198     long after the ASSERT is checked.  An ASSERT referencing a PROVIDED but
199     not yet evaluated symbol will automatically fail.
200
201     FIXME: It would be nice if this value could be automatically set via
202     gcc's -fstack-usage command line option somehow.  */
203  PROVIDE (__stack_size = 0x100);
204
205  .stack (ORIGIN (RAM) + LENGTH(RAM)) :
206  {
207    PROVIDE (__stack = .);
208    *(.stack)
209
210    /* Linker section checking ignores empty sections like
211       this one so we have to have our own test here.  */
212    /* FIXME: This test is triggering erroneously.  I have not figured
213       out why yet, but I am disabling it for now as it prevents the
214       gcc testsuite from working.  */
215    /* ASSERT (__stack > (_end + __stack_size),
216            "Error: Too much data - no room left for the stack"); */
217  }
218
219  /* Make sure that .upper sections are not used without -mlarge support.  */
220  .upper :
221  {
222    *(.upper.rodata.* .upper.rodata)
223    *(.upper.data.* .upper.data)
224    *(.upper.bss.* .upper.bss)
225    *(.upper.text.* .upper.text) 
226    ASSERT (SIZEOF(.upper) == 0, "This MCU does not support high memory");
227  }
228
229  /* The rest are all not normally part of the runtime image.  */
230
231  .MSP430.attributes 0 :
232  {
233    KEEP (*(.MSP430.attributes))
234    KEEP (*(.gnu.attributes))
235    KEEP (*(__TI_build_attributes))
236  }
237
238  /* Stabs debugging sections.  */
239  .stab          0 : { *(.stab) }
240  .stabstr       0 : { *(.stabstr) }
241  .stab.excl     0 : { *(.stab.excl) }
242  .stab.exclstr  0 : { *(.stab.exclstr) }
243  .stab.index    0 : { *(.stab.index) }
244  .stab.indexstr 0 : { *(.stab.indexstr) }
245  .comment       0 : { *(.comment) }
246  /* DWARF debug sections.
247     Symbols in the DWARF debugging sections are relative to the beginning
248     of the section so we begin them at 0.  */
249  /* DWARF 1.  */
250  .debug          0 : { *(.debug) }
251  .line           0 : { *(.line) }
252  /* GNU DWARF 1 extensions.  */
253  .debug_srcinfo  0 : { *(.debug_srcinfo) }
254  .debug_sfnames  0 : { *(.debug_sfnames) }
255  /* DWARF 1.1 and DWARF 2.  */
256  .debug_aranges  0 : { *(.debug_aranges) }
257  .debug_pubnames 0 : { *(.debug_pubnames) }
258  /* DWARF 2 */
259  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
260  .debug_abbrev   0 : { *(.debug_abbrev) }
261  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
262  .debug_frame    0 : { *(.debug_frame) }
263  .debug_str      0 : { *(.debug_str) }
264  .debug_loc      0 : { *(.debug_loc) }
265  .debug_macinfo  0 : { *(.debug_macinfo) }
266  /* SGI/MIPS DWARF 2 extensions.  */
267  .debug_weaknames 0 : { *(.debug_weaknames) }
268  .debug_funcnames 0 : { *(.debug_funcnames) }
269  .debug_typenames 0 : { *(.debug_typenames) }
270  .debug_varnames  0 : { *(.debug_varnames) }
271  /* DWARF 3.  */
272  .debug_pubtypes 0 : { *(.debug_pubtypes) }
273  .debug_ranges   0 : { *(.debug_ranges) }
274  /* DWARF Extension.  */
275  .debug_macro    0 : { *(.debug_macro) }
276
277  /DISCARD/ : { *(.note.GNU-stack) }
278}
Note: See TracBrowser for help on using the repository browser.