diff options
author | Maciej W. Rozycki <macro@mips.com> | 2018-04-09 13:42:00 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@mips.com> | 2018-04-09 13:42:00 +0100 |
commit | 3f97ba9fc82dbb1bca72fd8a137b2de132348367 (patch) | |
tree | 103114a16d83aec1c5af01d633382ef1422e1bc9 /binutils | |
parent | 9ccfa98b4cbc86ac34734ecf9d35466461c7e34c (diff) | |
download | gdb-3f97ba9fc82dbb1bca72fd8a137b2de132348367.zip gdb-3f97ba9fc82dbb1bca72fd8a137b2de132348367.tar.gz gdb-3f97ba9fc82dbb1bca72fd8a137b2de132348367.tar.bz2 |
binutils/testsuite: Verify the handling of invalid `r_sym' in relocation
Verify that `strip' terminates gracefully and a correct error message is
produced for a relocation encountered with an invalid symbol index. No
single relocation number is valid across all targets we support, so pick
a few numbers to choose from depending on the target.
binutils/
* testsuite/binutils-all/strip-14.d: New test.
* testsuite/binutils-all/strip-14rel.s: New test source.
* testsuite/binutils-all/strip-14rela.s: New test source.
* testsuite/binutils-all/strip-14mips64.s: New test source.
* testsuite/binutils-all/objcopy.exp: Run the new test.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 8 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/objcopy.exp | 16 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/strip-14.d | 7 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/strip-14mips64.s | 14 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/strip-14rel.s | 23 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/strip-14rela.s | 27 |
6 files changed, 95 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index a6b8c95..0c1b95d 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,11 @@ +2018-04-09 Maciej W. Rozycki <macro@mips.com> + + * testsuite/binutils-all/strip-14.d: New test. + * testsuite/binutils-all/strip-14rel.s: New test source. + * testsuite/binutils-all/strip-14rela.s: New test source. + * testsuite/binutils-all/strip-14mips64.s: New test source. + * testsuite/binutils-all/objcopy.exp: Run the new test. + 2018-04-06 Tom Tromey <tom@tromey.com> * dwarf.c (read_and_display_attr_value): Add missing DW_LANG diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index 0639fe5..532bdc6 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -1107,6 +1107,22 @@ if [is_elf_format] { set reloc_format rela } run_dump_test "strip-13" [list [list source strip-13${reloc_format}.s]] + # Select a relocation number that corresponds to one actually + # supported by the target and ABI being tested. + if { [istarget "aarch64*-*"] } { + set reloc 259 + } elseif { [istarget "ia64*-*"] \ + || [istarget "m32r*-*"] \ + || [istarget "v850*-*"] } { + set reloc 50 + } else { + set reloc 1 + } + run_dump_test "strip-14" [list \ + [list source strip-14${reloc_format}.s] \ + [list as "--defsym RELOC=${reloc}"] \ + [list as [expr {[is_elf64 tmpdir/bintest.o] \ + ? "--defsym ELF64=1" : ""}]]] # This requires STB_GNU_UNIQUE support with OSABI set to GNU. if { [supports_gnu_unique] } { diff --git a/binutils/testsuite/binutils-all/strip-14.d b/binutils/testsuite/binutils-all/strip-14.d new file mode 100644 index 0000000..e2ce251 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-14.d @@ -0,0 +1,7 @@ +#PROG: strip +#strip: -g +#error: \A[^\n]*: relocation 0 has invalid symbol index 1048560\Z +#not-target: rx-* +# The RX targets do not complain about bad relocs, unless they are +# actually used +# (which is what should really happen with the other targets...) diff --git a/binutils/testsuite/binutils-all/strip-14mips64.s b/binutils/testsuite/binutils-all/strip-14mips64.s new file mode 100644 index 0000000..723da8d --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-14mips64.s @@ -0,0 +1,14 @@ + .text +foo: + .dc.l 0x12345678 + + .section .rela.text + .dc.a 0 + .dc.l 0x000ffff0 + .dc.b 0, 0, 0, RELOC + .dc.a 0x00000001 + + .dc.a 0 + .dc.l 0 + .dc.b 0, 0, 0, 0 + .dc.a 0 diff --git a/binutils/testsuite/binutils-all/strip-14rel.s b/binutils/testsuite/binutils-all/strip-14rel.s new file mode 100644 index 0000000..b0ddc49 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-14rel.s @@ -0,0 +1,23 @@ + .text +foo: + .dc.l 0x12345678 + + .section .rel.text + .ifdef ELF64 + + .dc.a 0 + .dc.a 0x000ffff000000000 + RELOC + + .dc.a 0 + .dc.a 0 + .else + + # Some targets, such as `m68hc11-*', use 16-bit addresses. + # With them `.dc.a' emits 16-bit quantities, so we need to use + # `.dc.l' for 32-bit relocation data. + .dc.l 0 + .dc.l 0x0ffff000 + RELOC + + .dc.l 0 + .dc.l 0 + .endif diff --git a/binutils/testsuite/binutils-all/strip-14rela.s b/binutils/testsuite/binutils-all/strip-14rela.s new file mode 100644 index 0000000..414d303 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-14rela.s @@ -0,0 +1,27 @@ + .text +foo: + .dc.l 0x12345678 + + .section .rela.text + .ifdef ELF64 + + .dc.a 0 + .dc.a 0x000ffff000000000 + RELOC + .dc.a 0x0000000000000001 + + .dc.a 0 + .dc.a 0 + .dc.a 0 + .else + + # Some targets, such as `h8300-*' or `ip2k-*', use 16-bit addresses. + # With them `.dc.a' emits 16-bit quantities, so we need to use + # `.dc.l' for 32-bit relocation data. + .dc.l 0 + .dc.l 0x0ffff000 + RELOC + .dc.l 0x00000001 + + .dc.l 0 + .dc.l 0 + .dc.l 0 + .endif |