1 # Copyright (C) 2014-2016 Free Software Foundation, Inc.
3 # Copying and distribution of this file, with or without modification,
4 # are permitted in any medium without royalty provided the copyright
5 # notice and this notice are preserved.
7 # Unusual variables checked by this code:
8 # NOP - four byte opcode for no-op (defaults to 0)
9 # NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
11 # SMALL_DATA_CTOR - .ctors contains small data.
12 # SMALL_DATA_DTOR - .dtors contains small data.
13 # DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
14 # INITIAL_READONLY_SECTIONS - at start of text segment
15 # OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
16 # (e.g., .PARISC.milli)
17 # OTHER_TEXT_SECTIONS - these get put in .text when relocating
18 # OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
19 # (e.g., .PARISC.global)
20 # OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
21 # (e.g. PPC32 .fixup, .got[12])
22 # OTHER_BSS_SECTIONS - other than .bss .sbss ...
23 # ATTRS_SECTIONS - at the end
24 # OTHER_SECTIONS - at the end
25 # EXECUTABLE_SYMBOLS - symbols that must be defined for an
26 # executable (e.g., _DYNAMIC_LINK)
27 # TEXT_START_ADDR - the first byte of the text segment, after any
29 # TEXT_BASE_ADDRESS - the first byte of the text segment.
30 # TEXT_START_SYMBOLS - symbols that appear at the start of the
32 # DATA_START_SYMBOLS - symbols that appear at the start of the
34 # DATA_END_SYMBOLS - symbols that appear at the end of the
35 # writeable data sections.
36 # OTHER_GOT_SYMBOLS - symbols defined just before .got.
37 # OTHER_GOT_SECTIONS - sections just after .got.
38 # OTHER_SDATA_SECTIONS - sections just after .sdata.
39 # OTHER_BSS_SYMBOLS - symbols that appear at the start of the
40 # .bss section besides ___bss_start.
41 # DATA_PLT - .plt should be in data segment, not text segment.
42 # PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
43 # BSS_PLT - .plt should be in bss segment
44 # NO_REL_RELOCS - Don't include .rel.* sections in script
45 # NO_RELA_RELOCS - Don't include .rela.* sections in script
46 # NON_ALLOC_DYN - Place dynamic sections after data segment.
47 # TEXT_DYNAMIC - .dynamic in text segment, not data segment.
48 # EMBEDDED - whether this is for an embedded system.
49 # SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
50 # start address of shared library.
51 # INPUT_FILES - INPUT command of files to always include
52 # WRITABLE_RODATA - if set, the .rodata section should be writable
53 # INIT_START, INIT_END - statements just before and just after
54 # combination of .init sections.
55 # FINI_START, FINI_END - statements just before and just after
56 # combination of .fini sections.
57 # STACK_ADDR - start of a .stack section.
58 # OTHER_SYMBOLS - symbols to place right at the end of the script.
59 # ETEXT_NAME - name of a symbol for the end of the text section,
61 # SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
62 # so that .got can be in the RELRO area. It should be set to
63 # the number of bytes in the beginning of .got.plt which can be
64 # in the RELRO area as well.
65 # USER_LABEL_PREFIX - prefix to add to user-visible symbols.
67 # When adding sections, do note that the names of some sections are used
68 # when specifying the start address of the next.
71 # Many sections come in three flavours. There is the 'real' section,
72 # like ".data". Then there are the per-procedure or per-variable
73 # sections, generated by -ffunction-sections and -fdata-sections in GCC,
74 # and useful for --gc-sections, which for a variable "foo" might be
75 # ".data.foo". Then there are the linkonce sections, for which the linker
76 # eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
77 # The exact correspondences are:
79 # Section Linkonce section
80 # .text .gnu.linkonce.t.foo
81 # .rodata .gnu.linkonce.r.foo
82 # .data .gnu.linkonce.d.foo
83 # .bss .gnu.linkonce.b.foo
84 # .sdata .gnu.linkonce.s.foo
85 # .sbss .gnu.linkonce.sb.foo
86 # .sdata2 .gnu.linkonce.s2.foo
87 # .sbss2 .gnu.linkonce.sb2.foo
88 # .debug_info .gnu.linkonce.wi.foo
89 # .tdata .gnu.linkonce.td.foo
90 # .tbss .gnu.linkonce.tb.foo
91 # .lrodata .gnu.linkonce.lr.foo
92 # .ldata .gnu.linkonce.l.foo
93 # .lbss .gnu.linkonce.lb.foo
95 # Each of these can also have corresponding .rel.* and .rela.* sections.
98 test -z "$ENTRY" && ENTRY=_start
99 test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
100 test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
101 if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
102 test -z "${ELFSIZE}" && ELFSIZE=32
103 test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
104 test "$LD_FLAG" = "N" && DATA_ADDR=.
105 test -z "${ETEXT_NAME}" && ETEXT_NAME=etext
106 test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
107 test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
108 test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
109 test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
110 DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
111 DATA_SEGMENT_RELRO_END=""
113 if test -n "${COMMONPAGESIZE}"; then
114 DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
115 DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
116 DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
118 if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
119 INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
121 if test -z "$PLT"; then
122 PLT=".plt ${RELOCATING-0} : { *(.plt) }"
124 test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
125 if test -z "$GOT"; then
126 if test -z "$SEPARATE_GOTPLT"; then
127 GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
129 GOT=".got ${RELOCATING-0} : { *(.got) }"
130 GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
133 DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
134 RODATA=".rodata ${RELOCATING+ADDR(.data)+SIZEOF(.data)} ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) } /*> INTERNAL_RAM*/"
135 DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }"
136 DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) }"
137 if test -z "${NO_SMALL_DATA}"; then
138 SBSS=".sbss ${RELOCATING-0} :
140 ${RELOCATING+${SBSS_START_SYMBOLS}}
141 ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
143 *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
145 ${RELOCATING+${SBSS_END_SYMBOLS}}
147 SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
148 SDATA="/* We want the small data sections together, so single-instruction offsets
149 can access them all, and initialized data all before uninitialized, so
150 we can shorten the on-disk segment size. */
151 .sdata ${RELOCATING-0} :
153 ${RELOCATING+${SDATA_START_SYMBOLS}}
154 ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
155 *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
157 SDATA2=".sdata2 ${RELOCATING-0} :
159 ${RELOCATING+${SDATA2_START_SYMBOLS}}
160 *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*})
162 REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
163 .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
164 REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
165 .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
166 REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
167 .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
168 REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
169 .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
173 if test -z "${DATA_GOT}"; then
174 if test -n "${NO_SMALL_DATA}"; then
178 if test -z "${SDATA_GOT}"; then
179 if test -z "${NO_SMALL_DATA}"; then
183 test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
184 test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
185 .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
186 .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
187 .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
188 .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
189 .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
190 .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
191 test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
192 ${OTHER_BSS_SECTIONS}
193 .lbss ${RELOCATING-0} :
196 *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
199 test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
200 .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
202 *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
204 .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
206 *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
207 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
209 CTOR=".ctors ADDR(.text) + SIZEOF(.text) ${CONSTRUCTING-0} :
211 ${CONSTRUCTING+${CTOR_START}}
212 /* gcc uses crtbegin.o to find the start of
213 the constructors, so we make sure it is
214 first. Because this is a wildcard, it
215 doesn't matter if the user does not
216 actually link against crtbegin.o; the
217 linker won't look for a file to match a
218 wildcard. The wildcard also means that it
219 doesn't matter which directory crtbegin.o
222 KEEP (*crtbegin.o(.ctors))
223 KEEP (*crtbegin?.o(.ctors))
225 /* We don't want to include the .ctor section from
226 the crtend.o file until after the sorted ctors.
227 The .ctor section from the crtend file contains the
228 end of ctors marker and it must be last */
230 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
231 KEEP (*(SORT(.ctors.*)))
233 ${CONSTRUCTING+${CTOR_END}}
234 } /*> INTERNAL_RAM*/"
235 DTOR=".dtors ADDR(.ctors) + SIZEOF(.ctors) ${CONSTRUCTING-0} :
237 ${CONSTRUCTING+${DTOR_START}}
238 KEEP (*crtbegin.o(.dtors))
239 KEEP (*crtbegin?.o(.dtors))
240 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
241 KEEP (*(SORT(.dtors.*)))
243 ${CONSTRUCTING+${DTOR_END}}
244 } /*> INTERNAL_RAM*/ "
245 STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
247 ${RELOCATING+___stack = .;}
251 # If this is for an embedded system, don't add SIZEOF_HEADERS.
252 if [ -z "$EMBEDDED" ]; then
253 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
255 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
259 /* Copyright (C) 2014-2016 Free Software Foundation, Inc.
261 Copying and distribution of this script, with or without modification,
262 are permitted in any medium without royalty provided the copyright
263 notice and this notice are preserved. */
265 OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
266 "${LITTLE_OUTPUT_FORMAT}")
267 OUTPUT_ARCH(${OUTPUT_ARCH})
268 ${RELOCATING+ENTRY(${ENTRY})}
270 ${RELOCATING+${EXECUTABLE_SYMBOLS}}
271 ${RELOCATING+${INPUT_FILES}}
272 ${RELOCATING- /* For some reason, the Solaris linker makes bad executables
273 if gld -r is used and the intermediate file has sections starting
274 at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
275 bug. But for now assigning the zero vmas works. */}
280 __PROG_SIZE_FOR_CORE__ = 1M;
281 __HEAP_SIZE_FOR_CORE__ = 1M;
283 __MAX_NUM_CORES_IN_ROWS__ = 4;
284 __MAX_NUM_CORES_IN_COLS__ = 4;
286 __FIRST_CORE_ROW_ = 0x20;
287 __FIRST_CORE_COL_ = 0x24;
291 PROVIDE (__CORE_ROW_ = __FIRST_CORE_ROW_);
292 PROVIDE (__CORE_COL_ = __FIRST_CORE_COL_);
293 /* generic don't touch */
294 /* used to calculated the slice address in the external memory*/
295 __CORE_NUM_ = (__CORE_ROW_ - __FIRST_CORE_ROW_ )* __MAX_NUM_CORES_IN_COLS__ + (__CORE_COL_ - __FIRST_CORE_COL_ ) ;
300 EXTERNAL_DRAM_0 (WXAI) : ORIGIN = 0x80000000, LENGTH = 0x1000000 /*.text, data, rodata, bss and .stack*/
301 EXTERNAL_DRAM_1 (WXAI) : ORIGIN = 0x81000000, LENGTH = 0x1000000 /*.heap */
303 EXTERNAL_SRAM (WXAI) : ORIGIN = 0x92000000, LENGTH = 8K /* small external RAM, used for testing*/
305 /* run time lib and crt0*/
306 RESERVED_CRT0_RAM (WXAI) : ORIGIN = 0, LENGTH = 0x400
308 /* user program, per bank usage */
309 BANK0_SRAM (WXAI) : ORIGIN = LENGTH(RESERVED_CRT0_RAM), LENGTH = 8K - LENGTH(RESERVED_CRT0_RAM)
310 BANK1_SRAM (WXAI) : ORIGIN = 0x2000, LENGTH = 8K
311 BANK2_SRAM (WXAI) : ORIGIN = 0x4000, LENGTH = 8K
312 BANK3_SRAM (WXAI) : ORIGIN = 0x6000, LENGTH = 8K
314 /* user program, continious placement */
315 INTERNAL_RAM (WXAI) : ORIGIN = LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K - LENGTH(RESERVED_CRT0_RAM)
317 MMR (WAI) : ORIGIN = 0xF000, LENGTH = 32K
319 /* multi cores space */
320 CORE_0x20_0x24_INTERNAL_RAM : ORIGIN = 0x82400000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
321 CORE_0x20_0x25_INTERNAL_RAM : ORIGIN = 0x82500000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
322 CORE_0x20_0x26_INTERNAL_RAM : ORIGIN = 0x82600000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
323 CORE_0x20_0x27_INTERNAL_RAM : ORIGIN = 0x82700000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
324 CORE_0x21_0x24_INTERNAL_RAM : ORIGIN = 0x86400000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
325 CORE_0x21_0x25_INTERNAL_RAM : ORIGIN = 0x86500000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
326 CORE_0x21_0x26_INTERNAL_RAM : ORIGIN = 0x86600000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
327 CORE_0x21_0x27_INTERNAL_RAM : ORIGIN = 0x86700000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
328 CORE_0x22_0x24_INTERNAL_RAM : ORIGIN = 0x8a400000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
329 CORE_0x22_0x25_INTERNAL_RAM : ORIGIN = 0x8a500000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
330 CORE_0x22_0x26_INTERNAL_RAM : ORIGIN = 0x8a600000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
331 CORE_0x22_0x27_INTERNAL_RAM : ORIGIN = 0x8a700000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
332 CORE_0x23_0x24_INTERNAL_RAM : ORIGIN = 0x8e400000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
333 CORE_0x23_0x25_INTERNAL_RAM : ORIGIN = 0x8e500000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
334 CORE_0x23_0x26_INTERNAL_RAM : ORIGIN = 0x8e600000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
335 CORE_0x23_0x27_INTERNAL_RAM : ORIGIN = 0x8e700000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
336 CORE_0x24_0x24_INTERNAL_RAM : ORIGIN = 0x82000000+LENGTH(RESERVED_CRT0_RAM), LENGTH = 32K- LENGTH(RESERVED_CRT0_RAM)
344 IVT 0 : {*.o(IVT) } > RESERVED_CRT0_RAM
345 RESERVED_CRT0 : {*.o(RESERVED_CRT0) } > RESERVED_CRT0_RAM
346 RESERVED_CRT0 : {*.o(reserved_crt0) } > RESERVED_CRT0_RAM
348 CORE_RAM_0 : {*.o(core_ram_0) } > BANK0_SRAM
349 CORE_RAM_1 : {*.o(core_ram_1) } > BANK1_SRAM
350 CORE_RAM_2 : {*.o(core_ram_2) } > BANK2_SRAM
351 CORE_RAM_3 : {*.o(core_ram_3) } > BANK3_SRAM
353 SRAM_SOUTH : {*.o(sram) } > EXTERNAL_SRAM
354 DRAM_WEST : {*.o(dram) } > EXTERNAL_DRAM_1
356 CORE_INTERNAL : {*.o(core_ram_internal) } /*> INTERNAL_RAM*/
358 /* the newlib (libc and libm) library is maped to the dedicated section */
360 __new_lib_start_external_ = ( ORIGIN(EXTERNAL_DRAM_0) + __PROG_SIZE_FOR_CORE__ *__CORE_NUM_ );
361 __new_lib_start_ = DEFINED(__USE_INTERNAL_MEM_FOR_NEW_LIB_) ? ORIGIN(BANK1_SRAM) : __new_lib_start_external_ ;
363 NEW_LIB_RO ${RELOCATING+__new_lib_start_} : { lib_a-*.o(.text .rodata ) *.o(libgloss_epiphany) } /* > INTERNAL_RAM*/
364 GNU_C_BUILTIN_LIB_RO ADDR(NEW_LIB_RO) + SIZEOF(NEW_LIB_RO) : {
365 *mulsi3.o(.text .rodata) *modsi3.o(.text .rodata)
366 *divsi3.o(.text .rodata) *udivsi3.o(.text .rodata)
367 *umodsi3.o(.text .rodata) _*.o(.text .rodata)
370 NEW_LIB_WR ADDR(GNU_C_BUILTIN_LIB_RO) + SIZEOF(GNU_C_BUILTIN_LIB_RO) : { lib_a-*.o(.data ) } /* > INTERNAL_RAM*/
373 __init_start = DEFINED(__USE_INTERNAL_MEM_) ? ORIGIN(BANK1_SRAM) : (ADDR(NEW_LIB_WR) + SIZEOF(NEW_LIB_WR) ) ;
374 __init_start = DEFINED(__USE_INTERNAL_MEM_FOR_NEW_LIB_) ? ADDR(NEW_LIB_WR) + SIZEOF(NEW_LIB_WR) : __init_start;
377 /* Read-only sections, merged into text segment: */
378 /*${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}*/
379 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
380 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
381 ${INITIAL_READONLY_SECTIONS}
382 .note.gnu.build-id : { *(.note.gnu.build-id) }
385 test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN
386 test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC=
387 cat > ldscripts/dyntmp.$$ <<EOF
388 ${TEXT_DYNAMIC+${DYNAMIC}}
389 .hash ${RELOCATING-0} : { *(.hash) }
390 .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
391 .dynsym ${RELOCATING-0} : { *(.dynsym) }
392 .dynstr ${RELOCATING-0} : { *(.dynstr) }
393 .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
394 .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
395 .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
398 if [ "x$COMBRELOC" = x ]; then
399 COMBRELOCCAT="cat >> ldscripts/dyntmp.$$"
401 COMBRELOCCAT="cat > $COMBRELOC"
403 eval $COMBRELOCCAT <<EOF
404 .rel.init ${RELOCATING-0} : { *(.rel.init) }
405 .rela.init ${RELOCATING-0} : { *(.rela.init) }
406 .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
407 .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
408 .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
409 .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
410 .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
411 .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
412 ${OTHER_READONLY_RELOC_SECTIONS}
413 .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
414 .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
415 .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
416 .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
417 .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
418 .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
419 .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
420 .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
421 .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
422 .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
423 .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
424 .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
425 .rel.got ${RELOCATING-0} : { *(.rel.got) }
426 .rela.got ${RELOCATING-0} : { *(.rela.got) }
427 ${OTHER_GOT_RELOC_SECTIONS}
432 .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
433 .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
437 if [ -n "$COMBRELOC" ]; then
438 cat >> ldscripts/dyntmp.$$ <<EOF
439 .rel.dyn ${RELOCATING-0} :
442 sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
443 cat >> ldscripts/dyntmp.$$ <<EOF
445 .rela.dyn ${RELOCATING-0} :
448 sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
449 cat >> ldscripts/dyntmp.$$ <<EOF
454 cat >> ldscripts/dyntmp.$$ <<EOF
455 .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
456 .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
457 ${OTHER_PLT_RELOC_SECTIONS}
460 if test -z "${NON_ALLOC_DYN}"; then
461 if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
462 cat ldscripts/dyntmp.$$
464 if test -z "${NO_REL_RELOCS}"; then
465 sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
467 if test -z "${NO_RELA_RELOCS}"; then
468 sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
471 rm -f ldscripts/dyntmp.$$
478 ${RELOCATING+${INIT_START}}
480 ${RELOCATING+${INIT_END}}
481 } /*> INTERNAL_RAM*/ =${NOP-0}
484 ${TINY_READONLY_SECTION}
486 .fini ${RELOCATING+ADDR(.init)+SIZEOF(.init)} ${RELOCATING-0} :
488 ${RELOCATING+${FINI_START}}
490 ${RELOCATING+${FINI_END}}
491 } /*> INTERNAL_RAM*/ =${NOP-0}
493 .text ${RELOCATING+ADDR(.fini)+SIZEOF(.fini)} ${RELOCATING-0} :
495 ${RELOCATING+${TEXT_START_SYMBOLS}}
496 *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
497 /* .gnu.warning sections are handled specially by elf32.em. */
499 ${RELOCATING+${OTHER_TEXT_SECTIONS}}
500 } /*> INTERNAL_RAM */ =${NOP-0}
502 ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
503 ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
504 ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
505 ${WRITABLE_RODATA-${RODATA}}
506 .rodata1 ${RELOCATING-0} : { *(.rodata1) }
507 ${CREATE_SHLIB-${SDATA2}}
508 ${CREATE_SHLIB-${SBSS2}}
509 ${OTHER_READONLY_SECTIONS}
510 .eh_frame_hdr : { *(.eh_frame_hdr) }
511 .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
512 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
514 /* Adjust the address for the data segment. We want to adjust up to
515 the same address within the page on the next page up. */
516 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
517 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
518 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
520 /* Exception handling */
521 .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
522 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
524 /* Thread Local Storage sections */
525 .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
526 .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
528 .preinit_array ${RELOCATING-0} :
530 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
531 KEEP (*(.preinit_array))
532 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
534 .init_array ${RELOCATING-0} :
536 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
537 KEEP (*(SORT(.init_array.*)))
538 KEEP (*(.init_array))
539 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
541 .fini_array ${RELOCATING-0} :
543 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
544 KEEP (*(.fini_array))
545 KEEP (*(SORT(.fini_array.*)))
546 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
548 ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
549 ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
550 .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
552 ${RELOCATING+${DATARELRO}}
553 ${OTHER_RELRO_SECTIONS}
554 ${TEXT_DYNAMIC-${DYNAMIC}}
555 ${DATA_GOT+${RELRO_NOW+${GOT}}}
556 ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
557 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
558 ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
559 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
560 ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
562 ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
564 .data ${RELOCATING+ADDR(.dtors)+SIZEOF(.dtors)} ${RELOCATING-0} :
566 ${RELOCATING+${DATA_START_SYMBOLS}}
567 *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
568 ${CONSTRUCTING+SORT(CONSTRUCTORS)}
570 .data1 ${RELOCATING-0} : { *(.data1) }
571 ${WRITABLE_RODATA+${RODATA}}
572 ${OTHER_READWRITE_SECTIONS}
573 ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
574 ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
575 ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
576 ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
578 ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
580 ${OTHER_SDATA_SECTIONS}
581 ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
582 /* Align ___bss_start and _end to a multiple of 8 so that we can use strd
583 to clear bss. N.B., without adding any extra alignment, we would have
584 to clear the bss byte by byte. */
585 ${RELOCATING+. = ALIGN(8);}
586 ${RELOCATING+___bss_start = .;}
587 ${RELOCATING+${OTHER_BSS_SYMBOLS}}
590 .bss ${RELOCATING+ADDR(.rodata)+SIZEOF(.rodata)} ${RELOCATING-0} :
593 *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
595 /* Align here to ensure that the .bss section occupies space up to
596 _end. Align after .bss to ensure correct alignment even if the
597 .bss section disappears because there are no input sections.
598 FIXME: Why do we need it? When there is no .bss section, we don't
599 pad the .data section. */
600 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
602 ${OTHER_BSS_SECTIONS}
603 ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
604 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
606 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
607 ${RELOCATING+. = ALIGN(8);}
608 ${RELOCATING+${OTHER_END_SYMBOLS}}
609 ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
610 ${RELOCATING+${DATA_SEGMENT_END}}
613 if test -n "${NON_ALLOC_DYN}"; then
614 if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
615 cat ldscripts/dyntmp.$$
617 if test -z "${NO_REL_RELOCS}"; then
618 sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
620 if test -z "${NO_RELA_RELOCS}"; then
621 sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
624 rm -f ldscripts/dyntmp.$$
628 /* Stabs debugging sections. */
629 .stab 0 : { *(.stab) }
630 .stabstr 0 : { *(.stabstr) }
631 .stab.excl 0 : { *(.stab.excl) }
632 .stab.exclstr 0 : { *(.stab.exclstr) }
633 .stab.index 0 : { *(.stab.index) }
634 .stab.indexstr 0 : { *(.stab.indexstr) }
636 .comment 0 : { *(.comment) }
640 . $srcdir/scripttempl/DWARF.sc
646 /*${STACK_ADDR+${STACK}}*/
648 PROVIDE ( __stack_start_ = ORIGIN(EXTERNAL_DRAM_0) + __PROG_SIZE_FOR_CORE__ * __CORE_NUM_ + __PROG_SIZE_FOR_CORE__ - 0x10) ;
649 .stack ${RELOCATING+__stack_start_} : { ___stack = .; *(.stack) }
651 PROVIDE ( ___heap_start = ORIGIN(EXTERNAL_DRAM_1) + __HEAP_SIZE_FOR_CORE__ * __CORE_NUM_ );
652 /*.heap_start __heap_start_ : { _heap_start_ = .; *(.heap_start) }*/
654 PROVIDE ( ___heap_end = ORIGIN(EXTERNAL_DRAM_1) + __HEAP_SIZE_FOR_CORE__ * __CORE_NUM_ + __HEAP_SIZE_FOR_CORE__ - 4 );
657 /* .heap_end __heap_end_ : { _heap_end_ = .; *(.heap_end) }*/
662 ${RELOCATING+${OTHER_SYMBOLS}}
663 ${RELOCATING+${DISCARDED}}