source: trunk/libs/newlib/src/libgloss/rs6000/xilinx440.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.1 KB
Line 
1/* Default linker script for PowerPC 440, for normal executables
2
3Copyright (c) 2008, 2009 Xilinx, Inc.  All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are
7met:
8
91.  Redistributions source code must retain the above copyright notice,
10this list of conditions and the following disclaimer.
11
122.  Redistributions in binary form must reproduce the above copyright
13notice, this list of conditions and the following disclaimer in the
14documentation and/or other materials provided with the distribution.
15
163.  Neither the name of Xilinx nor the names of its contributors may be
17used to endorse or promote products derived from this software without
18specific prior written permission.
19
20THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
21IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
26TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*/
32
33OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
34              "elf32-powerpc")
35OUTPUT_ARCH(powerpc:common)
36ENTRY(_boot)
37_START_ADDR = DEFINED(_START_ADDR) ? _START_ADDR : 0xFFFF0000;
38_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 4k;
39_HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 4k;
40STARTUP(boot.o)
41/* Do we need any of these for elf?
42   __DYNAMIC = 0;    */
43PROVIDE (__stack = 0); PROVIDE (___stack = 0);
44SECTIONS
45{
46
47  . = _START_ADDR;
48
49  /* Read-only sections, merged into text segment: */
50  .hash           : { *(.hash)          }
51  .dynsym         : { *(.dynsym)                }
52  .dynstr         : { *(.dynstr)                }
53  .gnu.version   : { *(.gnu.version)      }
54  .gnu.version_d   : { *(.gnu.version_d)  }
55  .gnu.version_r   : { *(.gnu.version_r)  }
56  .rela.text     :
57    {
58      *(.rela.text)
59      *(.rela.text.*)
60      *(.rela.gnu.linkonce.t*)
61    }
62  .rela.data     :
63    {
64      *(.rela.data)
65      *(.rela.data.*)
66      *(.rela.gnu.linkonce.d*)
67    }
68  .rela.rodata   :
69    {
70      *(.rela.rodata)
71      *(.rela.rodata.*)
72      *(.rela.gnu.linkonce.r*)
73    }
74  .rela.got       : { *(.rela.got)      }
75  .rela.got1      : { *(.rela.got1)     }
76  .rela.got2      : { *(.rela.got2)     }
77  .rela.ctors     : { *(.rela.ctors)    }
78  .rela.dtors     : { *(.rela.dtors)    }
79  .rela.init      : { *(.rela.init)     }
80  .rela.fini      : { *(.rela.fini)     }
81  .rela.bss       : { *(.rela.bss)      }
82  .rela.plt       : { *(.rela.plt)      }
83  .rela.sdata     : { *(.rela.sdata)    }
84  .rela.sbss      : { *(.rela.sbss)     }
85  .rela.sdata2    : { *(.rela.sdata2)   }
86  .rela.sbss2     : { *(.rela.sbss2)    }
87  .text      :
88  {
89    *(.text)
90    *(.text.*)
91    *(.vectors)
92    /* .gnu.warning sections are handled specially by elf32.em.  */
93    *(.gnu.warning)
94    *(.gnu.linkonce.t.*)
95  } =0
96  .init           : { KEEP (*(.init))   } =0
97  .fini           : { KEEP (*(.fini))   } =0
98  .rodata    :
99  {
100    *(.rodata)
101    *(.rodata.*)
102    *(.gnu.linkonce.r.*)
103  }
104  .rodata1        : { *(.rodata1) }
105  _etext = .;
106  PROVIDE (etext = .);
107  PROVIDE (__etext = .);
108  .sdata2   : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*)}
109  __SDATA2_START__ = ADDR(.sdata2);
110  __SDATA2_END__ = ADDR(.sdata2) + SIZEOF(.sdata2);
111  .sbss2   : { *(.sbss2) *(.gnu.linkonce.sb2.*)}
112  __SBSS2_START__ = ADDR(.sbss2);
113  __SBSS2_END__ = ADDR(.sbss2) + SIZEOF(.sbss2);
114  /* Adjust the address for the data segment.  We want to adjust up to
115     the same address within the page on the next page up.  It would
116     be more correct to do this:
117       . = ALIGN(0x08) + (ALIGN(8) & (0x08 - 1));
118     The current expression does not correctly handle the case of a
119     text segment ending precisely at the end of a page; it causes the
120     data segment to skip a page.  The above expression does not have
121     this problem, but it will currently (2/95) cause BFD to allocate
122     a single segment, combining both text and data, for this case.
123     This will prevent the text segment from being shared among
124     multiple executions of the program; I think that is more
125     important than losing a page of the virtual address space (note
126     that no actual memory is lost; the page which is skipped can not
127     be referenced).  */
128/*  . =  ALIGN(8) + 0x08;*/
129  .data    :
130  {
131    *(.data)
132    *(.data.*)
133    *(.gnu.linkonce.d*)
134    CONSTRUCTORS
135  }
136  .data1   : { *(.data1) }
137  .got1           : { *(.got1) }
138  .dynamic        : { *(.dynamic) }
139  /* Put .ctors and .dtors next to the .got2 section, so that the pointers
140     get relocated with -mrelocatable. Also put in the .fixup pointers.
141     The current compiler no longer needs this, but keep it around for 2.7.2  */
142                PROVIDE (_GOT2_START_ = .);
143                PROVIDE (__GOT2_START_ = .);
144  .got2           :  { *(.got2) }
145                PROVIDE (__CTOR_LIST__ = .);
146                PROVIDE (___CTOR_LIST__ = .);
147                .ctors   :
148  {
149    /* gcc uses crtbegin.o to find the start of
150       the constructors, so we make sure it is
151       first.  Because this is a wildcard, it
152       doesn't matter if the user does not
153       actually link against crtbegin.o; the
154       linker won't look for a file to match a
155       wildcard.  The wildcard also means that it
156       doesn't matter which directory crtbegin.o
157       is in.  */
158    KEEP (*crtbegin.o(.ctors))
159    /* We don't want to include the .ctor section from
160       from the crtend.o file until after the sorted ctors.
161       The .ctor section from the crtend file contains the
162       end of ctors marker and it must be last */
163    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
164    KEEP (*(SORT(.ctors.*)))
165    KEEP (*(.ctors))
166  }
167                PROVIDE (__CTOR_END__ = .);
168                PROVIDE (___CTOR_END__ = .);
169                PROVIDE (__DTOR_LIST__ = .);
170                PROVIDE (___DTOR_LIST__ = .);
171                 .dtors         :
172  {
173    KEEP (*crtbegin.o(.dtors))
174    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
175    KEEP (*(SORT(.dtors.*)))
176    KEEP (*(.dtors))
177  }
178                PROVIDE (__DTOR_END__ = .);
179                PROVIDE (___DTOR_END__ = .);
180                PROVIDE (_FIXUP_START_ = .);
181                PROVIDE (__FIXUP_START_ = .);
182  .fixup          : { *(.fixup) }
183                PROVIDE (_FIXUP_END_ = .);
184                PROVIDE (__FIXUP_END_ = .);
185                PROVIDE (_GOT2_END_ = .);
186                PROVIDE (__GOT2_END_ = .);
187                PROVIDE (_GOT_START_ = .);
188                PROVIDE (__GOT_START_ = .);
189  .got            : { *(.got) }
190  .got.plt        : { *(.got.plt) }
191                PROVIDE (_GOT_END_ = .);
192                PROVIDE (__GOT_END_ = .);
193  /* Added by Sathya to handle C++ exceptions */
194  .eh_frame   : {
195    *(.eh_frame)
196  }
197  .jcr   : {
198    *(.jcr)
199  }
200  .gcc_except_table   : {
201    *(.gcc_except_table)
202  }
203  /* We want the small data sections together, so single-instruction offsets
204     can access them all, and initialized data all before uninitialized, so
205     we can shorten the on-disk segment size.  */
206  .sdata          : { *(.sdata) *(.sdata.*) *(.gnu.linkonce.s.*)}
207  __SDATA_START__ = ADDR(.sdata);
208  __SDATA_END__ = ADDR(.sdata) + SIZEOF(.sdata);
209  _edata  =  .;
210  PROVIDE (edata = .);
211  PROVIDE (__edata = .);
212  .sbss      :
213  {
214    __sbss_start = .;
215    ___sbss_start = .;
216    *(.sbss)
217    *(.sbss.*)
218    *(.gnu.linkonce.sb.*)
219    *(.scommon)
220    *(.dynsbss)
221    __sbss_end = .;
222    ___sbss_end = .;
223  }
224  .plt   : { *(.plt) }
225  .bss       :
226  {
227   __bss_start = .;
228   ___bss_start = .;
229   *(.dynbss)
230   *(.bss)
231   *(.bss.*)
232   *(.gnu.linkonce.b.*)
233   *(COMMON)
234   . = ALIGN(4);
235   __bss_end = .;
236  }
237 
238  .stack     :
239  {
240    _stack_end = .;
241    . = . + _STACK_SIZE;
242    . = ALIGN(16);
243    __stack = .;
244  }
245
246  .heap      :
247  {
248    _heap_start = .;
249    . = . + _HEAP_SIZE;
250    . = ALIGN(16);
251    _heap_end = .;
252  }
253
254  .tdata   : {
255    *(.tdata)
256    *(.tdata.*)
257    *(.gnu.linkonce.td.*)
258  }
259  .tbss   : {
260    *(.tbss)
261    *(.gnu.linkonce.tb.*)
262  }
263
264  _end = . ;
265  end = .;
266  __end = .;
267
268  .boot0 0xFFFFFF00  : { *(.boot0)}
269
270  .boot  0xFFFFFFFC  : { *(.boot) }
271
272  /* These are needed for ELF backends which have not yet been
273     converted to the new style linker.  */
274  .stab 0 : { *(.stab) }
275  .stabstr 0 : { *(.stabstr) }
276  /* DWARF debug sections.
277     Symbols in the DWARF debugging sections are relative to the beginning
278     of the section so we begin them at 0.  */
279  /* DWARF 1 */
280  .debug          0 : { *(.debug) }
281  .line           0 : { *(.line) }
282  /* GNU DWARF 1 extensions */
283  .debug_srcinfo  0 : { *(.debug_srcinfo) }
284  .debug_sfnames  0 : { *(.debug_sfnames) }
285  /* DWARF 1.1 and DWARF 2 */
286  .debug_aranges  0 : { *(.debug_aranges) }
287  .debug_pubnames 0 : { *(.debug_pubnames) }
288  /* DWARF 2 */
289  .debug_info     0 : { *(.debug_info) }
290  .debug_abbrev   0 : { *(.debug_abbrev) }
291  .debug_line     0 : { *(.debug_line) }
292  .debug_frame    0 : { *(.debug_frame) }
293  .debug_str      0 : { *(.debug_str) }
294  .debug_loc      0 : { *(.debug_loc) }
295  .debug_macinfo  0 : { *(.debug_macinfo) }
296  /* SGI/MIPS DWARF 2 extensions */
297  .debug_weaknames 0 : { *(.debug_weaknames) }
298  .debug_funcnames 0 : { *(.debug_funcnames) }
299  .debug_typenames 0 : { *(.debug_typenames) }
300  .debug_varnames  0 : { *(.debug_varnames) }
301  /* These must appear regardless of  .  */
302}
Note: See TracBrowser for help on using the repository browser.