[PATCH][gdb/testsuite] Limit default_target_compile override
Luis Machado
luis.machado@linaro.org
Mon Jun 22 21:34:48 GMT 2020
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