PowerPC64 tocsave testcases
authorAlan Modra <amodra@gmail.com>
Tue, 20 Jun 2017 00:00:23 +0000 (09:30 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 21 Jun 2017 13:15:15 +0000 (22:45 +0930)
* testsuite/ld-powerpc/powerpc.exp: Run TOCSAVE tests.
* testsuite/ld-powerpc/tocsave1.s,
* testsuite/ld-powerpc/tocsave1a.d,
* testsuite/ld-powerpc/tocsave1s.d,
* testsuite/ld-powerpc/tocsave2.s,
* testsuite/ld-powerpc/tocsave2a.d,
* testsuite/ld-powerpc/tocsave2s.d,
* testsuite/ld-powerpc/tocsavelib.s: New files.

ld/ChangeLog
ld/testsuite/ld-powerpc/powerpc.exp
ld/testsuite/ld-powerpc/tocsave1.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/tocsave1a.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/tocsave1s.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/tocsave2.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/tocsave2a.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/tocsave2s.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/tocsavelib.s [new file with mode: 0644]

index 417c464b4effbe712370a804c279527cb32b596b..f146c3a69f27a39ab48526344217e5af41cfeffc 100644 (file)
@@ -1,3 +1,14 @@
+2017-06-21  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/ld-powerpc/powerpc.exp: Run TOCSAVE tests.
+       * testsuite/ld-powerpc/tocsave1.s,
+       * testsuite/ld-powerpc/tocsave1a.d,
+       * testsuite/ld-powerpc/tocsave1s.d,
+       * testsuite/ld-powerpc/tocsave2.s,
+       * testsuite/ld-powerpc/tocsave2a.d,
+       * testsuite/ld-powerpc/tocsave2s.d,
+       * testsuite/ld-powerpc/tocsavelib.s: New files.
+
 2017-06-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/21626
index f12e413cd860c6486e477934ad053ddac0719fd0..f709b1ed69c9e3997979bb60eea2773d45d77129 100644 (file)
@@ -231,6 +231,16 @@ set ppc64elftests {
        {{ld tocopt7.out} {objdump -s tocopt7.d}} "tocopt7"}
     {"TOC opt8" "-melf64ppc" "" "-a64 -mpower9"  {tocopt8.s}
        {{objdump -s tocopt8.d}} "tocopt8"}
+    {"tocsave lib" "-shared -melf64ppc" "" "-a64" {tocsavelib.s}
+       {} "tocsavelib.so"}
+    {"tocsave1 shared" "-melf64ppc" "tmpdir/tocsavelib.so" "-a64" {tocsave1.s}
+       {{objdump -dr tocsave1s.d}} "tocsave1s"}
+    {"tocsave1 static" "-melf64ppc" "tmpdir/tocsavelib.o" "-a64" {tocsave1.s}
+       {{objdump -dr tocsave1a.d}} "tocsave1a"}
+    {"tocsave2 shared" "-melf64ppc" "tmpdir/tocsavelib.so" "-a64" {tocsave2.s}
+       {{objdump -dr tocsave2s.d}} "tocsave2s"}
+    {"tocsave2 static" "-melf64ppc" "tmpdir/tocsavelib.o" "-a64" {tocsave2.s}
+       {{objdump -dr tocsave2a.d}} "tocsave2a"}
     {"ambig shared v1" "-shared -melf64ppc" "" "-a64" {funv1.s} {} "funv1.so"}
     {"ambig shared v2" "-shared -melf64ppc" "" "-a64" {funv2.s} {} "funv2.so"}
 }
diff --git a/ld/testsuite/ld-powerpc/tocsave1.s b/ld/testsuite/ld-powerpc/tocsave1.s
new file mode 100644 (file)
index 0000000..75de27a
--- /dev/null
@@ -0,0 +1,24 @@
+ .abiversion 1
+ .global _start
+ .type _start,@function
+ .section ".opd","aw",@progbits
+ .p2align 3
+_start:
+ .quad .L_start, .TOC.@tocbase, 0
+
+ .text
+.L_start:
+ nop
+.L1:
+# tocsave in a function prologue
+ .reloc .,R_PPC64_TOCSAVE,.L1
+ nop
+
+ nop
+# tocsave on a call
+ bl foo
+ .reloc .,R_PPC64_TOCSAVE,.L1
+ nop
+
+ blr
+ .size _start, .-.L_start
diff --git a/ld/testsuite/ld-powerpc/tocsave1a.d b/ld/testsuite/ld-powerpc/tocsave1a.d
new file mode 100644 (file)
index 0000000..9ae5ed5
--- /dev/null
@@ -0,0 +1,15 @@
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+.* <\._start>:
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (0d 00 00 48|48 00 00 0d)       bl      .* <foo>
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (20 00 80 4e|4e 80 00 20)       blr
+
+.* <foo>:
+.*:    (20 00 80 4e|4e 80 00 20)       blr
diff --git a/ld/testsuite/ld-powerpc/tocsave1s.d b/ld/testsuite/ld-powerpc/tocsave1s.d
new file mode 100644 (file)
index 0000000..1e6eb9b
--- /dev/null
@@ -0,0 +1,9 @@
+#...
+.* <\._start>:
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (28 00 41 f8|f8 41 00 28)       std     r2,40\(r1\)
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (.. .. .. 4b|4b .. .. ..)       bl      .* <.*\.plt_call\.foo>
+.*:    (28 00 41 e8|e8 41 00 28)       ld      r2,40\(r1\)
+.*:    (20 00 80 4e|4e 80 00 20)       blr
+#pass
diff --git a/ld/testsuite/ld-powerpc/tocsave2.s b/ld/testsuite/ld-powerpc/tocsave2.s
new file mode 100644 (file)
index 0000000..94683c6
--- /dev/null
@@ -0,0 +1,24 @@
+ .abiversion 2
+ .global _start
+ .type _start,@function
+_start:
+ nop
+.L1:
+# Function prologue tocsave.
+ .reloc .,R_PPC64_TOCSAVE,.L1
+ nop
+
+ nop
+# Call with tocsave on nop
+ bl foo
+ .reloc .,R_PPC64_TOCSAVE,.L1
+ nop
+
+ nop
+# A call without tocsave (maybe in a different function, or after alloca
+# dynamic stack allocation loses r2 save in same function).
+ bl foo
+ nop
+
+ blr
+ .size _start, .-_start
diff --git a/ld/testsuite/ld-powerpc/tocsave2a.d b/ld/testsuite/ld-powerpc/tocsave2a.d
new file mode 100644 (file)
index 0000000..fbae8c0
--- /dev/null
@@ -0,0 +1,18 @@
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+.* <_start>:
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (19 00 00 48|48 00 00 19)       bl      .* <foo>
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (0d 00 00 48|48 00 00 0d)       bl      .* <foo>
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (20 00 80 4e|4e 80 00 20)       blr
+
+.* <foo>:
+.*:    (20 00 80 4e|4e 80 00 20)       blr
diff --git a/ld/testsuite/ld-powerpc/tocsave2s.d b/ld/testsuite/ld-powerpc/tocsave2s.d
new file mode 100644 (file)
index 0000000..b44eae1
--- /dev/null
@@ -0,0 +1,13 @@
+#...
+.* <_start>:
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (18 00 41 f8|f8 41 00 18)       std     r2,24\(r1\)
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (.. .. .. 4b|4b .. .. ..)       bl      .* <.*\.plt_call\.foo\+0x4>
+.*:    (18 00 41 e8|e8 41 00 18)       ld      r2,24\(r1\)
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (.. .. .. 4b|4b .. .. ..)       bl      .* <.*\.plt_call\.foo>
+.*:    (18 00 41 e8|e8 41 00 18)       ld      r2,24\(r1\)
+.*:    (20 00 80 4e|4e 80 00 20)       blr
+.*:    (00 00 00 60|60 00 00 00)       nop
+#pass
diff --git a/ld/testsuite/ld-powerpc/tocsavelib.s b/ld/testsuite/ld-powerpc/tocsavelib.s
new file mode 100644 (file)
index 0000000..7375af2
--- /dev/null
@@ -0,0 +1,5 @@
+ .global foo
+ .type foo,@function
+foo:
+ blr
+ .size foo, .-foo