gdb: Move DJGPP/go32 bits to their own tdep file
authorPedro Alves <palves@redhat.com>
Wed, 12 Apr 2017 15:00:04 +0000 (16:00 +0100)
committerPedro Alves <palves@redhat.com>
Wed, 12 Apr 2017 15:00:04 +0000 (16:00 +0100)
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.

gdb/ChangeLog
gdb/Makefile.in
gdb/configure.tgt
gdb/i386-go32-tdep.c [new file with mode: 0644]
gdb/i386-tdep.c
gdb/i386-tdep.h

index 41ed80b3a04f1de99eff9063600005ecab90ea99..f5c88a5ec2fe65835b86fe67c9ba853984c8d124 100644 (file)
@@ -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 *.
index 23e4bed3aa6298ddc8a96b226e31c0a3d591492b..a5a5b429a19ba3814884126012fa14ed534a2139 100644 (file)
@@ -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 \
index 411580933edaac474b2ff3c48fa6ac9e332be836..fdcb7b1d69dd3ed49f3ae3f76b48b8d9dcc9545f 100644 (file)
@@ -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 (file)
index 0000000..5bd4857
--- /dev/null
@@ -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);
+}
+\f
+
+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;
+}
+\f
+
+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);
+}
index 2edf5cfdb6d611cb59fc1ec0b249e974960274b6..fe68486990bed50f669acd53e4dfaf537aa46c97 100644 (file)
@@ -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);
-}
 \f
 
 /* 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;
-}
 \f
 
 /* 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 ();
index 2b117670394064a54a112bc989afcf4566bb08c5..1ce89fcf653f0057626b02059b357d7edb56b916 100644 (file)
@@ -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);
This page took 0.040321 seconds and 4 git commands to generate.