diff options
Diffstat (limited to 'gdb/displaced-stepping.c')
-rw-r--r-- | gdb/displaced-stepping.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/gdb/displaced-stepping.c b/gdb/displaced-stepping.c index 9f98ea8..3fefdf3 100644 --- a/gdb/displaced-stepping.c +++ b/gdb/displaced-stepping.c @@ -192,12 +192,18 @@ write_memory_ptid (ptid_t ptid, CORE_ADDR memaddr, } static bool -displaced_step_instruction_executed_successfully (gdbarch *arch, - gdb_signal signal) +displaced_step_instruction_executed_successfully + (gdbarch *arch, const target_waitstatus &status) { - if (signal != GDB_SIGNAL_TRAP) + if (status.kind () == TARGET_WAITKIND_STOPPED + && status.sig () != GDB_SIGNAL_TRAP) return false; + /* All other (thread event) waitkinds can only happen if the + instruction fully executed. For example, a fork, or a syscall + entry can only happen if the syscall instruction actually + executed. */ + if (target_stopped_by_watchpoint ()) { if (gdbarch_have_nonsteppable_watchpoint (arch) @@ -210,7 +216,7 @@ displaced_step_instruction_executed_successfully (gdbarch *arch, displaced_step_finish_status displaced_step_buffers::finish (gdbarch *arch, thread_info *thread, - gdb_signal sig) + const target_waitstatus &status) { gdb_assert (thread->displaced_step_state.in_progress ()); @@ -256,7 +262,7 @@ displaced_step_buffers::finish (gdbarch *arch, thread_info *thread, regcache *rc = get_thread_regcache (thread); bool instruction_executed_successfully - = displaced_step_instruction_executed_successfully (arch, sig); + = displaced_step_instruction_executed_successfully (arch, status); if (instruction_executed_successfully) { |