aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2025-01-22 10:46:08 +0100
committerTom de Vries <tdevries@suse.de>2025-01-22 10:46:08 +0100
commit4cbf39144c78ec78a6924466993b6788ae8d1511 (patch)
treefe8c6ad51905a66333ffbe5e1d17a55338fdf237 /gdb
parentc80eb5cbe7d32bcd9fbdb89f34b5882e64408173 (diff)
downloadgdb-4cbf39144c78ec78a6924466993b6788ae8d1511.zip
gdb-4cbf39144c78ec78a6924466993b6788ae8d1511.tar.gz
gdb-4cbf39144c78ec78a6924466993b6788ae8d1511.tar.bz2
[gdb/testsuite] Fix gdb.base/branch-to-self.exp on arm-linux
On arm-linux (ubuntu 24.04 with gcc 13.3.0) with target board unix/-marm and test-case gdb.base/branch-to-self.exp I run into: ... (gdb) continue^M Continuing.^M ^M Breakpoint 2, main () at branch-to-self.c:38^M 38 for (;;); /* loop-line */^M (gdb) PASS: $exp: single-step: continue to breakpoint: hit breakpoint si^M 0x0040058c 38 for (;;); /* loop-line */^M (gdb) FAIL: $exp: single-step: si ... In contrast, on the same machine but with debian testing and gcc 14.2.0 we have: ... (gdb) continue^M Continuing.^M ^M Breakpoint 2, main () at branch-to-self.c:38^M 38 for (;;); /* loop-line */^M (gdb) PASS: $exp: single-step: continue to breakpoint: hit breakpoint si^M ^M Breakpoint 2, main () at branch-to-self.c:38^M 38 for (;;); /* loop-line */^M (gdb) PASS: $exp: single-step: stepi ... The difference is in the instruction(s) generated for the loop. In the passing case, we have: ... 588: eafffffe b 588 <main+0x24> ... and in the failing case: ... 588: e320f000 nop {0} 58c: eafffffd b 588 <main+0x24> ... The purpose of this part of the test-case is to: - generate a branch instruction that jumps to itself, and - set a breakpoint on it, and check that stepi-ing from that breakpoint triggers the breakpoint again. As we can see, in the failing case we failed to generate a branch instruction that jumps to itself, and consequently we cannot expect to hit the breakpoint again after issuing a single si. Fix this by issuing stepi until we hit the breakpoint. Tested on arm-linux. Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/gdb.base/branch-to-self.exp17
1 files changed, 16 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.base/branch-to-self.exp b/gdb/testsuite/gdb.base/branch-to-self.exp
index 9b4f746..71859d7 100644
--- a/gdb/testsuite/gdb.base/branch-to-self.exp
+++ b/gdb/testsuite/gdb.base/branch-to-self.exp
@@ -35,7 +35,22 @@ with_test_prefix "single-step" {
gdb_test "break ${testfile}.c:${line_num}" "Breakpoint .*" \
"set breakpoint"
gdb_continue_to_breakpoint "hit breakpoint"
- gdb_test "si" ".*${testfile}.c:${line_num}.*"
+
+ set stepi_count 1
+ gdb_test_multiple "stepi" "" {
+ -re -wrap ".*${testfile}.c:${line_num}.*" {
+ pass $gdb_test_name
+ }
+ -re -wrap "" {
+ if { $stepi_count == 10 } {
+ fail $gdb_test_name
+ } else {
+ incr stepi_count
+ send_gdb "stepi\n"
+ exp_continue
+ }
+ }
+ }
}
with_test_prefix "break-cond" {