X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Finf-ptrace.c;h=ecd82ada4ed3deaa5cfed5c575a51fdd830c338a;hb=5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2;hp=3b32b678ee0e2f4844166562545778a9809ecea3;hpb=f2907e49910853edf3c1aec995b3c44b3bba8999;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c index 3b32b678ee..ecd82ada4e 100644 --- a/gdb/inf-ptrace.c +++ b/gdb/inf-ptrace.c @@ -1,6 +1,6 @@ /* Low-level child interface to ptrace. - Copyright (C) 1988-2018 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -25,7 +25,7 @@ #include "gdbcore.h" #include "regcache.h" #include "nat/gdb_ptrace.h" -#include "gdb_wait.h" +#include "gdbsupport/gdb_wait.h" #include #include "inf-ptrace.h" @@ -33,6 +33,7 @@ #include "gdbthread.h" #include "nat/fork-inferior.h" #include "utils.h" +#include "gdbarch.h" @@ -66,7 +67,7 @@ inf_ptrace_target::follow_fork (int follow_child, int detach_fork) if (!follow_child) { struct thread_info *tp = inferior_thread (); - pid_t child_pid = ptid_get_pid (tp->pending_follow.value.related_pid); + pid_t child_pid = tp->pending_follow.value.related_pid.pid (); /* Breakpoints have already been detached from the child by infrun.c. */ @@ -135,7 +136,7 @@ inf_ptrace_target::create_inferior (const char *exec_file, /* We have something that executes now. We'll be running through the shell at this point (if startup-with-shell is true), but the pid shouldn't change. */ - add_thread_silent (ptid); + add_thread_silent (this, ptid); unpusher.release (); @@ -156,7 +157,7 @@ inf_ptrace_target::post_startup_inferior (ptid_t pid) /* Set the initial event mask. */ memset (&pe, 0, sizeof pe); pe.pe_set_event |= PTRACE_FORK; - if (ptrace (PT_SET_EVENT_MASK, ptid_get_pid (pid), + if (ptrace (PT_SET_EVENT_MASK, pid.pid (), (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) perror_with_name (("ptrace")); } @@ -174,7 +175,7 @@ inf_ptrace_target::mourn_inferior () 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); inf_child_target::mourn_inferior (); } @@ -185,7 +186,6 @@ inf_ptrace_target::mourn_inferior () void inf_ptrace_target::attach (const char *args, int from_tty) { - char *exec_file; pid_t pid; struct inferior *inf; @@ -209,16 +209,14 @@ inf_ptrace_target::attach (const char *args, int from_tty) if (from_tty) { - exec_file = get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file, - target_pid_to_str (ptid_t (pid))); + target_pid_to_str (ptid_t (pid)).c_str ()); else printf_unfiltered (_("Attaching to %s\n"), - target_pid_to_str (ptid_t (pid))); - - gdb_flush (gdb_stdout); + target_pid_to_str (ptid_t (pid)).c_str ()); } #ifdef PT_ATTACH @@ -237,10 +235,10 @@ inf_ptrace_target::attach (const char *args, int from_tty) /* Always add a main thread. If some target extends the ptrace target, it should decorate the ptid later with more info. */ - thread_info *thr = add_thread_silent (inferior_ptid); + thread_info *thr = add_thread_silent (this, inferior_ptid); /* Don't consider the thread stopped until we've processed its initial SIGSTOP stop. */ - set_executing (thr->ptid, true); + set_executing (this, thr->ptid, true); unpusher.release (); } @@ -267,7 +265,7 @@ inf_ptrace_target::post_attach (int pid) void inf_ptrace_target::detach (inferior *inf, int from_tty) { - pid_t pid = ptid_get_pid (inferior_ptid); + pid_t pid = inferior_ptid.pid (); target_announce_detach (from_tty); @@ -303,7 +301,7 @@ inf_ptrace_target::detach_success (inferior *inf) void inf_ptrace_target::kill () { - pid_t pid = ptid_get_pid (inferior_ptid); + pid_t pid = inferior_ptid.pid (); int status; if (pid == 0) @@ -325,9 +323,9 @@ get_ptrace_pid (ptid_t ptid) /* If we have an LWPID to work with, use it. Otherwise, we're dealing with a non-threaded program/target. */ - pid = ptid_get_lwp (ptid); + pid = ptid.lwp (); if (pid == 0) - pid = ptid_get_pid (ptid); + pid = ptid.pid (); return pid; } @@ -341,10 +339,10 @@ inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal) pid_t pid; int request; - if (ptid_equal (minus_one_ptid, ptid)) + if (minus_one_ptid == ptid) /* Resume all threads. Traditionally ptrace() only supports single-threaded processes, so simply resume the inferior. */ - pid = ptid_get_pid (inferior_ptid); + pid = inferior_ptid.pid (); else pid = get_ptrace_pid (ptid); @@ -389,7 +387,7 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, do { - pid = waitpid (ptid_get_pid (ptid), &status, 0); + pid = waitpid (ptid.pid (), &status, 0); save_errno = errno; } while (pid == -1 && errno == EINTR); @@ -409,7 +407,7 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, } /* Ignore terminated detached child processes. */ - if (!WIFSTOPPED (status) && pid != ptid_get_pid (inferior_ptid)) + if (!WIFSTOPPED (status) && pid != inferior_ptid.pid ()) pid = -1; } while (pid == -1); @@ -441,7 +439,7 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, gdb_assert (pe.pe_report_event == PTRACE_FORK); gdb_assert (pe.pe_other_pid == pid); - if (fpid == ptid_get_pid (inferior_ptid)) + if (fpid == inferior_ptid.pid ()) { ourstatus->value.related_pid = ptid_t (pe.pe_other_pid); return ptid_t (fpid); @@ -614,7 +612,7 @@ bool inf_ptrace_target::thread_alive (ptid_t ptid) { /* ??? Is kill the right way to do this? */ - return (::kill (ptid_get_pid (ptid), 0) != -1); + return (::kill (ptid.pid (), 0) != -1); } /* Print status information about what we're accessing. */ @@ -626,10 +624,10 @@ inf_ptrace_target::files_info () printf_filtered (_("\tUsing the running image of %s %s.\n"), inf->attach_flag ? "attached" : "child", - target_pid_to_str (inferior_ptid)); + target_pid_to_str (inferior_ptid).c_str ()); } -const char * +std::string inf_ptrace_target::pid_to_str (ptid_t ptid) { return normal_pid_to_str (ptid);