aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2019-04-11 06:52:03 -0700
committerH.J. Lu <hjl.tools@gmail.com>2019-04-11 06:52:03 -0700
commitb3d7a86748247a68c69939cdf9925d4a78448f2d (patch)
tree4f53fc7857d2c79e5417bf0d6005c4cb1a8a7a11 /ld
parenta0ea3a14dc6a6062c0c1f2bfbb7ad0373ec20843 (diff)
downloadgdb-b3d7a86748247a68c69939cdf9925d4a78448f2d.zip
gdb-b3d7a86748247a68c69939cdf9925d4a78448f2d.tar.gz
gdb-b3d7a86748247a68c69939cdf9925d4a78448f2d.tar.bz2
ld: Add -static-pie tests
Add -static-pie tests for DT_INIT_ARRAY, DT_FINI_ARRAY, DT_PREINIT_ARRAY and IFUNC. * testsuite/config/default.exp (STATIC_PIE_LDFLAGS): New. Set to "-static-pie" if target compiler supports it. * testsuite/ld-elf/elf.exp: Run -static-pie tests if $STATIC_PIE_LDFLAGS isn't empty. * testsuite/ld-ifunc/ifunc.exp: Likewise.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/testsuite/config/default.exp37
-rw-r--r--ld/testsuite/ld-elf/elf.exp50
-rw-r--r--ld/testsuite/ld-ifunc/ifunc.exp16
4 files changed, 110 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index e63f2be..d5f4435 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2019-04-11 H.J. Lu <hongjiu.lu@intel.com>
+
+ * testsuite/config/default.exp (STATIC_PIE_LDFLAGS): New. Set
+ to "-static-pie" if target compiler supports it.
+ * testsuite/ld-elf/elf.exp: Run -static-pie tests if
+ $STATIC_PIE_LDFLAGS isn't empty.
+ * testsuite/ld-ifunc/ifunc.exp: Likewise.
+
2019-04-11 Tamar Christina <tamar.christina@arm.com>
PR ld/24302
diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp
index 7bc8692..5acab06 100644
--- a/ld/testsuite/config/default.exp
+++ b/ld/testsuite/config/default.exp
@@ -454,3 +454,40 @@ if { ![info exists STATIC_LDFLAGS] } then {
set STATIC_LDFLAGS ""
}
}
+
+# Set STATIC_PIE_LDFLAGS to "-static-pie" if target compiler supports it.
+
+if { ![info exists STATIC_PIE_LDFLAGS] } then {
+ if { [which $CC] != 0 } {
+ # Check if gcc supports -static-pie.
+ set flags ""
+ if [board_info [target_info name] exists cflags] {
+ append flags " [board_info [target_info name] cflags]"
+ }
+ if [board_info [target_info name] exists ldflags] {
+ append flags " [board_info [target_info name] ldflags]"
+ }
+
+ set basename "tmpdir/static[pid]"
+ set src ${basename}.c
+ set output ${basename}
+ set f [open $src "w"]
+ puts $f "int main (void) { return 0; }"
+ close $f
+ if [is_remote host] {
+ set src [remote_download host $src]
+ }
+ set static_available [run_host_cmd_yesno "$CC" "-static-pie $flags $src -o $output"]
+ remote_file host delete $src
+ remote_file host delete $output
+ file delete $src
+
+ if { $static_available == 1 } then {
+ set STATIC_PIE_LDFLAGS "-static-pie"
+ } else {
+ set STATIC_PIE_LDFLAGS ""
+ }
+ } else {
+ set STATIC_PIE_LDFLAGS ""
+ }
+}
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index 4a5ef8a..4686870 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -235,6 +235,56 @@ if { [istarget *-*-linux*]
|| [istarget *-*-gnu*] } {
run_ld_link_exec_tests $array_tests_pie $xfails
+ if { $STATIC_PIE_LDFLAGS != "" } then {
+ run_ld_link_exec_tests [list \
+ [list \
+ "Static PIE preinit array" \
+ "$STATIC_PIE_LDFLAGS" \
+ "" \
+ {preinit.c} \
+ "preinit-static-pie" \
+ "preinit.out" \
+ "-fPIE" \
+ ] \
+ [list \
+ "Static PIE init array" \
+ "$STATIC_PIE_LDFLAGS" \
+ "" \
+ {init.c} \
+ "init-static-pie" \
+ "init.out" \
+ "-fPIE" \
+ ] \
+ [list \
+ "Static PIE fini array" \
+ "$STATIC_PIE_LDFLAGS" \
+ "" \
+ {fini.c} \
+ "fini-static-pie" \
+ "fini.out" \
+ "-fPIE" \
+ ] \
+ [list \
+ "Static PIE init array mixed" \
+ "$STATIC_PIE_LDFLAGS" \
+ "" \
+ {init-mixed.c} \
+ "init-mixed-static-pie" \
+ "init-mixed.out" \
+ "-I. -fPIE" \
+ ] \
+ [list \
+ "Static PIE PR ld/14525" \
+ "$STATIC_PIE_LDFLAGS" \
+ "" \
+ {pr14525.c} \
+ "pr14525-static-pie" \
+ "pr14525.out" \
+ "-fPIE" \
+ ] \
+ ]
+ }
+
run_ld_link_exec_tests [list \
[list \
"Run mbind2a" \
diff --git a/ld/testsuite/ld-ifunc/ifunc.exp b/ld/testsuite/ld-ifunc/ifunc.exp
index 6725d49..e13b561 100644
--- a/ld/testsuite/ld-ifunc/ifunc.exp
+++ b/ld/testsuite/ld-ifunc/ifunc.exp
@@ -777,6 +777,20 @@ run_ld_link_exec_tests [list \
"pass.out" \
"-fPIE -O2 -g" \
] \
-]}
+]
+if { $STATIC_PIE_LDFLAGS != "" } then {
+ run_ld_link_exec_tests [list \
+ [list \
+ "Run pr23169g" \
+ "$STATIC_PIE_LDFLAGS" \
+ "" \
+ { pr23169a.c pr23169b.c pr23169c.c } \
+ "pr23169g" \
+ "pass.out" \
+ "-fPIE -O2 -g" \
+ ] \
+]
+}
+}
set ASFLAGS "$saved_ASFLAGS"