binutils/testsuite: Fix a crash with STN_UNDEF in relocation
authorMaciej W. Rozycki <macro@mips.com>
Mon, 9 Apr 2018 12:42:01 +0000 (13:42 +0100)
committerMaciej W. Rozycki <macro@mips.com>
Mon, 9 Apr 2018 12:42:01 +0000 (13:42 +0100)
Verify that `strip' completes successfully and a correct relocation
entry is copied for a relocation encountered with the STN_UNDEF symbol
index.

binutils/
* testsuite/binutils-all/strip-15.d: New test.
* testsuite/binutils-all/strip-15rel.s: New test source.
* testsuite/binutils-all/strip-15rela.s: New test source.
* testsuite/binutils-all/strip-15mips64.s: New test source.
* testsuite/binutils-all/objcopy.exp: Run the new test.

binutils/ChangeLog
binutils/testsuite/binutils-all/objcopy.exp
binutils/testsuite/binutils-all/strip-15.d [new file with mode: 0644]
binutils/testsuite/binutils-all/strip-15mips64.s [new file with mode: 0644]
binutils/testsuite/binutils-all/strip-15rel.s [new file with mode: 0644]
binutils/testsuite/binutils-all/strip-15rela.s [new file with mode: 0644]

index 0c1b95d21bc05460da205e5b54685ca3b31c4c3c..c7a631aa821bececd72bfa470e94dcc112dd093f 100644 (file)
@@ -1,3 +1,11 @@
+2018-04-09  Maciej W. Rozycki  <macro@mips.com>
+
+       * testsuite/binutils-all/strip-15.d: New test.
+       * testsuite/binutils-all/strip-15rel.s: New test source.
+       * testsuite/binutils-all/strip-15rela.s: New test source.
+       * testsuite/binutils-all/strip-15mips64.s: New test source.
+       * testsuite/binutils-all/objcopy.exp: Run the new test.
+
 2018-04-09  Maciej W. Rozycki  <macro@mips.com>
 
        * testsuite/binutils-all/strip-14.d: New test.
index 532bdc6ac76bf891b9a4c2c6ba1a01a6c9c5adfa..366a4a34f8994ff69b7548eb45147cdf64efbd28 100644 (file)
@@ -1123,6 +1123,11 @@ if [is_elf_format] {
                                [list as "--defsym RELOC=${reloc}"] \
                                [list as [expr {[is_elf64 tmpdir/bintest.o] \
                                    ? "--defsym ELF64=1" : ""}]]]
+    run_dump_test "strip-15" [list \
+                               [list source strip-15${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-15.d b/binutils/testsuite/binutils-all/strip-15.d
new file mode 100644 (file)
index 0000000..03d7d1a
--- /dev/null
@@ -0,0 +1,8 @@
+#PROG: strip
+#strip: -g
+#readelf: -r
+
+Relocation section '\.rela?\.text' at offset .* contains 2 entries:
+ *Offset * Info * Type * Sym\. *Value * Sym\. *Name(?: * \+ * Addend)?
+0+00 * 0+0(?:1|32|103) * R_[^ ]* *(?: * 55aa)?
+#pass
diff --git a/binutils/testsuite/binutils-all/strip-15mips64.s b/binutils/testsuite/binutils-all/strip-15mips64.s
new file mode 100644 (file)
index 0000000..a15c377
--- /dev/null
@@ -0,0 +1,14 @@
+       .text
+foo:
+       .dc.l    0x12345678
+
+       .section .rela.text
+       .dc.a    0
+       .dc.l    0x00000000
+       .dc.b    0, 0, 0, RELOC
+       .dc.a    0x000055aa
+
+       .dc.a    0
+       .dc.l    0
+       .dc.b    0, 0, 0, 0
+       .dc.a    0
diff --git a/binutils/testsuite/binutils-all/strip-15rel.s b/binutils/testsuite/binutils-all/strip-15rel.s
new file mode 100644 (file)
index 0000000..1819a53
--- /dev/null
@@ -0,0 +1,23 @@
+       .text
+foo:
+       .dc.l    0x12345678
+
+       .section .rel.text
+       .ifdef   ELF64
+
+       .dc.a    0
+       .dc.a    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    RELOC
+
+       .dc.l    0
+       .dc.l    0
+       .endif
diff --git a/binutils/testsuite/binutils-all/strip-15rela.s b/binutils/testsuite/binutils-all/strip-15rela.s
new file mode 100644 (file)
index 0000000..7bcd85e
--- /dev/null
@@ -0,0 +1,27 @@
+       .text
+foo:
+       .dc.l    0x12345678
+
+       .section .rela.text
+       .ifdef   ELF64
+
+       .dc.a    0
+       .dc.a    RELOC
+       .dc.a    0x00000000000055aa
+
+       .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    RELOC
+       .dc.l    0x000055aa
+
+       .dc.l    0
+       .dc.l    0
+       .dc.l    0
+       .endif