From ecbf2b3c4f5ee6c00cf058b87fa49708d4030d7f Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Wed, 29 Apr 2015 12:09:40 -0300 Subject: [PATCH] Handle memory write errors on gdb.base/break-always.exp This is another case of the testcase not handling memory write errors that happen on some targets (QEMU) when GDB attempts to modify an address that should contain a breakpoint, for example. The following patch handles this and prevents spurious failures from happening. It also adds a foreach loop to avoid duplication of code and hardcoded patterns. gdb/testsuite/ChangeLog: 2015-04-29 Luis Machado * gdb.base/break-always.exp: Abort testing if writing to memory causes an error. --- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/break-always.exp | 30 +++++++++++++++---------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 639dae7d47..3e2df8f85b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-29 Luis Machado + + * gdb.base/break-always.exp: Abort testing if writing to memory + causes an error. + 2015-04-28 Doug Evans * gdb.python/py-pp-maint.py: Move "replace" testing to ... diff --git a/gdb/testsuite/gdb.base/break-always.exp b/gdb/testsuite/gdb.base/break-always.exp index 681be37569..c45ce54593 100644 --- a/gdb/testsuite/gdb.base/break-always.exp +++ b/gdb/testsuite/gdb.base/break-always.exp @@ -69,19 +69,25 @@ gdb_test "p /x \$shadow = *(char *) $bp_address" \ # and still leave the breakpoint insn planted. Try twice with # different values, in case we happen to be writting exactly what was # there already. -gdb_test "p /x *(char *) $bp_address = 0" \ - " = 0x0" \ - "write 0 to breakpoint's address" -gdb_test "p /x *(char *) $bp_address" \ - " = 0x0" \ - "read back 0 from the breakpoint's address" +foreach test_value {0 1} { + set write_test "write $test_value to breakpoint's address" -gdb_test "p /x *(char *) $bp_address = 1" \ - " = 0x1" \ - "write 1 to breakpoint's address" -gdb_test "p /x *(char *) $bp_address" \ - " = 0x1" \ - "read back 1 from the breakpoint's address" + gdb_test_multiple "p /x *(char *) $bp_address = $test_value" $write_test { + -re "Cannot access memory at address $hex.*$gdb_prompt $" { + + # Some targets do not allow manually writing a breakpoint to a + # certain memory address, like QEMU. In that case, just bail out. + unsupported "Cannot write to address $bp_address" + return -1 + } + -re " = .*$gdb_prompt $" { + pass $write_test + } + } + + set read_test "read back $test_value from the breakpoint's address" + gdb_test "p /x *(char *) $bp_address" " = 0x$test_value" $read_test +} # Restore the original contents. gdb_test "p /x *(char *) $bp_address = \$shadow" "" \