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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [hal/] [mips/] [tx39/] [v2_0/] [src/] [mips_tx39.ld] - Blame information for rev 174

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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