This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Handle memory write errors on gdb.base/break-always.exp
- From: Luis Machado <lgustavo at codesourcery dot com>
- To: <gdb-patches at sourceware dot org>
- Date: Mon, 13 Apr 2015 15:21:46 -0300
- Subject: [PATCH] Handle memory write errors on gdb.base/break-always.exp
- Authentication-results: sourceware.org; auth=none
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.
Regression tested on x86-64-linux and aarch64-linux.
Ok?
2015-04-13 Luis Machado <lgustavo@codesourcery.com>
gdb/testsuite/
* gdb.base/break-always.exp: Abort testing if writing to memory
causes an error.
---
gdb/testsuite/gdb.base/break-always.exp | 30 +++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/gdb/testsuite/gdb.base/break-always.exp b/gdb/testsuite/gdb.base/break-always.exp
index 681be37..9133229 100644
--- a/gdb/testsuite/gdb.base/break-always.exp
+++ b/gdb/testsuite/gdb.base/break-always.exp
@@ -69,19 +69,23 @@ 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"
-
-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"
+foreach test_value {0 1} {
+ set write_test "write $test_value to breakpoint's address $bp_address"
+
+ gdb_test_multiple "p /x *(char *) $bp_address = $test_value" $write_test {
+ -re "Cannot access memory at address $hex.*$gdb_prompt $" {
+ 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 $bp_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" "" \
--
1.9.1