On Thu, 23 Jul 2020, Alexandre Oliva wrote: > 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?
OK. Ricahrd. > > 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 > + } > + } > + } > } > } > > > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)