OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [mips/] [rm7000/] [var/] [current/] [src/] [mips_rm7000.ld] - Blame information for rev 851

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
//===========================================================================
2
//
3
// MLT linker script for MIPS RM7000
4
//
5
//===========================================================================
6
// ####ECOSGPLCOPYRIGHTBEGIN####
7
// -------------------------------------------
8
// This file is part of eCos, the Embedded Configurable Operating System.
9
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
10
//
11
// eCos is free software; you can redistribute it and/or modify it under
12
// the terms of the GNU General Public License as published by the Free
13
// Software Foundation; either version 2 or (at your option) any later
14
// version.
15
//
16
// eCos is distributed in the hope that it will be useful, but WITHOUT
17
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19
// for more details.
20
//
21
// You should have received a copy of the GNU General Public License
22
// along with eCos; if not, write to the Free Software Foundation, Inc.,
23
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
24
//
25
// As a special exception, if other files instantiate templates or use
26
// macros or inline functions from this file, or you compile this file
27
// and link it with other works to produce a work based on this file,
28
// this file does not by itself cause the resulting work to be covered by
29
// the GNU General Public License. However the source code for this file
30
// must still be made available in accordance with section (3) of the GNU
31
// General Public License v2.
32
//
33
// This exception does not invalidate any other reasons why a work based
34
// on this file might be covered by the GNU General Public License.
35
// -------------------------------------------
36
// ####ECOSGPLCOPYRIGHTEND####
37
//===========================================================================
38
 
39
#include 
40
 
41
OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips",
42
              "elf32-littlemips")
43
/* The preprocessor defines mips, but we know we're mips :-) */
44
#undef mips
45
OUTPUT_ARCH(mips:5000)
46
 
47
STARTUP(vectors.o)
48
ENTRY(reset_vector)
49
#if defined(EXTRAS)
50
INPUT(extras.o)
51
#endif
52
#if (__GNUC__ >= 3)
53
GROUP(libtarget.a libgcc.a libsupc++.a)
54
#else
55
GROUP(libtarget.a libgcc.a)
56
#endif
57
 
58
/* FIXME: The MLT should pass in the required alignment since it must be
59
 * the same as the VMA's alignment. As a result of this bug, all the
60
 * ROM mlt files have alignment 8, when some should have alignment 4
61
 * (902557-CR)
62
 */
63
#define ALIGN_LMA 8
64
#define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
65
#define LMA_EQ_VMA
66
#define FORCE_OUTPUT . = .
67
 
68
#define SECTIONS_BEGIN
69
 
70
#if defined(CYG_HAL_STARTUP_RAM)
71
 
72
/* this version for RAM startup */
73
#define SECTION_rom_vectors(_region_, _vma_, _lma_) \
74
    .rom_vectors _vma_ : _lma_ \
75
    { KEEP (*(.utlb_vector)) \
76
    . = ALIGN(0x80); KEEP(*(.other_vector)) \
77
        /* debug and reset vector not used in RAM version */ \
78
        KEEP(*(.debug_vector)) \
79
        KEEP (*(.reset_vector)) } \
80
    > _region_
81
 
82
#elif defined(CYG_HAL_STARTUP_ROM)
83
 
84
/* this version for ROM startup */
85
#define SECTION_rom_vectors(_region_, _vma_, _lma_) \
86
    .rom_vectors _vma_ : _lma_ \
87
    { KEEP (*(.reset_vector)) \
88
    . = ALIGN(0x100); KEEP (*(.utlb_vector)) \
89
    . = ALIGN(0x80); KEEP(*(.other_vector)) \
90
    . = ALIGN(0x100); KEEP(*(.debug_vector)) } \
91
    > _region_
92
 
93
#endif /* ROM startup version of ROM vectors */
94
 
95
#define SECTION_ROMISC(_region_, _vma_, _lma_)                                 \
96
  .interp _vma_  : _lma_ { *(.interp)                            } > _region_  \
97
  .hash          : FOLLOWING(.interp)        { *(.hash)          } > _region_  \
98
  .dynsym        : FOLLOWING(.hash)          { *(.dynsym)        } > _region_  \
99
  .dynstr        : FOLLOWING(.dynsym)        { *(.dynstr)        } > _region_  \
100
  .gnu.version   : FOLLOWING(.dynstr)        { *(.gnu.version)   } > _region_  \
101
  .gnu.version_d : FOLLOWING(.gnu.version)   { *(.gnu.version_d) } > _region_  \
102
  .gnu.version_r : FOLLOWING(.gnu.version_d) { *(.gnu.version_r) } > _region_  \
103
  .plt           : FOLLOWING(.gnu.version_r) { *(.plt)           } > _region_
104
 
105
#define SECTION_RELOCS(_region_, _vma_, _lma_)                              \
106
  .rel.text      :                                                          \
107
    {                                                                       \
108
      *(.rel.text)                                                          \
109
      *(.rel.text.*)                                                        \
110
      *(.rel.gnu.linkonce.t*)                                               \
111
    } > _region_                                                            \
112
  .rela.text     :                                                          \
113
    {                                                                       \
114
      *(.rela.text)                                                         \
115
      *(.rela.text.*)                                                       \
116
      *(.rela.gnu.linkonce.t*)                                              \
117
    } > _region_                                                            \
118
  .rel.data      :                                                          \
119
    {                                                                       \
120
      *(.rel.data)                                                          \
121
      *(.rel.data.*)                                                        \
122
      *(.rel.gnu.linkonce.d*)                                               \
123
    } > _region_                                                            \
124
  .rela.data     :                                                          \
125
    {                                                                       \
126
      *(.rela.data)                                                         \
127
      *(.rela.data.*)                                                       \
128
      *(.rela.gnu.linkonce.d*)                                              \
129
    } > _region_                                                            \
130
  .rel.rodata    :                                                          \
131
    {                                                                       \
132
      *(.rel.rodata)                                                        \
133
      *(.rel.rodata.*)                                                      \
134
      *(.rel.gnu.linkonce.r*)                                               \
135
    } > _region_                                                            \
136
  .rela.rodata   :                                                          \
137
    {                                                                       \
138
      *(.rela.rodata)                                                       \
139
      *(.rela.rodata.*)                                                     \
140
      *(.rela.gnu.linkonce.r*)                                              \
141
    } > _region_                                                            \
142
  .rel.got       :   { *(.rel.got)    } > _region_                          \
143
  .rela.got      :   { *(.rela.got)   } > _region_                          \
144
  .rel.ctors     :   { *(.rel.ctors)  } > _region_                          \
145
  .rela.ctors    :   { *(.rela.ctors) } > _region_                          \
146
  .rel.dtors     :   { *(.rel.dtors)  } > _region_                          \
147
  .rela.dtors    :   { *(.rela.dtors) } > _region_                          \
148
  .rel.init      :   { *(.rel.init)   } > _region_                          \
149
  .rela.init     :   { *(.rela.init)  } > _region_                          \
150
  .rel.fini      :   { *(.rel.fini)   } > _region_                          \
151
  .rela.fini     :   { *(.rela.fini)  } > _region_                          \
152
  .rel.bss       :   { *(.rel.bss)    } > _region_                          \
153
  .rela.bss      :   { *(.rela.bss)   } > _region_                          \
154
  .rel.plt       :   { *(.rel.plt)    } > _region_                          \
155
  .rela.plt      :   { *(.rela.plt)   } > _region_                          \
156
  .rel.dyn       :   { *(.rel.dyn)    } > _region_
157
 
158
#define SECTION_init(_region_, _vma_, _lma_)   \
159
  .init _vma_ : _lma_                          \
160
    {                                          \
161
      FORCE_OUTPUT; KEEP (*(.init))            \
162
    } > _region_ =0
163
 
164
#define SECTION_text(_region_, _vma_, _lma_)   \
165
  .text _vma_ : _lma_                          \
166
    {                                          \
167
      _stext = .; _ftext = . ;                 \
168
      *(.text)                                 \
169
      *(.text.*)                               \
170
      *(.stub)                                 \
171
      *(.gnu.warning)                          \
172
      *(.gnu.linkonce.t*)                      \
173
      *(.mips16.fn.*) *(.mips16.call.*)        \
174
    } > _region_ =0                            \
175
  _etext = .; PROVIDE (etext = .);
176
 
177
#define SECTION_fini(_region_, _vma_, _lma_)   \
178
  .fini _vma_ : _lma_                          \
179
    {                                          \
180
      FORCE_OUTPUT; KEEP (*(.fini))                   \
181
    } > _region_ =0
182
 
183
#define SECTION_rodata(_region_, _vma_, _lma_)        \
184
  .rodata _vma_ : _lma_                               \
185
    {                                                 \
186
      FORCE_OUTPUT; *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*)    \
187
    } > _region_
188
 
189
#define SECTION_rodata1(_region_, _vma_, _lma_)       \
190
  .rodata1 _vma_ : _lma_                              \
191
    {                                                 \
192
     FORCE_OUTPUT; *(.rodata1) *(.rodata1.*)          \
193
    } > _region_
194
 
195
#define SECTION_vsr_table(_region_, _vma_, _lma_)     \
196
  .vsr_table _vma_ : _lma_                            \
197
    {                                                 \
198
      FORCE_OUTPUT; *(.vsr_table)                     \
199
    } > _region_
200
 
201
#define SECTION_data(_region_, _vma_, _lma_)          \
202
  .data _vma_ : _lma_                                 \
203
    {                                                 \
204
      __ram_data_start = ABSOLUTE (.); _fdata = . ;   \
205
      *(.data) *(.data.*) *(.gnu.linkonce.d*)         \
206
      *( .2ram.*)                                     \
207
    . = ALIGN (8);                                    \
208
    SORT(CONSTRUCTORS)                                \
209
    } > _region_                                      \
210
    __rom_data_start = LOADADDR(.data);
211
 
212
#define SECTION_data1(_region_, _vma_, _lma_)         \
213
  .data1 _vma_ : _lma_                                \
214
    {                                                 \
215
       FORCE_OUTPUT; *(.data1) *(.data1.*)            \
216
    } > _region_
217
 
218
#define SECTION_eh_frame(_region_, _vma_, _lma_)      \
219
  .eh_frame _vma_ : _lma_                             \
220
    {                                                 \
221
       FORCE_OUTPUT; *(.eh_frame)                     \
222
    } > _region_
223
 
224
#define SECTION_gcc_except_table(_region_, _vma_, _lma_) \
225
  .gcc_except_table _vma_ : _lma_                        \
226
    {                                                    \
227
      FORCE_OUTPUT;                                      \
228
      KEEP(*(.gcc_except_table))                         \
229
      *(.gcc_except_table.*)                             \
230
    } > _region_
231
 
232
 
233
/* FIXME: We shouldn't need to define __CTOR_LIST__/__CTOR_END__
234
   and __DTOR_LIST__/__DTOR_END__ except by the PROVIDE lines.
235
   However this doesn't work for old (99r1-era) toolchains, so
236
   leave it for now. */
237
 
238
/* The KEEP(*_ctors.o(.ctors)) rule is included to prevent
239
   constructors from libgcc.a from turning up in the image.
240
   They are NULL anyway. */
241
 
242
#define SECTION_ctors(_region_, _vma_, _lma_)     \
243
  .ctors _vma_ : _lma_                            \
244
    {                                             \
245
      FORCE_OUTPUT;                               \
246
      KEEP (*crtbegin.o(.ctors))                  \
247
      KEEP (*_ctors.o(.ctors))                  \
248
      __CTOR_LIST__ = .;                \
249
      PROVIDE (__CTOR_LIST__ = .);                \
250
      KEEP (*(.ctors));                      \
251
      KEEP (*(SORT(.ctors.*)))                    \
252
      __CTOR_END__ = .;                 \
253
      PROVIDE (__CTOR_END__ = .);                 \
254
    } > _region_
255
 
256
#define SECTION_dtors(_region_, _vma_, _lma_)     \
257
  .dtors _vma_ : _lma_                            \
258
    {                                             \
259
      FORCE_OUTPUT;                               \
260
      KEEP (*crtbegin.o(.dtors))                  \
261
      __DTOR_LIST__ = .;                \
262
      PROVIDE (__DTOR_LIST__ = .);                \
263
      KEEP (*(SORT(.dtors.*)))                    \
264
      __DTOR_END__ = .;                 \
265
      KEEP (*(.dtors));                      \
266
      PROVIDE (__DTOR_END__ = .);                 \
267
    } > _region_
268
 
269
#define SECTION_devtab(_region_, _vma_, _lma_)    \
270
  .devtab _vma_ : _lma_                           \
271
    {                                             \
272
      FORCE_OUTPUT;                               \
273
      KEEP(*( SORT (.ecos.table.*))) ;            \
274
    } > _region_
275
 
276
#define SECTION_got(_region_, _vma_, _lma_)     \
277
  _gp = ALIGN(16) + 0x7ff0;                     \
278
  .got _vma_ : _lma_                            \
279
    {                                           \
280
      FORCE_OUTPUT; *(.got.plt) *(.got)         \
281
    } > _region_
282
 
283
#define SECTION_dynamic(_region_, _vma_, _lma_) \
284
  .dynamic _vma_ : _lma_                        \
285
    {                                           \
286
      FORCE_OUTPUT; *(.dynamic)                 \
287
    } > _region_
288
 
289
  /* We want the small data sections together, so single-instruction offsets
290
     can access them all, and initialized data all before uninitialized, so
291
     we can shorten the on-disk segment size.  */
292
 
293
#define SECTION_sdata(_region_, _vma_, _lma_)                 \
294
  .sdata _vma_ : _lma_                                        \
295
    {                                                         \
296
      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*) \
297
    } > _region_
298
 
299
#define SECTION_lit8(_region_, _vma_, _lma_)    \
300
  .lit8 _vma_ : _lma_                           \
301
    {                                           \
302
      FORCE_OUTPUT; *(.lit8)                    \
303
    } > _region_
304
 
305
#define SECTION_lit4(_region_, _vma_, _lma_)    \
306
  .lit4 : FOLLOWING(.lit8)                      \
307
    {                                           \
308
      FORCE_OUTPUT; *(.lit4)                    \
309
    } > _region_                                \
310
  __ram_data_end = .; _edata = . ;              \
311
  PROVIDE (edata = .);
312
 
313
#define SECTION_sbss(_region_, _vma_, _lma_)                    \
314
  __bss_start = .; _fbss = .;                                   \
315
  .sbss _vma_ : _lma_                                           \
316
    {                                                           \
317
      FORCE_OUTPUT; *(.dynsbss) *(.sbss) *(.sbss.*) *(.scommon) \
318
    } > _region_
319
 
320
#define SECTION_bss(_region_, _vma_, _lma_)       \
321
  .bss _vma_ : _lma_                              \
322
    {                                             \
323
      *(.dynbss) *(.bss) *(.bss.*) *(COMMON)      \
324
    } > _region_                                  \
325
  __bss_end = .;
326
 
327
/* The /DISCARD/ section ensures that the output will not contain a
328
 * .mdebug section as it confuses GDB. This is a workaround for CR 100804.
329
 */
330
 
331
#define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); \
332
  /* Stabs debugging sections.  */                              \
333
  .stab          0 : { *(.stab) }                               \
334
  .stabstr       0 : { *(.stabstr) }                            \
335
  .stab.excl     0 : { *(.stab.excl) }                          \
336
  .stab.exclstr  0 : { *(.stab.exclstr) }                       \
337
  .stab.index    0 : { *(.stab.index) }                         \
338
  .stab.indexstr 0 : { *(.stab.indexstr) }                      \
339
  .comment       0 : { *(.comment) }                            \
340
  /* DWARF debug sections.                                      \
341
     Symbols in the DWARF debugging sections are relative to    \
342
     the beginning of the section so we begin them at 0.  */    \
343
  /* DWARF 1 */                                                 \
344
  .debug          0 : { *(.debug) }                             \
345
  .line           0 : { *(.line) }                              \
346
  /* GNU DWARF 1 extensions */                                  \
347
  .debug_srcinfo  0 : { *(.debug_srcinfo) }                     \
348
  .debug_sfnames  0 : { *(.debug_sfnames) }                     \
349
  /* DWARF 1.1 and DWARF 2 */                                   \
350
  .debug_aranges  0 : { *(.debug_aranges) }                     \
351
  .debug_pubnames 0 : { *(.debug_pubnames) }                    \
352
  /* DWARF 2 */                                                 \
353
  .debug_info     0 : { *(.debug_info) }                        \
354
  .debug_abbrev   0 : { *(.debug_abbrev) }                      \
355
  .debug_line     0 : { *(.debug_line) }                        \
356
  .debug_frame    0 : { *(.debug_frame) }                       \
357
  .debug_str      0 : { *(.debug_str) }                         \
358
  .debug_loc      0 : { *(.debug_loc) }                         \
359
  .debug_macinfo  0 : { *(.debug_macinfo) }                     \
360
  /* SGI/MIPS DWARF 2 extensions */                             \
361
  .debug_weaknames 0 : { *(.debug_weaknames) }                  \
362
  .debug_funcnames 0 : { *(.debug_funcnames) }                  \
363
  .debug_typenames 0 : { *(.debug_typenames) }                  \
364
  .debug_varnames  0 : { *(.debug_varnames) }                   \
365
  /* These must appear regardless of  .  */                     \
366
  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }             \
367
  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }                \
368
  /DISCARD/        0 : { *(.mdebug) }
369
 
370
#include CYGHWR_MEMORY_LAYOUT_LDI
371
 
372
// 0-0x200 reserved for vectors
373
hal_vsr_table = 0x80000200;
374
hal_virtual_vector_table = 0x80000300;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.