gdb: rename i386-cygwin-tdep.c to i386-windows-tdep.c
authorSimon Marchi <simon.marchi@efficios.com>
Mon, 16 Mar 2020 20:56:35 +0000 (16:56 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Mon, 16 Mar 2020 20:56:35 +0000 (16:56 -0400)
Since this file contains things that apply not only to Cygwin binaries,
but also to non-Cygwin Windows binaries, I think it would make more
sense for it to be called i386-windows-tdep.c.  It is analogous to
amd64-windows-tdep.c, which we already have.

gdb/ChangeLog:

* i386-cygwin-tdep.c: Rename to...
* i386-windows-tdep.c: ... this.
* Makefile.in (ALL_TARGET_OBS): Rename i386-cygwin-tdep.c to
i386-windows-tdep.c.
* configure.tgt: Likewise.

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

index 441029abf029ce8269f919be83f0ee84470180f0..a6f7ec01e79f6da599ffad3ac362b1bbcc7a6c8d 100644 (file)
@@ -1,3 +1,11 @@
+2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
+
+       * i386-cygwin-tdep.c: Rename to...
+       * i386-windows-tdep.c: ... this.
+       * Makefile.in (ALL_TARGET_OBS): Rename i386-cygwin-tdep.c to
+       i386-windows-tdep.c.
+       * configure.tgt: Likewise.
+
 2020-03-16  Simon Marchi  <simon.marchi@efficios.com>
 
        * osabi.h (enum gdb_osabi): Add GDB_OSABI_WINDOWS.
index 1db02c07ac280f18a9bfab2f7b5bc2cdadc13cc3..d225b7d76679095b2e7baa9124476f589835f9da 100644 (file)
@@ -733,7 +733,6 @@ ALL_TARGET_OBS = \
        hppa-obsd-tdep.o \
        hppa-tdep.o \
        i386-bsd-tdep.o \
-       i386-cygwin-tdep.o \
        i386-darwin-tdep.o \
        i386-dicos-tdep.o \
        i386-fbsd-tdep.o \
@@ -745,6 +744,7 @@ ALL_TARGET_OBS = \
        i386-obsd-tdep.o \
        i386-sol2-tdep.o \
        i386-tdep.o \
+       i386-windows-tdep.o \
        i387-tdep.o \
        iq2000-tdep.o \
        linux-record.o \
@@ -2161,7 +2161,6 @@ ALLDEPFILES = \
        hppa-tdep.c \
        i386-bsd-nat.c \
        i386-bsd-tdep.c \
-       i386-cygwin-tdep.c \
        i386-darwin-nat.c \
        i386-darwin-tdep.c \
        i386-dicos-tdep.c \
@@ -2178,6 +2177,7 @@ ALLDEPFILES = \
        i386-sol2-nat.c \
        i386-sol2-tdep.c \
        i386-tdep.c \
+       i386-windows-tdep.c \
        i387-tdep.c \
        ia64-libunwind-tdep.c \
        ia64-linux-nat.c \
index 6ebd32410e996060aee080a70da7ba275dde0832..34f703009eaadaab67a433a6987aa7cfbeab238b 100644 (file)
@@ -304,11 +304,11 @@ i[34567]86-*-gnu*)
        ;;
 i[34567]86-*-cygwin*)
        # Target: Intel 386 running win32
-       gdb_target_obs="i386-cygwin-tdep.o windows-tdep.o"
+       gdb_target_obs="i386-windows-tdep.o windows-tdep.o"
        ;;
 i[34567]86-*-mingw32*)
        # Target: Intel 386 running win32
-       gdb_target_obs="i386-cygwin-tdep.o windows-tdep.o"
+       gdb_target_obs="i386-windows-tdep.o windows-tdep.o"
        ;;
 i[34567]86-*-go32* | i[34567]86-*-msdosdjgpp*)
        # Target: i386 running DJGPP/go32.
@@ -730,7 +730,7 @@ x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
 x86_64-*-mingw* | x86_64-*-cygwin*)
         # Target: MingW/amd64
        gdb_target_obs="amd64-windows-tdep.o \
-                        ${i386_tobjs} i386-cygwin-tdep.o \
+                        ${i386_tobjs} i386-windows-tdep.o \
                         windows-tdep.o"
         ;;
 x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
diff --git a/gdb/i386-cygwin-tdep.c b/gdb/i386-cygwin-tdep.c
deleted file mode 100644 (file)
index b9a959d..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Target-dependent code for Cygwin running on i386's, for GDB.
-
-   Copyright (C) 2003-2020 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 "osabi.h"
-#include "i386-tdep.h"
-#include "windows-tdep.h"
-#include "regset.h"
-#include "gdb_obstack.h"
-#include "xml-support.h"
-#include "gdbcore.h"
-#include "inferior.h"
-
-/* Core file support.  */
-
-/* This vector maps GDB's idea of a register's number into an address
-   in the windows exception context vector.  */
-
-static int i386_windows_gregset_reg_offset[] =
-{
-  176, /* eax */
-  172, /* ecx */
-  168, /* edx */
-  164, /* ebx */
-
-  196, /* esp */
-  180, /* ebp */
-  160, /* esi */
-  156, /* edi */
-
-  184, /* eip */
-  192, /* eflags */
-  188, /* cs */
-  200, /* ss */
-
-  152, /* ds */
-  148, /* es */
-  144, /* fs */
-  140, /* gs */
-
-  56, /* FloatSave.RegisterArea[0 * 10] */
-  66, /* FloatSave.RegisterArea[1 * 10] */
-  76, /* FloatSave.RegisterArea[2 * 10] */
-  86, /* FloatSave.RegisterArea[3 * 10] */
-  96, /* FloatSave.RegisterArea[4 * 10] */
-  106, /* FloatSave.RegisterArea[5 * 10] */
-  116, /* FloatSave.RegisterArea[6 * 10] */
-  126, /* FloatSave.RegisterArea[7 * 10] */
-
-  28, /* FloatSave.ControlWord */
-  32, /* FloatSave.StatusWord */
-  36, /* FloatSave.TagWord */
-  44, /* FloatSave.ErrorSelector */
-  40, /* FloatSave.ErrorOffset */
-  52, /* FloatSave.DataSelector */
-  48, /* FloatSave.DataOffset */
-  44, /* FloatSave.ErrorSelector */
-
-  /* XMM0-7 */
-  364, /* ExtendedRegisters[10*16] */
-  380, /* ExtendedRegisters[11*16] */
-  396, /* ExtendedRegisters[12*16] */
-  412, /* ExtendedRegisters[13*16] */
-  428, /* ExtendedRegisters[14*16] */
-  444, /* ExtendedRegisters[15*16] */
-  460, /* ExtendedRegisters[16*16] */
-  476, /* ExtendedRegisters[17*16] */
-
-  /* MXCSR */
-  228 /* ExtendedRegisters[24] */
-};
-
-#define I386_WINDOWS_SIZEOF_GREGSET 716
-
-struct cpms_data
-{
-  struct gdbarch *gdbarch;
-  struct obstack *obstack;
-  int module_count;
-};
-
-static void
-core_process_module_section (bfd *abfd, asection *sect, void *obj)
-{
-  struct cpms_data *data = (struct cpms_data *) obj;
-  enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch);
-
-  char *module_name;
-  size_t module_name_size;
-  CORE_ADDR base_addr;
-
-  gdb_byte *buf = NULL;
-
-  if (!startswith (sect->name, ".module"))
-    return;
-
-  buf = (gdb_byte *) xmalloc (bfd_section_size (sect) + 1);
-  if (!buf)
-    {
-      printf_unfiltered ("memory allocation failed for %s\n", sect->name);
-      goto out;
-    }
-  if (!bfd_get_section_contents (abfd, sect,
-                                buf, 0, bfd_section_size (sect)))
-    goto out;
-
-
-
-  /* A DWORD (data_type) followed by struct windows_core_module_info.  */
-
-  base_addr =
-    extract_unsigned_integer (buf + 4, 4, byte_order);
-
-  module_name_size =
-    extract_unsigned_integer (buf + 8, 4, byte_order);
-
-  if (12 + module_name_size > bfd_section_size (sect))
-    goto out;
-  module_name = (char *) buf + 12;
-
-  /* The first module is the .exe itself.  */
-  if (data->module_count != 0)
-    windows_xfer_shared_library (module_name, base_addr,
-                                NULL, data->gdbarch, data->obstack);
-  data->module_count++;
-
-out:
-  if (buf)
-    xfree (buf);
-  return;
-}
-
-static ULONGEST
-windows_core_xfer_shared_libraries (struct gdbarch *gdbarch,
-                                 gdb_byte *readbuf,
-                                 ULONGEST offset, ULONGEST len)
-{
-  struct obstack obstack;
-  const char *buf;
-  ULONGEST len_avail;
-  struct cpms_data data = { gdbarch, &obstack, 0 };
-
-  obstack_init (&obstack);
-  obstack_grow_str (&obstack, "<library-list>\n");
-  bfd_map_over_sections (core_bfd,
-                        core_process_module_section,
-                        &data);
-  obstack_grow_str0 (&obstack, "</library-list>\n");
-
-  buf = (const char *) obstack_finish (&obstack);
-  len_avail = strlen (buf);
-  if (offset >= len_avail)
-    return 0;
-
-  if (len > len_avail - offset)
-    len = len_avail - offset;
-  memcpy (readbuf, buf + offset, len);
-
-  obstack_free (&obstack, NULL);
-  return len;
-}
-
-/* This is how we want PTIDs from core files to be printed.  */
-
-static std::string
-i386_windows_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
-{
-  if (ptid.lwp () != 0)
-    return string_printf ("Thread 0x%lx", ptid.lwp ());
-
-  return normal_pid_to_str (ptid);
-}
-
-static CORE_ADDR
-i386_cygwin_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
-{
-  return i386_pe_skip_trampoline_code (frame, pc, NULL);
-}
-
-static const char *
-i386_cygwin_auto_wide_charset (void)
-{
-  return "UTF-16";
-}
-
-static void
-i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
-  windows_init_abi (info, gdbarch);
-
-  set_gdbarch_skip_trampoline_code (gdbarch, i386_cygwin_skip_trampoline_code);
-
-  set_gdbarch_skip_main_prologue (gdbarch, i386_skip_main_prologue);
-
-  tdep->struct_return = reg_struct_return;
-
-  tdep->gregset_reg_offset = i386_windows_gregset_reg_offset;
-  tdep->gregset_num_regs = ARRAY_SIZE (i386_windows_gregset_reg_offset);
-  tdep->sizeof_gregset = I386_WINDOWS_SIZEOF_GREGSET;
-
-  tdep->sizeof_fpregset = 0;
-
-  /* Core file support.  */
-  set_gdbarch_core_xfer_shared_libraries
-    (gdbarch, windows_core_xfer_shared_libraries);
-  set_gdbarch_core_pid_to_str (gdbarch, i386_windows_core_pid_to_str);
-
-  set_gdbarch_auto_wide_charset (gdbarch, i386_cygwin_auto_wide_charset);
-}
-
-static enum gdb_osabi
-i386_cygwin_osabi_sniffer (bfd *abfd)
-{
-  const char *target_name = bfd_get_target (abfd);
-
-  if (strcmp (target_name, "pei-i386") == 0)
-    return GDB_OSABI_WINDOWS;
-
-  return GDB_OSABI_UNKNOWN;
-}
-
-static enum gdb_osabi
-i386_cygwin_core_osabi_sniffer (bfd *abfd)
-{
-  const char *target_name = bfd_get_target (abfd);
-
-  /* Cygwin uses elf core dumps.  Do not claim all ELF executables,
-     check whether there is a .reg section of proper size.  */
-  if (strcmp (target_name, "elf32-i386") == 0)
-    {
-      asection *section = bfd_get_section_by_name (abfd, ".reg");
-      if (section != nullptr
-         && bfd_section_size (section) == I386_WINDOWS_SIZEOF_GREGSET)
-       return GDB_OSABI_CYGWIN;
-    }
-
-  return GDB_OSABI_UNKNOWN;
-}
-
-void _initialize_i386_cygwin_tdep ();
-void
-_initialize_i386_cygwin_tdep ()
-{
-  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
-                                  i386_cygwin_osabi_sniffer);
-
-  /* Cygwin uses elf core dumps.  */
-  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
-                                  i386_cygwin_core_osabi_sniffer);
-
-  /* The Cygwin and Windows OS ABIs are currently equivalent.  */
-  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_CYGWIN,
-                          i386_cygwin_init_abi);
-  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_WINDOWS,
-                          i386_cygwin_init_abi);
-}
diff --git a/gdb/i386-windows-tdep.c b/gdb/i386-windows-tdep.c
new file mode 100644 (file)
index 0000000..b9a959d
--- /dev/null
@@ -0,0 +1,274 @@
+/* Target-dependent code for Cygwin running on i386's, for GDB.
+
+   Copyright (C) 2003-2020 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 "osabi.h"
+#include "i386-tdep.h"
+#include "windows-tdep.h"
+#include "regset.h"
+#include "gdb_obstack.h"
+#include "xml-support.h"
+#include "gdbcore.h"
+#include "inferior.h"
+
+/* Core file support.  */
+
+/* This vector maps GDB's idea of a register's number into an address
+   in the windows exception context vector.  */
+
+static int i386_windows_gregset_reg_offset[] =
+{
+  176, /* eax */
+  172, /* ecx */
+  168, /* edx */
+  164, /* ebx */
+
+  196, /* esp */
+  180, /* ebp */
+  160, /* esi */
+  156, /* edi */
+
+  184, /* eip */
+  192, /* eflags */
+  188, /* cs */
+  200, /* ss */
+
+  152, /* ds */
+  148, /* es */
+  144, /* fs */
+  140, /* gs */
+
+  56, /* FloatSave.RegisterArea[0 * 10] */
+  66, /* FloatSave.RegisterArea[1 * 10] */
+  76, /* FloatSave.RegisterArea[2 * 10] */
+  86, /* FloatSave.RegisterArea[3 * 10] */
+  96, /* FloatSave.RegisterArea[4 * 10] */
+  106, /* FloatSave.RegisterArea[5 * 10] */
+  116, /* FloatSave.RegisterArea[6 * 10] */
+  126, /* FloatSave.RegisterArea[7 * 10] */
+
+  28, /* FloatSave.ControlWord */
+  32, /* FloatSave.StatusWord */
+  36, /* FloatSave.TagWord */
+  44, /* FloatSave.ErrorSelector */
+  40, /* FloatSave.ErrorOffset */
+  52, /* FloatSave.DataSelector */
+  48, /* FloatSave.DataOffset */
+  44, /* FloatSave.ErrorSelector */
+
+  /* XMM0-7 */
+  364, /* ExtendedRegisters[10*16] */
+  380, /* ExtendedRegisters[11*16] */
+  396, /* ExtendedRegisters[12*16] */
+  412, /* ExtendedRegisters[13*16] */
+  428, /* ExtendedRegisters[14*16] */
+  444, /* ExtendedRegisters[15*16] */
+  460, /* ExtendedRegisters[16*16] */
+  476, /* ExtendedRegisters[17*16] */
+
+  /* MXCSR */
+  228 /* ExtendedRegisters[24] */
+};
+
+#define I386_WINDOWS_SIZEOF_GREGSET 716
+
+struct cpms_data
+{
+  struct gdbarch *gdbarch;
+  struct obstack *obstack;
+  int module_count;
+};
+
+static void
+core_process_module_section (bfd *abfd, asection *sect, void *obj)
+{
+  struct cpms_data *data = (struct cpms_data *) obj;
+  enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch);
+
+  char *module_name;
+  size_t module_name_size;
+  CORE_ADDR base_addr;
+
+  gdb_byte *buf = NULL;
+
+  if (!startswith (sect->name, ".module"))
+    return;
+
+  buf = (gdb_byte *) xmalloc (bfd_section_size (sect) + 1);
+  if (!buf)
+    {
+      printf_unfiltered ("memory allocation failed for %s\n", sect->name);
+      goto out;
+    }
+  if (!bfd_get_section_contents (abfd, sect,
+                                buf, 0, bfd_section_size (sect)))
+    goto out;
+
+
+
+  /* A DWORD (data_type) followed by struct windows_core_module_info.  */
+
+  base_addr =
+    extract_unsigned_integer (buf + 4, 4, byte_order);
+
+  module_name_size =
+    extract_unsigned_integer (buf + 8, 4, byte_order);
+
+  if (12 + module_name_size > bfd_section_size (sect))
+    goto out;
+  module_name = (char *) buf + 12;
+
+  /* The first module is the .exe itself.  */
+  if (data->module_count != 0)
+    windows_xfer_shared_library (module_name, base_addr,
+                                NULL, data->gdbarch, data->obstack);
+  data->module_count++;
+
+out:
+  if (buf)
+    xfree (buf);
+  return;
+}
+
+static ULONGEST
+windows_core_xfer_shared_libraries (struct gdbarch *gdbarch,
+                                 gdb_byte *readbuf,
+                                 ULONGEST offset, ULONGEST len)
+{
+  struct obstack obstack;
+  const char *buf;
+  ULONGEST len_avail;
+  struct cpms_data data = { gdbarch, &obstack, 0 };
+
+  obstack_init (&obstack);
+  obstack_grow_str (&obstack, "<library-list>\n");
+  bfd_map_over_sections (core_bfd,
+                        core_process_module_section,
+                        &data);
+  obstack_grow_str0 (&obstack, "</library-list>\n");
+
+  buf = (const char *) obstack_finish (&obstack);
+  len_avail = strlen (buf);
+  if (offset >= len_avail)
+    return 0;
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  obstack_free (&obstack, NULL);
+  return len;
+}
+
+/* This is how we want PTIDs from core files to be printed.  */
+
+static std::string
+i386_windows_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
+{
+  if (ptid.lwp () != 0)
+    return string_printf ("Thread 0x%lx", ptid.lwp ());
+
+  return normal_pid_to_str (ptid);
+}
+
+static CORE_ADDR
+i386_cygwin_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+{
+  return i386_pe_skip_trampoline_code (frame, pc, NULL);
+}
+
+static const char *
+i386_cygwin_auto_wide_charset (void)
+{
+  return "UTF-16";
+}
+
+static void
+i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  windows_init_abi (info, gdbarch);
+
+  set_gdbarch_skip_trampoline_code (gdbarch, i386_cygwin_skip_trampoline_code);
+
+  set_gdbarch_skip_main_prologue (gdbarch, i386_skip_main_prologue);
+
+  tdep->struct_return = reg_struct_return;
+
+  tdep->gregset_reg_offset = i386_windows_gregset_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (i386_windows_gregset_reg_offset);
+  tdep->sizeof_gregset = I386_WINDOWS_SIZEOF_GREGSET;
+
+  tdep->sizeof_fpregset = 0;
+
+  /* Core file support.  */
+  set_gdbarch_core_xfer_shared_libraries
+    (gdbarch, windows_core_xfer_shared_libraries);
+  set_gdbarch_core_pid_to_str (gdbarch, i386_windows_core_pid_to_str);
+
+  set_gdbarch_auto_wide_charset (gdbarch, i386_cygwin_auto_wide_charset);
+}
+
+static enum gdb_osabi
+i386_cygwin_osabi_sniffer (bfd *abfd)
+{
+  const char *target_name = bfd_get_target (abfd);
+
+  if (strcmp (target_name, "pei-i386") == 0)
+    return GDB_OSABI_WINDOWS;
+
+  return GDB_OSABI_UNKNOWN;
+}
+
+static enum gdb_osabi
+i386_cygwin_core_osabi_sniffer (bfd *abfd)
+{
+  const char *target_name = bfd_get_target (abfd);
+
+  /* Cygwin uses elf core dumps.  Do not claim all ELF executables,
+     check whether there is a .reg section of proper size.  */
+  if (strcmp (target_name, "elf32-i386") == 0)
+    {
+      asection *section = bfd_get_section_by_name (abfd, ".reg");
+      if (section != nullptr
+         && bfd_section_size (section) == I386_WINDOWS_SIZEOF_GREGSET)
+       return GDB_OSABI_CYGWIN;
+    }
+
+  return GDB_OSABI_UNKNOWN;
+}
+
+void _initialize_i386_cygwin_tdep ();
+void
+_initialize_i386_cygwin_tdep ()
+{
+  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
+                                  i386_cygwin_osabi_sniffer);
+
+  /* Cygwin uses elf core dumps.  */
+  gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
+                                  i386_cygwin_core_osabi_sniffer);
+
+  /* The Cygwin and Windows OS ABIs are currently equivalent.  */
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_CYGWIN,
+                          i386_cygwin_init_abi);
+  gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_WINDOWS,
+                          i386_cygwin_init_abi);
+}