From: Tom Tromey <tromey@adacore.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tromey@adacore.com>
Subject: [PATCH 3/8] Simplify psym_map_matching_symbols
Date: Wed, 31 Jul 2019 20:14:00 -0000 [thread overview]
Message-ID: <20190731201411.8044-4-tromey@adacore.com> (raw)
In-Reply-To: <20190731201411.8044-1-tromey@adacore.com>
This introduces a new helper function,
iterate_over_symbols_terminated, and changes psym_map_matching_symbols
to use it. A subsequent patch will introduce a new user of this
function in the DWARF reader.
gdb/ChangeLog
2019-07-31 Tom Tromey <tromey@adacore.com>
* psymtab.c (map_block): Remove.
(psym_map_matching_symbols): Use iterate_over_symbols_terminated.
* symtab.c (iterate_over_symbols_terminated): New function.
* symtab.c (iterate_over_symbols_terminated): Declare.
---
gdb/ChangeLog | 7 +++++++
gdb/psymtab.c | 40 ++++------------------------------------
gdb/symtab.c | 15 +++++++++++++++
gdb/symtab.h | 10 ++++++++++
4 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index c667a6273c2..daaa608d5d1 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1162,38 +1162,6 @@ psymtab_to_fullname (struct partial_symtab *ps)
return ps->fullname;
}
-/* For all symbols, s, in BLOCK that are in DOMAIN and match NAME
- according to the function MATCH, call CALLBACK(BLOCK, s, DATA).
- BLOCK is assumed to come from OBJFILE. Returns false iff CALLBACK
- ever returns false, and otherwise returns true. */
-
-static bool
-map_block (const char *name, domain_enum domain, struct objfile *objfile,
- const struct block *block,
- gdb::function_view<symbol_found_callback_ftype> callback,
- symbol_name_match_type match)
-{
- struct block_iterator iter;
- struct symbol *sym;
-
- lookup_name_info lookup_name (name, match);
-
- for (sym = block_iter_match_first (block, lookup_name, &iter);
- sym != NULL;
- sym = block_iter_match_next (lookup_name, &iter))
- {
- if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
- SYMBOL_DOMAIN (sym), domain))
- {
- struct block_symbol block_sym = {sym, block};
- if (!callback (&block_sym))
- return false;
- }
- }
-
- return true;
-}
-
/* Psymtab version of map_matching_symbols. See its definition in
the definition of quick_symbol_functions in symfile.h. */
@@ -1208,6 +1176,8 @@ psym_map_matching_symbols
{
const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
+ lookup_name_info lookup_name (name, match);
+
for (partial_symtab *ps : require_partial_symbols (objfile, 1))
{
QUIT;
@@ -1221,10 +1191,8 @@ psym_map_matching_symbols
if (cust == NULL)
continue;
block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind);
- if (!map_block (name, domain, objfile, block, callback, match))
- return;
- struct block_symbol block_sym = {nullptr, block};
- if (!callback (&block_sym))
+ if (!iterate_over_symbols_terminated (block, lookup_name,
+ domain, callback))
return;
}
}
diff --git a/gdb/symtab.c b/gdb/symtab.c
index ba348f01bbf..f6d05c2fd06 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -2857,6 +2857,21 @@ iterate_over_symbols (const struct block *block,
return true;
}
+/* See symtab.h. */
+
+bool
+iterate_over_symbols_terminated
+ (const struct block *block,
+ const lookup_name_info &name,
+ const domain_enum domain,
+ gdb::function_view<symbol_found_callback_ftype> callback)
+{
+ if (!iterate_over_symbols (block, name, domain, callback))
+ return false;
+ struct block_symbol block_sym = {nullptr, block};
+ return callback (&block_sym);
+}
+
/* Find the compunit symtab associated with PC and SECTION.
This will read in debug info as necessary. */
diff --git a/gdb/symtab.h b/gdb/symtab.h
index e62dd2b0ab3..50cf84ad929 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -2115,6 +2115,16 @@ bool iterate_over_symbols (const struct block *block,
const domain_enum domain,
gdb::function_view<symbol_found_callback_ftype> callback);
+/* Like iterate_over_symbols, but if all calls to CALLBACK return
+ true, then calls CALLBACK one additional time with a block_symbol
+ that has a valid block but a NULL symbol. */
+
+bool iterate_over_symbols_terminated
+ (const struct block *block,
+ const lookup_name_info &name,
+ const domain_enum domain,
+ gdb::function_view<symbol_found_callback_ftype> callback);
+
/* Storage type used by demangle_for_lookup. demangle_for_lookup
either returns a const char * pointer that points to either of the
fields of this type, or a pointer to the input NAME. This is done
--
2.20.1
next prev parent reply other threads:[~2019-07-31 20:14 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-31 20:14 [PATCH 0/8] Add Ada support for .debug_names Tom Tromey
2019-07-31 20:14 ` [PATCH 7/8] Add Ada support to cc-with-tweaks.exp Tom Tromey
2019-07-31 20:14 ` [PATCH 2/8] Change iterate_over_symbols to return bool Tom Tromey
2019-07-31 20:14 ` [PATCH 6/8] Add Ada support for .debug_names Tom Tromey
2019-07-31 20:14 ` [PATCH 1/8] Change map_matching_symbols to take a symbol_found_callback_ftype Tom Tromey
2019-07-31 20:14 ` Tom Tromey [this message]
2019-07-31 20:14 ` [PATCH 8/8] Update "save gdb-index" documentation Tom Tromey
2019-08-01 2:36 ` Eli Zaretskii
2019-07-31 20:22 ` [PATCH 4/8] Change map_matching_symbols to take a lookup_name_info Tom Tromey
2019-07-31 20:22 ` [PATCH 5/8] Fix latent bug in .debug_names file-name handling Tom Tromey
2019-09-10 14:22 ` [PATCH 0/8] Add Ada support for .debug_names Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190731201411.8044-4-tromey@adacore.com \
--to=tromey@adacore.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox