public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Remove deprecated core file functions
@ 2020-03-12 21:30 Christian Biesinger
  0 siblings, 0 replies; only message in thread
From: Christian Biesinger @ 2020-03-12 21:30 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6ba0a321037b748f0b1285c44af762021a380bd3

commit 6ba0a321037b748f0b1285c44af762021a380bd3
Author: Christian Biesinger <cbiesinger@google.com>
Date:   Fri Mar 6 15:21:28 2020 -0600

    Remove deprecated core file functions
    
    There are no more callers to deprecated_add_core_fns, now that I have
    removed the usage from CRIS and ARM/NetBSD.  So this patch cleans up
    all the related code and makes corelow.c a lot more readable.
    
    gdb/ChangeLog:
    
    2020-03-12  Christian Biesinger  <cbiesinger@google.com>
    
            * corelow.c (sniff_core_bfd): Remove.
            (class core_target) <m_core_vec>: Remove.
            (core_target::core_target): Update.
            (core_file_fns): Remove.
            (deprecated_add_core_fns): Remove.
            (default_core_sniffer): Remove.
            (sniff_core_bfd): Remove.
            (default_check_format): Remove.
            (gdb_check_format): Remove.
            (core_target_open): Update.
            (core_target::get_core_register_section): Update.
            (get_core_registers_cb): Update.
            (core_target::fetch_registers): Update.
            * gdbcore.h (struct core_fns): Remove.
            (deprecated_add_core_fns): Remove.
            (default_core_sniffer): Remove.
            (default_check_format): Remove.

Diff:
---
 gdb/ChangeLog |  20 +++++++
 gdb/corelow.c | 170 ++++++++--------------------------------------------------
 gdb/gdbcore.h |  68 -----------------------
 3 files changed, 41 insertions(+), 217 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1e827fda561..2f12ff15f0e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,23 @@
+2020-03-12  Christian Biesinger  <cbiesinger@google.com>
+
+	* corelow.c (sniff_core_bfd): Remove.
+	(class core_target) <m_core_vec>: Remove.
+	(core_target::core_target): Update.
+	(core_file_fns): Remove.
+	(deprecated_add_core_fns): Remove.
+	(default_core_sniffer): Remove.
+	(sniff_core_bfd): Remove.
+	(default_check_format): Remove.
+	(gdb_check_format): Remove.
+	(core_target_open): Update.
+	(core_target::get_core_register_section): Update.
+	(get_core_registers_cb): Update.
+	(core_target::fetch_registers): Update.
+	* gdbcore.h (struct core_fns): Remove.
+	(deprecated_add_core_fns): Remove.
+	(default_core_sniffer): Remove.
+	(default_check_format): Remove.
+
 2020-03-12  Tom Tromey  <tom@tromey.com>
 
 	* arm-tdep.c (struct arm_mapping_symbol) <value>: Now a
diff --git a/gdb/corelow.c b/gdb/corelow.c
index 5cd058d5993..b60010453dc 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -50,9 +50,6 @@
 #define O_LARGEFILE 0
 #endif
 
-static core_fns *sniff_core_bfd (gdbarch *core_gdbarch,
-				 bfd *abfd);
-
 /* The core file target.  */
 
 static const target_info core_target_info = {
@@ -111,7 +108,6 @@ public:
 				  const struct regset *regset,
 				  const char *name,
 				  int section_min_size,
-				  int which,
 				  const char *human_name,
 				  bool required);
 
@@ -125,10 +121,6 @@ private: /* per-core data */
      targets.  */
   target_section_table m_core_section_table {};
 
-  /* The core_fns for a core file handler that is prepared to read the
-     core file currently open on core_bfd.  */
-  core_fns *m_core_vec = NULL;
-
   /* FIXME: kettenis/20031023: Eventually this field should
      disappear.  */
   struct gdbarch *m_core_gdbarch = NULL;
@@ -138,8 +130,10 @@ core_target::core_target ()
 {
   m_core_gdbarch = gdbarch_from_bfd (core_bfd);
 
-  /* Find a suitable core file handler to munch on core_bfd */
-  m_core_vec = sniff_core_bfd (m_core_gdbarch, core_bfd);
+  if (!m_core_gdbarch
+      || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
+    error (_("\"%s\": Core file format not supported"),
+	   bfd_get_filename (core_bfd));
 
   /* Find the data section */
   if (build_section_table (core_bfd,
@@ -154,107 +148,11 @@ core_target::~core_target ()
   xfree (m_core_section_table.sections);
 }
 
-/* List of all available core_fns.  On gdb startup, each core file
-   register reader calls deprecated_add_core_fns() to register
-   information on each core format it is prepared to read.  */
-
-static struct core_fns *core_file_fns = NULL;
-
-static int gdb_check_format (bfd *);
-
 static void add_to_thread_list (bfd *, asection *, void *);
 
 /* An arbitrary identifier for the core inferior.  */
 #define CORELOW_PID 1
 
-/* Link a new core_fns into the global core_file_fns list.  Called on
-   gdb startup by the _initialize routine in each core file register
-   reader, to register information about each format the reader is
-   prepared to handle.  */
-
-void
-deprecated_add_core_fns (struct core_fns *cf)
-{
-  cf->next = core_file_fns;
-  core_file_fns = cf;
-}
-
-/* The default function that core file handlers can use to examine a
-   core file BFD and decide whether or not to accept the job of
-   reading the core file.  */
-
-int
-default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
-{
-  int result;
-
-  result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
-  return (result);
-}
-
-/* Walk through the list of core functions to find a set that can
-   handle the core file open on ABFD.  Returns pointer to set that is
-   selected.  */
-
-static struct core_fns *
-sniff_core_bfd (struct gdbarch *core_gdbarch, bfd *abfd)
-{
-  struct core_fns *cf;
-  struct core_fns *yummy = NULL;
-  int matches = 0;
-
-  /* Don't sniff if we have support for register sets in
-     CORE_GDBARCH.  */
-  if (core_gdbarch && gdbarch_iterate_over_regset_sections_p (core_gdbarch))
-    return NULL;
-
-  for (cf = core_file_fns; cf != NULL; cf = cf->next)
-    {
-      if (cf->core_sniffer (cf, abfd))
-	{
-	  yummy = cf;
-	  matches++;
-	}
-    }
-  if (matches > 1)
-    {
-      warning (_("\"%s\": ambiguous core format, %d handlers match"),
-	       bfd_get_filename (abfd), matches);
-    }
-  else if (matches == 0)
-    error (_("\"%s\": no core file handler recognizes format"),
-	   bfd_get_filename (abfd));
-
-  return (yummy);
-}
-
-/* The default is to reject every core file format we see.  Either
-   BFD has to recognize it, or we have to provide a function in the
-   core file handler that recognizes it.  */
-
-int
-default_check_format (bfd *abfd)
-{
-  return (0);
-}
-
-/* Attempt to recognize core file formats that BFD rejects.  */
-
-static int
-gdb_check_format (bfd *abfd)
-{
-  struct core_fns *cf;
-
-  for (cf = core_file_fns; cf != NULL; cf = cf->next)
-    {
-      if (cf->check_format (abfd))
-	{
-	  return (1);
-	}
-    }
-  return (0);
-}
-
 /* Close the core target.  */
 
 void
@@ -413,8 +311,7 @@ core_target_open (const char *arg, int from_tty)
   if (temp_bfd == NULL)
     perror_with_name (filename.get ());
 
-  if (!bfd_check_format (temp_bfd.get (), bfd_core)
-      && !gdb_check_format (temp_bfd.get ()))
+  if (!bfd_check_format (temp_bfd.get (), bfd_core))
     {
       /* Do it after the err msg */
       /* FIXME: should be checking for errors from bfd_close (for one
@@ -568,8 +465,7 @@ core_target::detach (inferior *inf, int from_tty)
 }
 
 /* Try to retrieve registers from a section in core_bfd, and supply
-   them to m_core_vec->core_read_registers, as the register set
-   numbered WHICH.
+   them to REGSET.
 
    If ptid's lwp member is zero, do the single-threaded
    thing: look for a section named NAME.  If ptid's lwp
@@ -588,14 +484,14 @@ core_target::get_core_register_section (struct regcache *regcache,
 					const struct regset *regset,
 					const char *name,
 					int section_min_size,
-					int which,
 					const char *human_name,
 					bool required)
 {
+  gdb_assert (regset != nullptr);
+
   struct bfd_section *section;
   bfd_size_type size;
-  bool variable_size_section = (regset != NULL
-				&& regset->flags & REGSET_VARIABLE_SIZE);
+  bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
 
   thread_section_name section_name (name, regcache->ptid ());
 
@@ -630,15 +526,7 @@ core_target::get_core_register_section (struct regcache *regcache,
       return;
     }
 
-  if (regset != NULL)
-    {
-      regset->supply_regset (regset, regcache, -1, contents.data (), size);
-      return;
-    }
-
-  gdb_assert (m_core_vec != nullptr);
-  m_core_vec->core_read_registers (regcache, contents.data (), size, which,
-				   (CORE_ADDR) bfd_section_vma (section));
+  regset->supply_regset (regset, regcache, -1, contents.data (), size);
 }
 
 /* Data passed to gdbarch_iterate_over_regset_sections's callback.  */
@@ -656,10 +544,11 @@ get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
 		       const struct regset *regset,
 		       const char *human_name, void *cb_data)
 {
+  gdb_assert (regset != nullptr);
+
   auto *data = (get_core_registers_cb_data *) cb_data;
   bool required = false;
-  bool variable_size_section = (regset != NULL
-				&& regset->flags & REGSET_VARIABLE_SIZE);
+  bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
 
   if (!variable_size_section)
     gdb_assert (supply_size == collect_size);
@@ -676,11 +565,8 @@ get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
 	human_name = "floating-point";
     }
 
-  /* The 'which' parameter is only used when no regset is provided.
-     Thus we just set it to -1. */
   data->target->get_core_register_section (data->regcache, regset, sect_name,
-					   supply_size, -1, human_name,
-					   required);
+					   supply_size, human_name, required);
 }
 
 /* Get the registers out of a core file.  This is the machine-
@@ -693,36 +579,22 @@ get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
 void
 core_target::fetch_registers (struct regcache *regcache, int regno)
 {
-  int i;
-  struct gdbarch *gdbarch;
-
   if (!(m_core_gdbarch != nullptr
-	&& gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
-      && (m_core_vec == NULL || m_core_vec->core_read_registers == NULL))
+	&& gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)))
     {
       fprintf_filtered (gdb_stderr,
 		     "Can't fetch registers from this type of core file\n");
       return;
     }
 
-  gdbarch = regcache->arch ();
-  if (gdbarch_iterate_over_regset_sections_p (gdbarch))
-    {
-      get_core_registers_cb_data data = { this, regcache };
-      gdbarch_iterate_over_regset_sections (gdbarch,
-					    get_core_registers_cb,
-					    (void *) &data, NULL);
-    }
-  else
-    {
-      get_core_register_section (regcache, NULL,
-				 ".reg", 0, 0, "general-purpose", 1);
-      get_core_register_section (regcache, NULL,
-				 ".reg2", 0, 2, "floating-point", 0);
-    }
+  struct gdbarch *gdbarch = regcache->arch ();
+  get_core_registers_cb_data data = { this, regcache };
+  gdbarch_iterate_over_regset_sections (gdbarch,
+					get_core_registers_cb,
+					(void *) &data, NULL);
 
   /* Mark all registers not found in the core as unavailable.  */
-  for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
+  for (int i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
     if (regcache->get_register_status (i) == REG_UNKNOWN)
       regcache->raw_supply (i, NULL);
 }
diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h
index 7fef4d809ea..24db21e462c 100644
--- a/gdb/gdbcore.h
+++ b/gdb/gdbcore.h
@@ -168,69 +168,6 @@ extern const char *gnutarget;
 
 extern void set_gnutarget (const char *);
 
-/* Structure to keep track of core register reading functions for
-   various core file types.  */
-
-struct core_fns
-  {
-
-    /* BFD flavour that a core file handler is prepared to read.  This
-       can be used by the handler's core tasting function as a first
-       level filter to reject BFD's that don't have the right
-       flavour.  */
-
-    enum bfd_flavour core_flavour;
-
-    /* Core file handler function to call to recognize corefile
-       formats that BFD rejects.  Some core file format just don't fit
-       into the BFD model, or may require other resources to identify
-       them, that simply aren't available to BFD (such as symbols from
-       another file).  Returns nonzero if the handler recognizes the
-       format, zero otherwise.  */
-
-    int (*check_format) (bfd *);
-
-    /* Core file handler function to call to ask if it can handle a
-       given core file format or not.  Returns zero if it can't,
-       nonzero otherwise.  */
-
-    int (*core_sniffer) (struct core_fns *, bfd *);
-
-    /* Extract the register values out of the core file and supply them
-       into REGCACHE.
-
-       CORE_REG_SECT points to the register values themselves, read into
-       memory.
-
-       CORE_REG_SIZE is the size of that area.
-
-       WHICH says which set of registers we are handling:
-         0 --- integer registers
-         2 --- floating-point registers, on machines where they are
-               discontiguous
-         3 --- extended floating-point registers, on machines where
-               these are present in yet a third area.  (GNU/Linux uses
-               this to get at the SSE registers.)
-
-       REG_ADDR is the offset from u.u_ar0 to the register values relative to
-       core_reg_sect.  This is used with old-fashioned core files to locate the
-       registers in a large upage-plus-stack ".reg" section.  Original upage
-       address X is at location core_reg_sect+x+reg_addr.  */
-
-    void (*core_read_registers) (struct regcache *regcache,
-				 gdb_byte *core_reg_sect,
-				 unsigned core_reg_size,
-				 int which, CORE_ADDR reg_addr);
-
-    /* Finds the next struct core_fns.  They are allocated and
-       initialized in whatever module implements the functions pointed
-       to; an initializer calls deprecated_add_core_fns to add them to
-       the global chain.  */
-
-    struct core_fns *next;
-
-  };
-
 /* Build either a single-thread or multi-threaded section name for
    PTID.
 
@@ -274,9 +211,4 @@ private:
   std::string m_storage;
 };
 
-/* Replaced by the "iterate_over_regset_sections" gdbarch method.  */
-extern void deprecated_add_core_fns (struct core_fns *cf);
-extern int default_core_sniffer (struct core_fns *cf, bfd * abfd);
-extern int default_check_format (bfd * abfd);
-
 #endif /* !defined (GDBCORE_H) */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-03-12 21:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-12 21:30 [binutils-gdb] Remove deprecated core file functions Christian Biesinger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).