| from util import * |
| |
| send_gdb('break main') |
| expect_gdb('Breakpoint 1') |
| send_gdb('c') |
| expect_gdb('Breakpoint 1') |
| |
| # Test write watchpoint |
| |
| send_gdb('p &var') |
| expect_gdb(r'\$1 = \(volatile int \*\) ') |
| |
| send_gdb('watch *$1') |
| expect_gdb('Hardware[()/a-z ]+watchpoint 2') |
| |
| send_gdb('c') |
| expect_gdb('Old value = 0') |
| expect_gdb('New value = 42') |
| |
| send_gdb('c') |
| expect_gdb('Old value = 42') |
| expect_gdb('New value = 1337') |
| |
| restart_replay() |
| expect_gdb('Breakpoint 1') |
| |
| # Test read-write watchpoint |
| |
| send_gdb('delete 2') |
| send_gdb('awatch *$1') |
| expect_gdb('Hardware[()/a-z ]+watchpoint 3') |
| |
| send_gdb('c') |
| expect_gdb('Old value = 0') |
| expect_gdb('New value = 42') |
| |
| send_gdb('c') |
| expect_gdb('Old value = 42') |
| expect_gdb('New value = 1337') |
| |
| send_gdb('c') |
| expect_gdb('Value = 1337') |
| |
| restart_replay() |
| expect_gdb('Breakpoint 1') |
| |
| # Test read watchpoint. x86 treats these as read-write. |
| |
| send_gdb('delete 3') |
| send_gdb('rwatch *$1') |
| expect_gdb('Hardware[()/a-z ]+watchpoint 4') |
| |
| send_gdb('c') |
| expect_gdb('Value = 42') |
| |
| send_gdb('c') |
| expect_gdb('Value = 1337') |
| |
| send_gdb('c') |
| expect_gdb('Value = 1337') |
| |
| send_gdb('c') |
| expect_rr('EXIT-SUCCESS') |
| expect_gdb('exited normally') |
| |
| ok() |