diff options
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/config/nm-nbsd.h | 30 | ||||
-rw-r--r-- | gdb/config/xm-nbsd.h | 2 | ||||
-rw-r--r-- | gdb/i386b-nat.c | 55 |
4 files changed, 86 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4ecd6db..9cfa17e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +Tue Feb 20 17:32:05 1996 J.T. Conklin <jtc@rtl.cygnus.com> + + * config/nm-nbsd.h (FETCH_INFERIOR_REGISTERS): Defined. + * config/xm-nbsd.h (CC_HAS_LONG_LONG, PRINTF_HAS_LONG_LONG): + #ifdef'd out definitions --- Causes serious gdb failures on + the i386. Need to investigate further before enabling. + + * i386b-nat.c (fetch_inferior_registers, store_inferior_registers, + fetch_core_registers): New functions. These functions are defined + if FETCH_INFERIOR_REGISTERS is set. Registers are fetched/stored + with ptrace PT_GETREGS/PT_SETREGS. + Tue Feb 20 16:55:06 1996 Stu Grossman (grossman@critters.cygnus.com) * findvar.c (extract_floating store_floating): Replace `long diff --git a/gdb/config/nm-nbsd.h b/gdb/config/nm-nbsd.h new file mode 100644 index 0000000..4242d56 --- /dev/null +++ b/gdb/config/nm-nbsd.h @@ -0,0 +1,30 @@ +/* Native-dependent definitions for NetBSD. + Copyright 1994 Free Software Foundation, Inc. + +This file is part of GDB. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* This is the amount to subtract from u.u_ar0 + to get the offset in the core file of the register values. */ + +#include <machine/vmparam.h> +#define KERNEL_U_ADDR USRSTACK + +#define PTRACE_ARG3_TYPE char* + +#define FETCH_INFERIOR_REGISTERS + +#define ATTACH_DETACH diff --git a/gdb/config/xm-nbsd.h b/gdb/config/xm-nbsd.h index 990e779..5d52270 100644 --- a/gdb/config/xm-nbsd.h +++ b/gdb/config/xm-nbsd.h @@ -31,5 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* NetBSD has termios facilities. */ #define HAVE_TERMIOS +#if 0 #define CC_HAS_LONG_LONG 1 #define PRINTF_HAS_LONG_LONG 1 +#endif diff --git a/gdb/i386b-nat.c b/gdb/i386b-nat.c index 2e235aa..5831d26 100644 --- a/gdb/i386b-nat.c +++ b/gdb/i386b-nat.c @@ -18,6 +18,47 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" + +#ifdef FETCH_INFERIOR_REGISTERS +#include <sys/types.h> +#include <sys/ptrace.h> +#include <machine/reg.h> +#include <machine/frame.h> +#include "inferior.h" + +void +fetch_inferior_registers(regno) + int regno; +{ + struct reg inferior_registers; + + ptrace (PT_GETREGS, inferior_pid, (PTRACE_ARG3_TYPE) &inferior_registers, 0); + memcpy (®isters[REGISTER_BYTE (0)], &inferior_registers, 4*NUM_REGS); + registers_fetched (); +} + +void +store_inferior_registers(regno) + int regno; +{ + struct reg inferior_registers; + + memcpy (&inferior_registers, ®isters[REGISTER_BYTE (0)], 4*NUM_REGS); + ptrace (PT_SETREGS, inferior_pid, (PTRACE_ARG3_TYPE) &inferior_registers, 0); +} + +void +fetch_core_registers (core_reg_sect, core_reg_size, which, ignore) + char *core_reg_sect; + unsigned core_reg_size; + int which; + unsigned int ignore; +{ + abort(); +} + +#else + #include <machine/reg.h> /* this table must line up with REGISTER_NAMES in tm-i386.h */ @@ -29,25 +70,12 @@ static int tregmap[] = tEIP, tEFLAGS, tCS, tSS }; -#ifdef sEAX static int sregmap[] = { sEAX, sECX, sEDX, sEBX, sESP, sEBP, sESI, sEDI, sEIP, sEFLAGS, sCS, sSS }; -#else /* No sEAX */ - -/* NetBSD has decided to collapse the s* and t* symbols. So if the s* - ones aren't around, use the t* ones for sregmap too. */ - -static int sregmap[] = -{ - tEAX, tECX, tEDX, tEBX, - tESP, tEBP, tESI, tEDI, - tEIP, tEFLAGS, tCS, tSS -}; -#endif /* No sEAX */ /* blockend is the value of u.u_ar0, and points to the place where ES is stored. */ @@ -70,6 +98,7 @@ i386_register_u_addr (blockend, regnum) return (blockend + 4 * sregmap[regnum]); } +#endif /* !FETCH_INFERIOR_REGISTERS */ #ifdef FLOAT_INFO #include "language.h" /* for local_hex_string */ |