aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-s390
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2016-06-07 16:45:15 +0200
committerAndreas Krebbel <krebbel@linux.vnet.ibm.com>2016-06-07 16:47:10 +0200
commit161db2790500827b74ef835ebe515dce04021316 (patch)
tree1c29a0c7865c5be502dc3ff90409ebf6d6063700 /ld/testsuite/ld-s390
parent14b57c7c6a53c747a8819fed3da858eae4195a0e (diff)
downloadgdb-161db2790500827b74ef835ebe515dce04021316.zip
gdb-161db2790500827b74ef835ebe515dce04021316.tar.gz
gdb-161db2790500827b74ef835ebe515dce04021316.tar.bz2
Fix PLT first entry GOT operand calculation.
Embedding the .plt section in another revealed a bug in the way the larl operand of the first magic plt entry is being calculated. Fixed with the attached patch. bfd/ChangeLog: * elf64-s390.c (elf_s390_finish_dynamic_sections): Subtract plt section offset when calculation the larl operand in the first PLT entry. ld/ChangeLog: * testsuite/ld-s390/pltoffset-1.dd: New test. * testsuite/ld-s390/pltoffset-1.ld: New test. * testsuite/ld-s390/pltoffset-1.s: New test. * testsuite/ld-s390/s390.exp: Run new test.
Diffstat (limited to 'ld/testsuite/ld-s390')
-rw-r--r--ld/testsuite/ld-s390/pltoffset-1.dd8
-rw-r--r--ld/testsuite/ld-s390/pltoffset-1.ld34
-rw-r--r--ld/testsuite/ld-s390/pltoffset-1.s12
-rw-r--r--ld/testsuite/ld-s390/s390.exp5
4 files changed, 59 insertions, 0 deletions
diff --git a/ld/testsuite/ld-s390/pltoffset-1.dd b/ld/testsuite/ld-s390/pltoffset-1.dd
new file mode 100644
index 0000000..dcc339b
--- /dev/null
+++ b/ld/testsuite/ld-s390/pltoffset-1.dd
@@ -0,0 +1,8 @@
+tmpdir/pltoffset-1: file format elf64-s390
+
+Disassembly of section .text:
+
+.* <.text>:
+.*: 00 00 00 00 [ ]*.long 0x00000000
+.*: e3 10 f0 38 00 24 [ ]*stg %r1,56\(%r15\)
+.*: c0 10 00 00 00 27 [ ]*larl %r1,58 <_GLOBAL_OFFSET_TABLE_>
diff --git a/ld/testsuite/ld-s390/pltoffset-1.ld b/ld/testsuite/ld-s390/pltoffset-1.ld
new file mode 100644
index 0000000..742c8fd
--- /dev/null
+++ b/ld/testsuite/ld-s390/pltoffset-1.ld
@@ -0,0 +1,34 @@
+SECTIONS
+{
+ .text : {
+ . = . + 4;
+ *(.plt)
+ }
+ .test : {
+ *(.text)
+ *(.got)
+ *(.got.plt)
+ *(.rodata)
+ *(.eh_frame)
+ *(.interp)
+ *(.data)
+ *(.bss)
+ }
+
+ /* For old binutils which otherwise complain about nonrepresentable
+ sections. */
+ .dynsym : { *(.dynsym) }
+ .gnu.version : { *(.gnu.version) }
+
+ /DISCARD/ : {
+ *(.rela.text)
+ *(.rela.plt)
+ *(.rela.got.plt)
+ *(.rela.data)
+ *(.rela.rodata)
+ *(.rela.bss)
+ *(.rela.text)
+ *(.comment*)
+ *(.note*)
+ }
+}
diff --git a/ld/testsuite/ld-s390/pltoffset-1.s b/ld/testsuite/ld-s390/pltoffset-1.s
new file mode 100644
index 0000000..4c81523
--- /dev/null
+++ b/ld/testsuite/ld-s390/pltoffset-1.s
@@ -0,0 +1,12 @@
+ .file "hello.c"
+.text
+ .align 8
+.globl main
+ .type main, @function
+main:
+ brasl %r5,foo@PLT
+ br %r4
+ .size main, .-main
+
+.globl foo
+foo: .long 123
diff --git a/ld/testsuite/ld-s390/s390.exp b/ld/testsuite/ld-s390/s390.exp
index 4ca7b3c..2ef885a 100644
--- a/ld/testsuite/ld-s390/s390.exp
+++ b/ld/testsuite/ld-s390/s390.exp
@@ -74,6 +74,11 @@ set s390xtests {
"-m64" {gotreloc-1.s}
{{objdump -dzrj.text gotreloc_64-1.dd}}
"gotreloc_64-1"}
+ {"PLT: offset test"
+ "-shared -m elf64_s390 -dT pltoffset-1.ld" ""
+ "-m64" {pltoffset-1.s}
+ {{objdump "-dzrj.text --stop-address=16" pltoffset-1.dd}}
+ "pltoffset-1"}
}
if [istarget "s390-*-*"] {