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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [mips/] [mips64/] [current/] [src/] [mips_mips64.ld] - Blame information for rev 868

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 MIPS64
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:isa64)
46
 
47
STARTUP(vectors.o)
48
ENTRY(reset_vector)
49
#ifdef 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 MIPS64
60
 * ROM mlt files have alignment 8, when some should have alignment 4
61
 * (902557-CR)
62
 */
63
#define ALIGN_LMA 0x40
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(0x200); KEEP (*(.utlb_vector)) \
89
    . = . + 0x100; \
90
    . = ALIGN(0x80); KEEP(*(.other_vector)) \
91
    . = . + 0x80; \
92
    . = ALIGN(0x80); KEEP(*(.debug_vector)) } \
93
    > _region_
94
 
95
#endif /* ROM startup version of ROM vectors */
96
 
97
#define SECTION_ROMISC(_region_, _vma_, _lma_)                                 \
98
  .interp _vma_  : _lma_ { *(.interp)                            } > _region_  \
99
  .hash          : FOLLOWING(.interp)        { *(.hash)          } > _region_  \
100
  .dynsym        : FOLLOWING(.hash)          { *(.dynsym)        } > _region_  \
101
  .dynstr        : FOLLOWING(.dynsym)        { *(.dynstr)        } > _region_  \
102
  .gnu.version   : FOLLOWING(.dynstr)        { *(.gnu.version)   } > _region_  \
103
  .gnu.version_d : FOLLOWING(.gnu.version)   { *(.gnu.version_d) } > _region_  \
104
  .gnu.version_r : FOLLOWING(.gnu.version_d) { *(.gnu.version_r) } > _region_  \
105
  .plt           : FOLLOWING(.gnu.version_r) { *(.plt)           } > _region_
106
 
107
#define SECTION_RELOCS(_region_, _vma_, _lma_)                              \
108
  .rel.text      :                                                          \
109
    {                                                                       \
110
      *(.rel.text)                                                          \
111
      *(.rel.text.*)                                                        \
112
      *(.rel.gnu.linkonce.t*)                                               \
113
    } > _region_                                                            \
114
  .rela.text     :                                                          \
115
    {                                                                       \
116
      *(.rela.text)                                                         \
117
      *(.rela.text.*)                                                       \
118
      *(.rela.gnu.linkonce.t*)                                              \
119
    } > _region_                                                            \
120
  .rel.data      :                                                          \
121
    {                                                                       \
122
      *(.rel.data)                                                          \
123
      *(.rel.data.*)                                                        \
124
      *(.rel.gnu.linkonce.d*)                                               \
125
    } > _region_                                                            \
126
  .rela.data     :                                                          \
127
    {                                                                       \
128
      *(.rela.data)                                                         \
129
      *(.rela.data.*)                                                       \
130
      *(.rela.gnu.linkonce.d*)                                              \
131
    } > _region_                                                            \
132
  .rel.rodata    :                                                          \
133
    {                                                                       \
134
      *(.rel.rodata)                                                        \
135
      *(.rel.rodata.*)                                                      \
136
      *(.rel.gnu.linkonce.r*)                                               \
137
    } > _region_                                                            \
138
  .rela.rodata   :                                                          \
139
    {                                                                       \
140
      *(.rela.rodata)                                                       \
141
      *(.rela.rodata.*)                                                     \
142
      *(.rela.gnu.linkonce.r*)                                              \
143
    } > _region_                                                            \
144
  .rel.got       :   { *(.rel.got)    } > _region_                          \
145
  .rela.got      :   { *(.rela.got)   } > _region_                          \
146
  .rel.ctors     :   { *(.rel.ctors)  } > _region_                          \
147
  .rela.ctors    :   { *(.rela.ctors) } > _region_                          \
148
  .rel.dtors     :   { *(.rel.dtors)  } > _region_                          \
149
  .rela.dtors    :   { *(.rela.dtors) } > _region_                          \
150
  .rel.init      :   { *(.rel.init)   } > _region_                          \
151
  .rela.init     :   { *(.rela.init)  } > _region_                          \
152
  .rel.fini      :   { *(.rel.fini)   } > _region_                          \
153
  .rela.fini     :   { *(.rela.fini)  } > _region_                          \
154
  .rel.bss       :   { *(.rel.bss)    } > _region_                          \
155
  .rela.bss      :   { *(.rela.bss)   } > _region_                          \
156
  .rel.plt       :   { *(.rel.plt)    } > _region_                          \
157
  .rela.plt      :   { *(.rela.plt)   } > _region_                          \
158
  .rel.dyn       :   { *(.rel.dyn)    } > _region_
159
 
160
#define SECTION_init(_region_, _vma_, _lma_)   \
161
  .init _vma_ : _lma_                          \
162
    {                                          \
163
      FORCE_OUTPUT; KEEP (*(.init))            \
164
    } > _region_ =0
165
 
166
#define SECTION_text(_region_, _vma_, _lma_)   \
167
  .text _vma_ : _lma_                          \
168
    {                                          \
169
      _stext = .; _ftext = . ;                 \
170
      *(.text)                                 \
171
      *(.text.*)                               \
172
      *(.stub)                                 \
173
      *(.gnu.warning)                          \
174
      *(.gnu.linkonce.t*)                      \
175
      *(.mips16.fn.*) *(.mips16.call.*)        \
176
    } > _region_ =0                            \
177
  _etext = .; PROVIDE (etext = .);
178
 
179
#define SECTION_fini(_region_, _vma_, _lma_)   \
180
  .fini _vma_ : _lma_                          \
181
    {                                          \
182
      FORCE_OUTPUT; KEEP (*(.fini))                   \
183
    } > _region_ =0
184
 
185
#define SECTION_rodata(_region_, _vma_, _lma_)        \
186
  .rodata _vma_ : _lma_                               \
187
    {                                                 \
188
      FORCE_OUTPUT; *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*)    \
189
    } > _region_
190
 
191
#define SECTION_rodata1(_region_, _vma_, _lma_)       \
192
  .rodata1 _vma_ : _lma_                              \
193
    {                                                 \
194
     FORCE_OUTPUT; *(.rodata1) *(.rodata1.*)          \
195
    } > _region_
196
 
197
#define SECTION_vsr_table(_region_, _vma_, _lma_)     \
198
  .vsr_table _vma_ : _lma_                            \
199
    {                                                 \
200
      FORCE_OUTPUT; *(.vsr_table)                     \
201
    } > _region_
202
 
203
#define SECTION_data(_region_, _vma_, _lma_)          \
204
  .data _vma_ : _lma_                                 \
205
    {                                                 \
206
      __ram_data_start = ABSOLUTE (.); _fdata = . ;   \
207
      *(.data) *(.data.*) *(.gnu.linkonce.d*)         \
208
      *( .2ram.*)                                     \
209
    . = ALIGN (8);                                    \
210
    SORT(CONSTRUCTORS)                                \
211
    } > _region_                                      \
212
    __rom_data_start = LOADADDR(.data);
213
 
214
#define SECTION_data1(_region_, _vma_, _lma_)         \
215
  .data1 _vma_ : _lma_                                \
216
    {                                                 \
217
       FORCE_OUTPUT; *(.data1) *(.data1.*)            \
218
    } > _region_
219
 
220
#define SECTION_eh_frame(_region_, _vma_, _lma_)      \
221
  .eh_frame _vma_ : _lma_                             \
222
    {                                                 \
223
       FORCE_OUTPUT; *(.eh_frame)                     \
224
    } > _region_
225
 
226
#define SECTION_gcc_except_table(_region_, _vma_, _lma_) \
227
  .gcc_except_table _vma_ : _lma_                        \
228
    {                                                    \
229
      FORCE_OUTPUT; *(.gcc_except_table)                 \
230
    } > _region_
231
 
232
 
233
    /* gcc uses crtbegin.o to find the start of
234
       the constructors, so we make sure it is
235
       first.  Because this is a wildcard, it
236
       doesn't matter if the user does not
237
       actually link against crtbegin.o; the
238
       linker won't look for a file to match a
239
       wildcard.  The wildcard also means that it
240
       doesn't matter which directory crtbegin.o
241
       is in.  */
242
 
243
    /* We don't want to include the .ctors section from
244
       the crtend.o file until after the sorted ctors.
245
       The .ctor section from the crtend file contains the
246
       end of ctors marker and it must be last */
247
 
248
/* FIXME: We shouldn't need to define __CTOR_LIST__/__CTOR_END__
249
   and __DTOR_LIST__/__DTOR_END__ except by the PROVIDE lines.
250
   However this doesn't work for old (99r1-era) toolchains, so
251
   leave it for now. */
252
 
253
#define SECTION_ctors(_region_, _vma_, _lma_)     \
254
  .ctors _vma_ : _lma_                            \
255
    {                                             \
256
      FORCE_OUTPUT;                               \
257
      KEEP (*crtbegin.o(.ctors))                  \
258
      __CTOR_LIST__ = .;                \
259
      PROVIDE (__CTOR_LIST__ = .);                \
260
      KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))   \
261
      KEEP (*(SORT(.ctors.*)))                    \
262
      KEEP (*(.ctors))                            \
263
      __CTOR_END__ = .;                 \
264
      PROVIDE (__CTOR_END__ = .);                 \
265
    } > _region_
266
 
267
#define SECTION_dtors(_region_, _vma_, _lma_)     \
268
  .dtors _vma_ : _lma_                            \
269
    {                                             \
270
      FORCE_OUTPUT;                               \
271
      KEEP (*crtbegin.o(.dtors))                  \
272
      __DTOR_LIST__ = .;                \
273
      PROVIDE (__DTOR_LIST__ = .);                \
274
      KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))   \
275
      KEEP (*(SORT(.dtors.*)))                    \
276
      KEEP (*(.dtors))                            \
277
      __DTOR_END__ = .;                 \
278
      PROVIDE (__DTOR_END__ = .);                 \
279
    } > _region_
280
 
281
#define SECTION_devtab(_region_, _vma_, _lma_)    \
282
  .devtab _vma_ : _lma_                           \
283
    {                                             \
284
      FORCE_OUTPUT;                               \
285
      KEEP(*( SORT (.ecos.table.*))) ;            \
286
    } > _region_
287
 
288
#define SECTION_got(_region_, _vma_, _lma_)     \
289
  _gp = ALIGN(16) + 0x7ff0;                     \
290
  .got _vma_ : _lma_                            \
291
    {                                           \
292
      FORCE_OUTPUT; *(.got.plt) *(.got)         \
293
    } > _region_
294
 
295
#define SECTION_dynamic(_region_, _vma_, _lma_) \
296
  .dynamic _vma_ : _lma_                        \
297
    {                                           \
298
      FORCE_OUTPUT; *(.dynamic)                 \
299
    } > _region_
300
 
301
  /* We want the small data sections together, so single-instruction offsets
302
     can access them all, and initialized data all before uninitialized, so
303
     we can shorten the on-disk segment size.  */
304
 
305
#define SECTION_sdata(_region_, _vma_, _lma_)                 \
306
  .sdata _vma_ : _lma_                                        \
307
    {                                                         \
308
      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*) \
309
    } > _region_
310
 
311
#define SECTION_lit8(_region_, _vma_, _lma_)    \
312
  .lit8 _vma_ : _lma_                           \
313
    {                                           \
314
      FORCE_OUTPUT; *(.lit8)                    \
315
    } > _region_
316
 
317
#define SECTION_lit4(_region_, _vma_, _lma_)    \
318
  .lit4 : FOLLOWING(.lit8)                      \
319
    {                                           \
320
      FORCE_OUTPUT; *(.lit4)                    \
321
    } > _region_                                \
322
  __ram_data_end = .; _edata = . ;              \
323
  PROVIDE (edata = .);
324
 
325
#define SECTION_sbss(_region_, _vma_, _lma_)                    \
326
  __bss_start = .; _fbss = .;                                   \
327
  .sbss _vma_ : _lma_                                           \
328
    {                                                           \
329
      FORCE_OUTPUT; *(.dynsbss) *(.sbss) *(.sbss.*) *(.scommon) \
330
    } > _region_
331
 
332
#define SECTION_bss(_region_, _vma_, _lma_)       \
333
  .bss _vma_ : _lma_                              \
334
    {                                             \
335
      *(.dynbss) *(.bss) *(.bss.*) *(COMMON)      \
336
    } > _region_                                  \
337
  __bss_end = .;
338
 
339
/* The /DISCARD/ section ensures that the output will not contain a
340
 * .mdebug section as it confuses GDB. This is a workaround for CR 100804.
341
 */
342
 
343
#define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); \
344
  /* Stabs debugging sections.  */                              \
345
  .stab          0 : { *(.stab) }                               \
346
  .stabstr       0 : { *(.stabstr) }                            \
347
  .stab.excl     0 : { *(.stab.excl) }                          \
348
  .stab.exclstr  0 : { *(.stab.exclstr) }                       \
349
  .stab.index    0 : { *(.stab.index) }                         \
350
  .stab.indexstr 0 : { *(.stab.indexstr) }                      \
351
  .comment       0 : { *(.comment) }                            \
352
  /* DWARF debug sections.                                      \
353
     Symbols in the DWARF debugging sections are relative to    \
354
     the beginning of the section so we begin them at 0.  */    \
355
  /* DWARF 1 */                                                 \
356
  .debug          0 : { *(.debug) }                             \
357
  .line           0 : { *(.line) }                              \
358
  /* GNU DWARF 1 extensions */                                  \
359
  .debug_srcinfo  0 : { *(.debug_srcinfo) }                     \
360
  .debug_sfnames  0 : { *(.debug_sfnames) }                     \
361
  /* DWARF 1.1 and DWARF 2 */                                   \
362
  .debug_aranges  0 : { *(.debug_aranges) }                     \
363
  .debug_pubnames 0 : { *(.debug_pubnames) }                    \
364
  /* DWARF 2 */                                                 \
365
  .debug_info     0 : { *(.debug_info) }                        \
366
  .debug_abbrev   0 : { *(.debug_abbrev) }                      \
367
  .debug_line     0 : { *(.debug_line) }                        \
368
  .debug_frame    0 : { *(.debug_frame) }                       \
369
  .debug_str      0 : { *(.debug_str) }                         \
370
  .debug_loc      0 : { *(.debug_loc) }                         \
371
  .debug_macinfo  0 : { *(.debug_macinfo) }                     \
372
  /* SGI/MIPS DWARF 2 extensions */                             \
373
  .debug_weaknames 0 : { *(.debug_weaknames) }                  \
374
  .debug_funcnames 0 : { *(.debug_funcnames) }                  \
375
  .debug_typenames 0 : { *(.debug_typenames) }                  \
376
  .debug_varnames  0 : { *(.debug_varnames) }                   \
377
  /* These must appear regardless of  .  */                     \
378
  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }             \
379
  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }                \
380
  /DISCARD/        0 : { *(.mdebug) }
381
 
382
#include CYGHWR_MEMORY_LAYOUT_LDI
383
 
384
hal_vsr_table = 0x80000200;
385
hal_virtual_vector_table = 0x80000300;

powered by: WebSVN 2.1.0

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