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.
This commit is contained in:
H.J. Lu 2019-04-11 06:52:03 -07:00
parent a0ea3a14dc
commit b3d7a86748
4 changed files with 110 additions and 1 deletions

View 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

View 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 ""
}
}

View 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" \

View 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"