aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/Makefile.in1
-rw-r--r--gdb/configure.tgt4
-rw-r--r--gdb/i386-go32-tdep.c72
-rw-r--r--gdb/i386-tdep.c44
-rw-r--r--gdb/i386-tdep.h5
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);