This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] ld: Add -static-pie tests


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b3d7a86748247a68c69939cdf9925d4a78448f2d

commit b3d7a86748247a68c69939cdf9925d4a78448f2d
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Apr 11 06:52:03 2019 -0700

    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:
---
 ld/ChangeLog                    |  8 +++++++
 ld/testsuite/config/default.exp | 37 ++++++++++++++++++++++++++++++
 ld/testsuite/ld-elf/elf.exp     | 50 +++++++++++++++++++++++++++++++++++++++++
 ld/testsuite/ld-ifunc/ifunc.exp | 16 ++++++++++++-
 4 files changed, 110 insertions(+), 1 deletion(-)

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"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]