diff options
44 files changed, 678 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 27bea2b..ee0e051 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2002-06-17 Tom Rix <trix@redhat.com> + + * ld-d10v/d10v.exp: New driver for d10v. + * ld-d10v/default_layout.d : New test. + * ld-d10v/regression-001.lt: New test for a linker regression. + * ld-d10v/linktest-002.lt: New test for run_link_test. + * ld-d10v/reloc-001.d - reloc-016.d: New tests. + 2002-06-11 John David Anglin <dave@hiauly1.hia.nrc.ca> * ld-scripts/cross1.t: Add .hash, .dynstr and .dynsym sections to diff --git a/ld/testsuite/ld-d10v/d10v.exp b/ld/testsuite/ld-d10v/d10v.exp new file mode 100644 index 0000000..4e53c7e --- /dev/null +++ b/ld/testsuite/ld-d10v/d10v.exp @@ -0,0 +1,250 @@ +# Expect script for ld-d10v tests +# Copyright 2002 Free Software Foundation, Inc. +# +# This file 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Written by Tom Rix, trix@redhat.com +# + +# Test d10v + +if ![istarget d10v-*-*] { + return +} + +# run_link_test FILE +# Copied from run_dump_test, with the dumping part removed. +# +# Assemble a .s file, then run some utility on it and check the output. +# +# There should be an assembly language file named FILE.s in the test +# suite directory. `run_link_test' will assemble and link FILE.s +# +# The FILE.lt file begins with zero or more option lines, which specify +# flags to pass to the assembler, the program to run to dump the +# assembler's output, and the options it wants. The option lines have +# the syntax: +# +# # OPTION: VALUE +# +# OPTION is the name of some option, like "name" or "ld", and +# VALUE is OPTION's value. The valid options are described below. +# Whitespace is ignored everywhere, except within VALUE. The option +# list ends with the first line that doesn't match the above syntax +# (hmm, not great for error detection). +# +# The interesting options are: +# +# name: TEST-NAME +# The name of this test, passed to DejaGNU's `pass' and `fail' +# commands. If omitted, this defaults to FILE, the root of the +# .s and .d files' names. +# +# as: FLAGS +# When assembling, pass FLAGS to the assembler. +# If assembling several files, you can pass different assembler +# options in the "source" directives. See below. +# +# ld: FLAGS +# Link assembled files using FLAGS, in the order of the "source" +# directives, when using multiple files. +# +# source: SOURCE [FLAGS] +# Assemble the file SOURCE.s using the flags in the "as" directive +# and the (optional) FLAGS. If omitted, the source defaults to +# FILE.s. +# This is useful if several .x files want to share a .s file. +# More than one "source" directive can be given, which is useful +# when testing linking. +# +# xfail: TARGET +# The test is expected to fail on TARGET. This may occur more than +# once. +# +# target: TARGET +# Only run the test for TARGET. This may occur more than once; the +# target being tested must match at least one. +# +# notarget: TARGET +# Do not run the test for TARGET. This may occur more than once; +# the target being tested must not match any of them. +# +# Each option may occur at most once unless otherwise mentioned. +# + +proc run_link_test { name } { + global subdir srcdir + global AS LD + global ASFLAGS LDFLAGS + global host_triplet runtests + + if [string match "*/*" $name] { + set file $name + set name [file tail $name] + } else { + set file "$srcdir/$subdir/$name" + } + + if ![runtest_file_p $runtests $name] then { + return + } + + set opt_array [slurp_options "${file}.lt"] + if { $opt_array == -1 } { + perror "error reading options from $file.lt" + unresolved $subdir/$name + return + } + set dumpfile tmpdir/dump.out + set run_ld 0 + set opts(as) {} + set opts(ld) {} + set opts(xfail) {} + set opts(target) {} + set opts(notarget) {} + set opts(name) {} + set opts(source) {} + set asflags(${file}.s) {} + + foreach i $opt_array { + set opt_name [lindex $i 0] + set opt_val [lindex $i 1] + if ![info exists opts($opt_name)] { + perror "unknown option $opt_name in file $file.lt" + unresolved $subdir/$name + return + } + + switch -- $opt_name { + xfail {} + target {} + notarget {} + source { + # Move any source-specific as-flags to a separate array to + # simplify processing. + if { [llength $opt_val] > 1 } { + set asflags([lindex $opt_val 0]) [lrange $opt_val 1 end] + set opt_val [lindex $opt_val 0] + } else { + set asflags($opt_val) {} + } + } + default { + if [string length $opts($opt_name)] { + perror "option $opt_name multiply set in $file.lt" + unresolved $subdir/$name + return + } + } + } + set opts($opt_name) [concat $opts($opt_name) $opt_val] + } + + # Decide early whether we should run the test for this target. + if { [llength $opts(target)] > 0 } { + set targmatch 0 + foreach targ $opts(target) { + if [istarget $targ] { + set targmatch 1 + break + } + } + if { $targmatch == 0 } { + return + } + } + foreach targ $opts(notarget) { + if [istarget $targ] { + return + } + } + + if { $opts(name) == "" } { + set testname "$subdir/$name" + } else { + set testname $opts(name) + } + + if { $opts(source) == "" } { + set sourcefiles [list ${file}.s] + } else { + set sourcefiles {} + foreach sf $opts(source) { + lappend sourcefiles "$srcdir/$subdir/$sf" + # Must have asflags indexed on source name. + set asflags($srcdir/$subdir/$sf) $asflags($sf) + } + } + + # Time to setup xfailures. + foreach targ $opts(xfail) { + setup_xfail $targ + } + + # Assemble each file. + set objfiles {} + for { set i 0 } { $i < [llength $sourcefiles] } { incr i } { + set sourcefile [lindex $sourcefiles $i] + + set objfile "tmpdir/dump$i.o" + lappend objfiles $objfile + set cmd "$AS $ASFLAGS $opts(as) $asflags($sourcefile) -o $objfile $sourcefile" + + send_log "$cmd\n" + set cmdret [catch "exec $cmd" comp_output] + set comp_output [prune_warnings $comp_output] + + # We accept errors at assembly stage too, unless we're supposed to + # link something. + if { $cmdret != 0 || ![string match "" $comp_output] } then { + send_log "$comp_output\n" + verbose "$comp_output" 3 + fail $testname + return + } + } + + # Link the file(s). + set objfile "tmpdir/dump" + set cmd "$LD $LDFLAGS $opts(ld) -o $objfile $objfiles" + + send_log "$cmd\n" + set cmdret [catch "exec $cmd" comp_output] + set comp_output [prune_warnings $comp_output] + + if { $cmdret != 0 || ![string match "" $comp_output] } then { + + send_log "$comp_output\n" + verbose "$comp_output" 3 + fail $testname + return + } + pass $testname +} + + +set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]] +foreach test $test_list { + # We need to strip the ".d", but can leave the dirname. + verbose [file rootname $test] + run_dump_test [file rootname $test] +} + +set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.lt]] +foreach test $test_list { + # We need to strip the ".lt", but can leave the dirname. + verbose [file rootname $test] + run_link_test [file rootname $test] +} diff --git a/ld/testsuite/ld-d10v/default_layout.d b/ld/testsuite/ld-d10v/default_layout.d new file mode 100644 index 0000000..4984529 --- /dev/null +++ b/ld/testsuite/ld-d10v/default_layout.d @@ -0,0 +1,16 @@ +#source: simple.s +#ld: +#objdump: -h + +.*: file format elf32-d10v + +Sections: +Idx Name Size VMA LMA File off Algn + 0 \.text 00000004 01014000 01014000 00001000 2\*\*0 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 \.data 00000000 02000004 02000004 00001004 2\*\*0 + CONTENTS, ALLOC, LOAD, DATA + 2 \.bss 00000000 02000004 02000004 00001004 2\*\*0 + ALLOC + 3 .stack 00000000 0200bffe 0200bffe 00001004 2\*\*0 + CONTENTS diff --git a/ld/testsuite/ld-d10v/linktest-001.s b/ld/testsuite/ld-d10v/linktest-001.s new file mode 100644 index 0000000..fc8916c --- /dev/null +++ b/ld/testsuite/ld-d10v/linktest-001.s @@ -0,0 +1,4 @@ + .section .data + .global bar +bar: + .space 64 diff --git a/ld/testsuite/ld-d10v/linktest-002.lt b/ld/testsuite/ld-d10v/linktest-002.lt new file mode 100644 index 0000000..ffc6cfd --- /dev/null +++ b/ld/testsuite/ld-d10v/linktest-002.lt @@ -0,0 +1,2 @@ +#source: linktest-001.s +#source: linktest-002.s diff --git a/ld/testsuite/ld-d10v/linktest-002.s b/ld/testsuite/ld-d10v/linktest-002.s new file mode 100644 index 0000000..3295559 --- /dev/null +++ b/ld/testsuite/ld-d10v/linktest-002.s @@ -0,0 +1,4 @@ + .section .text + .global _start +_start: + ldi r0,bar diff --git a/ld/testsuite/ld-d10v/regression-001.lt b/ld/testsuite/ld-d10v/regression-001.lt new file mode 100644 index 0000000..6481a59 --- /dev/null +++ b/ld/testsuite/ld-d10v/regression-001.lt @@ -0,0 +1,3 @@ +#source: regression-001.s +#as: -W + diff --git a/ld/testsuite/ld-d10v/regression-001.s b/ld/testsuite/ld-d10v/regression-001.s new file mode 100644 index 0000000..60226c1 --- /dev/null +++ b/ld/testsuite/ld-d10v/regression-001.s @@ -0,0 +1,14 @@ + .section .data + ;; + ;; The next line caused an earlier ld to core dump. + .global .data +foo: + .space 0x0064 + + .section .text + .global _test + .global _start +_test: + ldi r0,foo +_start: + nop diff --git a/ld/testsuite/ld-d10v/reloc-001.d b/ld/testsuite/ld-d10v/reloc-001.d new file mode 100644 index 0000000..e379e5ce --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-001.d @@ -0,0 +1,14 @@ +#source: reloc-001.s +#ld: -T $srcdir/$subdir/reloc-001.ld +#objdump: -D + +# Test 10 bit pc rel reloc normal case + +.*: file format elf32-d10v + +Disassembly of section .text: + +01014000 <_start>: + 1014000: 65 20 cc 1a brf0f.s 1014104 <foo> -> jmp r13 +Disassembly of section .data: + diff --git a/ld/testsuite/ld-d10v/reloc-001.ld b/ld/testsuite/ld-d10v/reloc-001.ld new file mode 100644 index 0000000..a3275f5 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-001.ld @@ -0,0 +1,10 @@ +SECTIONS +{ + .text 0x01014000 : + { + *(.text) + foo = (. + 0x100); + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-001.s b/ld/testsuite/ld-d10v/reloc-001.s new file mode 100644 index 0000000..bed56c7 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-001.s @@ -0,0 +1,11 @@ + ;; Test pc relative relocation + + .text + .global _start +_start: + brf0f.s foo + jmp r13 + + + + diff --git a/ld/testsuite/ld-d10v/reloc-002.d b/ld/testsuite/ld-d10v/reloc-002.d new file mode 100644 index 0000000..f1da582 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-002.d @@ -0,0 +1,13 @@ +#source: reloc-001.s +#ld: -T $srcdir/$subdir/reloc-002.ld +#objdump: -D + +# Test 10 bit pc rel reloc good boundary. + +.*: file format elf32-d10v + +Disassembly of section .text: + +01014000 <_start>: + 1014000: 65 3f cc 1a brf0f.s 10141fc <foo> -> jmp r13 +Disassembly of section .data: diff --git a/ld/testsuite/ld-d10v/reloc-002.ld b/ld/testsuite/ld-d10v/reloc-002.ld new file mode 100644 index 0000000..8f991b2 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-002.ld @@ -0,0 +1,10 @@ +SECTIONS +{ + .text 0x01014000 : + { + *(.text) + foo = (. + 0x1F8); + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-003.d b/ld/testsuite/ld-d10v/reloc-003.d new file mode 100644 index 0000000..fea88ce --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-003.d @@ -0,0 +1,5 @@ +#source: reloc-001.s +#ld: -T $srcdir/$subdir/reloc-003.ld +#error: relocation truncated to fit: R_D10V_10_PCREL_L foo$ + +# Test 10 bit pc rel reloc bad boundary.
\ No newline at end of file diff --git a/ld/testsuite/ld-d10v/reloc-003.ld b/ld/testsuite/ld-d10v/reloc-003.ld new file mode 100644 index 0000000..7008d9d --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-003.ld @@ -0,0 +1,10 @@ +SECTIONS +{ + .text 0x01014000 : + { + *(.text) + foo = (. + 0x1FC); + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-004.d b/ld/testsuite/ld-d10v/reloc-004.d new file mode 100644 index 0000000..d91fc94 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-004.d @@ -0,0 +1,5 @@ +#source: reloc-001.s +#ld: -T $srcdir/$subdir/reloc-004.ld +#error: relocation truncated to fit: R_D10V_10_PCREL_L foo$ + +# Test 10 bit pc rel reloc normal bad.
\ No newline at end of file diff --git a/ld/testsuite/ld-d10v/reloc-004.ld b/ld/testsuite/ld-d10v/reloc-004.ld new file mode 100644 index 0000000..5f06d60 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-004.ld @@ -0,0 +1,10 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x400); + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-005.d b/ld/testsuite/ld-d10v/reloc-005.d new file mode 100644 index 0000000..1d40ced --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-005.d @@ -0,0 +1,14 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-005.ld +#objdump: -D + +# Test 18 bit pc rel reloc normal case + +.*: file format elf32-d10v + +Disassembly of section .text: + +01014000 <_start>: + 1014000: e4 00 10 02 bra.l 1018008 <foo> + 1014004: 26 0d 5e 00 jmp r13 || nop +Disassembly of section .data: diff --git a/ld/testsuite/ld-d10v/reloc-005.ld b/ld/testsuite/ld-d10v/reloc-005.ld new file mode 100644 index 0000000..a3f5b06 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-005.ld @@ -0,0 +1,10 @@ +SECTIONS +{ + .text 0x01014000 : + { + *(.text) + foo = (. + 0x4000); + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-005.s b/ld/testsuite/ld-d10v/reloc-005.s new file mode 100644 index 0000000..34ebb05 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-005.s @@ -0,0 +1,11 @@ + ;; Test 18 bit pc rel relocation + + .text + .global _start +_start: + bra.l foo + jmp r13 + + + + diff --git a/ld/testsuite/ld-d10v/reloc-006.d b/ld/testsuite/ld-d10v/reloc-006.d new file mode 100644 index 0000000..170cf5b --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-006.d @@ -0,0 +1,14 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-006.ld +#objdump: -D + +# Test 18 bit pc rel reloc good boundary + +.*: file format elf32-d10v + +Disassembly of section .text: + +01014000 <_start>: + 1014000: e4 00 7f ff bra.l 1033ffc <foo> + 1014004: 26 0d 5e 00 jmp r13 || nop +Disassembly of section .data: diff --git a/ld/testsuite/ld-d10v/reloc-006.ld b/ld/testsuite/ld-d10v/reloc-006.ld new file mode 100644 index 0000000..3d1a0f6 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-006.ld @@ -0,0 +1,8 @@ +SECTIONS +{ + .text 0x01014000 : + { + *(.text) + foo = (. + 0x1fff4); + } +} diff --git a/ld/testsuite/ld-d10v/reloc-007.d b/ld/testsuite/ld-d10v/reloc-007.d new file mode 100644 index 0000000..fff598d --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-007.d @@ -0,0 +1,7 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-007.ld +#objdump: -D +#error: relocation truncated to fit: R_D10V_18_PCREL foo$ + +# Test 18 bit pc rel reloc bad boundary + diff --git a/ld/testsuite/ld-d10v/reloc-007.ld b/ld/testsuite/ld-d10v/reloc-007.ld new file mode 100644 index 0000000..10c50ff --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-007.ld @@ -0,0 +1,8 @@ +SECTIONS +{ + .text 0x01014000 : + { + *(.text) + foo = (. + 0x1fff8); + } +} diff --git a/ld/testsuite/ld-d10v/reloc-008.d b/ld/testsuite/ld-d10v/reloc-008.d new file mode 100644 index 0000000..5b64dd2 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-008.d @@ -0,0 +1,7 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-008.ld +#objdump: -D +#error: relocation truncated to fit: R_D10V_18_PCREL foo$ + +# Test 18 bit pc rel reloc normal bad + diff --git a/ld/testsuite/ld-d10v/reloc-008.ld b/ld/testsuite/ld-d10v/reloc-008.ld new file mode 100644 index 0000000..d42e0ee --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-008.ld @@ -0,0 +1,8 @@ +SECTIONS +{ + .text 0x01014000 : + { + *(.text) + foo = (. + 0x41fff8); + } +} diff --git a/ld/testsuite/ld-d10v/reloc-009.d b/ld/testsuite/ld-d10v/reloc-009.d new file mode 100644 index 0000000..ff55845 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-009.d @@ -0,0 +1,16 @@ +#source: reloc-009.s +#ld: -T $srcdir/$subdir/reloc-009.ld +#objdump: -D + +# Test 10 bit pc rel reloc negative normal case + +.*: file format elf32-d10v +Disassembly of section .text: + +01014000 <foo>: + ... + +01014100 <_start>: + 1014100: 6f 00 4a c0 nop -> brf0f.s 1014000 <foo> + 1014104: 26 0d 5e 00 jmp r13 || nop +Disassembly of section .data: diff --git a/ld/testsuite/ld-d10v/reloc-009.ld b/ld/testsuite/ld-d10v/reloc-009.ld new file mode 100644 index 0000000..af6e775 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-009.ld @@ -0,0 +1,11 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x100); + *(.text) + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-009.s b/ld/testsuite/ld-d10v/reloc-009.s new file mode 100644 index 0000000..fb2ebce --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-009.s @@ -0,0 +1,12 @@ + ;; Test pc relative relocation + + .text + .global _start +_start: + nop + brf0f.s foo + jmp r13 + + + + diff --git a/ld/testsuite/ld-d10v/reloc-010.d b/ld/testsuite/ld-d10v/reloc-010.d new file mode 100644 index 0000000..5615f29 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-010.d @@ -0,0 +1,17 @@ +#source: reloc-009.s +#ld: -T $srcdir/$subdir/reloc-010.ld +#objdump: -D + +# Test 10 bit pc rel reloc negative good boundary case + +.*: file format elf32-d10v + +Disassembly of section .text: + +01014000 <foo>: + ... + +01014200 <_start>: + 1014200: 6f 00 4a 80 nop -> brf0f.s 1014000 <foo> + 1014204: 26 0d 5e 00 jmp r13 || nop +Disassembly of section .data: diff --git a/ld/testsuite/ld-d10v/reloc-010.ld b/ld/testsuite/ld-d10v/reloc-010.ld new file mode 100644 index 0000000..9b3d81a --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-010.ld @@ -0,0 +1,11 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x200); + *(.text) + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-011.d b/ld/testsuite/ld-d10v/reloc-011.d new file mode 100644 index 0000000..72840b9 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-011.d @@ -0,0 +1,6 @@ +#source: reloc-009.s +#ld: -T $srcdir/$subdir/reloc-011.ld +#error: relocation truncated to fit: R_D10V_10_PCREL_R foo$ + +# Test 10 bit pc rel reloc negative bad boundary. + diff --git a/ld/testsuite/ld-d10v/reloc-011.ld b/ld/testsuite/ld-d10v/reloc-011.ld new file mode 100644 index 0000000..e7a8151 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-011.ld @@ -0,0 +1,11 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x204); + *(.text) + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-012.d b/ld/testsuite/ld-d10v/reloc-012.d new file mode 100644 index 0000000..21f67fb --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-012.d @@ -0,0 +1,6 @@ +#source: reloc-009.s +#ld: -T $srcdir/$subdir/reloc-012.ld +#error: relocation truncated to fit: R_D10V_10_PCREL_R foo$ + +# Test 10 bit pc rel reloc negative normal bad. + diff --git a/ld/testsuite/ld-d10v/reloc-012.ld b/ld/testsuite/ld-d10v/reloc-012.ld new file mode 100644 index 0000000..10b7e7c --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-012.ld @@ -0,0 +1,11 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x80004); + *(.text) + } +} + + diff --git a/ld/testsuite/ld-d10v/reloc-013.d b/ld/testsuite/ld-d10v/reloc-013.d new file mode 100644 index 0000000..16b0470 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-013.d @@ -0,0 +1,17 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-013.ld +#objdump: -D + +# Test 18 bit pc rel reloc negative normal case + +.*: file format elf32-d10v + +Disassembly of section .text: + +01014000 <foo>: + ... + +01014400 <_start>: + 1014400: e4 00 ff 00 bra.l 1014000 <foo> + 1014404: 26 0d 5e 00 jmp r13 || nop +Disassembly of section .data: diff --git a/ld/testsuite/ld-d10v/reloc-013.ld b/ld/testsuite/ld-d10v/reloc-013.ld new file mode 100644 index 0000000..a6c0808 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-013.ld @@ -0,0 +1,12 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x400); + *(.text) + } +} + + + diff --git a/ld/testsuite/ld-d10v/reloc-014.d b/ld/testsuite/ld-d10v/reloc-014.d new file mode 100644 index 0000000..ab3b42c --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-014.d @@ -0,0 +1,17 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-014.ld +#objdump: -D + +# Test 18 bit pc rel reloc negative good boundary case + +.*: file format elf32-d10v + +Disassembly of section .text: + +01014000 <foo>: + ... + +01034000 <_start>: + 1034000: e4 00 80 00 bra.l 1014000 <foo> + 1034004: 26 0d 5e 00 jmp r13 || nop +Disassembly of section .data: diff --git a/ld/testsuite/ld-d10v/reloc-014.ld b/ld/testsuite/ld-d10v/reloc-014.ld new file mode 100644 index 0000000..7cda1ac --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-014.ld @@ -0,0 +1,12 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x20000); + *(.text) + } +} + + + diff --git a/ld/testsuite/ld-d10v/reloc-015.d b/ld/testsuite/ld-d10v/reloc-015.d new file mode 100644 index 0000000..92ec904 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-015.d @@ -0,0 +1,7 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-015.ld +#objdump: -D +#error: relocation truncated to fit: R_D10V_18_PCREL foo$ + +# Test 18 bit pc rel negative reloc bad boundary + diff --git a/ld/testsuite/ld-d10v/reloc-015.ld b/ld/testsuite/ld-d10v/reloc-015.ld new file mode 100644 index 0000000..ab1b183 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-015.ld @@ -0,0 +1,12 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x20004); + *(.text) + } +} + + + diff --git a/ld/testsuite/ld-d10v/reloc-016.d b/ld/testsuite/ld-d10v/reloc-016.d new file mode 100644 index 0000000..c8d7cf8 --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-016.d @@ -0,0 +1,7 @@ +#source: reloc-005.s +#ld: -T $srcdir/$subdir/reloc-016.ld +#objdump: -D +#error: relocation truncated to fit: R_D10V_18_PCREL foo$ + +# Test 18 bit pc rel negative reloc normal bad + diff --git a/ld/testsuite/ld-d10v/reloc-016.ld b/ld/testsuite/ld-d10v/reloc-016.ld new file mode 100644 index 0000000..6b5704c --- /dev/null +++ b/ld/testsuite/ld-d10v/reloc-016.ld @@ -0,0 +1,12 @@ +SECTIONS +{ + .text 0x01014000 : + { + foo = .; + . = (. + 0x800004); + *(.text) + } +} + + + diff --git a/ld/testsuite/ld-d10v/simple.s b/ld/testsuite/ld-d10v/simple.s new file mode 100644 index 0000000..8a304f9 --- /dev/null +++ b/ld/testsuite/ld-d10v/simple.s @@ -0,0 +1,5 @@ + .text + .global _start +_start: + jmp r13 + |