From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32877 invoked by alias); 12 Apr 2017 13:31:20 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 31918 invoked by uid 89); 12 Apr 2017 13:31:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=reaction X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 12 Apr 2017 13:31:17 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 271F933C171; Wed, 12 Apr 2017 13:31:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 271F933C171 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=palves@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 271F933C171 Received: from cascais.lan (ovpn04.gateway.prod.ext.phx2.redhat.com [10.5.9.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3BA6F60BE2; Wed, 12 Apr 2017 13:31:16 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Cc: Eli Zaretskii Subject: [PATCH] gdb: Move DJGPP/go32 bits to their own tdep file Date: Wed, 12 Apr 2017 13:31:00 -0000 Message-Id: <1492003875-25394-1-git-send-email-palves@redhat.com> X-SW-Source: 2017-04/txt/msg00329.txt.bz2 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 bits too. OK to apply? gdb/ChangeLog: yyyy-mm-dd Pedro Alves * 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/Makefile.in | 1 + gdb/configure.tgt | 4 +++ gdb/i386-go32-tdep.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ gdb/i386-tdep.c | 44 +------------------------------- gdb/i386-tdep.h | 5 ++++ 5 files changed, 83 insertions(+), 43 deletions(-) create mode 100644 gdb/i386-go32-tdep.c 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 . */ + +#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); -- 2.5.5