Native support cleanup and corefile fixes for i386 SVR4 systems.
authorFred Fish <fnf@specifix.com>
Sat, 17 Oct 1992 08:07:14 +0000 (08:07 +0000)
committerFred Fish <fnf@specifix.com>
Sat, 17 Oct 1992 08:07:14 +0000 (08:07 +0000)
* 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.

gdb/.Sanitize
gdb/ChangeLog
gdb/config/i386sol2.mh
gdb/config/i386v4.mh
gdb/config/ncr3000.mh
gdb/i386v4-nat.c [new file with mode: 0644]
gdb/nm-i386v4.h [new file with mode: 0644]

index 970248f..6025169 100644 (file)
@@ -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
index 7addce8..4264bb7 100644 (file)
@@ -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.
index 82fadb2..44a6247 100644 (file)
@@ -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
index 9e559f1..da90b1b 100644 (file)
@@ -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
index 13a339b..338d13e 100644 (file)
@@ -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 (file)
index 0000000..ac96ea3
--- /dev/null
@@ -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 *) &registers[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 (file)
index 0000000..749510b
--- /dev/null
@@ -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.  */
+