aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/emulparams/elf_i386.sh4
-rw-r--r--ld/emulparams/elf_x86_64.sh5
-rw-r--r--ld/testsuite/ChangeLog9
-rw-r--r--ld/testsuite/ld-i386/i386.exp18
-rw-r--r--ld/testsuite/ld-i386/plt-main.rd4
-rw-r--r--ld/testsuite/ld-x86-64/plt-main-bnd.dd7
-rw-r--r--ld/testsuite/ld-x86-64/plt-main.rd4
-rw-r--r--ld/testsuite/ld-x86-64/x86-64.exp65
9 files changed, 120 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index f6a4d6f..9ec721f 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emulparams/elf_i386.sh (TINY_READONLY_SECTION): New.
+ * emulparams/elf_x86_64.sh (TINY_READONLY_SECTION): Add .plt.got.
+
2014-11-24 H.J. Lu <hongjiu.lu@intel.com>
* configure: Regenerated.
diff --git a/ld/emulparams/elf_i386.sh b/ld/emulparams/elf_i386.sh
index 93f1992..2ebfaac 100644
--- a/ld/emulparams/elf_i386.sh
+++ b/ld/emulparams/elf_i386.sh
@@ -13,6 +13,10 @@ GENERATE_PIE_SCRIPT=yes
NO_SMALL_DATA=yes
SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 12 ? 12 : 0"
IREL_IN_PLT=
+# Reuse TINY_READONLY_SECTION which is placed right after .plt section.
+TINY_READONLY_SECTION="
+.plt.got ${RELOCATING-0} : { *(.plt.got) }
+"
# Linux modify the default library search path to first include
# a 32-bit specific directory.
diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh
index 1e83a74..aa26a1b 100644
--- a/ld/emulparams/elf_x86_64.sh
+++ b/ld/emulparams/elf_x86_64.sh
@@ -17,7 +17,10 @@ LARGE_BSS_AFTER_BSS=
SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
IREL_IN_PLT=
# Reuse TINY_READONLY_SECTION which is placed right after .plt section.
-TINY_READONLY_SECTION=".plt.bnd ${RELOCATING-0} : { *(.plt.bnd) }"
+TINY_READONLY_SECTION="
+.plt.got ${RELOCATING-0} : { *(.plt.got) }
+.plt.bnd ${RELOCATING-0} : { *(.plt.bnd) }
+"
if [ "x${host}" = "x${target}" ]; then
case " $EMULATION_LIBPATH " in
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index be12722..a750240 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2014-11-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/i386.exp: Add run-time relocation tests for plt-main.
+ * ld-i386/plt-main.rd: New file.
+ * ld-x86-64/plt-main-bnd.dd: Likewise.
+ * ld-x86-64/plt-main.rd: Likewise.
+ * ld-x86-64/x86-64.exp: Add run-time relocation tests for
+ plt-main.
+
2014-11-21 H.J. Lu <hongjiu.lu@intel.com>
* ld-i386/plt-lib.c: New file.
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index 4c870b8..304713d 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -309,6 +309,24 @@ if { [isnative]
{{readelf {-Wr} plt-main4.rd}} \
"libplt-main4.a" \
] \
+ [list \
+ "Build plt-main" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
+ "" \
+ { plt-main5.c } \
+ {{readelf {-Wr} plt-main.rd}} \
+ "plt-main" \
+ ] \
+ [list \
+ "Build plt-main with PIE" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
+ "-fPIC" \
+ { plt-main5.c } \
+ {{readelf {-Wr} plt-main.rd}} \
+ "plt-main" \
+ ] \
]
run_ld_link_exec_tests [] [list \
diff --git a/ld/testsuite/ld-i386/plt-main.rd b/ld/testsuite/ld-i386/plt-main.rd
new file mode 100644
index 0000000..6d01ff9
--- /dev/null
+++ b/ld/testsuite/ld-i386/plt-main.rd
@@ -0,0 +1,4 @@
+#failif
+#...
+[0-9a-f ]+R_386_JUMP_SLOT +0+ +bar
+#...
diff --git a/ld/testsuite/ld-x86-64/plt-main-bnd.dd b/ld/testsuite/ld-x86-64/plt-main-bnd.dd
new file mode 100644
index 0000000..8598e30
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/plt-main-bnd.dd
@@ -0,0 +1,7 @@
+#...
+Disassembly of section .plt.got:
+
+[a-f0-9]+ <.plt.got>:
+[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmpq \*0x20....\(%rip\) # ...... <_DYNAMIC\+0x...>
+[ ]*[a-f0-9]+: 90 nop
+#pass
diff --git a/ld/testsuite/ld-x86-64/plt-main.rd b/ld/testsuite/ld-x86-64/plt-main.rd
new file mode 100644
index 0000000..1effcd4
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/plt-main.rd
@@ -0,0 +1,4 @@
+#failif
+#...
+[0-9a-f ]+R_X86_64_JUMP_SLOT +0+ +bar \+ 0
+#...
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index ab1bfd1..886469b 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -374,6 +374,24 @@ if { [isnative] && [which $CC] != 0 } {
{{readelf {-Wr} plt-main4.rd}} \
"libplt-main4.a" \
] \
+ [list \
+ "Build plt-main" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
+ "" \
+ { plt-main5.c } \
+ {{readelf {-Wr} plt-main.rd}} \
+ "plt-main" \
+ ] \
+ [list \
+ "Build plt-main with PIE" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
+ "-fPIC" \
+ { plt-main5.c } \
+ {{readelf {-Wr} plt-main.rd}} \
+ "plt-main" \
+ ] \
]
run_ld_link_exec_tests [] [list \
@@ -397,6 +415,53 @@ if { [isnative] && [which $CC] != 0 } {
"-fPIC" \
] \
]
+
+ if { [istarget "x86_64-*-linux*"] \
+ && ![istarget "x86_64-*-linux*-gnux32"]} {
+
+ run_cc_link_tests [list \
+ [list \
+ "Build plt-main with -z bndplt" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt" \
+ "" \
+ { plt-main5.c } \
+ {{objdump {-drw} plt-main-bnd.dd}} \
+ "plt-main-bnd" \
+ ] \
+ [list \
+ "Build plt-main with PIE and -z bndplt" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -pie" \
+ "-fPIC" \
+ { plt-main5.c } \
+ {{objdump {-drw} plt-main-bnd.dd}} \
+ "plt-main-pie-bnd" \
+ ] \
+ ]
+
+ run_ld_link_exec_tests [] [list \
+ [list \
+ "Run plt-main with -z bndplt" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt" \
+ "" \
+ { plt-main5.c } \
+ "plt-main-bnd" \
+ "plt-main.out" \
+ ] \
+ [list \
+ "Run plt-main with PIE and -z bndplt" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -pie" \
+ "" \
+ { plt-main5.c } \
+ "plt-main-pie-bnd" \
+ "plt-main.out" \
+ "-fPIC" \
+ ] \
+ ]
+ }
}
if { ![istarget "x86_64-*-linux*"]} {