diff options
-rw-r--r-- | gdb/.Sanitize | 2 | ||||
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/config/i386sol2.mh | 4 | ||||
-rw-r--r-- | gdb/config/i386v4.mh | 4 | ||||
-rw-r--r-- | gdb/config/ncr3000.mh | 4 | ||||
-rw-r--r-- | gdb/i386v4-nat.c | 148 | ||||
-rw-r--r-- | gdb/nm-i386v4.h | 20 |
7 files changed, 187 insertions, 6 deletions
diff --git a/gdb/.Sanitize b/gdb/.Sanitize index 970248f..6025169 100644 --- a/gdb/.Sanitize +++ b/gdb/.Sanitize @@ -108,6 +108,7 @@ i386-tdep.c i386b-nat.c i386mach-nat.c i386v-nat.c +i386v4-nat.c i387-tdep.c i960-pinsn.c i960-tdep.c @@ -147,6 +148,7 @@ nm-delta88.h nm-i386bsd.h nm-i386mach.h nm-i386v.h +nm-i386v4.h nm-irix3.h nm-irix4.h nm-linux.h diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7addce8..4264bb7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +Sat Oct 17 00:59:23 1992 Fred Fish (fnf@cygnus.com) + + Native support cleanup and corefile fixes for i386 SVR4 systems. + + * i386-tdep.c (supply_gregset, fill_gregset, supply_fpregset, + fill_fpregset): Moved to i386v4-nat.c + * i386v4-nat.c, nm-i386v4.h, : New files. + * i386sol2.mh, i386v4.mh, ncr3000.mh (NAT_FILE): Use nm-i386v4.h. + * i386sol2.mh, i386v4.mh, ncr3000.mh (NATDEPFILES): Add corelow.o, + change i386v-nat.o to i386v4-nat.o. + Fri Oct 16 13:06:08 1992 K. Richard Pixley (rich@sendai.cygnus.com) Miscellaneous 386 configs updated. diff --git a/gdb/config/i386sol2.mh b/gdb/config/i386sol2.mh index 82fadb20..44a6247 100644 --- a/gdb/config/i386sol2.mh +++ b/gdb/config/i386sol2.mh @@ -15,8 +15,8 @@ XDEPFILES= # Use the i386 SVR4 host configuration file. XM_FILE= xm-i386v4.h -NAT_FILE= nm-i386v.h -NATDEPFILES= exec.o procfs.o fork-child.o i386v-nat.o +NAT_FILE= nm-i386v4.h +NATDEPFILES= corelow.o exec.o procfs.o fork-child.o i386v4-nat.o # We need to find alloca() somewhere. Gcc has one built in, but most other # compilers don't. Using the one in /usr/ucblib/libucb.a is tricky because diff --git a/gdb/config/i386v4.mh b/gdb/config/i386v4.mh index 9e559f1..da90b1b 100644 --- a/gdb/config/i386v4.mh +++ b/gdb/config/i386v4.mh @@ -11,8 +11,8 @@ XDEPFILES= # Use the i386 SVR4 host configuration file. XM_FILE= xm-i386v4.h -NAT_FILE= nm-i386v.h -NATDEPFILES= exec.o procfs.o fork-child.o i386v-nat.o +NAT_FILE= nm-i386v4.h +NATDEPFILES= corelow.o exec.o procfs.o fork-child.o i386v4-nat.o # We need to find alloca() somewhere. Gcc has one built in, but most other # compilers don't. Using the one in /usr/ucblib/libucb.a is tricky because diff --git a/gdb/config/ncr3000.mh b/gdb/config/ncr3000.mh index 13a339b..338d13e 100644 --- a/gdb/config/ncr3000.mh +++ b/gdb/config/ncr3000.mh @@ -20,8 +20,8 @@ XDEPFILES= # Use the i386 SVR4 host configuration file. XM_FILE= xm-i386v4.h -NAT_FILE= nm-i386v.h -NATDEPFILES= exec.o procfs.o fork-child.o i386v-nat.o +NAT_FILE= nm-i386v4.h +NATDEPFILES= corelow.o exec.o procfs.o fork-child.o i386v4-nat.o # We need to find alloca() somewhere. Gcc has one built in, but most other # compilers don't. Using the one in /usr/ucblib/libucb.a is tricky because diff --git a/gdb/i386v4-nat.c b/gdb/i386v4-nat.c new file mode 100644 index 0000000..ac96ea3 --- /dev/null +++ b/gdb/i386v4-nat.c @@ -0,0 +1,148 @@ +/* Native-dependent code for SVR4 Unix running on i386's, for GDB. + Copyright 1988, 1989, 1991, 1992 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "defs.h" +#include <sys/procfs.h> + +/* The /proc interface divides the target machine's register set up into + two different sets, the general register set (gregset) and the floating + point register set (fpregset). For each set, there is an ioctl to get + the current register set and another ioctl to set the current values. + + The actual structure passed through the ioctl interface is, of course, + naturally machine dependent, and is different for each set of registers. + For the i386 for example, the general register set is typically defined + by: + + typedef int gregset_t[19]; (in <sys/regset.h>) + + #define GS 0 (in <sys/reg.h>) + #define FS 1 + ... + #define UESP 17 + #define SS 18 + + and the floating point set by: + + typedef struct fpregset + { + union + { + struct fpchip_state // fp extension state // + { + int state[27]; // 287/387 saved state // + int status; // status word saved at exception // + } fpchip_state; + struct fp_emul_space // for emulators // + { + char fp_emul[246]; + char fp_epad[2]; + } fp_emul_space; + int f_fpregs[62]; // union of the above // + } fp_reg_set; + long f_wregs[33]; // saved weitek state // + } fpregset_t; + + These routines provide the packing and unpacking of gregset_t and + fpregset_t formatted data. + + */ + +/* This is a duplicate of the table in i386-xdep.c. */ + +static int regmap[] = +{ + EAX, ECX, EDX, EBX, + UESP, EBP, ESI, EDI, + EIP, EFL, CS, SS, + DS, ES, FS, GS, +}; + + +/* Given a pointer to a general register set in /proc format (gregset_t *), + unpack the register contents and supply them as gdb's idea of the current + register values. */ + +void +supply_gregset (gregsetp) + gregset_t *gregsetp; +{ + register int regi; + register greg_t *regp = (greg_t *) gregsetp; + extern int regmap[]; + + for (regi = 0 ; regi < NUM_REGS ; regi++) + { + supply_register (regi, (char *) (regp + regmap[regi])); + } +} + +void +fill_gregset (gregsetp, regno) + gregset_t *gregsetp; + int regno; +{ + int regi; + register greg_t *regp = (greg_t *) gregsetp; + extern char registers[]; + extern int regmap[]; + + for (regi = 0 ; regi < NUM_REGS ; regi++) + { + if ((regno == -1) || (regno == regi)) + { + *(regp + regmap[regi]) = *(int *) ®isters[REGISTER_BYTE (regi)]; + } + } +} + +#if defined (FP0_REGNUM) + +/* Given a pointer to a floating point register set in /proc format + (fpregset_t *), unpack the register contents and supply them as gdb's + idea of the current floating point register values. */ + +void +supply_fpregset (fpregsetp) + fpregset_t *fpregsetp; +{ + register int regi; + + /* FIXME: see m68k-tdep.c for an example, for the m68k. */ +} + +/* Given a pointer to a floating point register set in /proc format + (fpregset_t *), update the register specified by REGNO from gdb's idea + of the current floating point register set. If REGNO is -1, update + them all. */ + +void +fill_fpregset (fpregsetp, regno) + fpregset_t *fpregsetp; + int regno; +{ + int regi; + char *to; + char *from; + extern char registers[]; + + /* FIXME: see m68k-tdep.c for an example, for the m68k. */ +} + +#endif /* defined (FP0_REGNUM) */ diff --git a/gdb/nm-i386v4.h b/gdb/nm-i386v4.h new file mode 100644 index 0000000..749510b --- /dev/null +++ b/gdb/nm-i386v4.h @@ -0,0 +1,20 @@ +/* Native support for i386 running SVR4. + Copyright 1986, 1987, 1989, 1992 Free Software Foundation, Inc. + Changes for 80386 by Pace Willisson (pace@prep.ai.mit.edu), July 1988. + +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., 675 Mass Ave, Cambridge, MA 02139, USA. */ + |