@@ -1,3 +1,18 @@
+2016-01-10 John Baldwin <jhb@FreeBSD.org>
+ * amd64bsd-nat.c (get_ptrace_pid): New function.
+ (amd64bsd_fetch_inferior_registers): Use new function.
+ (amd64bsd_store_inferior_registers): Use new function.
+ (amd64bsd_dr_get): Use new function.
+ (amd64bsd_dr_set): Use new function.
+ * i386bsd-nat.c (get_ptrace_pid): New function.
+ (i386bsd_fetch_inferior_registers): Use new function.
+ (i386bsd_store_inferior_registers): Use new function.
+ (i386bsd_dr_get): Use new function.
+ (i386bsd_dr_set): Use new function.
+ * ppcfbsd-nat.c (get_ptrace_pid): New function.
+ (ppcfbsd_fetch_inferior_registers): Use new function.
+ (ppcfbsd_store_inferior_registers): Use new function.
+
2016-01-09 John Baldwin <jhb@FreeBSD.org>
* fbsd_tdep.c (fbsd_core_pid_to_str): New function.
@@ -39,6 +39,17 @@
size_t amd64bsd_xsave_len;
#endif
+static pid_t
+get_ptrace_pid (ptid_t ptid)
+{
+ pid_t pid;
+
+ pid = ptid_get_lwp (ptid);
+ if (pid == 0)
+ pid = ptid_get_pid (ptid);
+ return pid;
+}
+
/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
for all registers (including the floating-point registers). */
@@ -52,7 +63,7 @@ amd64bsd_fetch_inferior_registers (struct target_ops *ops,
{
struct reg regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
@@ -70,7 +81,7 @@ amd64bsd_fetch_inferior_registers (struct target_ops *ops,
if (amd64bsd_xsave_len != 0)
{
xstateregs = alloca (amd64bsd_xsave_len);
- if (ptrace (PT_GETXSTATE, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETXSTATE, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
perror_with_name (_("Couldn't get extended state status"));
@@ -79,7 +90,7 @@ amd64bsd_fetch_inferior_registers (struct target_ops *ops,
}
#endif
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
@@ -100,13 +111,13 @@ amd64bsd_store_inferior_registers (struct target_ops *ops,
{
struct reg regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
amd64_collect_native_gregset (regcache, ®s, regnum);
- if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't write registers"));
@@ -123,26 +134,26 @@ amd64bsd_store_inferior_registers (struct target_ops *ops,
if (amd64bsd_xsave_len != 0)
{
xstateregs = alloca (amd64bsd_xsave_len);
- if (ptrace (PT_GETXSTATE, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETXSTATE, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
perror_with_name (_("Couldn't get extended state status"));
amd64_collect_xsave (regcache, regnum, xstateregs, 0);
- if (ptrace (PT_SETXSTATE, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETXSTATE, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xstateregs, amd64bsd_xsave_len) == -1)
perror_with_name (_("Couldn't write extended state status"));
return;
}
#endif
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
amd64_collect_fxsave (regcache, regnum, &fpregs);
- if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't write floating point status"));
}
@@ -172,7 +183,7 @@ amd64bsd_dr_get (ptid_t ptid, int regnum)
{
struct dbreg dbregs;
- if (ptrace (PT_GETDBREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
perror_with_name (_("Couldn't read debug registers"));
@@ -184,7 +195,7 @@ amd64bsd_dr_set (int regnum, unsigned long value)
{
struct dbreg dbregs;
- if (ptrace (PT_GETDBREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
perror_with_name (_("Couldn't get debug registers"));
@@ -195,7 +206,7 @@ amd64bsd_dr_set (int regnum, unsigned long value)
DBREG_DRX ((&dbregs), regnum) = value;
- if (ptrace (PT_SETDBREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETDBREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
perror_with_name (_("Couldn't write debug registers"));
}
@@ -87,6 +87,17 @@ size_t i386bsd_xsave_len;
#endif
+static pid_t
+get_ptrace_pid (ptid_t ptid)
+{
+ pid_t pid;
+
+ pid = ptid_get_lwp (ptid);
+ if (pid == 0)
+ pid = ptid_get_pid (ptid);
+ return pid;
+}
+
/* Supply the general-purpose registers in GREGS, to REGCACHE. */
static void
@@ -138,7 +149,7 @@ i386bsd_fetch_inferior_registers (struct target_ops *ops,
{
struct reg regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
@@ -160,7 +171,7 @@ i386bsd_fetch_inferior_registers (struct target_ops *ops,
char *xstateregs;
xstateregs = alloca (i386bsd_xsave_len);
- if (ptrace (PT_GETXSTATE, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETXSTATE, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
perror_with_name (_("Couldn't get extended state status"));
@@ -171,7 +182,7 @@ i386bsd_fetch_inferior_registers (struct target_ops *ops,
#ifdef HAVE_PT_GETXMMREGS
if (have_ptrace_xmmregs != 0
- && ptrace(PT_GETXMMREGS, ptid_get_pid (inferior_ptid),
+ && ptrace(PT_GETXMMREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
{
have_ptrace_xmmregs = 1;
@@ -181,7 +192,7 @@ i386bsd_fetch_inferior_registers (struct target_ops *ops,
{
have_ptrace_xmmregs = 0;
#endif
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
@@ -203,13 +214,13 @@ i386bsd_store_inferior_registers (struct target_ops *ops,
{
struct reg regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
i386bsd_collect_gregset (regcache, ®s, regnum);
- if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't write registers"));
@@ -230,13 +241,13 @@ i386bsd_store_inferior_registers (struct target_ops *ops,
char *xstateregs;
xstateregs = alloca (i386bsd_xsave_len);
- if (ptrace (PT_GETXSTATE, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETXSTATE, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xstateregs, 0) == -1)
perror_with_name (_("Couldn't get extended state status"));
i387_collect_xsave (regcache, -1, xstateregs, 0);
- if (ptrace (PT_SETXSTATE, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETXSTATE, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xstateregs, i386bsd_xsave_len) == -1)
perror_with_name (_("Couldn't write extended state status"));
return;
@@ -245,14 +256,14 @@ i386bsd_store_inferior_registers (struct target_ops *ops,
#ifdef HAVE_PT_GETXMMREGS
if (have_ptrace_xmmregs != 0
- && ptrace(PT_GETXMMREGS, ptid_get_pid (inferior_ptid),
+ && ptrace(PT_GETXMMREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xmmregs, 0) == 0)
{
have_ptrace_xmmregs = 1;
i387_collect_fxsave (regcache, regnum, xmmregs);
- if (ptrace (PT_SETXMMREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETXMMREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) xmmregs, 0) == -1)
perror_with_name (_("Couldn't write XMM registers"));
}
@@ -260,13 +271,13 @@ i386bsd_store_inferior_registers (struct target_ops *ops,
{
have_ptrace_xmmregs = 0;
#endif
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get floating point status"));
i387_collect_fsave (regcache, regnum, &fpregs);
- if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't write floating point status"));
#ifdef HAVE_PT_GETXMMREGS
@@ -305,7 +316,7 @@ i386bsd_dr_get (ptid_t ptid, int regnum)
{
struct dbreg dbregs;
- if (ptrace (PT_GETDBREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
perror_with_name (_("Couldn't read debug registers"));
@@ -317,7 +328,7 @@ i386bsd_dr_set (int regnum, unsigned int value)
{
struct dbreg dbregs;
- if (ptrace (PT_GETDBREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
perror_with_name (_("Couldn't get debug registers"));
@@ -328,7 +339,7 @@ i386bsd_dr_set (int regnum, unsigned int value)
DBREG_DRX ((&dbregs), regnum) = value;
- if (ptrace (PT_SETDBREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETDBREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
perror_with_name (_("Couldn't write debug registers"));
}
@@ -37,6 +37,17 @@
#include "inf-ptrace.h"
#include "bsd-kvm.h"
+static pid_t
+get_ptrace_pid (ptid_t ptid)
+{
+ pid_t pid;
+
+ pid = ptid_get_lwp (ptid);
+ if (pid == 0)
+ pid = ptid_get_pid (ptid);
+ return pid;
+}
+
/* Fill GDB's register array with the general-purpose register values
in *GREGSETP. */
@@ -121,7 +132,7 @@ ppcfbsd_fetch_inferior_registers (struct target_ops *ops,
{
gdb_gregset_t regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
@@ -132,7 +143,7 @@ ppcfbsd_fetch_inferior_registers (struct target_ops *ops,
const struct regset *fpregset = ppc_fbsd_fpregset ();
gdb_fpregset_t fpregs;
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get FP registers"));
@@ -149,13 +160,13 @@ ppcfbsd_store_inferior_registers (struct target_ops *ops,
{
gdb_gregset_t regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
fill_gregset (regcache, ®s, regno);
- if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't write registers"));
@@ -163,13 +174,13 @@ ppcfbsd_store_inferior_registers (struct target_ops *ops,
{
gdb_fpregset_t fpregs;
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't get FP registers"));
fill_fpregset (regcache, &fpregs, regno);
- if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid),
+ if (ptrace (PT_SETFPREGS, get_ptrace_pid (inferior_ptid),
(PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
perror_with_name (_("Couldn't set FP registers"));
}