ld: Add -static-pie tests
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 11 Apr 2019 13:52:03 +0000 (06:52 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 11 Apr 2019 13:52:03 +0000 (06:52 -0700)
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.

ld/ChangeLog
ld/testsuite/config/default.exp
ld/testsuite/ld-elf/elf.exp
ld/testsuite/ld-ifunc/ifunc.exp

index e63f2be17891081833b30e8f6b7de1e5ccf01fd7..d5f44354ca750f4fe7714356874feaa2fb52c93f 100644 (file)
@@ -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
index 7bc869271eb7ddfff587ff72b7dac2d3d4706b35..5acab06329132470e263281b41d9df142cce4d36 100644 (file)
@@ -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 ""
+    }
+}
index 4a5ef8a2199070b1e566a32090901167ee137167..4686870916455213476410a8743827b5bd9ebdf4 100644 (file)
@@ -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" \
index 6725d493e272720fda7508443462b344b6d0237b..e13b5615ff3e645a846f29ac4eab42eb981fa416 100644 (file)
@@ -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"