This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fold i386-v4-nat.c into i386-sol2-nat.c


I've been carrying around the following patch for some time.  I noticed
that both i386-sol2-nat.c and i386-v4-nat.c are Solaris-only now and it
seems confusing to carry both around.

So this patch merges i386-v4-nat.c into i386-sol2-nat.c, simplifying it
in a couple of places, like removing checks for macros that are always
defined.

Tested on 64-bit Solaris 11.5/x86 (amd64-pc-solaris2.11) and 32-bit
Solaris 11.3/x86 (i386-pc-solaris2.11) half a year ago.

Ok for mainline?

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2017-12-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* i386-v4-nat.c (regmap, supply_gregset, fill_gregset)
	(supply_fpregset, fill_fpregset): Move ...
	* i386-sol2-nat.c [PR_MODEL_NATIVE != PR_MODEL_LP64]: ... here.
	Remove HAVE_GREGSET_T, HAVE_FPREGET_T guards.
	Remove references to ioctl-based procfs.
	Include <sys/reg.h>.
	Remove PR_MODEL_NATIVE guards.
	* configure.nat <sol2, i386> (NATDEPFILES): Remove i386-v4-nat.o.
	* Makefile.in (ALLDEPFILES): Remove i386-v4-nat.c.

# HG changeset patch
# Parent  8190215c8f041862a771dac7787eec9c9fc4f13f
Fold i386-v4-nat.c into i386-sol2-nat.c

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -2272,7 +2272,6 @@ ALLDEPFILES = \
 	i386-sol2-nat.c \
 	i386-sol2-tdep.c \
 	i386-tdep.c \
-	i386-v4-nat.c \
 	i387-tdep.c \
 	ia64-libunwind-tdep.c \
 	ia64-linux-nat.c \
diff --git a/gdb/configure.nat b/gdb/configure.nat
--- a/gdb/configure.nat
+++ b/gdb/configure.nat
@@ -464,7 +464,7 @@ case ${gdb_host} in
 	    i386)
 		# Host: Solaris x86_64
 		NATDEPFILES="${NATDEPFILES} \
-		amd64-nat.o i386-v4-nat.o i386-sol2-nat.o"
+		amd64-nat.o i386-sol2-nat.o"
 		;;
 	    sparc)
 		# Host: Solaris SPARC & UltraSPARC
diff --git a/gdb/i386-sol2-nat.c b/gdb/i386-sol2-nat.c
--- a/gdb/i386-sol2-nat.c
+++ b/gdb/i386-sol2-nat.c
@@ -1,6 +1,6 @@
 /* Native-dependent code for Solaris x86.
 
-   Copyright (C) 2004-2018 Free Software Foundation, Inc.
+   Copyright (C) 1988-2018 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -20,6 +20,7 @@
 #include "defs.h"
 #include "regcache.h"
 
+#include <sys/reg.h>
 #include <sys/procfs.h>
 #include "gregset.h"
 #include "target.h"
@@ -41,7 +42,7 @@
    Note that a 32-bit GDB won't be able to debug a 64-bit target
    process using /proc on Solaris.  */
 
-#if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
+#if PR_MODEL_NATIVE == PR_MODEL_LP64
 
 #include "amd64-nat.h"
 #include "amd64-tdep.h"
@@ -124,9 +125,119 @@ fill_fpregset (const struct regcache *re
   amd64_collect_fxsave (regcache, regnum, fpregs);
 }
 
-#else
+#else /* PR_MODEL_NATIVE != PR_MODEL_LP64 */
 
-/* For 32-bit Solaris x86, we use the Unix SVR4 code in i386v4-nat.c.  */
+#include "i386-tdep.h"
+#include "i387-tdep.h"
+
+/* The `/proc' interface divides the target machine's register set up
+   into two different sets, the general purpose register set (gregset)
+   and the floating-point register set (fpregset).
+
+   The actual structure is, of course, naturally machine dependent, and is
+   different for each set of registers.  For the i386 for example, the
+   general-purpose 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;
+
+   Incidentally fpchip_state contains the FPU state in the same format
+   as used by the "fsave" instruction, and that's the only thing we
+   support here.  I don't know how the emulator stores it state.  The
+   Weitek stuff definitely isn't supported.
+
+   The routines defined here, provide the packing and unpacking of
+   gregset_t and fpregset_t formatted data.  */
+
+/* Mapping between the general-purpose registers in `/proc'
+   format and GDB's register array layout.  */
+static int regmap[] =
+{
+  EAX, ECX, EDX, EBX,
+  UESP, EBP, ESI, EDI,
+  EIP, EFL, CS, SS,
+  DS, ES, FS, GS
+};
+
+/* Fill GDB's register array with the general-purpose register values
+   in *GREGSETP.  */
+
+void
+supply_gregset (struct regcache *regcache, const gregset_t *gregsetp)
+{
+  const greg_t *regp = (const greg_t *) gregsetp;
+  int regnum;
+
+  for (regnum = 0; regnum < I386_NUM_GREGS; regnum++)
+    regcache_raw_supply (regcache, regnum, regp + regmap[regnum]);
+}
+
+/* Fill register REGNUM (if it is a general-purpose register) in
+   *GREGSETPS with the value in GDB's register array.  If REGNUM is -1,
+   do this for all registers.  */
+
+void
+fill_gregset (const struct regcache *regcache,
+	      gregset_t *gregsetp, int regnum)
+{
+  greg_t *regp = (greg_t *) gregsetp;
+  int i;
+
+  for (i = 0; i < I386_NUM_GREGS; i++)
+    if (regnum == -1 || regnum == i)
+      regcache_raw_collect (regcache, i, regp + regmap[i]);
+}
+
+/* Fill GDB's register array with the floating-point register values in
+   *FPREGSETP.  */
+
+void
+supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp)
+{
+  if (gdbarch_fp0_regnum (regcache->arch ()) == 0)
+    return;
+
+  i387_supply_fsave (regcache, -1, fpregsetp);
+}
+
+/* Fill register REGNO (if it is a floating-point register) in
+   *FPREGSETP with the value in GDB's register array.  If REGNO is -1,
+   do this for all registers.  */
+
+void
+fill_fpregset (const struct regcache *regcache,
+	       fpregset_t *fpregsetp, int regno)
+{
+  if (gdbarch_fp0_regnum (regcache->arch ()) == 0)
+    return;
+
+  i387_collect_fsave (regcache, regno, fpregsetp);
+}
 
 #endif
 
@@ -140,7 +251,7 @@ void
 
   procfs_use_watchpoints (t);
 
-#if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
+#if PR_MODEL_NATIVE == PR_MODEL_LP64
   amd64_native_gregset32_reg_offset = amd64_sol2_gregset32_reg_offset;
   amd64_native_gregset32_num_regs =
     ARRAY_SIZE (amd64_sol2_gregset32_reg_offset);
diff --git a/gdb/i386-v4-nat.c b/gdb/i386-v4-nat.c
deleted file mode 100644
--- a/gdb/i386-v4-nat.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Native-dependent code for Unix SVR4 running on i386's.
-
-   Copyright (C) 1988-2018 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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "value.h"
-#include "inferior.h"
-#include "regcache.h"
-
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
-
-#include "i386-tdep.h"
-#include "i387-tdep.h"
-
-#ifdef HAVE_SYS_PROCFS_H
-
-#include <sys/procfs.h>
-
-/* We must not compile this code for 64-bit Solaris x86.  */
-#if !defined (PR_MODEL_NATIVE) || (PR_MODEL_NATIVE == PR_MODEL_ILP32)
-
-#include "gregset.h"
-
-/* The `/proc' interface divides the target machine's register set up
-   into two different sets, the general purpose 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-purpose
-   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;
-
-   Incidentally fpchip_state contains the FPU state in the same format
-   as used by the "fsave" instruction, and that's the only thing we
-   support here.  I don't know how the emulator stores it state.  The
-   Weitek stuff definitely isn't supported.
-
-   The routines defined here, provide the packing and unpacking of
-   gregset_t and fpregset_t formatted data.  */
-
-#ifdef HAVE_GREGSET_T
-
-/* Mapping between the general-purpose registers in `/proc'
-   format and GDB's register array layout.  */
-static int regmap[] =
-{
-  EAX, ECX, EDX, EBX,
-  UESP, EBP, ESI, EDI,
-  EIP, EFL, CS, SS,
-  DS, ES, FS, GS
-};
-
-/* Fill GDB's register array with the general-purpose register values
-   in *GREGSETP.  */
-
-void
-supply_gregset (struct regcache *regcache, const gregset_t *gregsetp)
-{
-  const greg_t *regp = (const greg_t *) gregsetp;
-  int regnum;
-
-  for (regnum = 0; regnum < I386_NUM_GREGS; regnum++)
-    regcache_raw_supply (regcache, regnum, regp + regmap[regnum]);
-}
-
-/* Fill register REGNUM (if it is a general-purpose register) in
-   *GREGSETPS with the value in GDB's register array.  If REGNUM is -1,
-   do this for all registers.  */
-
-void
-fill_gregset (const struct regcache *regcache,
-	      gregset_t *gregsetp, int regnum)
-{
-  greg_t *regp = (greg_t *) gregsetp;
-  int i;
-
-  for (i = 0; i < I386_NUM_GREGS; i++)
-    if (regnum == -1 || regnum == i)
-      regcache_raw_collect (regcache, i, regp + regmap[i]);
-}
-
-#endif /* HAVE_GREGSET_T */
-
-#ifdef HAVE_FPREGSET_T
-
-/* Fill GDB's register array with the floating-point register values in
-   *FPREGSETP.  */
-
-void
-supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp)
-{
-  if (gdbarch_fp0_regnum (regcache->arch ()) == 0)
-    return;
-
-  i387_supply_fsave (regcache, -1, fpregsetp);
-}
-
-/* Fill register REGNO (if it is a floating-point register) in
-   *FPREGSETP with the value in GDB's register array.  If REGNO is -1,
-   do this for all registers.  */
-
-void
-fill_fpregset (const struct regcache *regcache,
-	       fpregset_t *fpregsetp, int regno)
-{
-  if (gdbarch_fp0_regnum (regcache->arch ()) == 0)
-    return;
-
-  i387_collect_fsave (regcache, regno, fpregsetp);
-}
-
-#endif /* HAVE_FPREGSET_T */
-
-#endif /* not 64-bit.  */
-
-#endif /* HAVE_SYS_PROCFS_H */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]