From 48d27324a405e97454125783548e3db1aab93251 Mon Sep 17 00:00:00 2001 From: "J.T. Conklin" Date: Wed, 21 Feb 1996 01:52:37 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 12 ++++++++++ gdb/config/nm-nbsd.h | 30 ++++++++++++++++++++++++ gdb/config/xm-nbsd.h | 2 ++ gdb/i386b-nat.c | 55 +++++++++++++++++++++++++++++++++----------- 4 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 gdb/config/nm-nbsd.h diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4ecd6db3b0..9cfa17eb2a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +Tue Feb 20 17:32:05 1996 J.T. Conklin + + * 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 0000000000..4242d569b1 --- /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 +#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 990e779a2b..5d52270667 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 2e235aa9a5..5831d26ac2 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 +#include +#include +#include +#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 /* 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 */