OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.20.1/] [ld/] [scripttempl/] [elf.sc] - Blame information for rev 252

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

Line No. Rev Author Line
1 205 julius
#
2
# Unusual variables checked by this code:
3
#       NOP - four byte opcode for no-op (defaults to 0)
4
#       NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
5
#               empty.
6
#       SMALL_DATA_CTOR - .ctors contains small data.
7
#       SMALL_DATA_DTOR - .dtors contains small data.
8
#       DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
9
#       INITIAL_READONLY_SECTIONS - at start of text segment
10
#       OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
11
#               (e.g., .PARISC.milli)
12
#       OTHER_TEXT_SECTIONS - these get put in .text when relocating
13
#       OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
14
#               (e.g., .PARISC.global)
15
#       OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
16
#               (e.g. PPC32 .fixup, .got[12])
17
#       OTHER_BSS_SECTIONS - other than .bss .sbss ...
18
#       ATTRS_SECTIONS - at the end
19
#       OTHER_SECTIONS - at the end
20
#       EXECUTABLE_SYMBOLS - symbols that must be defined for an
21
#               executable (e.g., _DYNAMIC_LINK)
22
#       TEXT_START_ADDR - the first byte of the text segment, after any
23
#               headers.
24
#       TEXT_BASE_ADDRESS - the first byte of the text segment.
25
#       TEXT_START_SYMBOLS - symbols that appear at the start of the
26
#               .text section.
27
#       DATA_START_SYMBOLS - symbols that appear at the start of the
28
#               .data section.
29
#       DATA_END_SYMBOLS - symbols that appear at the end of the
30
#               writeable data sections.
31
#       OTHER_GOT_SYMBOLS - symbols defined just before .got.
32
#       OTHER_GOT_SECTIONS - sections just after .got.
33
#       OTHER_SDATA_SECTIONS - sections just after .sdata.
34
#       OTHER_BSS_SYMBOLS - symbols that appear at the start of the
35
#               .bss section besides __bss_start.
36
#       DATA_PLT - .plt should be in data segment, not text segment.
37
#       PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
38
#       BSS_PLT - .plt should be in bss segment
39
#       NO_REL_RELOCS - Don't include .rel.* sections in script
40
#       NO_RELA_RELOCS - Don't include .rela.* sections in script
41
#       NON_ALLOC_DYN - Place dynamic sections after data segment.
42
#       TEXT_DYNAMIC - .dynamic in text segment, not data segment.
43
#       EMBEDDED - whether this is for an embedded system.
44
#       SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
45
#               start address of shared library.
46
#       INPUT_FILES - INPUT command of files to always include
47
#       WRITABLE_RODATA - if set, the .rodata section should be writable
48
#       INIT_START, INIT_END -  statements just before and just after
49
#       combination of .init sections.
50
#       FINI_START, FINI_END - statements just before and just after
51
#       combination of .fini sections.
52
#       STACK_ADDR - start of a .stack section.
53
#       OTHER_SYMBOLS - symbols to place right at the end of the script.
54
#       ETEXT_NAME - name of a symbol for the end of the text section,
55
#               normally etext.
56
#       SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
57
#               so that .got can be in the RELRO area.  It should be set to
58
#               the number of bytes in the beginning of .got.plt which can be
59
#               in the RELRO area as well.
60
#       USER_LABEL_PREFIX - prefix to add to user-visible symbols.
61
#
62
# When adding sections, do note that the names of some sections are used
63
# when specifying the start address of the next.
64
#
65
 
66
#  Many sections come in three flavours.  There is the 'real' section,
67
#  like ".data".  Then there are the per-procedure or per-variable
68
#  sections, generated by -ffunction-sections and -fdata-sections in GCC,
69
#  and useful for --gc-sections, which for a variable "foo" might be
70
#  ".data.foo".  Then there are the linkonce sections, for which the linker
71
#  eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
72
#  The exact correspondences are:
73
#
74
#  Section      Linkonce section
75
#  .text        .gnu.linkonce.t.foo
76
#  .rodata      .gnu.linkonce.r.foo
77
#  .data        .gnu.linkonce.d.foo
78
#  .bss         .gnu.linkonce.b.foo
79
#  .sdata       .gnu.linkonce.s.foo
80
#  .sbss        .gnu.linkonce.sb.foo
81
#  .sdata2      .gnu.linkonce.s2.foo
82
#  .sbss2       .gnu.linkonce.sb2.foo
83
#  .debug_info  .gnu.linkonce.wi.foo
84
#  .tdata       .gnu.linkonce.td.foo
85
#  .tbss        .gnu.linkonce.tb.foo
86
#  .lrodata     .gnu.linkonce.lr.foo
87
#  .ldata       .gnu.linkonce.l.foo
88
#  .lbss        .gnu.linkonce.lb.foo
89
#
90
#  Each of these can also have corresponding .rel.* and .rela.* sections.
91
 
92
test -z "$ENTRY" && ENTRY=${USER_LABEL_PREFIX}_start
93
test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
94
test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
95
if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
96
test -z "${ELFSIZE}" && ELFSIZE=32
97
test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
98
test "$LD_FLAG" = "N" && DATA_ADDR=.
99
test -z "${ETEXT_NAME}" && ETEXT_NAME=${USER_LABEL_PREFIX}etext
100
test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
101
test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
102
test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
103
test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
104
DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
105
DATA_SEGMENT_RELRO_END=""
106
DATA_SEGMENT_END=""
107
if test -n "${COMMONPAGESIZE}"; then
108
  DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
109
  DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
110
  DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
111
fi
112
if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
113
  INITIAL_READONLY_SECTIONS=".interp       ${RELOCATING-0} : { *(.interp) }"
114
fi
115
if test -z "$PLT"; then
116
  IPLT=".iplt         ${RELOCATING-0} : { *(.iplt) }"
117
  PLT=".plt          ${RELOCATING-0} : { *(.plt)${IREL_IN_PLT+ *(.iplt)} }
118
  ${IREL_IN_PLT-$IPLT}"
119
fi
120
test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
121
if test -z "$GOT"; then
122
  if test -z "$SEPARATE_GOTPLT"; then
123
    GOT=".got          ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }"
124
  else
125
    GOT=".got          ${RELOCATING-0} : { *(.got) *(.igot) }"
126
    GOTPLT=".got.plt      ${RELOCATING-0} : { *(.got.plt)  *(.igot.plt) }"
127
  fi
128
fi
129
REL_IFUNC=".rel.ifunc    ${RELOCATING-0} : { *(.rel.ifunc) }"
130
RELA_IFUNC=".rela.ifunc   ${RELOCATING-0} : { *(.rela.ifunc) }"
131
REL_IPLT=".rel.iplt     ${RELOCATING-0} :
132
    {
133
      ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}
134
      *(.rel.iplt)
135
      ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}
136
    }"
137
RELA_IPLT=".rela.iplt    ${RELOCATING-0} :
138
    {
139
      ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}
140
      *(.rela.iplt)
141
      ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}
142
    }"
143
DYNAMIC=".dynamic      ${RELOCATING-0} : { *(.dynamic) }"
144
RODATA=".rodata       ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
145
DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }"
146
DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
147
if test -z "${NO_SMALL_DATA}"; then
148
  SBSS=".sbss         ${RELOCATING-0} :
149
  {
150
    ${RELOCATING+${SBSS_START_SYMBOLS}}
151
    ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
152
    *(.dynsbss)
153
    *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
154
    *(.scommon)
155
    ${RELOCATING+${SBSS_END_SYMBOLS}}
156
  }"
157
  SBSS2=".sbss2        ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
158
  SDATA="/* We want the small data sections together, so single-instruction offsets
159
     can access them all, and initialized data all before uninitialized, so
160
     we can shorten the on-disk segment size.  */
161
  .sdata        ${RELOCATING-0} :
162
  {
163
    ${RELOCATING+${SDATA_START_SYMBOLS}}
164
    ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
165
    *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
166
  }"
167
  SDATA2=".sdata2       ${RELOCATING-0} :
168
  {
169
    ${RELOCATING+${SDATA2_START_SYMBOLS}}
170
    *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*})
171
  }"
172
  REL_SDATA=".rel.sdata    ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
173
  .rela.sdata   ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
174
  REL_SBSS=".rel.sbss     ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
175
  .rela.sbss    ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
176
  REL_SDATA2=".rel.sdata2   ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
177
  .rela.sdata2  ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
178
  REL_SBSS2=".rel.sbss2    ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
179
  .rela.sbss2   ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
180
else
181
  NO_SMALL_DATA=" "
182
fi
183
if test -z "${DATA_GOT}"; then
184
  if test -n "${NO_SMALL_DATA}"; then
185
    DATA_GOT=" "
186
  fi
187
fi
188
if test -z "${SDATA_GOT}"; then
189
  if test -z "${NO_SMALL_DATA}"; then
190
    SDATA_GOT=" "
191
  fi
192
fi
193
test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
194
test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
195
  .rel.ldata    ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
196
  .rela.ldata   ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
197
  .rel.lbss     ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
198
  .rela.lbss    ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
199
  .rel.lrodata  ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
200
  .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
201
test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
202
  ${OTHER_BSS_SECTIONS}
203
  .lbss ${RELOCATING-0} :
204
  {
205
    *(.dynlbss)
206
    *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
207
    *(LARGE_COMMON)
208
  }"
209
test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
210
  .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
211
  {
212
    *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
213
  }
214
  .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
215
  {
216
    *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
217
    ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
218
  }"
219
CTOR=".ctors        ${CONSTRUCTING-0} :
220
  {
221
    ${CONSTRUCTING+${CTOR_START}}
222
    /* gcc uses crtbegin.o to find the start of
223
       the constructors, so we make sure it is
224
       first.  Because this is a wildcard, it
225
       doesn't matter if the user does not
226
       actually link against crtbegin.o; the
227
       linker won't look for a file to match a
228
       wildcard.  The wildcard also means that it
229
       doesn't matter which directory crtbegin.o
230
       is in.  */
231
 
232
    KEEP (*crtbegin.o(.ctors))
233
    KEEP (*crtbegin?.o(.ctors))
234
 
235
    /* We don't want to include the .ctor section from
236
       the crtend.o file until after the sorted ctors.
237
       The .ctor section from the crtend file contains the
238
       end of ctors marker and it must be last */
239
 
240
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
241
    KEEP (*(SORT(.ctors.*)))
242
    KEEP (*(.ctors))
243
    ${CONSTRUCTING+${CTOR_END}}
244
  }"
245
DTOR=".dtors        ${CONSTRUCTING-0} :
246
  {
247
    ${CONSTRUCTING+${DTOR_START}}
248
    KEEP (*crtbegin.o(.dtors))
249
    KEEP (*crtbegin?.o(.dtors))
250
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
251
    KEEP (*(SORT(.dtors.*)))
252
    KEEP (*(.dtors))
253
    ${CONSTRUCTING+${DTOR_END}}
254
  }"
255
STACK="  .stack        ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
256
  {
257
    ${RELOCATING+${USER_LABEL_PREFIX}_stack = .;}
258
    *(.stack)
259
  }"
260
 
261
TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${TEXT_START_ADDR})"
262
SHLIB_TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${SHLIB_TEXT_START_ADDR:-0})"
263
 
264
# if this is for an embedded system, don't add SIZEOF_HEADERS.
265
if [ -z "$EMBEDDED" ]; then
266
   test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
267
else
268
   test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
269
fi
270
 
271
cat <
272
OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
273
              "${LITTLE_OUTPUT_FORMAT}")
274
OUTPUT_ARCH(${OUTPUT_ARCH})
275
${RELOCATING+ENTRY(${ENTRY})}
276
 
277
${RELOCATING+${LIB_SEARCH_DIRS}}
278
${RELOCATING+${EXECUTABLE_SYMBOLS}}
279
${RELOCATING+${INPUT_FILES}}
280
${RELOCATING- /* For some reason, the Solaris linker makes bad executables
281
  if gld -r is used and the intermediate file has sections starting
282
  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
283
  bug.  But for now assigning the zero vmas works.  */}
284
 
285
SECTIONS
286
{
287
  /* Read-only sections, merged into text segment: */
288
  ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
289
  ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR} + SIZEOF_HEADERS;}}
290
  ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR} + SIZEOF_HEADERS;}}
291
  ${INITIAL_READONLY_SECTIONS}
292
  .note.gnu.build-id : { *(.note.gnu.build-id) }
293
EOF
294
 
295
test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN
296
test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC=
297
cat > ldscripts/dyntmp.$$ <
298
  ${TEXT_DYNAMIC+${DYNAMIC}}
299
  .hash         ${RELOCATING-0} : { *(.hash) }
300
  .gnu.hash     ${RELOCATING-0} : { *(.gnu.hash) }
301
  .dynsym       ${RELOCATING-0} : { *(.dynsym) }
302
  .dynstr       ${RELOCATING-0} : { *(.dynstr) }
303
  .gnu.version  ${RELOCATING-0} : { *(.gnu.version) }
304
  .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
305
  .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
306
EOF
307
 
308
if [ "x$COMBRELOC" = x ]; then
309
  COMBRELOCCAT="cat >> ldscripts/dyntmp.$$"
310
else
311
  COMBRELOCCAT="cat > $COMBRELOC"
312
fi
313
eval $COMBRELOCCAT <
314
  ${INITIAL_RELOC_SECTIONS}
315
  .rel.init     ${RELOCATING-0} : { *(.rel.init) }
316
  .rela.init    ${RELOCATING-0} : { *(.rela.init) }
317
  .rel.text     ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
318
  .rela.text    ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
319
  .rel.fini     ${RELOCATING-0} : { *(.rel.fini) }
320
  .rela.fini    ${RELOCATING-0} : { *(.rela.fini) }
321
  .rel.rodata   ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
322
  .rela.rodata  ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
323
  ${OTHER_READONLY_RELOC_SECTIONS}
324
  .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
325
  .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
326
  .rel.data     ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
327
  .rela.data    ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
328
  .rel.tdata    ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
329
  .rela.tdata   ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
330
  .rel.tbss     ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
331
  .rela.tbss    ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
332
  .rel.ctors    ${RELOCATING-0} : { *(.rel.ctors) }
333
  .rela.ctors   ${RELOCATING-0} : { *(.rela.ctors) }
334
  .rel.dtors    ${RELOCATING-0} : { *(.rel.dtors) }
335
  .rela.dtors   ${RELOCATING-0} : { *(.rela.dtors) }
336
  .rel.got      ${RELOCATING-0} : { *(.rel.got) }
337
  .rela.got     ${RELOCATING-0} : { *(.rela.got) }
338
  ${OTHER_GOT_RELOC_SECTIONS}
339
  ${REL_SDATA}
340
  ${REL_SBSS}
341
  ${REL_SDATA2}
342
  ${REL_SBSS2}
343
  .rel.bss      ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
344
  .rela.bss     ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
345
  ${REL_LARGE}
346
  ${IREL_IN_PLT+$REL_IFUNC}
347
  ${IREL_IN_PLT+$RELA_IFUNC}
348
  ${IREL_IN_PLT-$REL_IPLT}
349
  ${IREL_IN_PLT-$RELA_IPLT}
350
EOF
351
 
352
if [ -n "$COMBRELOC" ]; then
353
cat >> ldscripts/dyntmp.$$ <
354
  .rel.dyn      ${RELOCATING-0} :
355
    {
356
EOF
357
sed -e '/^[     ]*[{}][         ]*$/d;/:[       ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/      \1/' $COMBRELOC >> ldscripts/dyntmp.$$
358
cat >> ldscripts/dyntmp.$$ <
359
    }
360
  .rela.dyn     ${RELOCATING-0} :
361
    {
362
EOF
363
sed -e '/^[     ]*[{}][         ]*$/d;/:[       ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/      \1/' $COMBRELOC >> ldscripts/dyntmp.$$
364
cat >> ldscripts/dyntmp.$$ <
365
    }
366
EOF
367
fi
368
 
369
cat >> ldscripts/dyntmp.$$ <
370
  .rel.plt      ${RELOCATING-0} :
371
    {
372
      *(.rel.plt)
373
      ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}}
374
      ${IREL_IN_PLT+${RELOCATING+*(.rel.iplt)}}
375
      ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}}
376
    }
377
  .rela.plt     ${RELOCATING-0} :
378
    {
379
      *(.rela.plt)
380
      ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}}
381
      ${IREL_IN_PLT+${RELOCATING+*(.rela.iplt)}}
382
      ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}}
383
    }
384
  ${OTHER_PLT_RELOC_SECTIONS}
385
EOF
386
 
387
if test -z "${NON_ALLOC_DYN}"; then
388
  if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
389
    cat ldscripts/dyntmp.$$
390
  else
391
    if test -z "${NO_REL_RELOCS}"; then
392
      sed -e '/^[       ]*\.rela\.[^}]*$/,/}/d' -e '/^[         ]*\.rela\./d' ldscripts/dyntmp.$$
393
    fi
394
    if test -z "${NO_RELA_RELOCS}"; then
395
      sed -e '/^[       ]*\.rel\.[^}]*$/,/}/d' -e '/^[  ]*\.rel\./d' ldscripts/dyntmp.$$
396
    fi
397
  fi
398
  rm -f ldscripts/dyntmp.$$
399
fi
400
 
401
cat <
402
  .init         ${RELOCATING-0} :
403
  {
404
    ${RELOCATING+${INIT_START}}
405
    KEEP (*(.init))
406
    ${RELOCATING+${INIT_END}}
407
  } =${NOP-0}
408
 
409
  ${TEXT_PLT+${PLT}}
410
  ${TINY_READONLY_SECTION}
411
  .text         ${RELOCATING-0} :
412
  {
413
    ${RELOCATING+${TEXT_START_SYMBOLS}}
414
    ${RELOCATING+*(.text.unlikely .text.*_unlikely)}
415
    *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
416
    /* .gnu.warning sections are handled specially by elf32.em.  */
417
    *(.gnu.warning)
418
    ${RELOCATING+${OTHER_TEXT_SECTIONS}}
419
  } =${NOP-0}
420
  .fini         ${RELOCATING-0} :
421
  {
422
    ${RELOCATING+${FINI_START}}
423
    KEEP (*(.fini))
424
    ${RELOCATING+${FINI_END}}
425
  } =${NOP-0}
426
  ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
427
  ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
428
  ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
429
  ${WRITABLE_RODATA-${RODATA}}
430
  .rodata1      ${RELOCATING-0} : { *(.rodata1) }
431
  ${CREATE_SHLIB-${SDATA2}}
432
  ${CREATE_SHLIB-${SBSS2}}
433
  ${OTHER_READONLY_SECTIONS}
434
  .eh_frame_hdr : { *(.eh_frame_hdr) }
435
  .eh_frame     ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
436
  .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
437
 
438
  /* Adjust the address for the data segment.  We want to adjust up to
439
     the same address within the page on the next page up.  */
440
  ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
441
  ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
442
  ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
443
 
444
  /* Exception handling  */
445
  .eh_frame     ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
446
  .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
447
 
448
  /* Thread Local Storage sections  */
449
  .tdata        ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
450
  .tbss         ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
451
 
452
  .preinit_array   ${RELOCATING-0} :
453
  {
454
    ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
455
    KEEP (*(.preinit_array))
456
    ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
457
  }
458
  .init_array   ${RELOCATING-0} :
459
  {
460
     ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
461
     KEEP (*(SORT(.init_array.*)))
462
     KEEP (*(.init_array))
463
     ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
464
  }
465
  .fini_array   ${RELOCATING-0} :
466
  {
467
    ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
468
    KEEP (*(.fini_array))
469
    KEEP (*(SORT(.fini_array.*)))
470
    ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
471
  }
472
  ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
473
  ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
474
  .jcr          ${RELOCATING-0} : { KEEP (*(.jcr)) }
475
 
476
  ${RELOCATING+${DATARELRO}}
477
  ${OTHER_RELRO_SECTIONS}
478
  ${TEXT_DYNAMIC-${DYNAMIC}}
479
  ${DATA_GOT+${RELRO_NOW+${GOT}}}
480
  ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
481
  ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
482
  ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
483
  ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
484
  ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
485
 
486
  ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
487
 
488
  .data         ${RELOCATING-0} :
489
  {
490
    ${RELOCATING+${DATA_START_SYMBOLS}}
491
    *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
492
    ${CONSTRUCTING+SORT(CONSTRUCTORS)}
493
  }
494
  .data1        ${RELOCATING-0} : { *(.data1) }
495
  ${WRITABLE_RODATA+${RODATA}}
496
  ${OTHER_READWRITE_SECTIONS}
497
  ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
498
  ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
499
  ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
500
  ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
501
  ${SDATA_GOT+${GOT}}
502
  ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
503
  ${SDATA}
504
  ${OTHER_SDATA_SECTIONS}
505
  ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
506
  ${RELOCATING+${USER_LABEL_PREFIX}__bss_start = .;}
507
  ${RELOCATING+${OTHER_BSS_SYMBOLS}}
508
  ${SBSS}
509
  ${BSS_PLT+${PLT}}
510
  .bss          ${RELOCATING-0} :
511
  {
512
   *(.dynbss)
513
   *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
514
   *(COMMON)
515
   /* Align here to ensure that the .bss section occupies space up to
516
      _end.  Align after .bss to ensure correct alignment even if the
517
      .bss section disappears because there are no input sections.
518
      FIXME: Why do we need it? When there is no .bss section, we don't
519
      pad the .data section.  */
520
   ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
521
  }
522
  ${OTHER_BSS_SECTIONS}
523
  ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
524
  ${RELOCATING+. = ALIGN(${ALIGNMENT});}
525
  ${LARGE_SECTIONS}
526
  ${RELOCATING+. = ALIGN(${ALIGNMENT});}
527
  ${RELOCATING+${OTHER_END_SYMBOLS}}
528
  ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
529
  ${RELOCATING+${DATA_SEGMENT_END}}
530
EOF
531
 
532
if test -n "${NON_ALLOC_DYN}"; then
533
  if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
534
    cat ldscripts/dyntmp.$$
535
  else
536
    if test -z "${NO_REL_RELOCS}"; then
537
      sed -e '/^[       ]*\.rela\.[^}]*$/,/}/d' -e '/^[         ]*\.rela\./d' ldscripts/dyntmp.$$
538
    fi
539
    if test -z "${NO_RELA_RELOCS}"; then
540
      sed -e '/^[       ]*\.rel\.[^}]*$/,/}/d' -e '/^[  ]*\.rel\./d' ldscripts/dyntmp.$$
541
    fi
542
  fi
543
  rm -f ldscripts/dyntmp.$$
544
fi
545
 
546
cat <
547
  /* Stabs debugging sections.  */
548
  .stab          0 : { *(.stab) }
549
  .stabstr       0 : { *(.stabstr) }
550
  .stab.excl     0 : { *(.stab.excl) }
551
  .stab.exclstr  0 : { *(.stab.exclstr) }
552
  .stab.index    0 : { *(.stab.index) }
553
  .stab.indexstr 0 : { *(.stab.indexstr) }
554
 
555
  .comment       0 : { *(.comment) }
556
 
557
  /* DWARF debug sections.
558
     Symbols in the DWARF debugging sections are relative to the beginning
559
     of the section so we begin them at 0.  */
560
 
561
  /* DWARF 1 */
562
  .debug          0 : { *(.debug) }
563
  .line           0 : { *(.line) }
564
 
565
  /* GNU DWARF 1 extensions */
566
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
567
  .debug_sfnames  0 : { *(.debug_sfnames) }
568
 
569
  /* DWARF 1.1 and DWARF 2 */
570
  .debug_aranges  0 : { *(.debug_aranges) }
571
  .debug_pubnames 0 : { *(.debug_pubnames) }
572
 
573
  /* DWARF 2 */
574
  .debug_info     0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*}) }
575
  .debug_abbrev   0 : { *(.debug_abbrev) }
576
  .debug_line     0 : { *(.debug_line) }
577
  .debug_frame    0 : { *(.debug_frame) }
578
  .debug_str      0 : { *(.debug_str) }
579
  .debug_loc      0 : { *(.debug_loc) }
580
  .debug_macinfo  0 : { *(.debug_macinfo) }
581
 
582
  /* SGI/MIPS DWARF 2 extensions */
583
  .debug_weaknames 0 : { *(.debug_weaknames) }
584
  .debug_funcnames 0 : { *(.debug_funcnames) }
585
  .debug_typenames 0 : { *(.debug_typenames) }
586
  .debug_varnames  0 : { *(.debug_varnames) }
587
 
588
  /* DWARF 3 */
589
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
590
  .debug_ranges   0 : { *(.debug_ranges) }
591
 
592
  ${TINY_DATA_SECTION}
593
  ${TINY_BSS_SECTION}
594
 
595
  ${STACK_ADDR+${STACK}}
596
  ${ATTRS_SECTIONS}
597
  ${OTHER_SECTIONS}
598
  ${RELOCATING+${OTHER_SYMBOLS}}
599
  ${RELOCATING+${DISCARDED}}
600
}
601
EOF

powered by: WebSVN 2.1.0

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