From 6ba0a321037b748f0b1285c44af762021a380bd3 Mon Sep 17 00:00:00 2001 From: Christian Biesinger Date: Fri, 6 Mar 2020 15:21:28 -0600 Subject: [PATCH] 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 * corelow.c (sniff_core_bfd): Remove. (class core_target) : 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. --- 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 1e827fda56..2f12ff15f0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,23 @@ +2020-03-12 Christian Biesinger + + * corelow.c (sniff_core_bfd): Remove. + (class core_target) : 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 * arm-tdep.c (struct arm_mapping_symbol) : Now a diff --git a/gdb/corelow.c b/gdb/corelow.c index 5cd058d599..b60010453d 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 7fef4d809e..24db21e462 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) */