aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog10
-rw-r--r--ld/testsuite/ld-or1k/or1k.exp22
-rw-r--r--ld/testsuite/ld-or1k/plt1.dd27
-rw-r--r--ld/testsuite/ld-or1k/plt1.s11
-rw-r--r--ld/testsuite/ld-or1k/plt1.x.dd27
-rw-r--r--ld/testsuite/ld-or1k/plta1.dd27
-rw-r--r--ld/testsuite/ld-or1k/plta1.s11
-rw-r--r--ld/testsuite/ld-or1k/pltlib.s12
8 files changed, 147 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 7e6195b..b0c9eaa 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,15 @@
2018-10-05 Richard Henderson <rth@twiddle.net>
+ * testsuite/ld-or1k/or1k.exp: Add test cases for plt generation.
+ * testsuite/ld-or1k/plt1.dd: New file.
+ * testsuite/ld-or1k/plt1.s: New file.
+ * testsuite/ld-or1k/plt1.x.dd: New file.
+ * testsuite/ld-or1k/plta1.dd: New file.
+ * testsuite/ld-or1k/plta1.s: New file.
+ * testsuite/ld-or1k/pltlib.s: New file.
+
+2018-10-05 Richard Henderson <rth@twiddle.net>
+
* testsuite/ld-or1k/offsets1.d: New file.
* testsuite/ld-or1k/offsets1.s: New file.
* testsuite/ld-or1k/or1k.exp: New file.
diff --git a/ld/testsuite/ld-or1k/or1k.exp b/ld/testsuite/ld-or1k/or1k.exp
index 8f09a7c..540ca29 100644
--- a/ld/testsuite/ld-or1k/or1k.exp
+++ b/ld/testsuite/ld-or1k/or1k.exp
@@ -38,6 +38,23 @@ set or1ktests {
"offsets1"}
}
+set or1kplttests {
+ {"PLTA -fpic -shared" "-fpic -shared" ""
+ "" {plta1.s}
+ {{objdump -dr plta1.dd}}
+ "libplta1.so"}
+ {"PLT -fpic -shared" "-fpic -shared" ""
+ "" {plt1.s}
+ {{objdump -dr plt1.dd}}
+ "libplt1.so"}
+ {"Helper shared library" "-fpic -shared" ""
+ "" {pltlib.s} {} "libpltlib.so"}
+ {"PLT -fno-pic exec -relax" "-relax tmpdir/libpltlib.so" ""
+ "" {plt1.s}
+ {{objdump -dr plt1.x.dd}}
+ "plt1.x"}
+}
+
# Not implemented yet
# {"TLS -fpic -shared" "-shared -melf64alpha" ""
# "" {align.s tlspic1.s tlspic2.s}
@@ -66,4 +83,9 @@ set or1ktests {
# "" {tlsg.s}
# {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
+# Shared objects not supported on newlib
run_ld_link_tests $or1ktests
+if { ![istarget "or1k*-*-elf*"] } {
+ run_ld_link_tests $or1kplttests
+ return
+}
diff --git a/ld/testsuite/ld-or1k/plt1.dd b/ld/testsuite/ld-or1k/plt1.dd
new file mode 100644
index 0000000..a982530
--- /dev/null
+++ b/ld/testsuite/ld-or1k/plt1.dd
@@ -0,0 +1,27 @@
+
+.*\.so: file format elf32-or1k
+
+
+Disassembly of section \.plt:
+
+[0-9a-f]+ <\.plt>:
+ [0-9a-f]+: 85 f0 00 08 l\.lwz r15,8\(r16\)
+ [0-9a-f]+: 44 00 78 00 l\.jr r15
+ [0-9a-f]+: 85 90 00 04 l\.lwz r12,4\(r16\)
+ [0-9a-f]+: 15 00 00 00 l\.nop 0x0
+ [0-9a-f]+: 85 90 00 0c l\.lwz r12,12\(r16\)
+ [0-9a-f]+: 44 00 60 00 l\.jr r12
+ [0-9a-f]+: a9 60 00 00 l\.ori r11,r0,0x0
+ [0-9a-f]+: 15 00 00 00 l\.nop 0x0
+ [0-9a-f]+: 85 90 00 10 l\.lwz r12,16\(r16\)
+ [0-9a-f]+: 44 00 60 00 l\.jr r12
+ [0-9a-f]+: a9 60 00 0c l\.ori r11,r0,0xc
+ [0-9a-f]+: 15 00 00 00 l\.nop 0x0
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <_start>:
+ [0-9a-f]+: 03 ff ff f8 l\.j [0-9a-f]+ <.plt\+0x10>
+ [0-9a-f]+: 15 00 00 00 l\.nop 0x0
+ [0-9a-f]+: 03 ff ff fa l\.j [0-9a-f]+ <.plt\+0x20>
+ [0-9a-f]+: 15 00 00 00 l\.nop 0x0
diff --git a/ld/testsuite/ld-or1k/plt1.s b/ld/testsuite/ld-or1k/plt1.s
new file mode 100644
index 0000000..a5573bd
--- /dev/null
+++ b/ld/testsuite/ld-or1k/plt1.s
@@ -0,0 +1,11 @@
+ .data
+ .p2align 16
+
+ .text
+ .globl _start
+_start:
+
+ l.j plt(x)
+ l.nop
+ l.j plt(y)
+ l.nop
diff --git a/ld/testsuite/ld-or1k/plt1.x.dd b/ld/testsuite/ld-or1k/plt1.x.dd
new file mode 100644
index 0000000..d2f47a1
--- /dev/null
+++ b/ld/testsuite/ld-or1k/plt1.x.dd
@@ -0,0 +1,27 @@
+
+.*\.x: file format elf32-or1k
+
+
+Disassembly of section \.plt:
+
+[0-9a-f]+ <\.plt>:
+ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0
+ +[0-9a-f]+: 85 ec [0-9a-f]+ [0-9a-f]+ l\.lwz r15,[0-9]+\(r12\)
+ +[0-9a-f]+: 44 00 78 00 l\.jr r15
+ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\)
+ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0
+ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\)
+ +[0-9a-f]+: 44 00 60 00 l\.jr r12
+ +[0-9a-f]+: a9 60 00 00 l\.ori r11,r0,0x0
+ +[0-9a-f]+: 19 80 00 00 l\.movhi r12,0x0
+ +[0-9a-f]+: 85 8c [0-9a-f]+ [0-9a-f]+ l\.lwz r12,[0-9]+\(r12\)
+ +[0-9a-f]+: 44 00 60 00 l\.jr r12
+ +[0-9a-f]+: a9 60 00 0c l\.ori r11,r0,0xc
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <_start>:
+ +[0-9a-f]+: 03 ff ff f8 l\.j [0-9a-f]+ <.plt\+0x10>
+ +[0-9a-f]+: 15 00 00 00 l\.nop 0x0
+ +[0-9a-f]+: 03 ff ff fa l\.j [0-9a-f]+ <.plt\+0x20>
+ +[0-9a-f]+: 15 00 00 00 l\.nop 0x0
diff --git a/ld/testsuite/ld-or1k/plta1.dd b/ld/testsuite/ld-or1k/plta1.dd
new file mode 100644
index 0000000..6767c41
--- /dev/null
+++ b/ld/testsuite/ld-or1k/plta1.dd
@@ -0,0 +1,27 @@
+
+.*\.so: file format elf32-or1k
+
+
+Disassembly of section .plt:
+
+[0-9a-f]+ <.plt>:
+ [0-9a-f]+: 09 80 00 01 l\.adrp r12,2000 <.*>
+ [0-9a-f]+: 85 ec 02 10 l\.lwz r15,528\(r12\)
+ [0-9a-f]+: 44 00 78 00 l\.jr r15
+ [0-9a-f]+: 85 8c 02 0c l\.lwz r12,524\(r12\)
+ [0-9a-f]+: 09 80 00 01 l\.adrp r12,2000 <.*>
+ [0-9a-f]+: 85 8c 02 14 l\.lwz r12,532\(r12\)
+ [0-9a-f]+: 44 00 60 00 l\.jr r12
+ [0-9a-f]+: a9 60 00 00 l\.ori r11,r0,0x0
+ [0-9a-f]+: 09 80 00 01 l\.adrp r12,2000 <.*>
+ [0-9a-f]+: 85 8c 02 18 l\.lwz r12,536\(r12\)
+ [0-9a-f]+: 44 00 60 00 l\.jr r12
+ [0-9a-f]+: a9 60 00 0c l\.ori r11,r0,0xc
+
+Disassembly of section .text:
+
+[0-9a-f]+ <_start>:
+ [0-9a-f]+: 03 ff ff f8 l\.j [0-9a-f]+ <.plt\+0x10>
+ [0-9a-f]+: 15 00 00 00 l\.nop 0x0
+ [0-9a-f]+: 03 ff ff fa l\.j [0-9a-f]+ <.plt\+0x20>
+ [0-9a-f]+: 15 00 00 00 l\.nop 0x0
diff --git a/ld/testsuite/ld-or1k/plta1.s b/ld/testsuite/ld-or1k/plta1.s
new file mode 100644
index 0000000..82f8175
--- /dev/null
+++ b/ld/testsuite/ld-or1k/plta1.s
@@ -0,0 +1,11 @@
+ .data
+ .p2align 16
+
+ .text
+ .globl _start
+_start:
+
+ l.j plta(x)
+ l.nop
+ l.j plta(y)
+ l.nop
diff --git a/ld/testsuite/ld-or1k/pltlib.s b/ld/testsuite/ld-or1k/pltlib.s
new file mode 100644
index 0000000..baf76ca
--- /dev/null
+++ b/ld/testsuite/ld-or1k/pltlib.s
@@ -0,0 +1,12 @@
+ .section .data
+ .globl x, y
+x: .long 33
+y: .long 44
+
+ .section .text
+ .align 4
+ .global func
+ .type func, @function
+func:
+ l.jr r9
+ l.nop