[09/12] gdb_target_is_native -> gdb_protocol_is_native

Message ID 20240419151342.1592474-10-pedro@palves.net
State New
Headers
Series Fix attach/run failure handling - gdbserver & Windows, document "E.MESSAGE" RSP errors, more |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Testing passed

Commit Message

Pedro Alves April 19, 2024, 3:13 p.m. UTC
  gdb_is_target_native uses "maint print target-stack", which is
unnecessary when checking whether gdb_protocol is empty would do.
Checking gdb_protocol is more efficient, and can be done before
starting GDB and running to main, unlike gdb_is_target_native.

This adds a new gdb_protocol_is_native procedure, and uses it in place
of gdb_is_target_native.

At first, I thought that we'd end up with a few testcases needing to
use gdb_is_target_native still, especially multi-target tests that
connect to targets different from the default board target, but no,
actually all uses of gdb_is_target_native could be converted.
gdb_is_target_native will be eliminated in a following patch.

In some spots, we no longer need to defer the check until after
starting GDB, so the patch adjusts accordingly.

Change-Id: Ia706232dbffac70f9d9740bcb89c609dbee5cee3
---
 gdb/testsuite/gdb.base/attach.exp                | 13 +++----------
 gdb/testsuite/gdb.base/foll-exec-mode.exp        |  4 +---
 gdb/testsuite/gdb.base/load-command.exp          | 11 +++++------
 gdb/testsuite/gdb.multi/stop-all-on-exit.exp     | 16 ++++++++--------
 gdb/testsuite/gdb.python/py-inferior.exp         |  2 +-
 gdb/testsuite/gdb.threads/threads-after-exec.exp |  2 +-
 gdb/testsuite/lib/gdb.exp                        | 15 +++++++++++++++
 7 files changed, 34 insertions(+), 29 deletions(-)
  

Comments

Tom Tromey April 19, 2024, 6:50 p.m. UTC | #1
>>>>> "Pedro" == Pedro Alves <pedro@palves.net> writes:

Pedro> gdb_is_target_native uses "maint print target-stack", which is
Pedro> unnecessary when checking whether gdb_protocol is empty would do.
Pedro> Checking gdb_protocol is more efficient, and can be done before
Pedro> starting GDB and running to main, unlike gdb_is_target_native.

Pedro> This adds a new gdb_protocol_is_native procedure, and uses it in place
Pedro> of gdb_is_target_native.

Pedro> At first, I thought that we'd end up with a few testcases needing to
Pedro> use gdb_is_target_native still, especially multi-target tests that
Pedro> connect to targets different from the default board target, but no,
Pedro> actually all uses of gdb_is_target_native could be converted.
Pedro> gdb_is_target_native will be eliminated in a following patch.

Pedro> In some spots, we no longer need to defer the check until after
Pedro> starting GDB, so the patch adjusts accordingly.

Seems reasonable to me.
Approved-By: Tom Tromey <tom@tromey.com>

Tom
  
Aktemur, Tankut Baris April 22, 2024, 8:25 a.m. UTC | #2
On Friday, April 19, 2024 5:14 PM, Pedro Alves wrote:
> Subject: [PATCH 09/12] gdb_target_is_native -> gdb_protocol_is_native

In the title, "gdb_target_is_native" should be spelled "gdb_is_target_native".

Thanks
-Baris


Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva  
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
  
Pedro Alves April 23, 2024, 12:33 p.m. UTC | #3
On 2024-04-22 09:25, Aktemur, Tankut Baris wrote:
> On Friday, April 19, 2024 5:14 PM, Pedro Alves wrote:
>> Subject: [PATCH 09/12] gdb_target_is_native -> gdb_protocol_is_native
> 
> In the title, "gdb_target_is_native" should be spelled "gdb_is_target_native".

Thanks Baris.  I've fixed that locally.
  

Patch

diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp
index 84b2d27f3eb..637f287f59e 100644
--- a/gdb/testsuite/gdb.base/attach.exp
+++ b/gdb/testsuite/gdb.base/attach.exp
@@ -470,16 +470,9 @@  proc_with_prefix test_command_line_attach_run {} {
     global gdb_prompt
     global binfile
 
-    # The --pid option is used to attach to a process using the native target.
-    # Start GDB and run to main just to see what the execution target is, skip
-    # if it's not the native target.
-    clean_restart $binfile
-
-    if { ![runto_main] } {
-	return
-    }
-
-    if { ![gdb_is_target_native] } {
+    # The --pid option is used to attach to a process using the native
+    # target.
+    if { ![gdb_protocol_is_native] } {
 	unsupported "commandline attach run test"
 	return
     }
diff --git a/gdb/testsuite/gdb.base/foll-exec-mode.exp b/gdb/testsuite/gdb.base/foll-exec-mode.exp
index ff92c551bba..65054b530b3 100644
--- a/gdb/testsuite/gdb.base/foll-exec-mode.exp
+++ b/gdb/testsuite/gdb.base/foll-exec-mode.exp
@@ -109,8 +109,6 @@  proc do_follow_exec_mode_tests { mode cmd infswitch } {
 	    return
 	}
 
-	set target_is_native [gdb_is_target_native]
-
 	# Set the follow-exec mode.
 	#
 	gdb_test_no_output "set follow-exec-mode $mode"
@@ -150,7 +148,7 @@  proc do_follow_exec_mode_tests { mode cmd infswitch } {
 	    # process target, which was automatically pushed when running, was
 	    # automatically unpushed from inferior 1 on exec.  Use a
 	    # different regexp that verifies the Connection field is empty.
-	    if { $target_is_native } {
+	    if { [gdb_protocol_is_native] } {
 		set expected_re "  1.*<null> +[string_to_regexp $binfile].*\r\n\\* 2.*process.*$testfile2 .*"
 	    } else {
 		set expected_re "  1.*null.*$testfile.*\r\n\\* 2.*process.*$testfile2 .*"
diff --git a/gdb/testsuite/gdb.base/load-command.exp b/gdb/testsuite/gdb.base/load-command.exp
index ce6f9bcb730..2d3656e711a 100644
--- a/gdb/testsuite/gdb.base/load-command.exp
+++ b/gdb/testsuite/gdb.base/load-command.exp
@@ -17,6 +17,11 @@ 
 
 standard_testfile
 
+if [gdb_protocol_is_native] {
+    unsupported "the native target does not support the load command"
+    return
+}
+
 # Disable generation of position independent executable (PIE).  Otherwise, we
 # would have to manually specify an offset to load.
 
@@ -30,12 +35,6 @@  if ![runto_main] {
     return -1
 }
 
-# The native target does not support the load command.
-if [gdb_is_target_native] {
-    unsupported "the native target does not support the load command"
-    return
-}
-
 # Manually change the value of the_variable.
 gdb_test "print/x the_variable" " = 0x1234" "check initial value of the_variable"
 gdb_test_no_output "set the_variable = 0x5555" "manually change the_variable"
diff --git a/gdb/testsuite/gdb.multi/stop-all-on-exit.exp b/gdb/testsuite/gdb.multi/stop-all-on-exit.exp
index f014037106d..1ac5388c0a4 100644
--- a/gdb/testsuite/gdb.multi/stop-all-on-exit.exp
+++ b/gdb/testsuite/gdb.multi/stop-all-on-exit.exp
@@ -18,6 +18,14 @@ 
 # Test that in all-stop mode with multiple inferiors, GDB stops all
 # threads upon receiving an exit event from one of the inferiors.
 
+# This is a test specific for a native target, where we use the
+# "-exec" argument to "add-inferior" and we explicitly don't do
+# "maint set target-non-stop on".
+if {![gdb_protocol_is_native]} {
+    untested "the test is aimed at a native target"
+    return 0
+}
+
 standard_testfile
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} {
@@ -28,14 +36,6 @@  if {![runto_main]} {
     return -1
 }
 
-# This is a test specific for a native target, where we use the
-# "-exec" argument to "add-inferior" and we explicitly don't do
-# "maint set target-non-stop on".
-if {![gdb_is_target_native]} {
-    untested "the test is aimed at a native target"
-    return 0
-}
-
 # Add a second inferior that will sleep longer.
 gdb_test "add-inferior -exec $binfile" "Added inferior 2.*" \
     "add the second inferior"
diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp
index e74fbfd050d..ee30390e29f 100644
--- a/gdb/testsuite/gdb.python/py-inferior.exp
+++ b/gdb/testsuite/gdb.python/py-inferior.exp
@@ -406,7 +406,7 @@  with_test_prefix "selected_inferior" {
     gdb_test "py print (gdb.selected_inferior().connection.num)" "1" \
 	"first inferior's connection number, though connection object"
     # Figure out if inf 1 has a native target.
-    set inf_1_is_native [gdb_is_target_native]
+    set inf_1_is_native [gdb_protocol_is_native]
 
     set num [add_inferior "-no-connection"]
     gdb_test "inferior $num" ".*" "switch to inferior $num"
diff --git a/gdb/testsuite/gdb.threads/threads-after-exec.exp b/gdb/testsuite/gdb.threads/threads-after-exec.exp
index 4dc71dd76fd..32aec6b39db 100644
--- a/gdb/testsuite/gdb.threads/threads-after-exec.exp
+++ b/gdb/testsuite/gdb.threads/threads-after-exec.exp
@@ -38,7 +38,7 @@  proc do_test { } {
     # leader detection racy") this isn't always thread 1.1.
     set cur_thr [get_integer_valueof "\$_thread" 0]
 
-    if {[istarget *-*-linux*] && [gdb_is_target_native]} {
+    if {[istarget *-*-linux*] && [gdb_protocol_is_native]} {
 	# Confirm there's only one LWP in the list as well, and that
 	# it is bound to the existing GDB thread.
 	set inf_pid [get_inferior_pid]
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index ddee928d510..c072a4502b4 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -4698,6 +4698,10 @@  proc gdb_is_target_remote_prompt { prompt_regexp } {
 # Check whether we're testing with the remote or extended-remote
 # targets.
 #
+# This is meant to be used on testcases that connect to targets
+# different from the default board protocol.  For most tests, you can
+# check whether gdb_protocol is "remote" or "extended-remote" instead.
+#
 # NOTE: GDB must be running BEFORE this procedure is called!
 
 proc gdb_is_target_remote { } {
@@ -4708,6 +4712,10 @@  proc gdb_is_target_remote { } {
 
 # Check whether we're testing with the native target.
 #
+# This is meant to be used on testcases that connect to targets
+# different from the default board protocol.  For most tests, you can
+# check whether gdb_protocol is the empty string instead.
+#
 # NOTE: GDB must be running BEFORE this procedure is called!
 
 proc gdb_is_target_native { } {
@@ -4716,6 +4724,13 @@  proc gdb_is_target_native { } {
     return [gdb_is_target_1 "native" ".*native \\(Native process\\).*" "$gdb_prompt $"]
 }
 
+# Returns true if gdb_protocol is empty, indicating use of the native
+# target.
+
+proc gdb_protocol_is_native { } {
+    return [expr {[target_info gdb_protocol] == ""}]
+}
+
 # Like istarget, but checks a list of targets.
 proc is_any_target {args} {
     foreach targ $args {