{
struct fork_info *fp;
- if (fork_list == NULL && pid != ptid_get_pid (inferior_ptid))
+ if (fork_list == NULL && pid != inferior_ptid.pid ())
{
/* Special case -- if this is the first fork in the list
(the list is hitherto empty), and if this new fork is
NOT the current inferior_ptid, then add inferior_ptid
first, as a special zeroeth fork id. */
highest_fork_num = -1;
- add_fork (ptid_get_pid (inferior_ptid)); /* safe recursion */
+ add_fork (inferior_ptid.pid ()); /* safe recursion */
}
fp = XCNEW (struct fork_info);
- fp->ptid = ptid_build (pid, pid, 0);
+ fp->ptid = ptid_t (pid, pid, 0);
fp->num = ++highest_fork_num;
if (fork_list == NULL)
fpprev = NULL;
- linux_target->low_forget_process (ptid_get_pid (ptid));
+ linux_target->low_forget_process (ptid.pid ());
for (fp = fork_list; fp; fpprev = fp, fp = fp->next)
- if (ptid_equal (fp->ptid, ptid))
+ if (fp->ptid == ptid)
break;
if (!fp)
remove it, leaving the list empty -- we're now down to the
default case of debugging a single process. */
if (fork_list != NULL && fork_list->next == NULL &&
- ptid_equal (fork_list->ptid, inferior_ptid))
+ fork_list->ptid == inferior_ptid)
{
/* Last fork -- delete from list and handle as solo process
(should be a safe recursion). */
struct fork_info *fp;
for (fp = fork_list; fp; fp = fp->next)
- if (ptid_equal (fp->ptid, ptid))
+ if (fp->ptid == ptid)
return fp;
return NULL;
struct fork_info *fp;
for (fp = fork_list; fp; fp = fp->next)
- if (pid == ptid_get_pid (fp->ptid))
+ if (pid == fp->ptid.pid ())
return fp;
return NULL;
if (fork)
return fork->ptid;
else
- return pid_to_ptid (-1);
+ return ptid_t (-1);
}
static void
registers_changed ();
reinit_frame_cache ();
- stop_pc = regcache_read_pc (get_current_regcache ());
+ inferior_thread ()->suspend.stop_pc
+ = regcache_read_pc (get_current_regcache ());
nullify_last_target_wait_ptid ();
/* Now restore the file positions of open file descriptors. */
/* Now save the 'state' (file position) of all open file descriptors.
Unfortunately fork does not take care of that for us... */
snprintf (path, PATH_MAX, "/proc/%ld/fd",
- (long) ptid_get_pid (fp->ptid));
+ (long) fp->ptid.pid ());
if ((d = opendir (path)) != NULL)
{
long tmp;
for (fp = fork_list; fp; fp = fp->next)
{
- pid = ptid_get_pid (fp->ptid);
+ pid = fp->ptid.pid ();
do {
/* Use SIGKILL instead of PTRACE_KILL because the former works even
if the thread is running, while the later doesn't. */
Do not check whether this succeeds though, since we may be
dealing with a process that we attached to. Such a process will
only report its exit status to its original parent. */
- waitpid (ptid_get_pid (inferior_ptid), &status, 0);
+ waitpid (inferior_ptid.pid (), &status, 0);
/* OK, presumably inferior_ptid is the one who has exited.
We need to delete that one from the fork_list, and switch
delete it from the fork_list, and switch to the next available
fork. */
- if (ptrace (PTRACE_DETACH, ptid_get_pid (inferior_ptid), 0, 0))
+ if (ptrace (PTRACE_DETACH, inferior_ptid.pid (), 0, 0))
error (_("Unable to detach %s"), target_pid_to_str (inferior_ptid));
delete_fork (inferior_ptid);
struct cleanup *old_cleanup;
int ret = -1;
- if (!ptid_equal (pptid, inferior_ptid))
+ if (pptid != inferior_ptid)
{
/* Switch to pptid. */
oldfp = find_fork_ptid (inferior_ptid);
error (_("Requires argument (checkpoint id to delete)"));
ptid = fork_id_to_ptid (parse_and_eval_long (args));
- if (ptid_equal (ptid, minus_one_ptid))
+ if (ptid == minus_one_ptid)
error (_("No such checkpoint id, %s"), args);
- if (ptid_equal (ptid, inferior_ptid))
+ if (ptid == inferior_ptid)
error (_("\
Please switch to another checkpoint before deleting the current one"));
- if (ptrace (PTRACE_KILL, ptid_get_pid (ptid), 0, 0))
+ if (ptrace (PTRACE_KILL, ptid.pid (), 0, 0))
error (_("Unable to kill pid %s"), target_pid_to_str (ptid));
fi = find_fork_ptid (ptid);
/* If fi->parent_ptid is not a part of lwp but it's a part of checkpoint
list, waitpid the ptid.
- If fi->parent_ptid is a part of lwp and it is stoped, waitpid the
+ If fi->parent_ptid is a part of lwp and it is stopped, waitpid the
ptid. */
- if ((!find_thread_ptid (pptid) && find_fork_ptid (pptid))
- || (find_thread_ptid (pptid) && is_stopped (pptid)))
+ thread_info *parent = find_thread_ptid (pptid);
+ if ((parent == NULL && find_fork_ptid (pptid))
+ || (parent != NULL && parent->state == THREAD_STOPPED))
{
- if (inferior_call_waitpid (pptid, ptid_get_pid (ptid)))
+ if (inferior_call_waitpid (pptid, ptid.pid ()))
warning (_("Unable to wait pid %s"), target_pid_to_str (ptid));
}
}
error (_("Requires argument (checkpoint id to detach)"));
ptid = fork_id_to_ptid (parse_and_eval_long (args));
- if (ptid_equal (ptid, minus_one_ptid))
+ if (ptid == minus_one_ptid)
error (_("No such checkpoint id, %s"), args);
- if (ptid_equal (ptid, inferior_ptid))
+ if (ptid == inferior_ptid)
error (_("\
Please switch to another checkpoint before detaching the current one"));
- if (ptrace (PTRACE_DETACH, ptid_get_pid (ptid), 0, 0))
+ if (ptrace (PTRACE_DETACH, ptid.pid (), 0, 0))
error (_("Unable to detach %s"), target_pid_to_str (ptid));
if (from_tty)
continue;
printed = fp;
- if (ptid_equal (fp->ptid, inferior_ptid))
+ if (fp->ptid == inferior_ptid)
printf_filtered ("* ");
else
printf_filtered (" ");
{
int *count_p = (int *) data;
- if (current_inferior ()->pid == ptid_get_pid (tp->ptid))
+ if (current_inferior ()->pid == tp->ptid.pid ())
(*count_p)++;
/* Stop the iteration if multiple threads have been detected. */
/* Tell linux-nat.c that we're checkpointing this inferior. */
{
scoped_restore save_pid
- = make_scoped_restore (&checkpointing_pid, ptid_get_pid (inferior_ptid));
+ = make_scoped_restore (&checkpointing_pid, inferior_ptid.pid ());
ret = call_function_by_hand (fork_fn, NULL, 0, &ret);
}
fp != NULL ? fp->num : -1, (long) retpid);
if (info_verbose)
{
- parent_pid = ptid_get_lwp (last_target_ptid);
+ parent_pid = last_target_ptid.lwp ();
if (parent_pid == 0)
- parent_pid = ptid_get_pid (last_target_ptid);
+ parent_pid = last_target_ptid.pid ();
printf_filtered (_(" gdb says parent = %ld.\n"),
(long) parent_pid);
}
process. */
add_com ("restart", class_obscure, restart_command, _("\
-restart <n>: restore program context from a checkpoint.\n\
-Argument 'n' is checkpoint ID, as displayed by 'info checkpoints'."));
+restart N: restore program context from a checkpoint.\n\
+Argument N is checkpoint ID, as displayed by 'info checkpoints'."));
/* Delete checkpoint command: kill the process and remove it from
the fork list. */