Browse Source
ld/ * configure.tgt: Add Visium support. * Makefile.am (ALL_EMULATION_SOURCES): Add eelf32visium.c. (eelf32visium.c): New rule. * Makefile.in: Regenerate. * emulparams/elf32visium.sh: New file. * scripttempl/visium.sc: Likewise. ld/testsuite/ * lib/ld-lib.exp (check_shared_lib_support): Return 0 for Visium. * ld-visium/: New directory.gdb-7.9-branch
31 changed files with 389 additions and 5 deletions
@ -0,0 +1,9 @@ |
|||
SCRIPT_NAME=visium |
|||
OUTPUT_FORMAT="elf32-visium" |
|||
TEXT_START_ADDR=0x00000000 |
|||
MAXPAGESIZE=0x10000 |
|||
NONPAGED_TEXT_START_ADDR=0x10000 |
|||
ARCH=visium |
|||
MACHINE= |
|||
TEMPLATE_NAME=elf32 |
|||
DYNAMIC_LINK=FALSE |
|||
@ -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 |
|||
@ -0,0 +1,4 @@ |
|||
#source: brr_x_backward1.s |
|||
#source: brr_x_backward2.s |
|||
#ld: |
|||
#error: relocation truncated to fit: R_VISIUM_PC16 |
|||
@ -0,0 +1,6 @@ |
|||
.text |
|||
.global start |
|||
start: |
|||
.global L1,L2 |
|||
L1: nop |
|||
L2: |
|||
@ -0,0 +1,7 @@ |
|||
.text |
|||
.rept 32767 |
|||
nop |
|||
.endr |
|||
brr tr,L1 |
|||
nop |
|||
brr tr,L2 |
|||
@ -0,0 +1,4 @@ |
|||
#source: brr_x_forward1.s |
|||
#source: brr_x_forward2.s |
|||
#ld: |
|||
#error: relocation truncated to fit: R_VISIUM_PC16 |
|||
@ -0,0 +1,7 @@ |
|||
.text |
|||
brr tr,L1 |
|||
nop |
|||
brr tr,L2 |
|||
.rept 32765 |
|||
nop |
|||
.endr |
|||
@ -0,0 +1,6 @@ |
|||
.global start |
|||
.global L1,L2 |
|||
.text |
|||
start: |
|||
L1: nop |
|||
L2: |
|||
@ -0,0 +1,9 @@ |
|||
.text |
|||
nop |
|||
brr tr,L1 |
|||
nop |
|||
.data |
|||
.global start |
|||
start: |
|||
.long 0 |
|||
L1: |
|||
@ -0,0 +1,3 @@ |
|||
#source: brr_x_seg.s |
|||
#ld: -T ld1.ld |
|||
#error: relocation truncated to fit: R_VISIUM_PC16 |
|||
@ -0,0 +1,3 @@ |
|||
#source: brr_x_seg.s |
|||
#ld: -T ld2.ld |
|||
#error: relocation truncated to fit: R_VISIUM_PC16 |
|||
@ -0,0 +1,3 @@ |
|||
#source: imm_x_seg.s |
|||
#ld: -T ld3.ld |
|||
#error: relocation truncated to fit: R_VISIUM_IM16_PCREL |
|||
@ -0,0 +1,8 @@ |
|||
.section seg1 |
|||
foo: |
|||
nop |
|||
moviq r6,bar-foo |
|||
|
|||
.section seg2 |
|||
bar: |
|||
.end |
|||
@ -0,0 +1,9 @@ |
|||
SECTIONS |
|||
{ |
|||
.text 0x10000 : { |
|||
*(.text) |
|||
} |
|||
.data 0x30000 : { |
|||
*(.data) |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
SECTIONS |
|||
{ |
|||
.text 0x30004 : { |
|||
*(.text) |
|||
} |
|||
.data 0x10000 : { |
|||
*(.data) |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
SECTIONS |
|||
{ |
|||
seg1 0x10000 : { |
|||
*(seg1) |
|||
} |
|||
seg2 0x20000 : { |
|||
*(seg2) |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
#source: reloc1.s |
|||
#source: reloc2.s |
|||
#ld: -T ld1.ld |
|||
#objdump: -s |
|||
|
|||
.*: +file format .* |
|||
|
|||
Contents of section .text: |
|||
10000 00000000 7800000a 84c20034 8482003c ....x......4...< |
|||
10010 84a20001 84c20002 0442002c 84020002 .........B.,.... |
|||
10020 0482002c 84a20002 84c21000 ...,........ |
|||
Contents of section .data: |
|||
30000 00140014 00000014 0001002c 0002002c ...........,..., |
|||
30010 10001010 .... |
|||
@ -0,0 +1,24 @@ |
|||
.data |
|||
foo: |
|||
.byte 0 |
|||
.byte data1-foo |
|||
.word data1-foo |
|||
.long data1-foo |
|||
.long text1 |
|||
.long text2 |
|||
.word abs1 |
|||
.word abs1+0x10 |
|||
.text |
|||
bar: |
|||
nop |
|||
brr tr,text1 |
|||
moviq r2,text1-bar+8 |
|||
movil r2,%l text2-bar+16 |
|||
moviu r2,%u text2-bar+16 |
|||
moviq r2,%u text2 |
|||
subi r2,%l text2 |
|||
addi r2,%u text2 |
|||
movil r2, text2 ; with movil, the %l may be omitted |
|||
moviu r2,%u text2 |
|||
moviq r2,abs1 |
|||
.end |
|||
@ -0,0 +1,12 @@ |
|||
.global abs1 |
|||
abs1 = 0x1000 |
|||
|
|||
.data |
|||
.global data1 |
|||
data1: |
|||
.text |
|||
.global text1 |
|||
text1: |
|||
.global text2 |
|||
text2 = . + 65536 |
|||
.end |
|||
@ -0,0 +1,30 @@ |
|||
# Expect script for Visium tests. |
|||
# Copyright (C) 2014 Free Software Foundation, Inc. |
|||
# |
|||
# This file is part of the GNU Binutils. |
|||
# |
|||
# This program is free software; you can redistribute it and/or modify |
|||
# it under the terms of the GNU General Public License as published by |
|||
# the Free Software Foundation; either version 3 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program; if not, write to the Free Software |
|||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
|||
# MA 02110-1301, USA. |
|||
|
|||
# Visium linker testsuite. |
|||
|
|||
if [istarget visium-*-*] { |
|||
run_dump_test "brr_x_backward" |
|||
run_dump_test "brr_x_forward" |
|||
run_dump_test "brr_x_seg1" |
|||
run_dump_test "brr_x_seg2" |
|||
run_dump_test "imm_x_seg" |
|||
run_dump_test "reloc" |
|||
} |
|||
Loading…
Reference in new issue