[PATCH][gdb/testsuite] Limit default_target_compile override

Luis Machado luis.machado@linaro.org
Fri Jun 26 11:35:15 GMT 2020


Report here now, so it gets included in 10.1.

https://sourceware.org/bugzilla/show_bug.cgi?id=26175

On 6/22/20 6:34 PM, Luis Machado wrote:
> Hi,
> 
> This commit seems to have caused a few regressions for aarch64-linux:
> 
> -# of expected passes        75098
> -# of unexpected failures    63
> -# of expected failures        114
> +# of expected passes        75036
> +# of unexpected failures    149
> +# of expected failures        111
> 
> They are distributed across a few different tests:
> 
> gdb.base/display.exp
> gdb.base/jit-reader-simple.exp
> gdb.base/shlib-call.exp
> gdb.base/solib-weak.exp
> gdb.base/step-test.exp
> gdb.base/store.exp
> gdb.base/type-opaque.exp
> gdb.cp/ovldbreak.exp
> gdb.multi/multi-target.exp
> gdb.reverse/step-precsave.exp
> gdb.reverse/step-reverse.exp
> 
> It seems mostly related to missing options in the compilation line. For 
> example, display.exp is missing -fno-stack-protector, which leads to a 
> different source stepping pattern than the test is actually expecting.
> 
> 
> On 6/19/20 9:10 AM, Tom de Vries wrote:
>> Hi,
>>
>> The file lib/future.exp contains an override of dejagnu's
>> default_target_compile.
>>
>> The override is activated if dejagnu's default_target_compile is missing
>> support for one or more languages.
>>
>> However, if the override is activated, it's active for all languages.
>>
>> This unnecessarily extends the scope of potential problems in the 
>> override to
>> languages that don't need the override.
>>
>> Fix this by limiting the scope of the override.
>>
>> Also add a note stating for which languages the override is active, as a
>> reminder that support for those languages needs to be ported to 
>> dejagnu.  With
>> my system dejagnu 1.6.1, as well as with current dejagnu trunk, that 
>> gives us:
>> ...
>> NOTE: Dejagnu's default_target_compile is missing support for Go, using \
>>    local override
>> NOTE: Dejagnu's default_target_compile is missing support for Rust, 
>> using \
>>    local override
>> ...
>>
>> Tested on x86_64-linux.
>>
>> Any comments?
>>
>> Thanks,
>> - Tom
>>
>> [gdb/testsuite] Limit default_target_compile override
>>
>> gdb/testsuite/ChangeLog:
>>
>> 2020-06-19  Tom de Vries  <tdevries@suse.de>
>>
>>     * lib/gdb.exp (gdb_note): New proc.
>>     * lib/future.exp (gdb_default_target_compile_1): Factor out of ...
>>     (gdb_default_target_compile): ... here.  Only call
>>     gdb_default_target_compile_1 if use_gdb_compile(<lang>) is set.
>>     (use_gdb_compile): Change to array.
>>     (toplevel): Update sets of use_gdb_compile to specify language.
>>     Warn about default_target_compile override.  Store dejagnu's version
>>     of default_target_compile in dejagnu_default_target_compile.
>>
>> ---
>>   gdb/testsuite/lib/future.exp | 68 
>> +++++++++++++++++++++++++++++++++++---------
>>   gdb/testsuite/lib/gdb.exp    |  6 ++++
>>   2 files changed, 61 insertions(+), 13 deletions(-)
>>
>> diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp
>> index 62cc7e68a5..a46640c14c 100644
>> --- a/gdb/testsuite/lib/future.exp
>> +++ b/gdb/testsuite/lib/future.exp
>> @@ -172,7 +172,9 @@ proc gdb_find_eu-unstrip {} {
>>       return $eu_unstrip
>>   }
>> -proc gdb_default_target_compile {source destfile type options} {
>> +# Local version of default_target_compile, to be used for languages that
>> +# dejagnu's default_target_compile doesn't support.
>> +proc gdb_default_target_compile_1 {source destfile type options} {
>>       global target_triplet
>>       global tool_root_dir
>>       global CFLAGS_FOR_TARGET
>> @@ -627,40 +629,80 @@ proc gdb_default_target_compile {source destfile 
>> type options} {
>>       return ${comp_output}
>>   }
>> -# See if the version of dejaGNU being used to run the testsuite is
>> -# recent enough to contain support for building Ada programs or not.
>> -# If not, then use the functions above in place of the ones provided
>> -# by dejaGNU. This is only temporary (brobecker/2004-03-31).
>> +# If dejagnu's default_target_compile supports the language specified in
>> +# OPTIONS, use it.  Otherwise, use gdb_default_target_compile_1.
>> +proc gdb_default_target_compile {source destfile type options} {
>> +    global use_gdb_compile
>> +
>> +    set need_local 0
>> +    foreach i $options {
>> +
>> +    if { $i == "ada" || $i == "d" || $i == "go" || $i == "rust" } {
>> +        set need_local [info exists use_gdb_compile($i)]
>> +        break
>> +    }
>> +
>> +    if { $i == "c++" } {
>> +        break
>> +    }
>> +
>> +    if { $i == "f77" || $i == "f90" } {
>> +        set need_local [info exists use_gdb_compile(fortran)]
>> +        break
>> +    }
>> +    }
>> +
>> +    if { $need_local } {
>> +    return [gdb_default_target_compile_1 $source $destfile $type 
>> $options]
>> +    }
>> +
>> +    return [dejagnu_default_target_compile $source $destfile $type 
>> $options]
>> +}
>> +
>> +# Array of languages for which dejagnu's default_target_compile is 
>> missing
>> +# support.
>> +array set use_gdb_compile [list]
>> +
>> +# Note missing support in dejagnu's default_target_compile.  This
>> +# needs to be fixed by porting the missing support to Dejagnu.
>> +set note_prefix "Dejagnu's default_target_compile is missing support 
>> for "
>> +set note_suffix    ", using local override"
>> -set use_gdb_compile 0
>>   if {[info procs find_gnatmake] == ""} {
>>       rename gdb_find_gnatmake find_gnatmake
>> -    set use_gdb_compile 1
>> +    set use_gdb_compile(ada) 1
>> +    gdb_note [join [list $note_prefix "Ada" $note_suffix] ""]
>>   }
>>   if {[info procs find_gfortran] == ""} {
>>       rename gdb_find_gfortran find_gfortran
>> -    set use_gdb_compile 1
>> +    set use_gdb_compile(fortran) 1
>> +    gdb_note [join [list $note_prefix "Fortran" $note_suffix] ""]
>>   }
>>   if {[info procs find_go_linker] == ""} {
>>       rename gdb_find_go find_go
>>       rename gdb_find_go_linker find_go_linker
>> -    set use_gdb_compile 1
>> +    set use_gdb_compile(go) 1
>> +    gdb_note [join [list $note_prefix "Go" $note_suffix] ""]
>>   }
>>   if {[info procs find_gdc] == ""} {
>>       rename gdb_find_gdc find_gdc
>> -    set use_gdb_compile 1
>> +    set use_gdb_compile(d) 1
>> +    gdb_note [join [list $note_prefix "D" $note_suffix] ""]
>>   }
>>   if {[info procs find_rustc] == ""} {
>>       rename gdb_find_rustc find_rustc
>> -    set use_gdb_compile 1
>> +    set use_gdb_compile(rust) 1
>> +    gdb_note [join [list $note_prefix "Rust" $note_suffix] ""]
>>   }
>> -if {$use_gdb_compile} {
>> -    catch {rename default_target_compile {}}
>> +# If dejagnu's default_target_compile is missing support for any 
>> language,
>> +# override it.
>> +if { [array size use_gdb_compile] != 0 } {
>> +    catch {rename default_target_compile dejagnu_default_target_compile}
>>       rename gdb_default_target_compile default_target_compile
>>   }
>> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
>> index 480af7052f..7b243f5fff 100644
>> --- a/gdb/testsuite/lib/gdb.exp
>> +++ b/gdb/testsuite/lib/gdb.exp
>> @@ -7393,5 +7393,11 @@ proc tuiterm_env { } {
>>       lappend gdb_finish_hooks tuiterm_env_finish
>>   }
>> +# Dejagnu has a version of note, but usage is not allowed outside of 
>> dejagnu.
>> +# Define a local version.
>> +proc gdb_note { message } {
>> +    verbose -- "NOTE: $message" 0
>> +}
>> +
>>   # Always load compatibility stuff.
>>   load_lib future.exp
>>


More information about the Gdb-patches mailing list