+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
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 ""
+ }
+}
|| [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" \
"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"