mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-21 01:12:32 +08:00
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.
This commit is contained in:
parent
0a31ccfbd8
commit
8f10c93233
@ -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 *.
|
||||
|
@ -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 \
|
||||
|
@ -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"
|
||||
|
72
gdb/i386-go32-tdep.c
Normal file
72
gdb/i386-go32-tdep.c
Normal file
@ -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);
|
||||
}
|
@ -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 ();
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user