From: Yao Qi Date: Mon, 9 Nov 2015 14:39:56 +0000 (+0000) Subject: New function displaced_step_in_progress_thread X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c098766357b77f0553ec017b48abdd563de0281e;p=binutils-gdb.git New function displaced_step_in_progress_thread This patch adds a new function displaced_step_in_progress_thread, which returns whether the thread is in progress of displaced stepping. gdb: 2015-11-09 Yao Qi * infrun.c (displaced_step_in_progress_thread): New function. (handle_inferior_event_1): Call it. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 366ee4c4a7f..0e63ed261d2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2015-11-09 Yao Qi + + * infrun.c (displaced_step_in_progress_thread): New function. + (handle_inferior_event_1): Call it. + 2015-11-05 Yao Qi * aarch64-tdep.c (aarch64_displaced_step_copy_insn): Call diff --git a/gdb/infrun.c b/gdb/infrun.c index ef4ccb4e7fa..185b79b4ad9 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1536,6 +1536,21 @@ displaced_step_in_progress_any_inferior (void) return 0; } +/* Return true if thread represented by PTID is doing a displaced + step. */ + +static int +displaced_step_in_progress_thread (ptid_t ptid) +{ + struct displaced_step_inferior_state *displaced; + + gdb_assert (!ptid_equal (ptid, null_ptid)); + + displaced = get_displaced_stepping_state (ptid_get_pid (ptid)); + + return (displaced != NULL && ptid_equal (displaced->step_ptid, ptid)); +} + /* Return true if process PID has a thread doing a displaced step. */ static int @@ -4946,12 +4961,10 @@ Cannot fill $_exitsignal with the correct signal number.\n")); { struct regcache *regcache = get_thread_regcache (ecs->ptid); struct gdbarch *gdbarch = get_regcache_arch (regcache); - struct displaced_step_inferior_state *displaced - = get_displaced_stepping_state (ptid_get_pid (ecs->ptid)); /* If checking displaced stepping is supported, and thread ecs->ptid is displaced stepping. */ - if (displaced && ptid_equal (displaced->step_ptid, ecs->ptid)) + if (displaced_step_in_progress_thread (ecs->ptid)) { struct inferior *parent_inf = find_inferior_ptid (ecs->ptid); @@ -4970,6 +4983,9 @@ Cannot fill $_exitsignal with the correct signal number.\n")); if (ecs->ws.kind == TARGET_WAITKIND_FORKED) { + struct displaced_step_inferior_state *displaced + = get_displaced_stepping_state (ptid_get_pid (ecs->ptid)); + /* Restore scratch pad for child process. */ displaced_step_restore (displaced, ecs->ws.value.related_pid); }