Add a target_ops parameter to the to_kill method in struct target_ops.
authorJoel Brobecker <brobecker@gnat.com>
Tue, 17 Mar 2009 19:28:09 +0000 (19:28 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Tue, 17 Mar 2009 19:28:09 +0000 (19:28 +0000)
        * target.h (struct target_ops): Add a "target_ops *" parameter to
        method to_kill.
        (target_kill): Remove macro. Add declaration.
        * target.c (debug_to_kill): Delete, no longer necessary.
        (target_kill): New function.
        (update_current_target):  Stop inheriting the to_kill method.
        Do not de_fault it to no_process either.
        (setup_target_debug): Do not set current_target.to_kill.
        * gnu-nat.c, go32-nat.c, hpux-thread.c, inf-ptrace.c, inf-ttrace.c,
        linux-nat.c, monitor.c, nto-procfs.c, procfs.c, remote-m32r-sdi.c,
        remote-mips.c, remote-sim.c, remote.c, windows-nat.c: Update
        accordingly.

17 files changed:
gdb/ChangeLog
gdb/gnu-nat.c
gdb/go32-nat.c
gdb/hpux-thread.c
gdb/inf-ptrace.c
gdb/inf-ttrace.c
gdb/linux-nat.c
gdb/monitor.c
gdb/nto-procfs.c
gdb/procfs.c
gdb/remote-m32r-sdi.c
gdb/remote-mips.c
gdb/remote-sim.c
gdb/remote.c
gdb/target.c
gdb/target.h
gdb/windows-nat.c

index ce50ba2eb3a3df7f1b3115f3b7396f7aaba9400a..1759b0b0046b35a7548e8a347a0d46a3be070d9e 100644 (file)
@@ -1,3 +1,20 @@
+2009-03-17  Joel Brobecker  <brobecker@adacore.com>
+
+       Add a target_ops parameter to the to_kill method in struct target_ops.
+
+       * target.h (struct target_ops): Add a "target_ops *" parameter to
+       method to_kill.
+       (target_kill): Remove macro. Add declaration.
+       * target.c (debug_to_kill): Delete, no longer necessary.
+       (target_kill): New function.
+       (update_current_target):  Stop inheriting the to_kill method.
+       Do not de_fault it to no_process either.
+       (setup_target_debug): Do not set current_target.to_kill.
+       * gnu-nat.c, go32-nat.c, hpux-thread.c, inf-ptrace.c, inf-ttrace.c,
+       linux-nat.c, monitor.c, nto-procfs.c, procfs.c, remote-m32r-sdi.c,
+       remote-mips.c, remote-sim.c, remote.c, windows-nat.c: Update
+       accordingly.
+
 2009-03-17  Doug Evans  <dje@google.com>
 
        * amd64-linux-nat.c (si_timerid,si_overrun): Provide definition for
index a43a47df53f4e0e0cc472f68b0b645c73ff47d61..20b59585f1e06cc6a29885b4d68c2305fd9107f0 100644 (file)
@@ -2030,7 +2030,7 @@ gnu_resume (struct target_ops *ops,
 
 \f
 static void
-gnu_kill_inferior (void)
+gnu_kill_inferior (struct target_ops *ops)
 {
   struct proc *task = gnu_current_inf->task;
   if (task)
index ce8b6dc76f3e0341a2d750624dda315fee159fca..e1f793edf111ab4062ee728558914ec8b2490ace 100644 (file)
@@ -184,7 +184,7 @@ static int go32_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
                             struct target_ops *target);
 static void go32_files_info (struct target_ops *target);
 static void go32_stop (ptid_t);
-static void go32_kill_inferior (void);
+static void go32_kill_inferior (struct target_ops *ops);
 static void go32_create_inferior (struct target_ops *ops, char *exec_file,
                                  char *args, char **env, int from_tty);
 static void go32_mourn_inferior (struct target_ops *ops);
@@ -580,7 +580,7 @@ go32_stop (ptid_t ptid)
 }
 
 static void
-go32_kill_inferior (void)
+go32_kill_inferior (struct target_ops *ops)
 {
   redir_cmdline_delete (&child_cmd);
   resume_signal = -1;
@@ -608,7 +608,7 @@ go32_create_inferior (struct target_ops *ops, char *exec_file,
   if (prog_has_started)
     {
       go32_stop (inferior_ptid);
-      go32_kill_inferior ();
+      go32_kill_inferior (ops);
     }
   resume_signal = -1;
   resume_is_step = 0;
@@ -691,7 +691,7 @@ go32_mourn_inferior (struct target_ops *ops)
      at all times, but it doesn't, probably under an assumption that
      the OS cleans up when the debuggee exits.  */
   i386_cleanup_dregs ();
-  go32_kill_inferior ();
+  go32_kill_inferior (ops);
   generic_mourn_inferior ();
 }
 
index f0acfcfc368a430a6f86e7057e9f1054811e517a..bdc547d97bbdf033790bfad3378982047932ad7a 100644 (file)
@@ -426,9 +426,9 @@ hpux_thread_files_info (struct target_ops *ignore)
 }
 
 static void
-hpux_thread_kill_inferior (void)
+hpux_thread_kill_inferior (struct target_ops *ops)
 {
-  deprecated_child_ops.to_kill ();
+  deprecated_child_ops.to_kill (&deprecated_child_ops);
 }
 
 static void
index f40b6b7b99aa3df0f61dbe10c4bbf872f8607520..f088ffdc6e74c42bc3a2dffb91b3667fb373adb5 100644 (file)
@@ -320,7 +320,7 @@ inf_ptrace_detach (struct target_ops *ops, char *args, int from_tty)
 /* Kill the inferior.  */
 
 static void
-inf_ptrace_kill (void)
+inf_ptrace_kill (struct target_ops *ops)
 {
   pid_t pid = ptid_get_pid (inferior_ptid);
   int status;
index 965282aff795179834d12f49bc70c59d949d2fe4..3014c2cf9d687ac87c1d9aff24f5e12581399ae8 100644 (file)
@@ -814,7 +814,7 @@ inf_ttrace_detach (struct target_ops *ops, char *args, int from_tty)
 }
 
 static void
-inf_ttrace_kill (void)
+inf_ttrace_kill (struct target_ops *ops)
 {
   pid_t pid = ptid_get_pid (inferior_ptid);
 
index 12b786ee86d7e38e15b25bd00aa42a7273547159..cc5d3e796410240c0cf7a40639cfaa94d51140ac 100644 (file)
@@ -3167,7 +3167,7 @@ kill_wait_callback (struct lwp_info *lp, void *data)
 }
 
 static void
-linux_nat_kill (void)
+linux_nat_kill (struct target_ops *ops)
 {
   struct target_waitstatus last;
   ptid_t last_ptid;
index 5557998c8076b5bad662dace95d80f4a0aa30482..60db1dc53734bad5549ef3c7a296ca59cc8317c5 100644 (file)
@@ -1991,7 +1991,7 @@ monitor_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
 }
 
 static void
-monitor_kill (void)
+monitor_kill (struct target_ops *ops)
 {
   return;                      /* ignore attempts to kill target system */
 }
index 75102f122f7740d2e9d98886484effe3f1f489d7..b46c64d8db7fb40529d87805427830782c0f7fba 100644 (file)
@@ -1120,7 +1120,7 @@ procfs_stop (ptid_t ptid)
 }
 
 static void
-procfs_kill_inferior (void)
+procfs_kill_inferior (struct target_ops *ops)
 {
   target_mourn_inferior ();
 }
index c4b6b55da68a865c9f2c274d82c6f380bcb7549d..adb44f4e0600eee4e2799131fca34d22d61f579f 100644 (file)
@@ -123,7 +123,7 @@ static void procfs_fetch_registers (struct target_ops *,
 static void procfs_store_registers (struct target_ops *,
                                    struct regcache *, int);
 static void procfs_notice_signals (ptid_t);
-static void procfs_kill_inferior (void);
+static void procfs_kill_inferior (struct target_ops *ops);
 static void procfs_mourn_inferior (struct target_ops *ops);
 static void procfs_create_inferior (struct target_ops *, char *, 
                                    char *, char **, int);
@@ -4764,7 +4764,7 @@ unconditionally_kill_inferior (procinfo *pi)
  */
 
 static void
-procfs_kill_inferior (void)
+procfs_kill_inferior (struct target_ops *ops)
 {
   if (!ptid_equal (inferior_ptid, null_ptid)) /* ? */
     {
index baf9c61bc4c842696c3a30a60e4d133558d80050..c7f908ebf4cdb42c3172fb37f30c004975b50e23 100644 (file)
@@ -1112,7 +1112,7 @@ m32r_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
 }
 
 static void
-m32r_kill (void)
+m32r_kill (struct target_ops *ops)
 {
   if (remote_debug)
     fprintf_unfiltered (gdb_stdlog, "m32r_kill()\n");
index 9b514b13ca6379ca69638ea0644d0d8bccbab39d..b35bb629cd6feaf1692ebaf6b187412399443033 100644 (file)
@@ -2129,7 +2129,7 @@ mips_files_info (struct target_ops *ignore)
    right port, we could interrupt the process with a break signal.  */
 
 static void
-mips_kill (void)
+mips_kill (struct target_ops *ops)
 {
   if (!mips_wait_flag)
     return;
@@ -3276,7 +3276,6 @@ mips_load (char *file, int from_tty)
          to a different value than GDB thinks it has. The following ensures
          that the write_pc() WILL update the PC value: */
       struct regcache *regcache = get_current_regcache ();
-
       regcache_invalidate (regcache,
                           gdbarch_pc_regnum (get_regcache_arch (regcache)));
     }
index bb67b88b8d282a0ccfe834a4d4d6ab436d97d662..4eae65aeca33e1cc2b46411ff811085237cb32fb 100644 (file)
@@ -72,7 +72,7 @@ static void gdb_os_evprintf_filtered (host_callback *, const char *, va_list);
 
 static void gdb_os_error (host_callback *, const char *, ...) ATTR_NORETURN;
 
-static void gdbsim_kill (void);
+static void gdbsim_kill (struct target_ops *);
 
 static void gdbsim_load (char *prog, int fromtty);
 
@@ -378,7 +378,7 @@ gdbsim_store_register (struct target_ops *ops,
    and releasing other resources acquired by the simulated program.  */
 
 static void
-gdbsim_kill (void)
+gdbsim_kill (struct target_ops *ops)
 {
   if (remote_debug)
     printf_filtered ("gdbsim_kill\n");
@@ -451,7 +451,7 @@ gdbsim_create_inferior (struct target_ops *target, char *exec_file, char *args,
                     args);
 
   if (ptid_equal (inferior_ptid, remote_sim_ptid))
-    gdbsim_kill ();
+    gdbsim_kill (target);
   remove_breakpoints ();
   init_wait_for_inferior ();
 
index 0c27307b847da48a62127d15ff3143b7e02f5cb4..e3a7170bb3893644c6148de0015882c82b2e829c 100644 (file)
@@ -111,7 +111,7 @@ static void remote_send (char **buf, long *sizeof_buf_p);
 
 static int readchar (int timeout);
 
-static void remote_kill (void);
+static void remote_kill (struct target_ops *ops);
 
 static int tohex (int nib);
 
@@ -6528,7 +6528,7 @@ getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever)
 
 \f
 static void
-remote_kill (void)
+remote_kill (struct target_ops *ops)
 {
   /* Use catch_errors so the user can quit from gdb even when we
      aren't on speaking terms with the remote system.  */
@@ -6560,7 +6560,7 @@ remote_vkill (int pid, struct remote_state *rs)
 }
 
 static void
-extended_remote_kill (void)
+extended_remote_kill (struct target_ops *ops)
 {
   int res;
   int pid = ptid_get_pid (inferior_ptid);
index b89d5511c4a31c2b3932f95eb5ab52ac7fae1786..86cdb71b78901292c9ba37b397b7deaa43106ed9 100644 (file)
@@ -136,8 +136,6 @@ static void debug_to_terminal_ours (void);
 
 static void debug_to_terminal_info (char *, int);
 
-static void debug_to_kill (void);
-
 static void debug_to_load (char *, int);
 
 static int debug_to_lookup_symbol (char *, CORE_ADDR *);
@@ -256,6 +254,24 @@ target_ignore (void)
 {
 }
 
+void
+target_kill (void)
+{
+  struct target_ops *t;
+
+  for (t = current_target.beneath; t != NULL; t = t->beneath)
+    if (t->to_kill != NULL)
+      {
+       if (targetdebug)
+         fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
+
+        t->to_kill (t);
+       return;
+      }
+
+  noprocess ();
+}
+
 void
 target_load (char *arg, int from_tty)
 {
@@ -430,7 +446,7 @@ update_current_target (void)
       INHERIT (to_terminal_ours, t);
       INHERIT (to_terminal_save_ours, t);
       INHERIT (to_terminal_info, t);
-      INHERIT (to_kill, t);
+      /* Do not inherit to_kill.  */
       INHERIT (to_load, t);
       INHERIT (to_lookup_symbol, t);
       /* Do no inherit to_create_inferior.  */
@@ -556,9 +572,6 @@ update_current_target (void)
            target_ignore);
   de_fault (to_terminal_info,
            default_terminal_info);
-  de_fault (to_kill,
-           (void (*) (void))
-           noprocess);
   de_fault (to_load,
            (void (*) (char *, int))
            tcomplain);
@@ -3024,14 +3037,6 @@ debug_to_terminal_info (char *arg, int from_tty)
                      from_tty);
 }
 
-static void
-debug_to_kill (void)
-{
-  debug_target.to_kill ();
-
-  fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
-}
-
 static void
 debug_to_load (char *args, int from_tty)
 {
@@ -3227,7 +3232,6 @@ setup_target_debug (void)
   current_target.to_terminal_ours = debug_to_terminal_ours;
   current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
   current_target.to_terminal_info = debug_to_terminal_info;
-  current_target.to_kill = debug_to_kill;
   current_target.to_load = debug_to_load;
   current_target.to_lookup_symbol = debug_to_lookup_symbol;
   current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
index 7f4cd8fae8aa89110406cb733de0cd161881e8c7..e7f087ba703a5b1aa2ffed03bcf310c0fcbfcc68 100644 (file)
@@ -378,7 +378,7 @@ struct target_ops
     void (*to_terminal_ours) (void);
     void (*to_terminal_save_ours) (void);
     void (*to_terminal_info) (char *, int);
-    void (*to_kill) (void);
+    void (*to_kill) (struct target_ops *);
     void (*to_load) (char *, int);
     int (*to_lookup_symbol) (char *, CORE_ADDR *);
     void (*to_create_inferior) (struct target_ops *, 
@@ -790,8 +790,7 @@ extern void print_section_info (struct target_ops *, bfd *);
 
 /* Kill the inferior process.   Make it go away.  */
 
-#define target_kill() \
-     (*current_target.to_kill) ()
+extern void target_kill (void);
 
 /* Load an executable file into the target process.  This is expected
    to not only bring new code into the target process, but also to
index 33ff1a085b10a0841de77cfd2bc8f6b67ca638f0..2ab17097cd5e4b8b9b3cf867b0ccab5d22594b34 100644 (file)
@@ -114,7 +114,7 @@ static int debug_registers_used;
 
 static void windows_stop (ptid_t);
 static int windows_thread_alive (struct target_ops *, ptid_t);
-static void windows_kill_inferior (void);
+static void windows_kill_inferior (struct target_ops *);
 
 static enum target_signal last_sig = TARGET_SIGNAL_0;
 /* Set if a signal was received from the debugged process */
@@ -1493,7 +1493,7 @@ windows_wait (struct target_ops *ops,
            detach = deprecated_ui_loop_hook (0);
 
          if (detach)
-           windows_kill_inferior ();
+           windows_kill_inferior (ops);
        }
     }
 }
@@ -2014,7 +2014,7 @@ windows_xfer_memory (CORE_ADDR memaddr, gdb_byte *our, int len,
 }
 
 static void
-windows_kill_inferior (void)
+windows_kill_inferior (struct target_ops *ops)
 {
   CHECK (TerminateProcess (current_process_handle, 0));