diff options
Diffstat (limited to 'ld/scripttempl')
-rw-r--r-- | ld/scripttempl/visium.sc | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/ld/scripttempl/visium.sc b/ld/scripttempl/visium.sc new file mode 100644 index 0000000..60338b1 --- /dev/null +++ b/ld/scripttempl/visium.sc @@ -0,0 +1,181 @@ +# Copyright (C) 2014 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. + +# Many sections come in three flavours. There is the 'real' section, +# like ".data". Then there are the per-procedure or per-variable +# sections, generated by -ffunction-sections and -fdata-sections in GCC, +# and useful for --gc-sections, which for a variable "foo" might be +# ".data.foo". Then there are the linkonce sections, for which the linker +# eliminates duplicates, which are named like ".gnu.linkonce.d.foo". +# The exact correspondences are: +# +# Section Linkonce section +# .text .gnu.linkonce.t.foo +# .rodata .gnu.linkonce.r.foo +# .data .gnu.linkonce.d.foo +# .bss .gnu.linkonce.b.foo +# .sdata .gnu.linkonce.s.foo +# .sbss .gnu.linkonce.sb.foo +# .sdata2 .gnu.linkonce.s2.foo +# .sbss2 .gnu.linkonce.sb2.foo +# .debug_info .gnu.linkonce.wi.foo +# .tdata .gnu.linkonce.td.foo +# .tbss .gnu.linkonce.tb.foo +# .lrodata .gnu.linkonce.lr.foo +# .ldata .gnu.linkonce.l.foo +# .lbss .gnu.linkonce.lb.foo +# +# Each of these can also have corresponding .rel.* and .rela.* sections. + +test -z "$ENTRY" && ENTRY=__start +cat <<EOF +OUTPUT_FORMAT("${OUTPUT_FORMAT}") + +ENTRY(${ENTRY}) + +/* Start and end of main stack. Assumes 256K of RAM. */ +${RELOCATING+ _estack = 0xe0040000 - 4;} +${RELOCATING+ _sstack = 0xe0040000 - 64K;} + +/* End of heap. */ +${RELOCATING+ _eheap = _sstack - 4;} + + +MEMORY +{ + init : ORIGIN = 0x00000000, LENGTH = 0x0003fffc + scr : ORIGIN = 0x0003fffc, LENGTH = 0x00000004 + rom : ORIGIN = 0x00044000, LENGTH = 0x1ffbc000 + ram : ORIGIN = 0xe0000000, LENGTH = 0x10000000 + saferam : ORIGIN = 0xf0000000, LENGTH = 0x10000000 +} + + +SECTIONS +{ + .init ${RELOCATING-0} : { + KEEP (*(.init)) + KEEP (*(.fini)) + ${RELOCATING+ _einit = .;} + } ${RELOCATING+ > init} + + .text ${RELOCATING-0} : { + ${RELOCATING+ _ftext = .;} + *(.text) + ${RELOCATING+*(.text.*)} + ${RELOCATING+*(.gnu.linkonce.t.*)} + ${RELOCATING+ _etext = .;} + } ${RELOCATING+ > rom} + + .ctors ${RELOCATING-0} : { + ${CONSTRUCTING+ . = ALIGN(4);} + ${CONSTRUCTING+ __CTOR_LIST__ = .;} + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + + KEEP (*crtbegin*.o(.ctors)) + + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last. */ + + KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + ${CONSTRUCTING+ __CTOR_END__ = .;} + } ${RELOCATING+ > rom} + + .dtors ${RELOCATING-0} : { + ${CONSTRUCTING+ __DTOR_LIST__ = .;} + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + ${CONSTRUCTING+ __DTOR_END__ = .;} + } ${RELOCATING+ > rom} + .rodata ${RELOCATING-0} : { + ${RELOCATING+ . = ALIGN(4);} + ${RELOCATING+ _srdata = .;} + *(.rdata) + *(.rodata) + ${RELOCATING+*(.rodata.*)} + ${RELOCATING+*(.gnu.linkonce.r.*)} + ${RELOCATING+ . = ALIGN(4);} + ${RELOCATING+ _erdata = .;} + } ${RELOCATING+ > rom} + + .eh_frame ${RELOCATING-0} : + { + ${RELOCATING+PROVIDE (__eh_frame_begin = .);} + *(.eh_frame) + ${RELOCATING+ LONG (0);} + ${RELOCATING+PROVIDE (__eh_frame_end = .);} + } ${RELOCATING+ > rom} + .gcc_except_table ${RELOCATING-0} : { *(.gcc_except_table) } ${RELOCATING+ > rom} + .jcr ${RELOCATING-0} : { *(.jcr) } ${RELOCATING+ > rom} + + .data ${RELOCATING-0} : { + ${RELOCATING+ . = ALIGN(4);} + ${RELOCATING+ _sdata = .;} + *(.data) + ${RELOCATING+*(.data.*)} + ${RELOCATING+*(.gnu.linkonce.d.*)} + ${RELOCATING+ . = ALIGN(4);} + ${RELOCATING+ _edata = .;} + } ${RELOCATING+ > ram} + .bss ${RELOCATING-0} : { + ${RELOCATING+ . = ALIGN(4);} + ${RELOCATING+ __bss_start = .;} + *(.bss) + ${RELOCATING+*(.bss.*)} + ${RELOCATING+*(.gnu.linkonce.b.*)} + *(COMMON) + ${RELOCATING+ . = ALIGN(4);} + ${RELOCATING+ __bss_end = .;} + ${RELOCATING+ _sheap = .;} + } ${RELOCATING+ > ram} + + saferam ${RELOCATING-0} : { + *(saferam) + ${RELOCATING+ . = ALIGN(4);} + ${RELOCATING+ unitidentry = .;} + } ${RELOCATING+ > saferam} + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + + .comment 0 : { *(.comment) } + +EOF + +. $srcdir/scripttempl/DWARF.sc + +cat <<EOF +} + +/* Provide a default address for the simulated file-I/O device. */ +PROVIDE (_sim_fileio_register = 0x2fff0000); + +/* Provide a default address for the simulated command line device. */ +PROVIDE (_sim_cmdline_header = 0x2ffe0000); + +/* Provide a default address for the simulated 1 MHz clock. */ +PROVIDE (_sim_clock = 0x20002100); + +EOF |