diff options
author | Pedro Alves <palves@redhat.com> | 2017-04-12 16:00:04 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-04-12 16:00:04 +0100 |
commit | 8f10c9323357ad190c0383f2fc9d394316447905 (patch) | |
tree | 1dd5c69623d43e58a17c7b778fb2e4ff1d918cb4 /gdb/i386-go32-tdep.c | |
parent | 0a31ccfbd84660a91b133a9915e6f63c30033189 (diff) | |
download | gdb-8f10c9323357ad190c0383f2fc9d394316447905.zip gdb-8f10c9323357ad190c0383f2fc9d394316447905.tar.gz gdb-8f10c9323357ad190c0383f2fc9d394316447905.tar.bz2 |
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.
Diffstat (limited to 'gdb/i386-go32-tdep.c')
-rw-r--r-- | gdb/i386-go32-tdep.c | 72 |
1 files changed, 72 insertions, 0 deletions
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); +} |