summaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ld-i386/copyreloc-lib.c1
-rw-r--r--ld/testsuite/ld-i386/copyreloc-main.S24
-rw-r--r--ld/testsuite/ld-i386/copyreloc-main.out0
-rw-r--r--ld/testsuite/ld-i386/copyreloc-main1.rd3
-rw-r--r--ld/testsuite/ld-i386/copyreloc-main2.rd4
-rw-r--r--ld/testsuite/ld-i386/i386.exp64
-rw-r--r--ld/testsuite/ld-i386/pr17689.out2
-rw-r--r--ld/testsuite/ld-i386/pr17689.rd3
-rw-r--r--ld/testsuite/ld-i386/pr17689a.c10
-rw-r--r--ld/testsuite/ld-i386/pr17689b.S44
-rw-r--r--ld/testsuite/ld-i386/pr17827.rd4
11 files changed, 159 insertions, 0 deletions
diff --git a/ld/testsuite/ld-i386/copyreloc-lib.c b/ld/testsuite/ld-i386/copyreloc-lib.c
new file mode 100644
index 00000000000..cbbc5e245eb
--- /dev/null
+++ b/ld/testsuite/ld-i386/copyreloc-lib.c
@@ -0,0 +1 @@
+int a_glob = 2;
diff --git a/ld/testsuite/ld-i386/copyreloc-main.S b/ld/testsuite/ld-i386/copyreloc-main.S
new file mode 100644
index 00000000000..98aef839e07
--- /dev/null
+++ b/ld/testsuite/ld-i386/copyreloc-main.S
@@ -0,0 +1,24 @@
+ .section .text.startup,"ax",@progbits
+ .p2align 4,,15
+ .globl main
+ .type main, @function
+main:
+ .cfi_startproc
+ call __x86.get_pc_thunk.ax
+ addl $_GLOBAL_OFFSET_TABLE_, %eax
+ cmpl $2, a_glob@GOTOFF(%eax)
+ setne %al
+ movzbl %al, %eax
+ ret
+ .cfi_endproc
+ .size main, .-main
+ .section .text.__x86.get_pc_thunk.ax,"axG",@progbits,__x86.get_pc_thunk.ax,comdat
+ .globl __x86.get_pc_thunk.ax
+ .hidden __x86.get_pc_thunk.ax
+ .type __x86.get_pc_thunk.ax, @function
+__x86.get_pc_thunk.ax:
+ .cfi_startproc
+ movl (%esp), %eax
+ ret
+ .cfi_endproc
+ .section .note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-i386/copyreloc-main.out b/ld/testsuite/ld-i386/copyreloc-main.out
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/ld/testsuite/ld-i386/copyreloc-main.out
diff --git a/ld/testsuite/ld-i386/copyreloc-main1.rd b/ld/testsuite/ld-i386/copyreloc-main1.rd
new file mode 100644
index 00000000000..a6bd67c7442
--- /dev/null
+++ b/ld/testsuite/ld-i386/copyreloc-main1.rd
@@ -0,0 +1,3 @@
+#...
+[0-9a-f ]+R_386_COPY+[0-9a-f ]+ +a_glob
+#...
diff --git a/ld/testsuite/ld-i386/copyreloc-main2.rd b/ld/testsuite/ld-i386/copyreloc-main2.rd
new file mode 100644
index 00000000000..ed61aa1927f
--- /dev/null
+++ b/ld/testsuite/ld-i386/copyreloc-main2.rd
@@ -0,0 +1,4 @@
+#failif
+#...
+[0-9a-f ]+R_386_NONE.*
+#...
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index f214d896ecc..9539b94f881 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -335,6 +335,54 @@ if { [isnative]
{{readelf {-Wr} plt-main.rd}} \
"plt-main" \
] \
+ [list \
+ "Build copyreloc-lib.so" \
+ "-shared" \
+ "-fPIC" \
+ { copyreloc-lib.c } \
+ {} \
+ "copyreloc-lib.so" \
+ ] \
+ [list \
+ "Build copyreloc-main with PIE and GOTOFF (1)" \
+ "tmpdir/copyreloc-lib.so -pie" \
+ "" \
+ { copyreloc-main.S } \
+ {{readelf {-Wr} copyreloc-main1.rd}} \
+ "copyreloc-main" \
+ ] \
+ [list \
+ "Build copyreloc-main with PIE and GOTOFF (2)" \
+ "tmpdir/copyreloc-lib.so -pie" \
+ "" \
+ { copyreloc-main.S } \
+ {{readelf {-Wr} copyreloc-main2.rd}} \
+ "copyreloc-main" \
+ ] \
+ [list \
+ "Build pr17689.so" \
+ "-shared" \
+ "-fPIC" \
+ { pr17689a.c } \
+ {} \
+ "pr17689.so" \
+ ] \
+ [list \
+ "Build pr17689 with PIE and GOTOFF" \
+ "tmpdir/pr17689.so -pie" \
+ "" \
+ { pr17689b.S } \
+ {{readelf {-Wr} pr17689.rd}} \
+ "pr17689" \
+ ] \
+ [list \
+ "Build pr17827 with PIE and GOTOFF" \
+ "tmpdir/pr17689.so -pie" \
+ "" \
+ { pr17689b.S } \
+ {{readelf {-Wr} pr17827.rd}} \
+ "pr17827" \
+ ] \
]
run_ld_link_exec_tests [] [list \
@@ -357,5 +405,21 @@ if { [isnative]
"plt-main.out" \
"-fPIC" \
] \
+ [list \
+ "Run copyreloc-main with PIE and GOTOFF" \
+ "tmpdir/copyreloc-lib.so -pie" \
+ "" \
+ { copyreloc-main.S } \
+ "copyreloc-main" \
+ "copyreloc-main.out" \
+ ] \
+ [list \
+ "Run pr17689 with PIE and GOTOFF" \
+ "tmpdir/pr17689.so -pie" \
+ "" \
+ { pr17689b.S } \
+ "pr17689" \
+ "pr17689.out" \
+ ] \
]
}
diff --git a/ld/testsuite/ld-i386/pr17689.out b/ld/testsuite/ld-i386/pr17689.out
new file mode 100644
index 00000000000..38e03525155
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr17689.out
@@ -0,0 +1,2 @@
+PASS
+PASS
diff --git a/ld/testsuite/ld-i386/pr17689.rd b/ld/testsuite/ld-i386/pr17689.rd
new file mode 100644
index 00000000000..dda18509c0b
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr17689.rd
@@ -0,0 +1,3 @@
+#...
+[0-9a-f ]+R_386_COPY+[0-9a-f ]+ +bar
+#...
diff --git a/ld/testsuite/ld-i386/pr17689a.c b/ld/testsuite/ld-i386/pr17689a.c
new file mode 100644
index 00000000000..5317668876e
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr17689a.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+char *bar = "PASS";
+extern char *bar_alias __attribute__ ((weak, alias ("bar")));
+
+void
+foo (char *x)
+{
+ printf ("%s\n", x);
+}
diff --git a/ld/testsuite/ld-i386/pr17689b.S b/ld/testsuite/ld-i386/pr17689b.S
new file mode 100644
index 00000000000..24daf36308d
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr17689b.S
@@ -0,0 +1,44 @@
+ .text
+ .globl main
+ .type main, @function
+main:
+ leal 4(%esp), %ecx
+ andl $-16, %esp
+ pushl -4(%ecx)
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %ecx
+ call __x86.get_pc_thunk.bx
+ addl $_GLOBAL_OFFSET_TABLE_, %ebx
+ subl $12, %esp
+ pushl bar_alias@GOTOFF(%ebx)
+ call foo@PLT
+ popl %eax
+ movl ptr@GOTOFF(%ebx), %eax
+ pushl (%eax)
+ call foo@PLT
+ addl $16, %esp
+ leal -8(%ebp), %esp
+ xorl %eax, %eax
+ popl %ecx
+ popl %ebx
+ popl %ebp
+ leal -4(%ecx), %esp
+ ret
+ .size main, .-main
+ .globl ptr
+ .section .data.rel.local,"aw",@progbits
+ .align 4
+ .type ptr, @object
+ .size ptr, 4
+ptr:
+ .long bar_alias
+ .section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
+ .globl __x86.get_pc_thunk.bx
+ .hidden __x86.get_pc_thunk.bx
+ .type __x86.get_pc_thunk.bx, @function
+__x86.get_pc_thunk.bx:
+ movl (%esp), %ebx
+ ret
+ .section .note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-i386/pr17827.rd b/ld/testsuite/ld-i386/pr17827.rd
new file mode 100644
index 00000000000..ed61aa1927f
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr17827.rd
@@ -0,0 +1,4 @@
+#failif
+#...
+[0-9a-f ]+R_386_NONE.*
+#...