New function displaced_step_in_progress_thread
authorYao Qi <yao.qi@linaro.org>
Mon, 9 Nov 2015 14:39:56 +0000 (14:39 +0000)
committerYao Qi <yao.qi@linaro.org>
Mon, 9 Nov 2015 14:39:56 +0000 (14:39 +0000)
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  <yao.qi@linaro.org>

* infrun.c (displaced_step_in_progress_thread): New function.
(handle_inferior_event_1): Call it.

gdb/ChangeLog
gdb/infrun.c

index 366ee4c4a7f1f193dddeff734967624f3676b4ae..0e63ed261d25f4b91a188d9defd744ed2b86af03 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-09  Yao Qi  <yao.qi@linaro.org>
+
+       * infrun.c (displaced_step_in_progress_thread): New function.
+       (handle_inferior_event_1): Call it.
+
 2015-11-05  Yao Qi  <yao.qi@linaro.org>
 
        * aarch64-tdep.c (aarch64_displaced_step_copy_insn): Call
index ef4ccb4e7fa27791917aa49238cfc26655923602..185b79b4ad9a97bf84a669da0cab579770feaf93 100644 (file)
@@ -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);
              }