From: Gary Benson <gbenson@redhat.com>
To: gdb-patches@sourceware.org
Cc: Doug Evans <xdje42@gmail.com>, Eli Zaretskii <eliz@gnu.org>
Subject: [PATCH 1/3 v2] Add expansion_notify callback to expand_symtabs_matching
Date: Thu, 27 Nov 2014 13:16:00 -0000 [thread overview]
Message-ID: <1417094168-25868-2-git-send-email-gbenson@redhat.com> (raw)
In-Reply-To: <1417094168-25868-1-git-send-email-gbenson@redhat.com>
This commit adds a new callback parameter, "expansion_notify", to the
top-level expand_symtabs_matching function and to all the vectorized
functions it defers to. If expansion_notify is non-NULL, it will be
called every time a symbol table is expanded.
gdb/ChangeLog:
* symfile.h (expand_symtabs_exp_notify_ftype): New typedef.
(struct quick_symbol_functions) <expand_symtabs_matching>:
New argument expansion_notify. All uses updated.
(expand_symtabs_matching): New argument expansion_notify.
All uses updated.
* symfile-debug.c (debug_qf_expand_symtabs_matching):
Also print expansion notify.
* symtab.c (expand_symtabs_matching_via_partial): Call
expansion_notify whenever a partial symbol table is expanded.
* dwarf2read.c (dw2_expand_symtabs_matching): Call
expansion_notify whenever a symbol table is instantiated.
---
gdb/ChangeLog | 14 ++++++++++++++
gdb/ada-lang.c | 6 +++---
gdb/dwarf2read.c | 16 +++++++++++++++-
gdb/linespec.c | 2 +-
gdb/psymtab.c | 9 ++++++++-
gdb/symfile-debug.c | 5 ++++-
gdb/symfile.c | 4 +++-
gdb/symfile.h | 8 ++++++++
gdb/symmisc.c | 2 +-
gdb/symtab.c | 6 +++---
10 files changed, 60 insertions(+), 12 deletions(-)
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 3a024d9..af5a4b3 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -6198,8 +6198,8 @@ ada_make_symbol_completion_list (const char *text0, const char *word,
data.word = word;
data.wild_match = wild_match_p;
data.encoded = encoded_p;
- expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
- &data);
+ expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
+ ALL_DOMAIN, &data);
}
/* At this point scan through the misc symbol vectors and add each
@@ -12943,7 +12943,7 @@ ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
struct objfile *objfile;
struct compunit_symtab *s;
- expand_symtabs_matching (NULL, ada_exc_search_name_matches,
+ expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
VARIABLES_DOMAIN, preg);
ALL_COMPUNITS (objfile, s)
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 36cbbd9..1167aaa 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3787,6 +3787,7 @@ dw2_expand_symtabs_matching
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data)
{
@@ -3958,7 +3959,20 @@ dw2_expand_symtabs_matching
per_cu = dw2_get_cutu (cu_index);
if (file_matcher == NULL || per_cu->v.quick->mark)
- dw2_instantiate_symtab (per_cu);
+ {
+ int symtab_was_null =
+ (per_cu->v.quick->compunit_symtab == NULL);
+
+ dw2_instantiate_symtab (per_cu);
+
+ if (expansion_notify != NULL
+ && symtab_was_null
+ && per_cu->v.quick->compunit_symtab != NULL)
+ {
+ expansion_notify (per_cu->v.quick->compunit_symtab,
+ data);
+ }
+ }
}
}
}
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 82384ca..c3432ab 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1028,7 +1028,7 @@ iterate_over_all_matching_symtabs (struct linespec_state *state,
if (objfile->sf)
objfile->sf->qf->expand_symtabs_matching (objfile, NULL,
iterate_name_matcher,
- ALL_DOMAIN,
+ NULL, ALL_DOMAIN,
&matcher_data);
ALL_OBJFILE_COMPUNITS (objfile, cu)
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 2fc882f..17f5b11 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1373,6 +1373,7 @@ expand_symtabs_matching_via_partial
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data)
{
@@ -1415,7 +1416,13 @@ expand_symtabs_matching_via_partial
}
if (recursively_search_psymtabs (ps, objfile, kind, symbol_matcher, data))
- psymtab_to_symtab (objfile, ps);
+ {
+ struct compunit_symtab *symtab =
+ psymtab_to_symtab (objfile, ps);
+
+ if (expansion_notify != NULL)
+ expansion_notify (symtab, data);
+ }
}
}
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index 8bca5b2..4dda9e6 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -289,22 +289,25 @@ debug_qf_expand_symtabs_matching
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind, void *data)
{
const struct debug_sym_fns_data *debug_data =
objfile_data (objfile, symfile_debug_objfile_data_key);
fprintf_filtered (gdb_stdlog,
- "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
+ "qf->expand_symtabs_matching (%s, %s, %s, %s, %s, %s)\n",
debug_objfile_name (objfile),
host_address_to_string (file_matcher),
host_address_to_string (symbol_matcher),
+ host_address_to_string (expansion_notify),
search_domain_name (kind),
host_address_to_string (data));
debug_data->real_sf->qf->expand_symtabs_matching (objfile,
file_matcher,
symbol_matcher,
+ expansion_notify,
kind, data);
}
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 29877ec..6c3612f 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3941,6 +3941,7 @@ symfile_free_objfile (struct objfile *objfile)
void
expand_symtabs_matching (expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data)
{
@@ -3950,7 +3951,8 @@ expand_symtabs_matching (expand_symtabs_file_matcher_ftype *file_matcher,
{
if (objfile->sf)
objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher,
- symbol_matcher, kind,
+ symbol_matcher,
+ expansion_notify, kind,
data);
}
}
diff --git a/gdb/symfile.h b/gdb/symfile.h
index 1e8c230..aa0bbcd 100644
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
@@ -137,6 +137,12 @@ typedef int (expand_symtabs_file_matcher_ftype) (const char *filename,
typedef int (expand_symtabs_symbol_matcher_ftype) (const char *name,
void *data);
+/* Callback for quick_symbol_functions->expand_symtabs_matching
+ to be called after a symtab has been expanded. */
+
+typedef void (expand_symtabs_exp_notify_ftype) \
+ (struct compunit_symtab *symtab, void *data);
+
/* The "quick" symbol functions exist so that symbol readers can
avoiding an initial read of all the symbols. For example, symbol
readers might choose to use the "partial symbol table" utilities,
@@ -282,6 +288,7 @@ struct quick_symbol_functions
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data);
@@ -569,6 +576,7 @@ extern struct cleanup *increment_reading_symtab (void);
void expand_symtabs_matching (expand_symtabs_file_matcher_ftype *,
expand_symtabs_symbol_matcher_ftype *,
+ expand_symtabs_exp_notify_ftype *,
enum search_domain kind, void *data);
void map_symbol_filenames (symbol_filename_ftype *fun, void *data,
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 5e0cc7a..e65ea54 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -922,7 +922,7 @@ maintenance_expand_symtabs (char *args, int from_tty)
{
objfile->sf->qf->expand_symtabs_matching
(objfile, maintenance_expand_file_matcher,
- maintenance_expand_name_matcher, ALL_DOMAIN, regexp);
+ maintenance_expand_name_matcher, NULL, ALL_DOMAIN, regexp);
}
}
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 345c20d..3f137e2 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -3674,7 +3674,7 @@ search_symbols (const char *regexp, enum search_domain kind,
? NULL
: search_symbols_file_matches),
search_symbols_name_matches,
- kind, &datum);
+ NULL, kind, &datum);
/* Here, we search through the minimal symbol tables for functions
and variables that match, and force their symbols to be read.
@@ -4463,8 +4463,8 @@ default_make_symbol_completion_list_break_on (const char *text,
/* Look through the partial symtabs for all symbols which begin
by matching SYM_TEXT. Expand all CUs that you find to the list.
The real names will get added by COMPLETION_LIST_ADD_SYMBOL below. */
- expand_symtabs_matching (NULL, symbol_completion_matcher, ALL_DOMAIN,
- &datum);
+ expand_symtabs_matching (NULL, symbol_completion_matcher, NULL,
+ ALL_DOMAIN, &datum);
/* At this point scan through the misc symbol vectors and add each
symbol you find to the list. Eventually we want to ignore
--
1.7.1
next prev parent reply other threads:[~2014-11-27 13:16 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-27 13:16 [PATCH 0/3 v2] Abort completion when list becomes large Gary Benson
2014-11-27 13:16 ` Gary Benson [this message]
2014-12-05 7:56 ` [PATCH 1/3 v2] Add expansion_notify callback to expand_symtabs_matching Doug Evans
2014-11-27 13:16 ` [PATCH 2/3 v2] Interleave completion list building with symbol table expansion Gary Benson
2014-12-05 22:58 ` Doug Evans
2017-01-09 21:19 ` Crash regression for <tab>-completion [Re: [PATCH 2/3 v2] Interleave completion list building with symbol table expansion] Jan Kratochvil
2014-11-27 13:16 ` [PATCH 3/3 v2] Implement completion limiting Gary Benson
2014-11-27 16:25 ` Eli Zaretskii
2014-12-05 23:54 ` Doug Evans
2014-12-10 12:22 ` Gary Benson
2014-12-10 16:25 ` Doug Evans
2015-01-03 2:09 ` Doug Evans
2015-01-07 8:44 ` Gary Benson
2015-01-09 1:29 ` Doug Evans
2015-01-10 2:32 ` Doug Evans
2015-01-10 9:23 ` Eli Zaretskii
2015-01-12 18:50 ` Doug Evans
2015-01-15 15:39 ` Gary Benson
2015-01-23 7:32 ` Doug Evans
2015-01-23 10:59 ` Eli Zaretskii
2015-01-23 16:38 ` Doug Evans
2015-01-23 16:49 ` Eli Zaretskii
2015-01-23 20:28 ` Doug Evans
2015-01-24 1:55 ` Eli Zaretskii
2015-01-24 8:50 ` Doug Evans
2015-01-24 14:12 ` Eli Zaretskii
2015-01-25 15:55 ` Doug Evans
2015-01-25 19:14 ` Eli Zaretskii
-- strict thread matches above, loose matches on Subject: below --
2014-11-06 10:50 [PATCH 0/3 v2] Limit tab-completion result when list is large Gary Benson
2014-11-06 10:51 ` [PATCH 1/3 v2] Add expansion_notify callback to expand_symtabs_matching Gary Benson
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=1417094168-25868-2-git-send-email-gbenson@redhat.com \
--to=gbenson@redhat.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=xdje42@gmail.com \
/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