The testglue object file gets interpreted as another input file,
changing the dump and aux output names in GCC unless it is protected
by -Wl, like board file-named extra inputs.
Refactor the code that modifies the board settings so that it can be
used to modify regular variables as well, and do so.
Regstrapped on x86_64-linux-gnu, fix confirmed on an affected platform
by the bug reporter. Ok to install?
for gcc/testsuite/ChangeLog
PR testsuite/95720
* lib/gcc-defs.exp (gcc_adjust_linker_flags_list): Split out of...
(gcc_adjust_linker_flags): ... this. Protect gluefile and
wrap_flags.
* gcc.misc-tests/outputs.exp: Use gcc_adjust_linker_flags_list.
---
gcc/testsuite/gcc.misc-tests/outputs.exp | 14 ++------
gcc/testsuite/lib/gcc-defs.exp | 55 ++++++++++++++++++++----------
2 files changed, 40 insertions(+), 29 deletions(-)
diff --git a/gcc/testsuite/gcc.misc-tests/outputs.exp
b/gcc/testsuite/gcc.misc-tests/outputs.exp
index 469d94c..0784a8e 100644
--- a/gcc/testsuite/gcc.misc-tests/outputs.exp
+++ b/gcc/testsuite/gcc.misc-tests/outputs.exp
@@ -56,17 +56,9 @@ set link_options ""
set dest [target_info name]
foreach i { ldflags libs ldscript } {
if {[board_info $dest exists $i]} {
- set skip ""
- foreach opt [split [board_info $dest $i]] {
- if { $opt == "" } then {
- continue
- } elseif { $skip != "" } then {
- set skip ""
- } elseif { $opt == "-Xlinker" } then {
- set skip $opt
- } elseif { ![string match "-*" $opt] && [file isfile $opt] } {
- set opt "-Wl,$opt"
- }
+ set opts [board_info $dest $i]
+ set nopts [gcc_adjust_linker_flags_list $opts]
+ foreach opt $nopts {
append link_options " additional_flags=$opt"
}
}
diff --git a/gcc/testsuite/lib/gcc-defs.exp b/gcc/testsuite/lib/gcc-defs.exp
index 87eeb7d..380a18b 100644
--- a/gcc/testsuite/lib/gcc-defs.exp
+++ b/gcc/testsuite/lib/gcc-defs.exp
@@ -287,9 +287,32 @@ proc dg-additional-files { args } {
set gcc_adjusted_linker_flags 0
-# Add -Wl, before any file names in ldflags, libs, and ldscript, so
-# that default object files or libraries do not change the names of
-# gcc auxiliary outputs.
+# Add -Wl, before any file names in $opts. Return the modified list.
+
+proc gcc_adjust_linker_flags_list { args } {
+ set opts [lindex $args 0]
+ set nopts {}
+ set skip ""
+ foreach opt [split $opts " "] {
+ if { $opt == "" } then {
+ continue
+ } elseif { $skip != "" } then {
+ set skip ""
+ } elseif { $opt == "-Xlinker" } then {
+ set skip $opt
+ } elseif { ![string match "-*" $opt] \
+ && [file isfile $opt] } {
+ set opt "-Wl,$opt"
+ }
+ lappend nopts $opt
+ }
+ return $nopts
+}
+
+# Add -Wl, before any file names in the target board's ldflags, libs,
+# and ldscript, as well as in global testglue and wrap_flags, so that
+# default object files or libraries do not change the names of gcc
+# auxiliary outputs.
proc gcc_adjust_linker_flags {} {
global gcc_adjusted_linker_flags
@@ -303,27 +326,23 @@ proc gcc_adjust_linker_flags {} {
foreach i { ldflags libs ldscript } {
if {[board_info $dest exists $i]} {
set opts [board_info $dest $i]
- set nopts {}
- set skip ""
- foreach opt [split $opts] {
- if { $opt == "" } then {
- continue
- } elseif { $skip != "" } then {
- set skip ""
- } elseif { $opt == "-Xlinker" } then {
- set skip $opt
- } elseif { ![string match "-*" $opt] \
- && [file isfile $opt] } {
- set opt "-Wl,$opt"
- }
- lappend nopts $opt
- }
+ set nopts [gcc_adjust_linker_flags_list $opts]
if { $nopts != $opts } {
unset_currtarget_info $i
set_currtarget_info $i "$nopts"
}
}
}
+ foreach i { gluefile wrap_flags } {
+ global $i
+ if {[info exists $i]} {
+ set opts [set $i]
+ set nopts [gcc_adjust_linker_flags_list $opts]
+ if { $nopts != $opts } {
+ set $i $nopts
+ }
+ }
+ }
}
}
--
Alexandre Oliva, freedom fighter he/him https://FSFLA.org/blogs/lxo/
Free Software Evangelist Stallman was right, but he's left :(
GNU Toolchain Engineer Live long and free, and prosper ethically