[PATCH][gdb/testsuite] Limit default_target_compile override

Tom de Vries tdevries@suse.de
Fri Jun 19 14:18:52 GMT 2020


On 6/19/20 2:10 PM, 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.
> 

Interestingly, AFAICT this also seems to fix all the regressions with
dejagnu trunk.

Thanks,
- Tom

> 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