Testsuite: Ensure pie is disabled on some tests

Recent versions of Ubuntu and Debian default GCC to enable pie.

In dump.exp, pie will causes addresses to be out of range for IHEX.

In break-interp.exp, pie is explicitly set for some tests and assumed
to be disabled for the remainder.

Ensure pie is disabled for these tests when required.

In addition, add a pie option to gdb_compile to match the nopie option
and simplify use.

gdb/testsuite/ChangeLog:

	* README: Add pie options.
	* gdb.base/break-interp.exp: Ensure pie is disabled.
	* gdb.base/dump.exp: Likewise.
	* lib/gdb.exp (gdb_compile): Add pie option.
This commit is contained in:
Alan Hayward 2019-02-13 12:28:38 +00:00
parent d8a95af9df
commit 968aa7ae38
5 changed files with 53 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2019-03-22 Alan Hayward <alan.hayward@arm.com>
* README: Add pie options.
* gdb.base/break-interp.exp: Ensure pie is disabled.
* gdb.base/dump.exp: Likewise.
* lib/gdb.exp (gdb_compile): Add pie option.
2019-03-19 Tom Tromey <tromey@adacore.com>
* gdb.mi/mi2-cli-display.c: New file.

View File

@ -482,6 +482,16 @@ gdb,no_thread_names
The target doesn't support thread names.
gdb,pie_flag
The flag required to force the compiler to produce position-independent
executables.
gdb,pie_ldflag
The flag required to force the linker to produce position-independent
executables.
gdb,nopie_flag
The flag required to force the compiler to produce non-position-independent

View File

@ -625,8 +625,10 @@ foreach ldprelink {NO YES} {
lappend opts {debug}
}
if {$binpie != "NO"} {
lappend opts {additional_flags=-fPIE}
lappend opts {ldflags=-pie}
lappend opts {pie}
} else {
# Debian9/Ubuntu16.10 onwards default to PIE enabled. Ensure it is disabled.
lappend opts {nopie}
}
set dir ${exec}.d

View File

@ -36,6 +36,10 @@ if {[istarget "spu*-*-*"]} then {
set is64bitonly "yes"
}
# Debian9/Ubuntu16.10 onwards default to PIE enabled. Ensure it is disabled as
# this causes addresses to be out of range for IHEX.
lappend options {nopie}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ${options}] != "" } {
untested "failed to compile"
return -1

View File

@ -3461,6 +3461,7 @@ set gdb_saved_set_unbuffered_mode_obj ""
# dynamically load libraries at runtime. For example, on Linux, this adds
# -ldl so that the test can use dlopen.
# - nowarnings: Inhibit all compiler warnings.
# - pie: Force creation of PIE executables.
# - nopie: Prevent creation of PIE executables.
#
# And here are some of the not too obscure options understood by DejaGnu that
@ -3599,8 +3600,33 @@ proc gdb_compile {source dest type options} {
set options [lreplace $options $nowarnings $nowarnings $flag]
}
# Replace the "nopie" option with the appropriate additional_flags
# to disable PIE executables.
# Replace the "pie" option with the appropriate compiler and linker flags
# to enable PIE executables.
set pie [lsearch -exact $options pie]
if {$pie != -1} {
if [target_info exists gdb,pie_flag] {
set flag "additional_flags=[target_info gdb,pie_flag]"
} else {
# For safety, use fPIE rather than fpie. On AArch64, m68k, PowerPC
# and SPARC, fpie can cause compile errors due to the GOT exceeding
# a maximum size. On other architectures the two flags are
# identical (see the GCC manual). Note Debian9 and Ubuntu16.10
# onwards default GCC to using fPIE. If you do require fpie, then
# it can be set using the pie_flag.
set flag "additional_flags=-fPIE"
}
set options [lreplace $options $pie $pie $flag]
if [target_info exists gdb,pie_ldflag] {
set flag "ldflags=[target_info gdb,pie_ldflag]"
} else {
set flag "ldflags=-pie"
}
lappend options "$flag"
}
# Replace the "nopie" option with the appropriate linker flag to disable
# PIE executables. There are no compiler flags for this option.
set nopie [lsearch -exact $options nopie]
if {$nopie != -1} {
if [target_info exists gdb,nopie_flag] {