On Mon, Jan 12, 2026 at 12:29 PM Joseph Myers <[email protected]> wrote:
>
> The guality tests expect to run (native) GDB on the target.  If this
> is available, there is some support for cross testing, but with
> various defects and limitations, some of them fixed here.
>
> * GUALITY_GDB_NAME doesn't get passed through to the target for remote
>   testing (a general limitation of the DejaGnu interface: it doesn't
>   support setting environment variables on the target).  Not fixed
>   here.
>
> * Using in-tree GDB is only appropriate when host = target, since
>   in-tree GDB runs on the host and the testsuite runs GDB on the
>   target.  Fixed here.  (Note that [isnative] isn't used because that
>   refers to build = target, and we need host = target here.)
>
> * [transform gdb] is not appropriate because that's a cross-GDB and
>   the tests run GDB on the target, so need a native GDB.  Fixed here.
>
> * gdb-test (used by some guality tests) exits early in cross and
>   remote cases (whereas the tests running GDB directly from the test
>   itself via popen can already do so on the target without needing
>   further patches).  Fixed here.  There are various other fixes done
>   in gdb-test as well; it needs to transfer files to the target then
>   delete them afterwards.
>
> * report_gdb expects to run GDB on the host when the tests run it on
>   the target.  Fixed here.
>
> Note: some similar fixes will also be needed for simulate-thread tests
> to get them working for cross testing, but I haven't done those yet.
>
> Tested for x86_64-pc-linux-gnu to make sure native testing isn't
> broken, and with cross to aarch64-linux.
>
>         * lib/gcc-gdb-test.exp (gdb-test): Do not return early for
>         non-native and remote.  Download executable and GDB command file
>         to target before running GDB there, and delete when closing
>         target.
>         (report_gdb): Use target when testing GDB availability and
>         version.
>         * g++.dg/guality/guality.exp: Only use in-tree GDB when host =
>         target.  Do not use [transform gdb].
>         * gcc.dg/guality/guality.exp: Likewise.
>         * gfortran.dg/guality/guality.exp: Likewise.

Ok.

Thanks,
Andrew

>
> diff --git a/gcc/testsuite/g++.dg/guality/guality.exp 
> b/gcc/testsuite/g++.dg/guality/guality.exp
> index 6de5e8091a50..695ed02b89bb 100644
> --- a/gcc/testsuite/g++.dg/guality/guality.exp
> +++ b/gcc/testsuite/g++.dg/guality/guality.exp
> @@ -40,14 +40,17 @@ dg-init
>  torture-init
>
>  global GDB
> +global host_triplet target_triplet
>  if ![info exists ::env(GUALITY_GDB_NAME)] {
>      if [info exists GDB] {
>         set guality_gdb_name "$GDB"
> -    } elseif { [info exists rootme] && [file exists $rootme/../gdb/gdb] } {
> +    } elseif { [string equal $host_triplet $target_triplet]
> +              && [info exists rootme]
> +              && [file exists $rootme/../gdb/gdb] } {
>         # If we're doing a combined build, and gdb is available, use it.
>         set guality_gdb_name "$rootme/../gdb/gdb"
>      } else {
> -       set guality_gdb_name "[transform gdb]"
> +       set guality_gdb_name "gdb"
>      }
>      setenv GUALITY_GDB_NAME "$guality_gdb_name"
>  }
> diff --git a/gcc/testsuite/gcc.dg/guality/guality.exp 
> b/gcc/testsuite/gcc.dg/guality/guality.exp
> index 0dc8f10762d7..4d342aa51658 100644
> --- a/gcc/testsuite/gcc.dg/guality/guality.exp
> +++ b/gcc/testsuite/gcc.dg/guality/guality.exp
> @@ -40,14 +40,17 @@ dg-init
>  torture-init
>
>  global GDB
> +global host_triplet target_triplet
>  if ![info exists ::env(GUALITY_GDB_NAME)] {
>      if [info exists GDB] {
>         set guality_gdb_name "$GDB"
> -    } elseif { [info exists rootme] && [file exists $rootme/../gdb/gdb] } {
> +    } elseif { [string equal $host_triplet $target_triplet]
> +              && [info exists rootme]
> +              && [file exists $rootme/../gdb/gdb] } {
>         # If we're doing a combined build, and gdb is available, use it.
>         set guality_gdb_name "$rootme/../gdb/gdb"
>      } else {
> -       set guality_gdb_name "[transform gdb]"
> +       set guality_gdb_name "gdb"
>      }
>      setenv GUALITY_GDB_NAME "$guality_gdb_name"
>  }
> diff --git a/gcc/testsuite/gfortran.dg/guality/guality.exp 
> b/gcc/testsuite/gfortran.dg/guality/guality.exp
> index 105e08a70d88..3ee157abf7b3 100644
> --- a/gcc/testsuite/gfortran.dg/guality/guality.exp
> +++ b/gcc/testsuite/gfortran.dg/guality/guality.exp
> @@ -21,14 +21,17 @@ dg-init
>  torture-init
>
>  global GDB
> +global host_triplet target_triplet
>  if ![info exists ::env(GUALITY_GDB_NAME)] {
>      if [info exists GDB] {
>         set guality_gdb_name "$GDB"
> -    } elseif { [info exists rootme] && [file exists $rootme/../gdb/gdb] } {
> +    } elseif { [string equal $host_triplet $target_triplet]
> +              && [info exists rootme]
> +              && [file exists $rootme/../gdb/gdb] } {
>         # If we're doing a combined build, and gdb is available, use it.
>         set guality_gdb_name "$rootme/../gdb/gdb"
>      } else {
> -       set guality_gdb_name "[transform gdb]"
> +       set guality_gdb_name "gdb"
>      }
>      setenv GUALITY_GDB_NAME "$guality_gdb_name"
>  }
> diff --git a/gcc/testsuite/lib/gcc-gdb-test.exp 
> b/gcc/testsuite/lib/gcc-gdb-test.exp
> index 942853f183e6..f7c1da8fae25 100644
> --- a/gcc/testsuite/lib/gcc-gdb-test.exp
> +++ b/gcc/testsuite/lib/gcc-gdb-test.exp
> @@ -27,8 +27,6 @@
>  #   the literal string with extra whitespace removed.
>  # Argument 3 handles expected failures and the like
>  proc gdb-test { useline args } {
> -    if { ![isnative] || [is_remote target] } { return }
> -
>      if { [llength $args] >= 4 } {
>         switch [dg-process-target [lindex $args 3]] {
>             "S" { }
> @@ -80,11 +78,17 @@ proc gdb-test { useline args } {
>      puts $fd "quit"
>      close $fd
>
> -    send_log "Spawning: $gdb_name -nx -nw -quiet -batch -x $cmd_file 
> ./$output_file\n"
> -    set res [remote_spawn target "$gdb_name -nx -nw -quiet -batch -x 
> $cmd_file ./$output_file"]
> +    set cmd_file_remote [remote_download target $cmd_file]
> +    set output_file_remote [remote_download target $output_file]
> +    send_log "Spawning: $gdb_name -nx -nw -quiet -batch -x $cmd_file_remote 
> $output_file_remote\n"
> +    set res [remote_spawn target "$gdb_name -nx -nw -quiet -batch -x 
> $cmd_file_remote $output_file_remote"]
>      if { $res < 0 || $res == "" } {
>         unsupported "$testname"
>         file delete $cmd_file
> +       if { [is_remote target] } {
> +           remote_file target delete $cmd_file_remote
> +           remote_file target delete $output_file_remote
> +       }
>         return
>      }
>
> @@ -94,6 +98,10 @@ proc gdb-test { useline args } {
>             unsupported "$testname"
>             remote_close target
>             file delete $cmd_file
> +           if { [is_remote target] } {
> +               remote_file target delete $cmd_file_remote
> +               remote_file target delete $output_file_remote
> +           }
>             return
>         }
>         # print var; print expected
> @@ -110,6 +118,10 @@ proc gdb-test { useline args } {
>             }
>             remote_close target
>             file delete $cmd_file
> +           if { [is_remote target] } {
> +               remote_file target delete $cmd_file_remote
> +               remote_file target delete $output_file_remote
> +           }
>             return
>         }
>         # ptype var;
> @@ -131,12 +143,20 @@ proc gdb-test { useline args } {
>             }
>             remote_close target
>             file delete $cmd_file
> +           if { [is_remote target] } {
> +               remote_file target delete $cmd_file_remote
> +               remote_file target delete $output_file_remote
> +           }
>             return
>         }
>         timeout {
>             unsupported "$testname"
>             remote_close target
>             file delete $cmd_file
> +           if { [is_remote target] } {
> +               remote_file target delete $cmd_file_remote
> +               remote_file target delete $output_file_remote
> +           }
>             return
>         }
>      }
> @@ -144,6 +164,10 @@ proc gdb-test { useline args } {
>      unsupported "$testname"
>      remote_close target
>      file delete $cmd_file
> +    if { [is_remote target] } {
> +       remote_file target delete $cmd_file_remote
> +       remote_file target delete $output_file_remote
> +    }
>      return
>  }
>
> @@ -152,15 +176,18 @@ proc gdb-test { useline args } {
>  # Argument 1 is the location where gdb is used
>  #
>  proc report_gdb { gdb loc } {
> -    if { [catch { exec which $gdb } msg] } {
> -       send_log "gdb not found in $loc: $msg\n"
> +    set status [remote_exec target "which" "$gdb"]
> +    set gdb [string trim [lindex $status 1]]
> +    if { [lindex $status 0] != 0 } {
> +       send_log "gdb not found in $loc: $gdb\n"
>         return
>      }
> -    set gdb [exec which $gdb]
>      send_log "gdb used in $loc: $gdb\n"
>
>      send_log "gdb used in $loc: "
> -    if { [catch { exec $gdb -v } gdb_version] } {
> +    set status [remote_exec target "$gdb" "-v"]
> +    set gdb_version [lindex $status 1]
> +    if { [lindex $status 0] != 0 } {
>         send_log "getting version failed:\n"
>      } else {
>         send_log "version:\n"
>
> --
> Joseph S. Myers
> [email protected]
>

Reply via email to