Consolidate target_mourn_inferior between GDB and gdbserver
authorSergio Durigan Junior <sergiodj@redhat.com>
Mon, 12 Sep 2016 03:45:31 +0000 (23:45 -0400)
committerSergio Durigan Junior <sergiodj@redhat.com>
Mon, 19 Sep 2016 04:17:29 +0000 (00:17 -0400)
This patch consolidates the API of target_mourn_inferior between GDB
and gdbserver, in my continuing efforts to make sharing the
fork_inferior function possible between both.

GDB's version of the function did not care about the inferior's ptid
being mourned, but gdbserver's needed to know this information.  Since
it actually makes sense to pass the ptid as an argument, instead of
depending on a global value directly (which GDB's version did), I
decided to make the generic API to accept it.  I then went on and
extended all calls being made on GDB to include a ptid argument (which
ended up being inferior_ptid most of the times, anyway), and now we
have a more sane interface.

On GDB's side, after talking to Pedro a bit about it, we decided that
just an assertion to make sure that the ptid being passed is equal to
inferior_ptid would be enough for now, on the GDB side.  We can remove
the assertion and perform more operations later if we ever pass
anything different than inferior_ptid.

Regression tested on our BuildBot, everything OK.

I'd appreciate a special look at gdb/windows-nat.c's modification
because I wasn't really sure what to do there.  It seemed to me that
maybe I should build a ptid out of the process information there, but
then I am almost sure the assertion on GDB's side would trigger.

gdb/ChangeLog:
2016-09-19  Sergio Durigan Junior  <sergiodj@redhat.com>

* darwin-nat.c (darwin_kill_inferior): Adjusting call to
target_mourn_inferior to include ptid_t argument.
* fork-child.c (startup_inferior): Likewise.
* gnu-nat.c (gnu_kill_inferior): Likewise.
* inf-ptrace.c (inf_ptrace_kill): Likewise.
* infrun.c (handle_inferior_event_1): Likewise.
* linux-nat.c (linux_nat_attach): Likewise.
(linux_nat_kill): Likewise.
* nto-procfs.c (interrupt_query): Likewise.
(procfs_interrupt): Likewise.
(procfs_kill_inferior): Likewise.
* procfs.c (procfs_kill_inferior): Likewise.
* record.c (record_mourn_inferior): Likewise.
* remote-sim.c (gdbsim_kill): Likewise.
* remote.c (remote_detach_1): Likewise.
(remote_kill): Likewise.
* target.c (target_mourn_inferior): Change declaration to accept
new ptid_t argument; use gdb_assert on it.
* target.h (target_mourn_inferior): Move function prototype from
here...
* target/target.h (target_mourn_inferior): ... to here.  Adjust it
to accept new ptid_t argument.
* windows-nat.c (get_windows_debug_event): Adjusting call to
target_mourn_inferior to include ptid_t argument.

gdb/gdbserver/ChangeLog:
2016-09-19  Sergio Durigan Junior  <sergiodj@redhat.com>

* server.c (start_inferior): Call target_mourn_inferior instead of
mourn_inferior; pass ptid_t argument to it.
(resume): Likewise.
(handle_target_event): Likewise.
* target.c (target_mourn_inferior): New function.
* target.h (mourn_inferior): Delete macro.

20 files changed:
gdb/ChangeLog
gdb/darwin-nat.c
gdb/fork-child.c
gdb/gdbserver/ChangeLog
gdb/gdbserver/server.c
gdb/gdbserver/target.c
gdb/gdbserver/target.h
gdb/gnu-nat.c
gdb/inf-ptrace.c
gdb/infrun.c
gdb/linux-nat.c
gdb/nto-procfs.c
gdb/procfs.c
gdb/record.c
gdb/remote-sim.c
gdb/remote.c
gdb/target.c
gdb/target.h
gdb/target/target.h
gdb/windows-nat.c

index 830d5de3751c417cec21f99c240773cbc9b6fa43..8b1f0bc834d6cdc19e9ff96fd253d7d74de67191 100644 (file)
@@ -1,3 +1,30 @@
+2016-09-19  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+       * darwin-nat.c (darwin_kill_inferior): Adjusting call to
+       target_mourn_inferior to include ptid_t argument.
+       * fork-child.c (startup_inferior): Likewise.
+       * gnu-nat.c (gnu_kill_inferior): Likewise.
+       * inf-ptrace.c (inf_ptrace_kill): Likewise.
+       * infrun.c (handle_inferior_event_1): Likewise.
+       * linux-nat.c (linux_nat_attach): Likewise.
+       (linux_nat_kill): Likewise.
+       * nto-procfs.c (interrupt_query): Likewise.
+       (procfs_interrupt): Likewise.
+       (procfs_kill_inferior): Likewise.
+       * procfs.c (procfs_kill_inferior): Likewise.
+       * record.c (record_mourn_inferior): Likewise.
+       * remote-sim.c (gdbsim_kill): Likewise.
+       * remote.c (remote_detach_1): Likewise.
+       (remote_kill): Likewise.
+       * target.c (target_mourn_inferior): Change declaration to accept
+       new ptid_t argument; use gdb_assert on it.
+       * target.h (target_mourn_inferior): Move function prototype from
+       here...
+       * target/target.h (target_mourn_inferior): ... to here.  Adjust it
+       to accept new ptid_t argument.
+       * windows-nat.c (get_windows_debug_event): Adjusting call to
+       target_mourn_inferior to include ptid_t argument.
+
 2016-09-18  Pedro Alves  <palves@redhat.com>
 
        * s390-linux-nat.c: Include <algorithm>.
index 590c2ad04f12ed085d8e141d6027e79c1139ad99..3f54a766db3953e70cb167f610447b60f9b5e9b5 100644 (file)
@@ -1381,7 +1381,7 @@ darwin_kill_inferior (struct target_ops *ops)
     warning (_("Failed to kill inferior: kill (%d, 9) returned [%s]"),
             inf->pid, safe_strerror (errno));
 
-  target_mourn_inferior ();
+  target_mourn_inferior (inferior_ptid);
 }
 
 static void
index 3e29a1f7a5a3b707c24683d0af23d2a2f71080fb..f367507c368fe8e5dbb94ef1a1e0188fdac9d182 100644 (file)
@@ -482,7 +482,7 @@ startup_inferior (int ntraps)
 
          case TARGET_WAITKIND_SIGNALLED:
            target_terminal_ours ();
-           target_mourn_inferior ();
+           target_mourn_inferior (resume_ptid);
            error (_("During startup program terminated with signal %s, %s."),
                   gdb_signal_to_name (ws.value.sig),
                   gdb_signal_to_string (ws.value.sig));
@@ -490,7 +490,7 @@ startup_inferior (int ntraps)
 
          case TARGET_WAITKIND_EXITED:
            target_terminal_ours ();
-           target_mourn_inferior ();
+           target_mourn_inferior (resume_ptid);
            if (ws.value.integer)
              error (_("During startup program exited with code %d."),
                     ws.value.integer);
index 499ae3d8ce45712b6d987b02506bdb0250b5ef98..c97c77797844ec2e62ecf1f8cbb589c5612b5b30 100644 (file)
@@ -1,3 +1,12 @@
+2016-09-19  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+       * server.c (start_inferior): Call target_mourn_inferior instead of
+       mourn_inferior; pass ptid_t argument to it.
+       (resume): Likewise.
+       (handle_target_event): Likewise.
+       * target.c (target_mourn_inferior): New function.
+       * target.h (mourn_inferior): Delete macro.
+
 2016-09-16  Andreas Arnez  <arnez@linux.vnet.ibm.com>
 
        * linux-low.c (lwp_is_stepping): New function.
index 3ec585cfb6bb6130dcb4a295c59cec33315c3a0b..2996e19be29c3d4ab04d5c8d6f966e46b68c6ef6 100644 (file)
@@ -297,7 +297,7 @@ start_inferior (char **argv)
       current_thread->last_status = last_status;
     }
   else
-    mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
+    target_mourn_inferior (last_ptid);
 
   return signal_pid;
 }
@@ -2779,7 +2779,7 @@ resume (struct thread_resume *actions, size_t num_actions)
 
       if (last_status.kind == TARGET_WAITKIND_EXITED
           || last_status.kind == TARGET_WAITKIND_SIGNALLED)
-        mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
+        target_mourn_inferior (last_ptid);
     }
 }
 
@@ -4392,7 +4392,7 @@ handle_target_event (int err, gdb_client_data client_data)
          || last_status.kind == TARGET_WAITKIND_SIGNALLED)
        {
          mark_breakpoints_out (process);
-         mourn_inferior (process);
+         target_mourn_inferior (last_ptid);
        }
       else if (last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
        ;
index 053629ca7d7b792ffc9e3ebbf041234ab1cd1626..cf3da4748300e5f4210054d9ea4cfacee25194e3 100644 (file)
@@ -266,6 +266,14 @@ target_wait (ptid_t ptid, struct target_waitstatus *status, int options)
 
 /* See target/target.h.  */
 
+void
+target_mourn_inferior (ptid_t ptid)
+{
+  (*the_target->mourn) (find_process_pid (ptid_get_pid (ptid)));
+}
+
+/* See target/target.h.  */
+
 void
 target_continue_no_signal (ptid_t ptid)
 {
index 4c14c204bbceda30ca8e2c5ffea2f79f7bd20b7b..26f7422162a4c67f07ab4aac506c8c173c105e46 100644 (file)
@@ -517,9 +517,6 @@ int kill_inferior (int);
 #define detach_inferior(pid) \
   (*the_target->detach) (pid)
 
-#define mourn_inferior(PROC) \
-  (*the_target->mourn) (PROC)
-
 #define mythread_alive(pid) \
   (*the_target->thread_alive) (pid)
 
index c268732b3bdc4ccf31065e41d969639b3eb87d52..927ee5c6f17833e7f2ca4d5f6ab0f4a4d5cf035c 100644 (file)
@@ -2074,7 +2074,7 @@ gnu_kill_inferior (struct target_ops *ops)
       task_terminate (task->port);
       inf_set_pid (gnu_current_inf, -1);
     }
-  target_mourn_inferior ();
+  target_mourn_inferior (inferior_ptid);
 }
 
 /* Clean up after the inferior dies.  */
index 0896cff8cbabe8edb8a834e87184610e1aa641bb..64aaabe03ed5f1aa38cdd10353ae51fb76d15905 100644 (file)
@@ -287,7 +287,7 @@ inf_ptrace_kill (struct target_ops *ops)
   ptrace (PT_KILL, pid, (PTRACE_TYPE_ARG3)0, 0);
   waitpid (pid, &status, 0);
 
-  target_mourn_inferior ();
+  target_mourn_inferior (inferior_ptid);
 }
 
 /* Interrupt the inferior.  */
index ec37ca11d85b650e92118df6df47c60ca0532b16..2636a19f9b129cbb940199b1928932581f8593d6 100644 (file)
@@ -5132,7 +5132,7 @@ Cannot fill $_exitsignal with the correct signal number.\n"));
        }
 
       gdb_flush (gdb_stdout);
-      target_mourn_inferior ();
+      target_mourn_inferior (inferior_ptid);
       stop_print_frame = 0;
       stop_waiting (ecs);
       return;
index 8e9eb0bac4bb288324109f9fb122da58587c6a8c..cbf94ed03d219f35a88fe5095b021d51a208f1c6 100644 (file)
@@ -1253,7 +1253,7 @@ linux_nat_attach (struct target_ops *ops, const char *args, int from_tty)
          int exit_code = WEXITSTATUS (status);
 
          target_terminal_ours ();
-         target_mourn_inferior ();
+         target_mourn_inferior (inferior_ptid);
          if (exit_code == 0)
            error (_("Unable to attach: program exited normally."));
          else
@@ -1265,7 +1265,7 @@ linux_nat_attach (struct target_ops *ops, const char *args, int from_tty)
          enum gdb_signal signo;
 
          target_terminal_ours ();
-         target_mourn_inferior ();
+         target_mourn_inferior (inferior_ptid);
 
          signo = gdb_signal_from_host (WTERMSIG (status));
          error (_("Unable to attach: program terminated with signal "
@@ -3784,7 +3784,7 @@ linux_nat_kill (struct target_ops *ops)
       iterate_over_lwps (ptid, kill_wait_callback, NULL);
     }
 
-  target_mourn_inferior ();
+  target_mourn_inferior (inferior_ptid);
 }
 
 static void
index 9d581f24673b26044f85a122a1e460055d4e1ce1..311a0b1eff8033ebea6400e765076503506a4663 100644 (file)
@@ -726,7 +726,7 @@ interrupt_query (void)
   if (query (_("Interrupted while waiting for the program.\n\
 Give up (and stop debugging it)? ")))
     {
-      target_mourn_inferior ();
+      target_mourn_inferior (inferior_ptid);
       quit ();
     }
 }
@@ -1300,7 +1300,7 @@ procfs_interrupt (struct target_ops *self, ptid_t ptid)
 static void
 procfs_kill_inferior (struct target_ops *ops)
 {
-  target_mourn_inferior ();
+  target_mourn_inferior (inferior_ptid);
 }
 
 /* Fill buf with regset and return devctl cmd to do the setting.  Return
index 0e0641eb0ac574410ba4963ecdc9b436c5b16b32..fab15edccc6d4aae36f6da7cb299f1b935f0b7bf 100644 (file)
@@ -4273,7 +4273,7 @@ procfs_kill_inferior (struct target_ops *ops)
 
       if (pi)
        unconditionally_kill_inferior (pi);
-      target_mourn_inferior ();
+      target_mourn_inferior (inferior_ptid);
     }
 }
 
index 1af134f68fe870f06086f260ffcc1b519a995b9d..34ebd1bd7c6009f52e09ac366d0e313a03c90e09 100644 (file)
@@ -170,7 +170,7 @@ record_mourn_inferior (struct target_ops *t)
      threads are discarded.  */
   record_unpush (t);
 
-  target_mourn_inferior ();
+  target_mourn_inferior (inferior_ptid);
 }
 
 /* See record.h.  */
index 11d36eb6591db3476ff470033f0c4eb86c88c743..62190008fa9435d9c1afcc6c640033ccf8612590 100644 (file)
@@ -554,7 +554,7 @@ gdbsim_kill (struct target_ops *ops)
 
   /* There is no need to `kill' running simulator - the simulator is
      not running.  Mourning it is enough.  */
-  target_mourn_inferior ();
+  target_mourn_inferior (inferior_ptid);
 }
 
 /* Load an executable file into the target process.  This is expected to
index e80db79b1029c98a2fa59da16a5f37c7d0dccc84..ec8b4982e978e10aca747a7161d25c100ed588d5 100644 (file)
@@ -5159,7 +5159,7 @@ remote_detach_1 (const char *args, int from_tty)
   /* If doing detach-on-fork, we don't mourn, because that will delete
      breakpoints that should be available for the followed inferior.  */
   if (!is_fork_parent)
-    target_mourn_inferior ();
+    target_mourn_inferior (inferior_ptid);
   else
     {
       inferior_ptid = null_ptid;
@@ -8909,7 +8909,7 @@ remote_kill (struct target_ops *ops)
       res = remote_vkill (pid, rs);
       if (res == 0)
        {
-         target_mourn_inferior ();
+         target_mourn_inferior (inferior_ptid);
          return;
        }
     }
@@ -8926,7 +8926,7 @@ remote_kill (struct target_ops *ops)
         not in extended mode, mourning the inferior also unpushes
         remote_ops from the target stack, which closes the remote
         connection.  */
-      target_mourn_inferior ();
+      target_mourn_inferior (inferior_ptid);
 
       return;
     }
index b93244da2a2b98661c6e5b021b54a83b3c3c1e1f..b6a7e6408de6e5ee8f8da661fe24571aa405ad8a 100644 (file)
@@ -2377,8 +2377,9 @@ default_mourn_inferior (struct target_ops *self)
 }
 
 void
-target_mourn_inferior (void)
+target_mourn_inferior (ptid_t ptid)
 {
+  gdb_assert (ptid_equal (ptid, inferior_ptid));
   current_target.to_mourn_inferior (&current_target);
 
   /* We no longer need to keep handles on any of the object files.
index 493a6139db37c69da44e2c89d94c224df6a2747b..b458970c1a9b87f0c479ad04f41befaa50dd8e73 100644 (file)
@@ -1660,9 +1660,7 @@ void target_follow_exec (struct inferior *inf, char *execd_pathname);
    be defined by those targets that require the debugger to perform
    cleanup or internal state changes in response to the process event.  */
 
-/* The inferior process has died.  Do what is right.  */
-
-void target_mourn_inferior (void);
+/* For target_mourn_inferior see target/target.h.  */
 
 /* Does target have enough data to do a run or attach command? */
 
index 972bcb7d2ddbabc3302d0cdd97138bebdbffa179..be41fa74a5e32c8a47d229b8ea97c19c25704429 100644 (file)
@@ -86,4 +86,8 @@ extern void target_continue (ptid_t ptid, enum gdb_signal signal);
 extern ptid_t target_wait (ptid_t ptid, struct target_waitstatus *status,
                           int options);
 
+/* The inferior process has died.  Do what is right.  */
+
+extern void target_mourn_inferior (ptid_t ptid);
+
 #endif /* TARGET_COMMON_H */
index 0470f31eed257040c4b313e89da46d7c9406af16..31a9ecb15c05a5c0b8dcd606098ded2deb6a7c56 100644 (file)
@@ -1517,7 +1517,7 @@ get_windows_debug_event (struct target_ops *ops,
       if (!windows_initialization_done)
        {
          target_terminal_ours ();
-         target_mourn_inferior ();
+         target_mourn_inferior (inferior_ptid);
          error (_("During startup program exited with code 0x%x."),
                 (unsigned int) current_event.u.ExitProcess.dwExitCode);
        }