diff options
author | John Gilmore <gnu@cygnus> | 1991-11-21 03:59:14 +0000 |
---|---|---|
committer | John Gilmore <gnu@cygnus> | 1991-11-21 03:59:14 +0000 |
commit | 44ff4c96a41453391514afcd9bd306c68b3355fa (patch) | |
tree | cf342c184a1ab0fe253e3bc43a9158c60b770d56 /gdb | |
parent | f318d221a5ff0181ea7fb203b252920d2c4dec0a (diff) | |
download | gdb-44ff4c96a41453391514afcd9bd306c68b3355fa.zip gdb-44ff4c96a41453391514afcd9bd306c68b3355fa.tar.gz gdb-44ff4c96a41453391514afcd9bd306c68b3355fa.tar.bz2 |
Cashier <a.out.gnu.h>
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 2 | ||||
-rw-r--r-- | gdb/infptrace.c | 35 | ||||
-rw-r--r-- | gdb/tm-sun386.h | 3 |
3 files changed, 36 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6f5ee2e..c143a5a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,7 @@ Wed Nov 20 18:35:56 1991 John Gilmore (gnu at cygnus.com) + * infptrace.c, tm-sun386.h: Cashier <a.out.gnu.h>, remove refs. + * configure.in, xconfig, tconfig, Makefile.in, doc/gdbint.texinfo: Makefile fragments for various hosts and targets now come from gdb/config/mh-* and gdb/config/mt-*. This is for consistency with diff --git a/gdb/infptrace.c b/gdb/infptrace.c index 014576b..9e9f508 100644 --- a/gdb/infptrace.c +++ b/gdb/infptrace.c @@ -56,9 +56,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include "gdbcore.h" -#include <sys/user.h> /* After a.out.h */ #include <sys/file.h> #include <sys/stat.h> + +#if !defined (FETCH_INFERIOR_REGISTERS) +#include <sys/user.h> /* Probably need to poke the user structure */ +#if defined (KERNEL_U_ADDR_BSD) +#include <a.out.h> /* For struct nlist */ +#endif /* KERNEL_U_ADDR_BSD. */ +#endif /* !FETCH_INFERIOR_REGISTERS */ /* This function simply calls ptrace with the given arguments. It exists so that all calls to ptrace are isolated in this @@ -161,6 +167,7 @@ detach (signal) #if defined (KERNEL_U_ADDR_BSD) /* Get kernel_u_addr using BSD-style nlist(). */ CORE_ADDR kernel_u_addr; +#include <a.out.h> /* For struct nlist */ void _initialize_kernel_u_addr () @@ -193,7 +200,6 @@ static struct hpnlist nl[] = {{ "_u", -1, }, { (char *) 0, }}; /* read the value of the u area from the hp-ux kernel */ void _initialize_kernel_u_addr () { - struct user u; nlist ("/hp-ux", &nl); kernel_u_addr = nl[0].n_value; } @@ -210,27 +216,50 @@ void _initialize_kernel_u_addr () (int *)(offsetof (struct user, u_ar0)), 0) - KERNEL_U_ADDR #endif +/* Registers we shouldn't try to fetch. */ +#if !defined (CANNOT_FETCH_REGISTER) +#define CANNOT_FETCH_REGISTER(regno) 0 +#endif + /* Fetch one register. */ + static void fetch_register (regno) int regno; { register unsigned int regaddr; char buf[MAX_REGISTER_RAW_SIZE]; + char mess[128]; /* For messages */ register int i; /* Offset of registers within the u area. */ - unsigned int offset = U_REGS_OFFSET; + unsigned int offset; + + if (CANNOT_FETCH_REGISTER (regno)) + { + bzero (buf, REGISTER_RAW_SIZE (regno)); /* Supply zeroes */ + supply_register (regno, buf); + return; + } + + offset = U_REGS_OFFSET; regaddr = register_addr (regno, offset); for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int)) { + errno = 0; *(int *) &buf[i] = ptrace (PT_READ_U, inferior_pid, (int *)regaddr, 0); regaddr += sizeof (int); + if (errno != 0) + { + sprintf (mess, "reading register %s (#%d)", reg_names[regno], regno); + perror_with_name (mess); + } } supply_register (regno, buf); } + /* Fetch all registers, or just one, from the child process. */ void diff --git a/gdb/tm-sun386.h b/gdb/tm-sun386.h index 0af69c0..5b43f5c 100644 --- a/gdb/tm-sun386.h +++ b/gdb/tm-sun386.h @@ -31,7 +31,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef COFF_ENCAPSULATE #define NAMES_HAVE_UNDERSCORE -/* Avoid conflicts between "a.out.gnu.h" and <sys/exec.h> */ +/* Avoid conflicts between our include files and <sys/exec.h> + (maybe not needed anymore). */ #define _EXEC_ #endif |