aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2014-06-04 13:03:19 +0800
committerYao Qi <yao@codesourcery.com>2014-06-04 20:53:47 +0800
commit03388bb71c1a1d1c613bb963f3d9287cfd100138 (patch)
treea2afb9ea93b8faed5ec6a6d062029732d2ae8124
parentac21917f6bef764c73323c8117d293b5f6c70228 (diff)
downloadgdb-03388bb71c1a1d1c613bb963f3d9287cfd100138.zip
gdb-03388bb71c1a1d1c613bb963f3d9287cfd100138.tar.gz
gdb-03388bb71c1a1d1c613bb963f3d9287cfd100138.tar.bz2
Tweak sss-bp-on-user-bp.exp
sss-bp-on-user-bp.c has an assumption that write to integer can be compiled to a single instruction, which isn't true on some arch, such as arm. This test requires setting two breakpoints on two consecutive instructions, so this patch is to get the address of the next instruction via disassemble and set the 2nd breakpoint there. This approach is portable. This patch fixes the fails in sss-bp-on-user-bp.exp on arm-none-abi target. There is no change in x86 test results. I also revert the patch to PR breakpoints/17000, and verified that the patched sss-bp-on-user-bp.exp still trigger the fail on x86-with-software-single-step. gdb/testsuite: 2014-06-04 Yao Qi <yao@codesourcery.com> * gdb.base/sss-bp-on-user-bp.c (main): Remove comments. * gdb.base/sss-bp-on-user-bp.exp: Don't set breakpoint on "set bar break here". Get the next instruction address and set breakpoint there. Remove "bar break" from the regexp patterns.
-rw-r--r--gdb/testsuite/gdb.base/sss-bp-on-user-bp.c4
-rw-r--r--gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp20
2 files changed, 19 insertions, 5 deletions
diff --git a/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c b/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c
index ff82051..edc2e8c 100644
--- a/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c
+++ b/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c
@@ -21,10 +21,10 @@
int
main (void)
{
- /* Assume writes to integers compile to a single instruction. */
volatile int i = 0;
i = 1; /* set foo break here */
- i = 2; /* set bar break here */
+ i = 2;
+
return 0;
}
diff --git a/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp b/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp
index 2a12ad6..0b39fc1 100644
--- a/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp
+++ b/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp
@@ -32,7 +32,21 @@ if ![runto_main] then {
gdb_breakpoint [gdb_get_line_number "set foo break here"]
gdb_continue_to_breakpoint "first breakpoint" ".* set foo break here .*"
-gdb_breakpoint [gdb_get_line_number "set bar break here"]
+# Get the address of the next instruction and set a breakpoint there.
+set next_insn_addr ""
+set test "disassemble main"
+gdb_test_multiple $test $test {
+ -re ".*=> $hex <\\+$decimal>:\[^\r\n\]+\r\n ($hex) .*$gdb_prompt $" {
+ set next_insn_addr $expect_out(1,string)
+ pass $test
+ }
+}
+
+if { $next_insn_addr == "" } {
+ return -1
+}
+
+gdb_test "b *$next_insn_addr" "Breakpoint .*"
# So that GDB doesn't try to remove the regular breakpoint when the
# step finishes.
@@ -43,9 +57,9 @@ gdb_test_no_output "set breakpoint always-inserted on"
# remove it. But, a regular breakpoint is planted there already, and
# with always-inserted on, should remain planted when the step
# finishes.
-gdb_test "si" "Breakpoint .* bar break .*"
+gdb_test "si" "Breakpoint .*"
# If the breakpoint is still correctly inserted, then this jump should
# re-trigger it. Otherwise, GDB will lose control and the program
# will exit. See PR breakpoints/17000.
-gdb_test "jump *\$pc" "Breakpoint .* bar break .*"
+gdb_test "jump *\$pc" "Breakpoint .*"