This is the mail archive of the gdb-cvs@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]

[binutils-gdb] gdb: Move DJGPP/go32 bits to their own tdep file


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=8f10c9323357ad190c0383f2fc9d394316447905

commit 8f10c9323357ad190c0383f2fc9d394316447905
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Apr 12 16:00:04 2017 +0100

    gdb: Move DJGPP/go32 bits to their own tdep file
    
    I posit that this makes them easier to find.
    
    The other day while working on the wchar_t patch, I had a bit of
    trouble finding the DJGPP/go32 tdep bits.  My initial reaction was
    looking for a go32-specific tdep file, but there's none.
    
    Confirmed that a --host=i586-pc-msdosdjgpp GDB still builds
    successfully and includes the  i386-go32-tdep.o object.
    
    Confirmed that an --enable-targets=all build of GDB on x86-64
    GNU/Linux includes the DJGPP/go32 bits too.
    
    gdb/ChangeLog:
    2017-04-12  Pedro Alves  <palves@redhat.com>
    
    	* Makefile.in (ALL_TARGET_OBS): Add i386-go32-tdep.o.
    	* configure.tgt: Handle i[34567]86-*-go32* and
    	i[34567]86-*-msdosdjgpp*.
    	* i386-tdep.c (i386_svr4_reg_to_regnum):
    	Make extern.
    	(i386_go32_init_abi, i386_coff_osabi_sniffer): Moved to
    	i386-go32-tdep.c.
    	(_initialize_i386_tdep): DJGPP bits moved to i386-go32-tdep.c.
    	* i386-go32-tdep.c: New file.
    	* i386-tdep.h (tdesc_i386_mmx, i386_svr4_reg_to_regnum): New
    	declarations.

Diff:
---
 gdb/ChangeLog        | 14 ++++++++++
 gdb/Makefile.in      |  1 +
 gdb/configure.tgt    |  4 +++
 gdb/i386-go32-tdep.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 gdb/i386-tdep.c      | 44 +-------------------------------
 gdb/i386-tdep.h      |  5 ++++
 6 files changed, 97 insertions(+), 43 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 41ed80b..f5c88a5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+2017-04-12  Pedro Alves  <palves@redhat.com>
+
+	* Makefile.in (ALL_TARGET_OBS): Add i386-go32-tdep.o.
+	* configure.tgt: Handle i[34567]86-*-go32* and
+	i[34567]86-*-msdosdjgpp*.
+	* i386-tdep.c (i386_svr4_reg_to_regnum):
+	Make extern.
+	(i386_go32_init_abi, i386_coff_osabi_sniffer): Moved to
+	i386-go32-tdep.c.
+	(_initialize_i386_tdep): DJGPP bits moved to i386-go32-tdep.c.
+	* i386-go32-tdep.c: New file.
+	* i386-tdep.h (tdesc_i386_mmx, i386_svr4_reg_to_regnum): New
+	declarations.
+
 2017-04-12  Simon Marchi  <simon.marchi@ericsson.com>
 
 	* aix-thread.c (pd_status2str): Change return type to const char *.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 23e4bed..a5a5b42 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -810,6 +810,7 @@ ALL_TARGET_OBS = \
 	i386-dicos-tdep.o \
 	i386-fbsd-tdep.o \
 	i386-gnu-tdep.o \
+	i386-go32-tdep.o \
 	i386-linux-tdep.o \
 	i386-nbsd-tdep.o \
 	i386-nto-tdep.o \
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 4115809..fdcb7b1 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -253,6 +253,10 @@ i[34567]86-*-mingw32*)
 			windows-tdep.o"
 	build_gdbserver=yes
 	;;
+i[34567]86-*-go32* | i[34567]86-*-msdosdjgpp*)
+	# Target: i386 running DJGPP/go32.
+	gdb_target_obs="i386-tdep.o i387-tdep.o i386-go32-tdep.o"
+	;;
 i[34567]86-*-*)
 	# Target: i386
 	gdb_target_obs="i386-tdep.o i387-tdep.o"
diff --git a/gdb/i386-go32-tdep.c b/gdb/i386-go32-tdep.c
new file mode 100644
index 0000000..5bd4857
--- /dev/null
+++ b/gdb/i386-go32-tdep.c
@@ -0,0 +1,72 @@
+/* Target-dependent code for DJGPP/i386.
+
+   Copyright (C) 1988-2017 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 "i386-tdep.h"
+#include "target-descriptions.h"
+#include "osabi.h"
+
+static void
+i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  /* DJGPP doesn't have any special frames for signal handlers.  */
+  tdep->sigtramp_p = NULL;
+
+  tdep->jb_pc_offset = 36;
+
+  /* DJGPP does not support the SSE registers.  */
+  if (!tdesc_has_registers (info.target_desc))
+    tdep->tdesc = tdesc_i386_mmx;
+
+  /* Native compiler is GCC, which uses the SVR4 register numbering
+     even in COFF and STABS.  See the comment in i386_gdbarch_init,
+     before the calls to set_gdbarch_stab_reg_to_regnum and
+     set_gdbarch_sdb_reg_to_regnum.  */
+  set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
+  set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
+
+  set_gdbarch_has_dos_based_file_system (gdbarch, 1);
+
+  set_gdbarch_wchar_bit (gdbarch, 16);
+  set_gdbarch_wchar_signed (gdbarch, 0);
+}
+
+
+static enum gdb_osabi
+i386_coff_osabi_sniffer (bfd *abfd)
+{
+  if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
+      || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
+    return GDB_OSABI_GO32;
+
+  return GDB_OSABI_UNKNOWN;
+}
+
+
+void
+_initialize_i386_go32_tdep ()
+{
+  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
+				  i386_coff_osabi_sniffer);
+
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
+			  i386_go32_init_abi);
+}
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 2edf5cf..fe68486 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -573,7 +573,7 @@ i386_svr4_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 /* Wrapper on i386_svr4_dwarf_reg_to_regnum to return
    num_regs + num_pseudo_regs for other debug formats.  */
 
-static int
+int
 i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 {
   int regnum = i386_svr4_dwarf_reg_to_regnum (gdbarch, reg);
@@ -4487,34 +4487,6 @@ i386_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->jb_pc_offset = 20;
 }
 
-/* DJGPP.  */
-
-static void
-i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  /* DJGPP doesn't have any special frames for signal handlers.  */
-  tdep->sigtramp_p = NULL;
-
-  tdep->jb_pc_offset = 36;
-
-  /* DJGPP does not support the SSE registers.  */
-  if (! tdesc_has_registers (info.target_desc))
-    tdep->tdesc = tdesc_i386_mmx;
-
-  /* Native compiler is GCC, which uses the SVR4 register numbering
-     even in COFF and STABS.  See the comment in i386_gdbarch_init,
-     before the calls to set_gdbarch_stab_reg_to_regnum and
-     set_gdbarch_sdb_reg_to_regnum.  */
-  set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
-  set_gdbarch_sdb_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
-
-  set_gdbarch_has_dos_based_file_system (gdbarch, 1);
-
-  set_gdbarch_wchar_bit (gdbarch, 16);
-  set_gdbarch_wchar_signed (gdbarch, 0);
-}
 
 
 /* i386 register groups.  In addition to the normal groups, add "mmx"
@@ -8739,15 +8711,6 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   return gdbarch;
 }
 
-static enum gdb_osabi
-i386_coff_osabi_sniffer (bfd *abfd)
-{
-  if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
-      || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
-    return GDB_OSABI_GO32;
-
-  return GDB_OSABI_UNKNOWN;
-}
 
 
 /* Return the target description for a specified XSAVE feature mask.  */
@@ -9085,13 +9048,8 @@ Show Intel Memory Protection Extensions specific variables."),
  in the bound table.",
 	   &mpx_set_cmdlist);
 
-  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
-				  i386_coff_osabi_sniffer);
-
   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_SVR4,
 			  i386_svr4_init_abi);
-  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_GO32,
-			  i386_go32_init_abi);
 
   /* Initialize the i386-specific register groups.  */
   i386_init_reggroups ();
diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h
index 2b11767..1ce89fc 100644
--- a/gdb/i386-tdep.h
+++ b/gdb/i386-tdep.h
@@ -340,6 +340,7 @@ enum record_i386_regnum
 #define I386_MAX_REGISTER_SIZE	64
 
 extern struct target_desc *tdesc_i386;
+extern struct target_desc *tdesc_i386_mmx;
 
 /* Types for i386-specific registers.  */
 extern struct type *i387_ext_type (struct gdbarch *gdbarch);
@@ -432,6 +433,10 @@ extern void i386_elf_init_abi (struct gdbarch_info, struct gdbarch *);
 /* Initialize a SVR4 architecture variant.  */
 extern void i386_svr4_init_abi (struct gdbarch_info, struct gdbarch *);
 
+/* Convert SVR4 register number REG to the appropriate register number
+   used by GDB.  */
+extern int i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg);
+
 extern int i386_process_record (struct gdbarch *gdbarch,
                                 struct regcache *regcache, CORE_ADDR addr);
 extern const struct target_desc *i386_target_description (uint64_t xcr0);


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