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).