Message ID | 1428949306-15524-1-git-send-email-lgustavo@codesourcery.com |
---|---|
State | New |
Headers | show |
Luis Machado <lgustavo@codesourcery.com> writes: Hi Luis, > +foreach test_value {0 1} { > + set write_test "write $test_value to breakpoint's address $bp_address" > + In this way, $bp_address will be shown in the test summary in gdb.sum. This may cause some differences when we compare gdb.sum of different runs, like: -PASS: gdb.base/break-always.exp: write 0 to breakpoint's address 0x1111 +PASS: gdb.base/break-always.exp: write 0 to breakpoint's address 0x2222 Let's remove $bp_address from $write_test. > + 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" We need comments to explain we may go here. Copying some messages from your mail should be fine. > + return -1 > + } > + -re " = .*$gdb_prompt $" { > + pass $write_test > + } > + } > + > + set read_test "read back $test_value from the breakpoint's address $bp_address" > + Remove $bp_address from $read_test. > + gdb_test "p /x *(char *) $bp_address" " = 0x$test_value" $read_test > +} Patch is OK to me with these changes.
Ping? On 04/13/2015 03:21 PM, Luis Machado wrote: > 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" "" \ >
Luis Machado <lgustavo@codesourcery.com> writes:
> Ping?
Hi Luis,
I've approved this patch here
https://sourceware.org/ml/gdb-patches/2015-04/msg00512.html If my
comments are addressed in the updated patch, you can push it in.
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" "" \