From: H.J. Lu Date: Thu, 11 Apr 2019 13:52:03 +0000 (-0700) Subject: ld: Add -static-pie tests X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b3d7a86748247a68c69939cdf9925d4a78448f2d;p=binutils-gdb.git 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. --- diff --git a/ld/ChangeLog b/ld/ChangeLog index e63f2be1789..d5f44354ca7 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2019-04-11 H.J. Lu + + * 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 PR ld/24302 diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp index 7bc869271eb..5acab063291 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 4a5ef8a2199..46868709164 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 6725d493e27..e13b5615ff3 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"