gdb/testsuite: fail if gdb_start_cmd fails
authorSimon Marchi <simon.marchi@polymtl.ca>
Fri, 18 Nov 2022 16:06:47 +0000 (11:06 -0500)
committerSimon Marchi <simon.marchi@polymtl.ca>
Mon, 28 Nov 2022 14:40:26 +0000 (09:40 -0500)
I broke gdb.ada/start.exp, and did not notice it, because it outputs an
UNTESTED if gdb_start_cmd fails.  I don't really see when start would
fail and it's not a problem that should be looked at.  Change all spots
that call untested after a gdb_start_cmd failure, use fail instead.

Doing so caused some failures with the native-gdbserver board.  Some
tests that use "start" were relying on the fact that start would fail
with that board to just return with "untested".  Change them to add an
early return if use_gdb_stub returns true.

Some gdb.pascal tests also failed with native-gdbserver, because they
did use gdb_start_cmd to start the inferior, for no good reason.
Convert them to use runto_main instead, which does the right thing if
the target is a stub.

A further refactoring could be to make gdb_start_cmd match the expected
breakpoint hit and the prompt, which it doesn't do currently (it leaves
that to the callers, but not all of them do).

Change-Id: I097370851213e798ff29fb6cf8ba25ef7d2be007
Reviewed-By: Bruno Larsen <blarsen@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
gdb/testsuite/gdb.ada/exec_changed.exp
gdb/testsuite/gdb.ada/start.exp
gdb/testsuite/gdb.base/start-cpp.exp
gdb/testsuite/gdb.base/start.exp
gdb/testsuite/gdb.base/watchpoint-hw.exp
gdb/testsuite/gdb.dwarf2/main-subprogram.exp
gdb/testsuite/gdb.pascal/floats.exp
gdb/testsuite/gdb.pascal/gdb11492.exp
gdb/testsuite/gdb.pascal/hello.exp
gdb/testsuite/gdb.pascal/integers.exp

index 52868f61c8938d909ccd5b8a89370b444fb8b753..e09f59e52695a40281d5f044935eb23b2d30f84f 100644 (file)
@@ -54,7 +54,7 @@ gdb_load ${common_binfile}
 
 # Start the program, we should land in the program main procedure
 if { [gdb_start_cmd] < 0 } {
-    untested start
+    fail start
     return -1
 }
 
index de080711f7b9080bd9f0064603f1f1659d097955..63dcc619f1fb918f6352fd8e3b30c4f07123939c 100644 (file)
@@ -34,7 +34,7 @@ clean_restart ${testfile}
 
 # Verify that "start" lands inside the right procedure.
 if { [gdb_start_cmd] < 0 } {
-    untested "start failed to land inside the right procedure"
+    fail "start failed to land inside the right procedure"
     return -1
 }
 
index 9fabab4fe640cb2957ce4e5699a515ca96e1c87e..63b6ec006ca6685bb05e20d6d7ffc3ddd9f23f79 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+if { [use_gdb_stub] } {
+    unsupported "test requires running"
+    return
+}
+
 standard_testfile .cc
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
@@ -28,7 +33,7 @@ if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
 
 # For C++ programs, "start" should stop in main().
 if { [gdb_start_cmd] < 0 } {
-    untested start
+    fail start
     return -1
 }
 
index 9de3db31469efebdb8bafdf5a8c8c3f1e026e1ff..a0c8c8c41c1c200143c3a554b7f01d65e177aea3 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+if { [use_gdb_stub] } {
+    unsupported "test requires running"
+    return
+}
 
 standard_testfile
 
@@ -25,7 +29,7 @@ if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
 
 # For C programs, "start" should stop in main().
 if { [gdb_start_cmd] < 0 } {
-    untested start
+    fail start
     return -1
 }
 
index 23de0c3a91e9c8925cf2eb2f9c53440d068295e2..d0fd1621efe400aa9fd0eee0e287951e6daae387 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+if { [use_gdb_stub] } {
+    unsupported "test requires running"
+    return
+}
 
 if {[skip_hw_watchpoint_tests]} {
     return 0
@@ -33,7 +37,7 @@ gdb_test "watch watchee" "atchpoint 1: watchee"
 # `runto_main' or `runto main' would delete the watchpoint created above.
 
 if { [gdb_start_cmd] < 0 } {
-    untested start
+    fail start
     return -1
 }
 gdb_test "" "main .* at .*" "start"
index df302ff9428198fb1a2763ec0b1ea3ff8bec2454..14adf66fba973c53ac925fec3f28142520a29c77 100644 (file)
@@ -19,6 +19,11 @@ if {![dwarf2_support]} {
     return 0
 }
 
+if { [use_gdb_stub] } {
+    unsupported "test requires running"
+    return
+}
+
 standard_testfile .c -dw.S
 
 # Make some DWARF for the test.
@@ -62,7 +67,7 @@ set have_index [exec_has_index_section $binfile]
 # that this was the real "main".
 
 if {[gdb_start_cmd] < 0} {
-    untested "could not start ${testfile}"
+    fail "could not start ${testfile}"
     return -1
 }
 
index 32a8ea4352ded510b457d663a6be935f598e024b..1804597e902e49f18e1b1860cfc6b1a667e39037 100644 (file)
@@ -24,6 +24,10 @@ if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable
 
 clean_restart ${testfile}
 
+if { ![runto_main] } {
+    return
+}
+
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
 
@@ -34,14 +38,6 @@ if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
     pass "setting breakpoint 2"
 }
 
-# Verify that "start" lands inside the right procedure.
-if { [gdb_start_cmd] < 0 } {
-    untested start
-    return -1
-}
-
-gdb_test "" ".* at .*${srcfile}.*" "start"
-
 gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "going to first breakpoint"
 gdb_test "print r" ".* = 0" "print r before assigned to 1.25"
 
index 66c2de1c4a2edf14f05ca58f895499dfb143e395..84dcca75ae2df63867940890c57af1476df2c414 100644 (file)
@@ -23,19 +23,17 @@ if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable
 }
 
 clean_restart ${testfile}
+
+if { ![runto_main] } {
+    return
+}
+
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 
 if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
     pass "setting breakpoint 1"
 }
 
-# Verify that "start" lands inside the right procedure.
-if { [gdb_start_cmd] < 0 } {
-    untested start
-    return -1
-}
-
-gdb_test "" ".* at .*${srcfile}.*" "start"
 gdb_test "continue" ""
 
 gdb_test "print integer_array" { = \{50, 51, 52, 53, 54, 55, 56, 57\}}
index f7ae8ed89d0118d1241c2935e3599705571b5432..e744045ac4fa082077d050d80a7a81212917810e 100644 (file)
@@ -22,6 +22,11 @@ if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable
 }
 
 clean_restart ${testfile}
+
+if { ![runto_main] } {
+    return
+}
+
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
 
@@ -32,19 +37,6 @@ if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
     pass "setting breakpoint 2"
 }
 
-# Verify that "start" lands inside the right procedure.
-if { [gdb_start_cmd] < 0 } {
-    untested start
-    return -1
-}
-
-# This test fails for gpc
-# because debug information for 'main'
-# is in some <implicit code>
-gdb_test "" \
-         ".* at .*hello.pas.*" \
-         "start"
-
 gdb_test "cont" \
          "Breakpoint .*:${bp_location1}.*" \
          "Going to first breakpoint"
index e11335a5faec645f40df5f417249efa6f29b2c1d..8a2f517c67315b926e7e42908835841307771476 100644 (file)
@@ -22,6 +22,11 @@ if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable
 }
 
 clean_restart ${testfile}
+
+if { ![runto_main] } {
+    return
+}
+
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
 
@@ -32,14 +37,6 @@ if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
     pass "setting breakpoint 2"
 }
 
-# Verify that "start" lands inside the right procedure.
-if { [gdb_start_cmd] < 0 } {
-    untested start
-    return -1
-}
-
-gdb_test "" ".* at .*${srcfile}.*" "start"
-
 gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "going to first breakpoint"
 
 gdb_test "print i" ".* = 0" "print i before assigned to 1"