diff options
| author | 2012-04-09 10:15:49 +0000 | |
|---|---|---|
| committer | 2012-04-09 10:15:49 +0000 | |
| commit | c3cbb1d2008aa7fa74ba2f8f947af7c873b16b39 (patch) | |
| tree | ec282b369eb9b5a3e391ee0ed22f5b4c8c64c4cc /gnu/usr.bin/binutils | |
| parent | Sync with the current state of things (diff) | |
| download | wireguard-openbsd-c3cbb1d2008aa7fa74ba2f8f947af7c873b16b39.tar.xz wireguard-openbsd-c3cbb1d2008aa7fa74ba2f8f947af7c873b16b39.zip | |
Minimal threads support for mips64.
Diffstat (limited to 'gnu/usr.bin/binutils')
| -rw-r--r-- | gnu/usr.bin/binutils/gdb/config/mips/obsd64.mh | 2 | ||||
| -rw-r--r-- | gnu/usr.bin/binutils/gdb/mips64obsd-nat.c | 26 |
2 files changed, 21 insertions, 7 deletions
diff --git a/gnu/usr.bin/binutils/gdb/config/mips/obsd64.mh b/gnu/usr.bin/binutils/gdb/config/mips/obsd64.mh index b41b2ee61f1..ed04f9eea3a 100644 --- a/gnu/usr.bin/binutils/gdb/config/mips/obsd64.mh +++ b/gnu/usr.bin/binutils/gdb/config/mips/obsd64.mh @@ -1,2 +1,2 @@ # Host: OpenBSD/mips64 -NATDEPFILES= fork-child.o inf-ptrace.o mips64obsd-nat.o +NATDEPFILES= fork-child.o inf-ptrace.o obsd-nat.o mips64obsd-nat.o diff --git a/gnu/usr.bin/binutils/gdb/mips64obsd-nat.c b/gnu/usr.bin/binutils/gdb/mips64obsd-nat.c index d3f1d690f2e..31502b226b8 100644 --- a/gnu/usr.bin/binutils/gdb/mips64obsd-nat.c +++ b/gnu/usr.bin/binutils/gdb/mips64obsd-nat.c @@ -30,6 +30,7 @@ #include "mips-tdep.h" #include "inf-ptrace.h" +#include "obsd-nat.h" /* Shorthand for some register numbers used below. */ #define MIPS_PC_REGNUM MIPS_EMBED_PC_REGNUM @@ -82,9 +83,15 @@ static void mips64obsd_fetch_inferior_registers (int regnum) { struct reg regs; + int pid; - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), - (PTRACE_TYPE_ARG3) ®s, 0) == -1) + /* Cater for systems like OpenBSD, that implement threads as + separate processes. */ + pid = ptid_get_lwp (inferior_ptid); + if (pid == 0) + pid = ptid_get_pid (inferior_ptid); + + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name ("Couldn't get registers"); mips64obsd_supply_gregset (current_regcache, ®s); @@ -97,15 +104,20 @@ static void mips64obsd_store_inferior_registers (int regnum) { struct reg regs; + int pid; + + /* Cater for systems like OpenBSD, that implement threads as + separate processes. */ + pid = ptid_get_lwp (inferior_ptid); + if (pid == 0) + pid = ptid_get_pid (inferior_ptid); - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), - (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name ("Couldn't get registers"); mips64obsd_collect_gregset (current_regcache, ®s, regnum); - if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), - (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name ("Couldn't write registers"); } @@ -121,5 +133,7 @@ _initialize_mips64obsd_nat (void) t = inf_ptrace_target (); t->to_fetch_registers = mips64obsd_fetch_inferior_registers; t->to_store_registers = mips64obsd_store_inferior_registers; + t->to_pid_to_str = obsd_pid_to_str; + t->to_find_new_threads = obsd_find_new_threads; add_target (t); } |
