From 80e649fcac86101a8a4581317e867e89de015d28 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 22 May 2018 14:44:09 -0600 Subject: [PATCH] Parameterize cp_scan_for_anonymous_namespaces This changes cp_scan_for_anonymous_namespaces to use the buildsym_compunit API, rather than the function-based API. gdb/ChangeLog 2018-07-20 Tom Tromey * stabsread.c (define_symbol): Update. * buildsym-legacy.h (get_buildsym_compunit): Declare. * dwarf2read.c (new_symbol): Update. * cp-support.h (cp_scan_for_anonymous_namespaces): Update. * cp-namespace.c: Include buildsym.h. (cp_scan_for_anonymous_namespaces): Add "compunit" parameter. * buildsym-legacy.c (get_buildsym_compunit): New function. --- gdb/ChangeLog | 10 ++++++++++ gdb/buildsym-legacy.c | 9 +++++++++ gdb/buildsym-legacy.h | 4 ++++ gdb/cp-namespace.c | 11 ++++++----- gdb/cp-support.h | 4 +++- gdb/dwarf2read.c | 3 ++- gdb/stabsread.c | 3 ++- 7 files changed, 36 insertions(+), 8 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5b332d3b37c..4609965e321 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2018-07-20 Tom Tromey + + * stabsread.c (define_symbol): Update. + * buildsym-legacy.h (get_buildsym_compunit): Declare. + * dwarf2read.c (new_symbol): Update. + * cp-support.h (cp_scan_for_anonymous_namespaces): Update. + * cp-namespace.c: Include buildsym.h. + (cp_scan_for_anonymous_namespaces): Add "compunit" parameter. + * buildsym-legacy.c (get_buildsym_compunit): New function. + 2018-07-20 Tom Tromey * xcoffread.c: Include buildsym-legacy.h. diff --git a/gdb/buildsym-legacy.c b/gdb/buildsym-legacy.c index e7eaf037a88..5ee663daee4 100644 --- a/gdb/buildsym-legacy.c +++ b/gdb/buildsym-legacy.c @@ -375,3 +375,12 @@ scoped_free_pendings::~scoped_free_pendings () { free_buildsym_compunit (); } + +/* See buildsym-legacy.h. */ + +struct buildsym_compunit * +get_buildsym_compunit () +{ + gdb_assert (buildsym_compunit != nullptr); + return buildsym_compunit; +} diff --git a/gdb/buildsym-legacy.h b/gdb/buildsym-legacy.h index 78a5644687a..191c34478ba 100644 --- a/gdb/buildsym-legacy.h +++ b/gdb/buildsym-legacy.h @@ -207,4 +207,8 @@ extern struct pending **get_file_symbols (); extern struct pending **get_global_symbols (); +/* Return the current buildsym_compunit. */ + +extern struct buildsym_compunit *get_buildsym_compunit (); + #endif /* defined (LEGACY_BUILDSYM_H) */ diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index ef0c823cfa3..9ee2439b5eb 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -29,7 +29,7 @@ #include "dictionary.h" #include "command.h" #include "frame.h" -#include "buildsym-legacy.h" +#include "buildsym.h" #include "language.h" #include "namespace.h" #include @@ -50,7 +50,8 @@ static struct type *cp_lookup_transparent_type_loop (const char *name, anonymous namespace; if so, add an appropriate using directive. */ void -cp_scan_for_anonymous_namespaces (const struct symbol *const symbol, +cp_scan_for_anonymous_namespaces (struct buildsym_compunit *compunit, + const struct symbol *const symbol, struct objfile *const objfile) { if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) @@ -94,9 +95,9 @@ cp_scan_for_anonymous_namespaces (const struct symbol *const symbol, namespace given by the previous component if there is one, or to the global namespace if there isn't. */ std::vector excludes; - add_using_directive (get_local_using_directives (), - dest, src, NULL, NULL, excludes, 1, - &objfile->objfile_obstack); + add_using_directive (compunit->get_local_using_directives (), + dest, src, NULL, NULL, excludes, + 1, &objfile->objfile_obstack); } /* The "+ 2" is for the "::". */ previous_component = next_component + 2; diff --git a/gdb/cp-support.h b/gdb/cp-support.h index e2460de5fb8..4e269215950 100644 --- a/gdb/cp-support.h +++ b/gdb/cp-support.h @@ -33,6 +33,7 @@ struct symbol; struct block; +struct buildsym_compunit; struct objfile; struct type; struct demangle_component; @@ -132,7 +133,8 @@ extern symbol_name_matcher_ftype *cp_get_symbol_name_matcher extern int cp_is_in_anonymous (const char *symbol_name); -extern void cp_scan_for_anonymous_namespaces (const struct symbol *symbol, +extern void cp_scan_for_anonymous_namespaces (struct buildsym_compunit *, + const struct symbol *symbol, struct objfile *objfile); extern struct block_symbol cp_lookup_symbol_nonlocal diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index a3740891b53..02bcf656cdf 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -21476,7 +21476,8 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu, namespaces based on the demangled name. */ if (!cu->processing_has_namespace_info && cu->language == language_cplus) - cp_scan_for_anonymous_namespaces (sym, objfile); + cp_scan_for_anonymous_namespaces (get_buildsym_compunit (), sym, + objfile); } return (sym); } diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 345cddd67ea..368293d24fe 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -753,7 +753,8 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type, SYMBOL_SET_NAMES (sym, string, p - string, 1, objfile); if (SYMBOL_LANGUAGE (sym) == language_cplus) - cp_scan_for_anonymous_namespaces (sym, objfile); + cp_scan_for_anonymous_namespaces (get_buildsym_compunit (), sym, + objfile); } p++; -- 2.30.2