From 75c56d3d1298de72aa67555f2c723a80b4818e04 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Sat, 14 Mar 2020 15:44:28 +0100 Subject: Add support for NetBSD threads in arm-nbsd-nat.c NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads. gdb/ChangeLog: * arm-nbsd-nat.c (fetch_register): New variable lwp and pass it to the ptrace call. * arm-nbsd-nat.c (fetch_fp_register): Likewise. * arm-nbsd-nat.c (fetch_fp_regs): Likewise. * arm-nbsd-nat.c (store_register): Likewise. * arm-nbsd-nat.c (store_regs): Likewise. * arm-nbsd-nat.c (store_fp_register): Likewise. * arm-nbsd-nat.c (store_fp_regs): Likewise. --- gdb/ChangeLog | 11 +++++++++++ gdb/arm-nbsd-nat.c | 26 +++++++++++++++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 66ef062..10f52eb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2020-03-14 Kamil Rytarowski + * arm-nbsd-nat.c (fetch_register): New variable lwp and pass + it to the ptrace call. + * arm-nbsd-nat.c (fetch_fp_register): Likewise. + * arm-nbsd-nat.c (fetch_fp_regs): Likewise. + * arm-nbsd-nat.c (store_register): Likewise. + * arm-nbsd-nat.c (store_regs): Likewise. + * arm-nbsd-nat.c (store_fp_register): Likewise. + * arm-nbsd-nat.c (store_fp_regs): Likewise. + +2020-03-14 Kamil Rytarowski + * arm-nbsd-nat.c (arm_netbsd_nat_target): Inherit from nbsd_nat_target instead of inf_ptrace_target. * arm-nbsd-nat.c: Include "nbsd-nat.h", as we are now using diff --git a/gdb/arm-nbsd-nat.c b/gdb/arm-nbsd-nat.c index e7cd236..a8a67e6 100644 --- a/gdb/arm-nbsd-nat.c +++ b/gdb/arm-nbsd-nat.c @@ -66,9 +66,10 @@ fetch_register (struct regcache *regcache, int regno) { struct reg inferior_registers; int ret; + int lwp = regcache->ptid ().lwp (); ret = ptrace (PT_GETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) { @@ -83,8 +84,10 @@ static void fetch_fp_register (struct regcache *regcache, int regno) { struct fpreg inferior_fp_registers; + int lwp = regcache->ptid ().lwp (); + int ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); struct vfpreg &vfp = inferior_fp_registers.fpr_vfp; @@ -111,11 +114,12 @@ static void fetch_fp_regs (struct regcache *regcache) { struct fpreg inferior_fp_registers; + int lwp = regcache->ptid ().lwp (); int ret; int regno; ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); if (ret < 0) { @@ -149,10 +153,11 @@ store_register (const struct regcache *regcache, int regno) { struct gdbarch *gdbarch = regcache->arch (); struct reg inferior_registers; + int lwp = regcache->ptid ().lwp (); int ret; ret = ptrace (PT_GETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) { @@ -210,7 +215,7 @@ store_register (const struct regcache *regcache, int regno) } ret = ptrace (PT_SETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) warning (_("unable to write register %d to inferior"), regno); @@ -221,6 +226,7 @@ store_regs (const struct regcache *regcache) { struct gdbarch *gdbarch = regcache->arch (); struct reg inferior_registers; + int lwp = regcache->ptid ().lwp (); int ret; int regno; @@ -252,7 +258,7 @@ store_regs (const struct regcache *regcache) } ret = ptrace (PT_SETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) warning (_("unable to store general registers")); @@ -262,8 +268,9 @@ static void store_fp_register (const struct regcache *regcache, int regno) { struct fpreg inferior_fp_registers; + int lwp = regcache->ptid ().lwp (); int ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); struct vfpreg &vfp = inferior_fp_registers.fpr_vfp; if (ret < 0) @@ -285,7 +292,7 @@ store_fp_register (const struct regcache *regcache, int regno) warning (_("Invalid register number.")); ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); if (ret < 0) warning (_("unable to write register %d to inferior"), regno); @@ -295,6 +302,7 @@ static void store_fp_regs (const struct regcache *regcache) { struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ()); + int lwp = regcache->ptid ().lwp (); if (tdep->vfp_register_count == 0) return; @@ -307,7 +315,7 @@ store_fp_regs (const struct regcache *regcache) (char *) &fpregs.fpr_vfp.vfp_fpscr); int ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &fpregs, 0); + (PTRACE_TYPE_ARG3) &fpregs, lwp); if (ret < 0) warning (_("unable to store floating-point registers")); -- cgit v1.1