+2018-07-13 Pedro Alves <palves@redhat.com>
+
+ * linux-low.c (linux_detach, linux_join): Change parameter to
+ process_info pointer instead of pid. Adjust.
+ * lynx-low.c (lynx_detach, lynx_join): Likewise.
+ * nto-low.c (nto_detach): Likewise.
+ * spu-low.c (spu_detach, spu_join): Likewise.
+ * win32-low.c (win32_detach, win32_join): Likewise.
+ * server.c (handle_detach, detach_or_kill_for_exit): Adjust.
+ * target.h (struct target_ops) <detach, join>: Change parameter to
+ process_info pointer instead of pid. Adjust all implementations
+ and callers.
+ (detach_inferior, join_inferior): Rename 'pid' parameter to
+ 'proc'.
+
2018-07-11 Sergio Durigan Junior <sergiodj@redhat.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
Paul Fertser <fercerpav@gmail.com>
}
static int
-linux_detach (int pid)
+linux_detach (process_info *process)
{
- struct process_info *process;
struct lwp_info *main_lwp;
- process = find_process_pid (pid);
- if (process == NULL)
- return -1;
-
/* As there's a step over already in progress, let it finish first,
otherwise nesting a stabilize_threads operation on top gets real
messy. */
/* Detach from the clone lwps first. If the thread group exits just
while we're detaching, we must reap the clone lwps before we're
able to reap the leader. */
- for_each_thread (pid, linux_detach_lwp_callback);
+ for_each_thread (process->pid, linux_detach_lwp_callback);
- main_lwp = find_lwp_pid (ptid_t (pid));
+ main_lwp = find_lwp_pid (ptid_t (process->pid));
linux_detach_one_lwp (main_lwp);
the_target->mourn (process);
}
static void
-linux_join (int pid)
+linux_join (process_info *proc)
{
int status, ret;
do {
- ret = my_waitpid (pid, &status, 0);
+ ret = my_waitpid (proc->pid, &status, 0);
if (WIFEXITED (status) || WIFSIGNALED (status))
break;
} while (ret != -1 || errno != ECHILD);
/* Implement the detach target_ops method. */
static int
-lynx_detach (int pid)
+lynx_detach (process_info *process)
{
- ptid_t ptid = lynx_ptid_t (pid, 0);
- struct process_info *process;
-
- process = find_process_pid (pid);
- if (process == NULL)
- return -1;
+ ptid_t ptid = lynx_ptid_t (process->pid, 0);
lynx_ptrace (PTRACE_DETACH, ptid, 0, 0, 0);
the_target->mourn (process);
/* Implement the join target_ops method. */
static void
-lynx_join (int pid)
+lynx_join (process_info *proc)
{
/* The PTRACE_DETACH is sufficient to detach from the process.
So no need to do anything extra. */
/* Detach from process PID. */
static int
-nto_detach (int pid)
+nto_detach (process_info *proc)
{
- TRACE ("%s %d\n", __func__, pid);
+ TRACE ("%s %d\n", __func__, proc->pid);
do_detach ();
return 0;
}
fprintf (stderr, "Detaching from process %d\n", process->pid);
stop_tracing ();
- if (detach_inferior (process->pid) != 0)
+ if (detach_inferior (process) != 0)
write_enn (own_buf);
else
{
/* If we are attached, then we can exit. Otherwise, we
need to hang around doing nothing, until the child is
gone. */
- join_inferior (process->pid);
+ join_inferior (process);
exit (0);
}
}
int pid = process->pid;
if (process->attached)
- detach_inferior (pid);
+ detach_inferior (process);
else
kill_inferior (pid);
/* Detach from inferior process. */
static int
-spu_detach (int pid)
+spu_detach (process_info *process)
{
- struct process_info *process = find_process_pid (pid);
- if (process == NULL)
- return -1;
-
- ptrace (PTRACE_DETACH, pid, 0, 0);
+ ptrace (PTRACE_DETACH, process->pid, 0, 0);
clear_inferiors ();
remove_process (process);
}
static void
-spu_join (int pid)
+spu_join (process_info *proc)
{
int status, ret;
do {
- ret = waitpid (pid, &status, 0);
+ ret = waitpid (proc->pid, &status, 0);
if (WIFEXITED (status) || WIFSIGNALED (status))
break;
} while (ret != -1 || errno != ECHILD);
int (*kill) (int pid);
- /* Detach from inferior PID. Return -1 on failure, and 0 on
+ /* Detach from process PROC. Return -1 on failure, and 0 on
success. */
- int (*detach) (int pid);
+ int (*detach) (process_info *proc);
/* The inferior process has died. Do what is right. */
void (*mourn) (struct process_info *proc);
- /* Wait for inferior PID to exit. */
- void (*join) (int pid);
+ /* Wait for process PROC to exit. */
+
+ void (*join) (process_info *proc);
/* Return 1 iff the thread with process ID PID is alive. */
(*the_target->handle_new_gdb_connection) (); \
} while (0)
-#define detach_inferior(pid) \
- (*the_target->detach) (pid)
+#define detach_inferior(proc) \
+ (*the_target->detach) (proc)
#define mythread_alive(pid) \
(*the_target->thread_alive) (pid)
#define store_inferior_registers(regcache, regno) \
(*the_target->store_registers) (regcache, regno)
-#define join_inferior(pid) \
- (*the_target->join) (pid)
+#define join_inferior(proc) \
+ (*the_target->join) (proc)
#define target_supports_non_stop() \
(the_target->supports_non_stop ? (*the_target->supports_non_stop ) () : 0)
return 0;
}
-/* Detach from inferior PID. */
+/* Implementation of target_ops::detach. */
+
static int
-win32_detach (int pid)
+win32_detach (process_info *process)
{
- struct process_info *process;
winapi_DebugActiveProcessStop DebugActiveProcessStop = NULL;
winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL;
#ifdef _WIN32_WCE
return -1;
DebugSetProcessKillOnExit (FALSE);
- process = find_process_pid (pid);
remove_process (process);
win32_clear_inferiors ();
remove_process (process);
}
-/* Wait for inferiors to end. */
+/* Implementation of target_ops::join. */
+
static void
-win32_join (int pid)
+win32_join (process_info *proc)
{
- HANDLE h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
+ HANDLE h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, proc->pid);
if (h != NULL)
{
WaitForSingleObject (h, INFINITE);