X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Flinespec.c;h=9c17331a9343514edc02a621ed0cb43393fc4d97;hb=c1b5c1ebc938b6dc0277363b8c47d75b0b5a621f;hp=e534cf2e81e4f89c97807da0077585ed6dbde8d1;hpb=4717cec4fe4cb3a086fb13161603112e8ded787e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/linespec.c b/gdb/linespec.c index e534cf2e81..9c17331a93 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1,6 +1,6 @@ /* Parser for linespec for the GNU debugger, GDB. - Copyright (C) 1986-2018 Free Software Foundation, Inc. + Copyright (C) 1986-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -44,8 +44,8 @@ #include "ada-lang.h" #include "stack.h" #include "location.h" -#include "common/function-view.h" -#include "common/def-vector.h" +#include "gdbsupport/function-view.h" +#include "gdbsupport/def-vector.h" #include /* An enumeration of the various things a user might attempt to @@ -281,8 +281,18 @@ typedef struct ls_token linespec_token; /* An instance of the linespec parser. */ -struct ls_parser +struct linespec_parser { + linespec_parser (int flags, const struct language_defn *language, + struct program_space *search_pspace, + struct symtab *default_symtab, + int default_line, + struct linespec_result *canonical); + + ~linespec_parser (); + + DISABLE_COPY_AND_ASSIGN (linespec_parser); + /* Lexer internal data */ struct { @@ -295,43 +305,42 @@ struct ls_parser /* The current token. */ linespec_token current; - } lexer; + } lexer {}; /* Is the entire linespec quote-enclosed? */ - int is_quote_enclosed; + int is_quote_enclosed = 0; /* The state of the parse. */ - struct linespec_state state; + struct linespec_state state {}; #define PARSER_STATE(PPTR) (&(PPTR)->state) /* The result of the parse. */ - struct linespec result; + struct linespec result {}; #define PARSER_RESULT(PPTR) (&(PPTR)->result) /* What the parser believes the current word point should complete to. */ - linespec_complete_what complete_what; + linespec_complete_what complete_what = linespec_complete_what::NOTHING; /* The completion word point. The parser advances this as it skips tokens. At some point the input string will end or parsing will fail, and then we attempt completion at the captured completion word point, interpreting the string at completion_word as COMPLETE_WHAT. */ - const char *completion_word; + const char *completion_word = nullptr; /* If the current token was a quoted string, then this is the quoting character (either " or '). */ - int completion_quote_char; + int completion_quote_char = 0; /* If the current token was a quoted string, then this points at the end of the quoted string. */ - const char *completion_quote_end; + const char *completion_quote_end = nullptr; /* If parsing for completion, then this points at the completion tracker. Otherwise, this is NULL. */ - struct completion_tracker *completion_tracker; + struct completion_tracker *completion_tracker = nullptr; }; -typedef struct ls_parser linespec_parser; /* A convenience macro for accessing the explicit location result of the parser. */ @@ -546,7 +555,7 @@ copy_token_string (linespec_token token) const char *str, *s; if (token.type == LSTOKEN_KEYWORD) - return gdb::unique_xmalloc_ptr (xstrdup (LS_TOKEN_KEYWORD (token))); + return make_unique_xstrdup (LS_TOKEN_KEYWORD (token)); str = LS_TOKEN_STOKEN (token).ptr; s = remove_trailing_whitespace (str, str + LS_TOKEN_STOKEN (token).length); @@ -751,7 +760,9 @@ linespec_lexer_lex_string (linespec_parser *parser) /* Do not tokenize ABI tags such as "[abi:cxx11]". */ else if (PARSER_STREAM (parser) - start > 4 && startswith (PARSER_STREAM (parser) - 4, "[abi")) - ++(PARSER_STREAM (parser)); + { + /* Nothing. */ + } /* Do not tokenify if the input length so far is one (i.e, a single-letter drive name) and the next character @@ -852,6 +863,7 @@ linespec_lexer_lex_string (linespec_parser *parser) } /* Advance the stream. */ + gdb_assert (*(PARSER_STREAM (parser)) != '\0'); ++(PARSER_STREAM (parser)); } } @@ -1121,7 +1133,6 @@ iterate_over_all_matching_symtabs struct program_space *search_pspace, bool include_inline, gdb::function_view callback) { - struct objfile *objfile; struct program_space *pspace; ALL_PSPACES (pspace) @@ -1133,46 +1144,46 @@ iterate_over_all_matching_symtabs set_current_program_space (pspace); - ALL_OBJFILES (objfile) - { - struct compunit_symtab *cu; - - if (objfile->sf) - objfile->sf->qf->expand_symtabs_matching (objfile, - NULL, - lookup_name, - NULL, NULL, - search_domain); - - ALL_OBJFILE_COMPUNITS (objfile, cu) - { - struct symtab *symtab = COMPUNIT_FILETABS (cu); + for (objfile *objfile : current_program_space->objfiles ()) + { + if (objfile->sf) + objfile->sf->qf->expand_symtabs_matching (objfile, + NULL, + lookup_name, + NULL, NULL, + search_domain); + + for (compunit_symtab *cu : objfile->compunits ()) + { + struct symtab *symtab = COMPUNIT_FILETABS (cu); - iterate_over_file_blocks (symtab, lookup_name, name_domain, callback); + iterate_over_file_blocks (symtab, lookup_name, name_domain, + callback); - if (include_inline) - { - struct block *block; - int i; + if (include_inline) + { + const struct block *block; + int i; - for (i = FIRST_LOCAL_BLOCK; - i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab)); - i++) - { - block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i); - state->language->la_iterate_over_symbols - (block, lookup_name, name_domain, [&] (block_symbol *bsym) - { - /* Restrict calls to CALLBACK to symbols - representing inline symbols only. */ - if (SYMBOL_INLINED (bsym->symbol)) - return callback (bsym); - return true; - }); - } - } - } - } + for (i = FIRST_LOCAL_BLOCK; + i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab)); + i++) + { + block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i); + state->language->la_iterate_over_symbols + (block, lookup_name, name_domain, + [&] (block_symbol *bsym) + { + /* Restrict calls to CALLBACK to symbols + representing inline symbols only. */ + if (SYMBOL_INLINED (bsym->symbol)) + return callback (bsym); + return true; + }); + } + } + } + } } } @@ -1182,16 +1193,10 @@ iterate_over_all_matching_symtabs static const struct block * get_current_search_block (void) { - const struct block *block; - enum language save_language; - /* get_selected_block can change the current language when there is no selected frame yet. */ - save_language = current_language->la_language; - block = get_selected_block (0); - set_language (save_language); - - return block; + scoped_restore_current_language save_language; + return get_selected_block (0); } /* Iterate over static and global blocks. */ @@ -1201,7 +1206,7 @@ iterate_over_file_blocks (struct symtab *symtab, const lookup_name_info &name, domain_enum domain, gdb::function_view callback) { - struct block *block; + const struct block *block; for (block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK); block != NULL; @@ -1242,17 +1247,6 @@ find_methods (struct type *t, enum language t_lang, const char *name, --method_counter) { const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter); - char dem_opname[64]; - - if (startswith (method_name, "__") || - startswith (method_name, "op") || - startswith (method_name, "type")) - { - if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI)) - method_name = dem_opname; - else if (cplus_demangle_opname (method_name, dem_opname, 0)) - method_name = dem_opname; - } if (symbol_name_compare (method_name, lookup_name, NULL)) { @@ -1448,7 +1442,7 @@ convert_results_to_lsals (struct linespec_state *self, /* A structure that contains two string representations of a struct linespec_canonical_name: - - one where the the symtab's fullname is used; + - one where the symtab's fullname is used; - one where the filename followed the "set filename-display" setting. */ @@ -1495,7 +1489,7 @@ decode_line_2 (struct linespec_state *self, std::vector *result, const char *select_mode) { - char *args; + const char *args; const char *prompt; int i; std::vector filters; @@ -2072,8 +2066,7 @@ canonicalize_linespec (struct linespec_state *state, const linespec_p ls) gdb_assert (!ls->labels.function_symbols->empty () && (ls->labels.function_symbols->size () == 1)); block_symbol s = ls->labels.function_symbols->front (); - explicit_loc->function_name - = xstrdup (SYMBOL_NATURAL_NAME (s.symbol)); + explicit_loc->function_name = xstrdup (s.symbol->natural_name ()); } } @@ -2105,16 +2098,14 @@ create_sals_line_offset (struct linespec_state *self, if (ls->file_symtabs->size () == 1 && ls->file_symtabs->front () == nullptr) { - const char *fullname; - set_current_program_space (self->program_space); /* Make sure we have at least a default source line. */ set_default_source_symtab_and_line (); initialize_defaults (&self->default_symtab, &self->default_line); - fullname = symtab_to_fullname (self->default_symtab); *ls->file_symtabs - = collect_symtabs_from_filename (fullname, self->search_pspace); + = collect_symtabs_from_filename (self->default_symtab->filename, + self->search_pspace); use_default = 1; } @@ -2203,7 +2194,7 @@ create_sals_line_offset (struct linespec_state *self, skip_prologue_sal (&intermediate_results[i]); intermediate_results[i].symbol = sym; add_sal_to_sals (self, &values, &intermediate_results[i], - sym ? SYMBOL_NATURAL_NAME (sym) : NULL, 0); + sym ? sym->natural_name () : NULL, 0); } } @@ -2258,7 +2249,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls) if (symbol_to_sal (&sal, state->funfirstline, sym.symbol) && maybe_add_address (state->addr_set, pspace, sal.pc)) add_sal_to_sals (state, &sals, &sal, - SYMBOL_NATURAL_NAME (sym.symbol), 0); + sym.symbol->natural_name (), 0); } } else if (ls->function_symbols != NULL || ls->minimal_symbols != NULL) @@ -2323,7 +2314,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls) if (symbol_to_sal (&sal, state->funfirstline, sym.symbol) && maybe_add_address (state->addr_set, pspace, sal.pc)) add_sal_to_sals (state, &sals, &sal, - SYMBOL_NATURAL_NAME (sym.symbol), 0); + sym.symbol->natural_name (), 0); } } } @@ -2394,16 +2385,15 @@ convert_explicit_location_to_linespec (struct linespec_state *self, if (source_filename != NULL) { - TRY + try { *result->file_symtabs = symtabs_from_filename (source_filename, self->search_pspace); } - CATCH (except, RETURN_MASK_ERROR) + catch (const gdb_exception_error &except) { source_file_not_found_error (source_filename); } - END_CATCH result->explicit_loc.source_filename = xstrdup (source_filename); } else @@ -2520,7 +2510,7 @@ parse_linespec (linespec_parser *parser, const char *arg, symbol_name_match_type match_type) { linespec_token token; - struct gdb_exception file_exception = exception_none; + struct gdb_exception file_exception; /* A special case to start. It has become quite popular for IDEs to work around bugs in the previous parser by quoting @@ -2619,17 +2609,16 @@ parse_linespec (linespec_parser *parser, const char *arg, gdb::unique_xmalloc_ptr user_filename = copy_token_string (token); /* Check if the input is a filename. */ - TRY + try { *PARSER_RESULT (parser)->file_symtabs = symtabs_from_filename (user_filename.get (), PARSER_STATE (parser)->search_pspace); } - CATCH (ex, RETURN_MASK_ERROR) + catch (gdb_exception_error &ex) { - file_exception = ex; + file_exception = std::move (ex); } - END_CATCH if (file_exception.reason >= 0) { @@ -2676,7 +2665,7 @@ parse_linespec (linespec_parser *parser, const char *arg, /* The linespec didn't parse. Re-throw the file exception if there was one. */ if (file_exception.reason < 0) - throw_exception (file_exception); + throw_exception (std::move (file_exception)); /* Otherwise, the symbol is not found. */ symbol_not_found_error (PARSER_EXPLICIT (parser)->function_name, @@ -2735,22 +2724,19 @@ linespec_state_constructor (struct linespec_state *self, /* Initialize a new linespec parser. */ -static void -linespec_parser_new (linespec_parser *parser, - int flags, const struct language_defn *language, - struct program_space *search_pspace, - struct symtab *default_symtab, - int default_line, - struct linespec_result *canonical) +linespec_parser::linespec_parser (int flags, + const struct language_defn *language, + struct program_space *search_pspace, + struct symtab *default_symtab, + int default_line, + struct linespec_result *canonical) { - memset (parser, 0, sizeof (linespec_parser)); - parser->lexer.current.type = LSTOKEN_CONSUMED; - memset (PARSER_RESULT (parser), 0, sizeof (struct linespec)); - PARSER_RESULT (parser)->file_symtabs = new std::vector (); - PARSER_EXPLICIT (parser)->func_name_match_type + lexer.current.type = LSTOKEN_CONSUMED; + PARSER_RESULT (this)->file_symtabs = new std::vector (); + PARSER_EXPLICIT (this)->func_name_match_type = symbol_name_match_type::WILD; - PARSER_EXPLICIT (parser)->line_offset.sign = LINE_OFFSET_UNKNOWN; - linespec_state_constructor (PARSER_STATE (parser), flags, language, + PARSER_EXPLICIT (this)->line_offset.sign = LINE_OFFSET_UNKNOWN; + linespec_state_constructor (PARSER_STATE (this), flags, language, search_pspace, default_symtab, default_line, canonical); } @@ -2761,26 +2747,24 @@ static void linespec_state_destructor (struct linespec_state *self) { htab_delete (self->addr_set); + xfree (self->canonical_names); } /* Delete a linespec parser. */ -static void -linespec_parser_delete (void *arg) +linespec_parser::~linespec_parser () { - linespec_parser *parser = (linespec_parser *) arg; - - xfree (PARSER_EXPLICIT (parser)->source_filename); - xfree (PARSER_EXPLICIT (parser)->label_name); - xfree (PARSER_EXPLICIT (parser)->function_name); + xfree (PARSER_EXPLICIT (this)->source_filename); + xfree (PARSER_EXPLICIT (this)->label_name); + xfree (PARSER_EXPLICIT (this)->function_name); - delete PARSER_RESULT (parser)->file_symtabs; - delete PARSER_RESULT (parser)->function_symbols; - delete PARSER_RESULT (parser)->minimal_symbols; - delete PARSER_RESULT (parser)->labels.label_symbols; - delete PARSER_RESULT (parser)->labels.function_symbols; + delete PARSER_RESULT (this)->file_symtabs; + delete PARSER_RESULT (this)->function_symbols; + delete PARSER_RESULT (this)->minimal_symbols; + delete PARSER_RESULT (this)->labels.label_symbols; + delete PARSER_RESULT (this)->labels.function_symbols; - linespec_state_destructor (PARSER_STATE (parser)); + linespec_state_destructor (PARSER_STATE (this)); } /* See description in linespec.h. */ @@ -2788,16 +2772,13 @@ linespec_parser_delete (void *arg) void linespec_lex_to_end (const char **stringp) { - linespec_parser parser; - struct cleanup *cleanup; linespec_token token; const char *orig; if (stringp == NULL || *stringp == NULL) return; - linespec_parser_new (&parser, 0, current_language, NULL, NULL, 0, NULL); - cleanup = make_cleanup (linespec_parser_delete, &parser); + linespec_parser parser (0, current_language, NULL, NULL, 0, NULL); parser.lexer.saved_arg = *stringp; PARSER_STREAM (&parser) = orig = *stringp; @@ -2813,7 +2794,6 @@ linespec_lex_to_end (const char **stringp) while (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD); *stringp += PARSER_STREAM (&parser) - orig; - do_cleanups (cleanup); } /* See linespec.h. */ @@ -2922,7 +2902,7 @@ complete_label (completion_tracker &tracker, { for (const auto &label : *labels) { - char *match = xstrdup (SYMBOL_SEARCH_NAME (label.symbol)); + char *match = xstrdup (label.symbol->search_name ()); tracker.add_completion (gdb::unique_xmalloc_ptr (match)); } delete labels; @@ -2939,15 +2919,11 @@ linespec_complete_label (completion_tracker &tracker, symbol_name_match_type func_name_match_type, const char *label_name) { - linespec_parser parser; - struct cleanup *cleanup; - - linespec_parser_new (&parser, 0, language, NULL, NULL, 0, NULL); - cleanup = make_cleanup (linespec_parser_delete, &parser); + linespec_parser parser (0, language, NULL, NULL, 0, NULL); line_offset unknown_offset = { 0, LINE_OFFSET_UNKNOWN }; - TRY + try { convert_explicit_location_to_linespec (PARSER_STATE (&parser), PARSER_RESULT (&parser), @@ -2956,16 +2932,12 @@ linespec_complete_label (completion_tracker &tracker, func_name_match_type, NULL, unknown_offset); } - CATCH (ex, RETURN_MASK_ERROR) + catch (const gdb_exception_error &ex) { - do_cleanups (cleanup); return; } - END_CATCH complete_label (tracker, &parser, label_name); - - do_cleanups (cleanup); } /* See description in linespec.h. */ @@ -2974,12 +2946,9 @@ void linespec_complete (completion_tracker &tracker, const char *text, symbol_name_match_type match_type) { - linespec_parser parser; - struct cleanup *cleanup; const char *orig = text; - linespec_parser_new (&parser, 0, current_language, NULL, NULL, 0, NULL); - cleanup = make_cleanup (linespec_parser_delete, &parser); + linespec_parser parser (0, current_language, NULL, NULL, 0, NULL); parser.lexer.saved_arg = text; PARSER_EXPLICIT (&parser)->func_name_match_type = match_type; PARSER_STREAM (&parser) = text; @@ -2989,14 +2958,13 @@ linespec_complete (completion_tracker &tracker, const char *text, /* Parse as much as possible. parser.completion_word will hold furthest completion point we managed to parse to. */ - TRY + try { parse_linespec (&parser, text, match_type); } - CATCH (except, RETURN_MASK_ERROR) + catch (const gdb_exception_error &except) { } - END_CATCH if (parser.completion_quote_char != '\0' && parser.completion_quote_end != NULL @@ -3162,8 +3130,6 @@ linespec_complete (completion_tracker &tracker, const char *text, NULL); } } - - do_cleanups (cleanup); } /* A helper function for decode_line_full and decode_line_1 to @@ -3180,17 +3146,16 @@ event_location_to_sals (linespec_parser *parser, case LINESPEC_LOCATION: { PARSER_STATE (parser)->is_linespec = 1; - TRY + try { const linespec_location *ls = get_linespec_location (location); result = parse_linespec (parser, ls->spec_string, ls->match_type); } - CATCH (except, RETURN_MASK_ERROR) + catch (const gdb_exception_error &except) { - throw_exception (except); + throw; } - END_CATCH } break; @@ -3245,9 +3210,7 @@ decode_line_full (const struct event_location *location, int flags, const char *select_mode, const char *filter) { - struct cleanup *cleanups; std::vector filters; - linespec_parser parser; struct linespec_state *state; gdb_assert (canonical != NULL); @@ -3259,10 +3222,9 @@ decode_line_full (const struct event_location *location, int flags, || select_mode == multiple_symbols_cancel); gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0); - linespec_parser_new (&parser, flags, current_language, - search_pspace, default_symtab, - default_line, canonical); - cleanups = make_cleanup (linespec_parser_delete, &parser); + linespec_parser parser (flags, current_language, + search_pspace, default_symtab, + default_line, canonical); scoped_restore_current_program_space restore_pspace; @@ -3274,16 +3236,11 @@ decode_line_full (const struct event_location *location, int flags, canonical->pre_expanded = 1; /* Arrange for allocated canonical names to be freed. */ - if (!result.empty ()) + std::vector> hold_names; + for (int i = 0; i < result.size (); ++i) { - int i; - - make_cleanup (xfree, state->canonical_names); - for (i = 0; i < result.size (); ++i) - { - gdb_assert (state->canonical_names[i].suffix != NULL); - make_cleanup (xfree, state->canonical_names[i].suffix); - } + gdb_assert (state->canonical_names[i].suffix != NULL); + hold_names.emplace_back (state->canonical_names[i].suffix); } if (select_mode == NULL) @@ -3306,8 +3263,6 @@ decode_line_full (const struct event_location *location, int flags, } else decode_line_2 (state, &result, select_mode); - - do_cleanups (cleanups); } /* See linespec.h. */ @@ -3318,21 +3273,13 @@ decode_line_1 (const struct event_location *location, int flags, struct symtab *default_symtab, int default_line) { - linespec_parser parser; - struct cleanup *cleanups; - - linespec_parser_new (&parser, flags, current_language, - search_pspace, default_symtab, - default_line, NULL); - cleanups = make_cleanup (linespec_parser_delete, &parser); + linespec_parser parser (flags, current_language, + search_pspace, default_symtab, + default_line, NULL); scoped_restore_current_program_space restore_pspace; - std::vector result = event_location_to_sals (&parser, - location); - - do_cleanups (cleanups); - return result; + return event_location_to_sals (&parser, location); } /* See linespec.h. */ @@ -3373,8 +3320,7 @@ decode_line_with_last_displayed (const char *string, int flags) ? decode_line_1 (location.get (), flags, NULL, get_last_displayed_symtab (), get_last_displayed_line ()) - : decode_line_1 (location.get (), flags, NULL, - (struct symtab *) NULL, 0)); + : decode_line_1 (location.get (), flags, NULL, NULL, 0)); if (*string) error (_("Junk at end of line specification: %s"), string); @@ -3384,7 +3330,7 @@ decode_line_with_last_displayed (const char *string, int flags) -/* First, some functions to initialize stuff at the beggining of the +/* First, some functions to initialize stuff at the beginning of the function. */ static void @@ -3737,7 +3683,7 @@ find_method (struct linespec_state *self, std::vector *file_symtabs, gdb_assert (!pspace->executing_startup); set_current_program_space (pspace); t = check_typedef (SYMBOL_TYPE (sym)); - find_methods (t, SYMBOL_LANGUAGE (sym), + find_methods (t, sym->language (), method_name, &result_names, &superclass_vec); /* Handle all items from a single program space at once; and be @@ -3750,7 +3696,7 @@ find_method (struct linespec_state *self, std::vector *file_symtabs, this program space, consider superclasses. */ if (result_names.size () == last_result_len) find_superclass_methods (std::move (superclass_vec), method_name, - SYMBOL_LANGUAGE (sym), &result_names); + sym->language (), &result_names); /* We have a list of candidate symbol names, so now we iterate over the symbol tables looking for all @@ -4009,7 +3955,7 @@ find_linespec_symbols (struct linespec_state *state, if (!classes.empty ()) { /* Now locate a list of suitable methods named METHOD. */ - TRY + try { find_method (state, file_symtabs, klass.c_str (), method.c_str (), @@ -4018,12 +3964,11 @@ find_linespec_symbols (struct linespec_state *state, /* If successful, we're done. If NOT_FOUND_ERROR was not thrown, rethrow the exception that we did get. */ - CATCH (except, RETURN_MASK_ERROR) + catch (const gdb_exception_error &except) { if (except.error != NOT_FOUND_ERROR) - throw_exception (except); + throw; } - END_CATCH } } } @@ -4053,9 +3998,9 @@ find_label_symbols_in_block (const struct block *block, ALL_BLOCK_SYMBOLS (block, iter, sym) { - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), LABEL_DOMAIN) - && cmp (SYMBOL_SEARCH_NAME (sym), name, name_len) == 0) + && cmp (sym->search_name (), name, name_len) == 0) { result->push_back ({sym, block}); label_funcs_ret->push_back ({fn_sym, block}); @@ -4155,7 +4100,7 @@ decode_digits_list_mode (struct linespec_state *self, val.symtab = elt; val.pspace = SYMTAB_PSPACE (elt); val.pc = 0; - val.explicit_line = 1; + val.explicit_line = true; add_sal_to_sals (self, &values, &val, NULL, 0); } @@ -4163,8 +4108,9 @@ decode_digits_list_mode (struct linespec_state *self, return values; } -/* A helper for create_sals_line_offset that iterates over the symtabs, - adding lines to the VEC. */ +/* A helper for create_sals_line_offset that iterates over the symtabs + associated with LS and returns a vector of corresponding symtab_and_line + structures. */ static std::vector decode_digits_ordinary (struct linespec_state *self, @@ -4189,6 +4135,7 @@ decode_digits_ordinary (struct linespec_state *self, sal.pspace = SYMTAB_PSPACE (elt); sal.symtab = elt; sal.line = line; + sal.explicit_line = true; sal.pc = pc; sals.push_back (std::move (sal)); } @@ -4273,7 +4220,7 @@ minsym_found (struct linespec_state *self, struct objfile *objfile, if (is_function) { - const char *msym_name = MSYMBOL_LINKAGE_NAME (msymbol); + const char *msym_name = msymbol->linkage_name (); if (MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc || MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc) @@ -4302,7 +4249,7 @@ minsym_found (struct linespec_state *self, struct objfile *objfile, sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol); if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc)) - add_sal_to_sals (self, result, &sal, MSYMBOL_NATURAL_NAME (msymbol), 0); + add_sal_to_sals (self, result, &sal, msymbol->natural_name (), 0); } /* A helper function to classify a minimal_symbol_type according to @@ -4392,8 +4339,6 @@ search_minsyms_for_name (struct collect_info *info, ALL_PSPACES (pspace) { - struct objfile *objfile; - if (search_pspace != NULL && search_pspace != pspace) continue; if (pspace->executing_startup) @@ -4401,17 +4346,17 @@ search_minsyms_for_name (struct collect_info *info, set_current_program_space (pspace); - ALL_OBJFILES (objfile) - { - iterate_over_minimal_symbols (objfile, name, - [&] (struct minimal_symbol *msym) + for (objfile *objfile : current_program_space->objfiles ()) + { + iterate_over_minimal_symbols (objfile, name, + [&] (struct minimal_symbol *msym) { add_minsym (msym, objfile, nullptr, info->state->list_mode, &minsyms); return false; }); - } + } } } else