Remove cleanups from linespec.c
[external/binutils.git] / gdb / linespec.c
1 /* Parser for linespec for the GNU debugger, GDB.
2
3    Copyright (C) 1986-2019 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "symtab.h"
22 #include "frame.h"
23 #include "command.h"
24 #include "symfile.h"
25 #include "objfiles.h"
26 #include "source.h"
27 #include "demangle.h"
28 #include "value.h"
29 #include "completer.h"
30 #include "cp-abi.h"
31 #include "cp-support.h"
32 #include "parser-defs.h"
33 #include "block.h"
34 #include "objc-lang.h"
35 #include "linespec.h"
36 #include "language.h"
37 #include "interps.h"
38 #include "mi/mi-cmds.h"
39 #include "target.h"
40 #include "arch-utils.h"
41 #include <ctype.h>
42 #include "cli/cli-utils.h"
43 #include "filenames.h"
44 #include "ada-lang.h"
45 #include "stack.h"
46 #include "location.h"
47 #include "common/function-view.h"
48 #include "common/def-vector.h"
49 #include <algorithm>
50
51 /* An enumeration of the various things a user might attempt to
52    complete for a linespec location.  */
53
54 enum class linespec_complete_what
55 {
56   /* Nothing, no possible completion.  */
57   NOTHING,
58
59   /* A function/method name.  Due to ambiguity between
60
61        (gdb) b source[TAB]
62        source_file.c
63        source_function
64
65      this can also indicate a source filename, iff we haven't seen a
66      separate source filename component, as in "b source.c:function".  */
67   FUNCTION,
68
69   /* A label symbol.  E.g., break file.c:function:LABEL.  */
70   LABEL,
71
72   /* An expression.  E.g., "break foo if EXPR", or "break *EXPR".  */
73   EXPRESSION,
74
75   /* A linespec keyword ("if"/"thread"/"task").
76      E.g., "break func threa<tab>".  */
77   KEYWORD,
78 };
79
80 /* An address entry is used to ensure that any given location is only
81    added to the result a single time.  It holds an address and the
82    program space from which the address came.  */
83
84 struct address_entry
85 {
86   struct program_space *pspace;
87   CORE_ADDR addr;
88 };
89
90 /* A linespec.  Elements of this structure are filled in by a parser
91    (either parse_linespec or some other function).  The structure is
92    then converted into SALs by convert_linespec_to_sals.  */
93
94 struct linespec
95 {
96   /* An explicit location describing the SaLs.  */
97   struct explicit_location explicit_loc;
98
99   /* The list of symtabs to search to which to limit the search.  May not
100      be NULL.  If explicit.SOURCE_FILENAME is NULL (no user-specified
101      filename), FILE_SYMTABS should contain one single NULL member.  This
102      will cause the code to use the default symtab.  */
103   std::vector<symtab *> *file_symtabs;
104
105   /* A list of matching function symbols and minimal symbols.  Both lists
106      may be NULL (or empty) if no matching symbols were found.  */
107   std::vector<block_symbol> *function_symbols;
108   std::vector<bound_minimal_symbol> *minimal_symbols;
109
110   /* A structure of matching label symbols and the corresponding
111      function symbol in which the label was found.  Both may be NULL
112      or both must be non-NULL.  */
113   struct
114   {
115     std::vector<block_symbol> *label_symbols;
116     std::vector<block_symbol> *function_symbols;
117   } labels;
118 };
119 typedef struct linespec *linespec_p;
120
121 /* A canonical linespec represented as a symtab-related string.
122
123    Each entry represents the "SYMTAB:SUFFIX" linespec string.
124    SYMTAB can be converted for example by symtab_to_fullname or
125    symtab_to_filename_for_display as needed.  */
126
127 struct linespec_canonical_name
128 {
129   /* Remaining text part of the linespec string.  */
130   char *suffix;
131
132   /* If NULL then SUFFIX is the whole linespec string.  */
133   struct symtab *symtab;
134 };
135
136 /* An instance of this is used to keep all state while linespec
137    operates.  This instance is passed around as a 'this' pointer to
138    the various implementation methods.  */
139
140 struct linespec_state
141 {
142   /* The language in use during linespec processing.  */
143   const struct language_defn *language;
144
145   /* The program space as seen when the module was entered.  */
146   struct program_space *program_space;
147
148   /* If not NULL, the search is restricted to just this program
149      space.  */
150   struct program_space *search_pspace;
151
152   /* The default symtab to use, if no other symtab is specified.  */
153   struct symtab *default_symtab;
154
155   /* The default line to use.  */
156   int default_line;
157
158   /* The 'funfirstline' value that was passed in to decode_line_1 or
159      decode_line_full.  */
160   int funfirstline;
161
162   /* Nonzero if we are running in 'list' mode; see decode_line_list.  */
163   int list_mode;
164
165   /* The 'canonical' value passed to decode_line_full, or NULL.  */
166   struct linespec_result *canonical;
167
168   /* Canonical strings that mirror the std::vector<symtab_and_line> result.  */
169   struct linespec_canonical_name *canonical_names;
170
171   /* This is a set of address_entry objects which is used to prevent
172      duplicate symbols from being entered into the result.  */
173   htab_t addr_set;
174
175   /* Are we building a linespec?  */
176   int is_linespec;
177 };
178
179 /* This is a helper object that is used when collecting symbols into a
180    result.  */
181
182 struct collect_info
183 {
184   /* The linespec object in use.  */
185   struct linespec_state *state;
186
187   /* A list of symtabs to which to restrict matches.  */
188   std::vector<symtab *> *file_symtabs;
189
190   /* The result being accumulated.  */
191   struct
192   {
193     std::vector<block_symbol> *symbols;
194     std::vector<bound_minimal_symbol> *minimal_symbols;
195   } result;
196
197   /* Possibly add a symbol to the results.  */
198   virtual bool add_symbol (block_symbol *bsym);
199 };
200
201 bool
202 collect_info::add_symbol (block_symbol *bsym)
203 {
204   /* In list mode, add all matching symbols, regardless of class.
205      This allows the user to type "list a_global_variable".  */
206   if (SYMBOL_CLASS (bsym->symbol) == LOC_BLOCK || this->state->list_mode)
207     this->result.symbols->push_back (*bsym);
208
209   /* Continue iterating.  */
210   return true;
211 }
212
213 /* Custom collect_info for symbol_searcher.  */
214
215 struct symbol_searcher_collect_info
216   : collect_info
217 {
218   bool add_symbol (block_symbol *bsym) override
219   {
220     /* Add everything.  */
221     this->result.symbols->push_back (*bsym);
222
223     /* Continue iterating.  */
224     return true;
225   }
226 };
227
228 /* Token types  */
229
230 enum ls_token_type
231 {
232   /* A keyword  */
233   LSTOKEN_KEYWORD = 0,
234
235   /* A colon "separator"  */
236   LSTOKEN_COLON,
237
238   /* A string  */
239   LSTOKEN_STRING,
240
241   /* A number  */
242   LSTOKEN_NUMBER,
243
244   /* A comma  */
245   LSTOKEN_COMMA,
246
247   /* EOI (end of input)  */
248   LSTOKEN_EOI,
249
250   /* Consumed token  */
251   LSTOKEN_CONSUMED
252 };
253 typedef enum ls_token_type linespec_token_type;
254
255 /* List of keywords.  This is NULL-terminated so that it can be used
256    as enum completer.  */
257 const char * const linespec_keywords[] = { "if", "thread", "task", NULL };
258 #define IF_KEYWORD_INDEX 0
259
260 /* A token of the linespec lexer  */
261
262 struct ls_token
263 {
264   /* The type of the token  */
265   linespec_token_type type;
266
267   /* Data for the token  */
268   union
269   {
270     /* A string, given as a stoken  */
271     struct stoken string;
272
273     /* A keyword  */
274     const char *keyword;
275   } data;
276 };
277 typedef struct ls_token linespec_token;
278
279 #define LS_TOKEN_STOKEN(TOK) (TOK).data.string
280 #define LS_TOKEN_KEYWORD(TOK) (TOK).data.keyword
281
282 /* An instance of the linespec parser.  */
283
284 struct linespec_parser
285 {
286   linespec_parser (int flags, const struct language_defn *language,
287                    struct program_space *search_pspace,
288                    struct symtab *default_symtab,
289                    int default_line,
290                    struct linespec_result *canonical);
291
292   ~linespec_parser ();
293
294   DISABLE_COPY_AND_ASSIGN (linespec_parser);
295
296   /* Lexer internal data  */
297   struct
298   {
299     /* Save head of input stream.  */
300     const char *saved_arg;
301
302     /* Head of the input stream.  */
303     const char *stream;
304 #define PARSER_STREAM(P) ((P)->lexer.stream)
305
306     /* The current token.  */
307     linespec_token current;
308   } lexer {};
309
310   /* Is the entire linespec quote-enclosed?  */
311   int is_quote_enclosed = 0;
312
313   /* The state of the parse.  */
314   struct linespec_state state {};
315 #define PARSER_STATE(PPTR) (&(PPTR)->state)
316
317   /* The result of the parse.  */
318   struct linespec result {};
319 #define PARSER_RESULT(PPTR) (&(PPTR)->result)
320
321   /* What the parser believes the current word point should complete
322      to.  */
323   linespec_complete_what complete_what = linespec_complete_what::NOTHING;
324
325   /* The completion word point.  The parser advances this as it skips
326      tokens.  At some point the input string will end or parsing will
327      fail, and then we attempt completion at the captured completion
328      word point, interpreting the string at completion_word as
329      COMPLETE_WHAT.  */
330   const char *completion_word = nullptr;
331
332   /* If the current token was a quoted string, then this is the
333      quoting character (either " or ').  */
334   int completion_quote_char = 0;
335
336   /* If the current token was a quoted string, then this points at the
337      end of the quoted string.  */
338   const char *completion_quote_end = nullptr;
339
340   /* If parsing for completion, then this points at the completion
341      tracker.  Otherwise, this is NULL.  */
342   struct completion_tracker *completion_tracker = nullptr;
343 };
344
345 /* A convenience macro for accessing the explicit location result of
346    the parser.  */
347 #define PARSER_EXPLICIT(PPTR) (&PARSER_RESULT ((PPTR))->explicit_loc)
348
349 /* Prototypes for local functions.  */
350
351 static void iterate_over_file_blocks
352   (struct symtab *symtab, const lookup_name_info &name,
353    domain_enum domain,
354    gdb::function_view<symbol_found_callback_ftype> callback);
355
356 static void initialize_defaults (struct symtab **default_symtab,
357                                  int *default_line);
358
359 CORE_ADDR linespec_expression_to_pc (const char **exp_ptr);
360
361 static std::vector<symtab_and_line> decode_objc (struct linespec_state *self,
362                                                  linespec_p ls,
363                                                  const char *arg);
364
365 static std::vector<symtab *> symtabs_from_filename
366   (const char *, struct program_space *pspace);
367
368 static std::vector<block_symbol> *find_label_symbols
369   (struct linespec_state *self, std::vector<block_symbol> *function_symbols,
370    std::vector<block_symbol> *label_funcs_ret, const char *name,
371    bool completion_mode = false);
372
373 static void find_linespec_symbols (struct linespec_state *self,
374                                    std::vector<symtab *> *file_symtabs,
375                                    const char *name,
376                                    symbol_name_match_type name_match_type,
377                                    std::vector<block_symbol> *symbols,
378                                    std::vector<bound_minimal_symbol> *minsyms);
379
380 static struct line_offset
381      linespec_parse_variable (struct linespec_state *self,
382                               const char *variable);
383
384 static int symbol_to_sal (struct symtab_and_line *result,
385                           int funfirstline, struct symbol *sym);
386
387 static void add_matching_symbols_to_info (const char *name,
388                                           symbol_name_match_type name_match_type,
389                                           enum search_domain search_domain,
390                                           struct collect_info *info,
391                                           struct program_space *pspace);
392
393 static void add_all_symbol_names_from_pspace
394     (struct collect_info *info, struct program_space *pspace,
395      const std::vector<const char *> &names, enum search_domain search_domain);
396
397 static std::vector<symtab *>
398   collect_symtabs_from_filename (const char *file,
399                                  struct program_space *pspace);
400
401 static std::vector<symtab_and_line> decode_digits_ordinary
402   (struct linespec_state *self,
403    linespec_p ls,
404    int line,
405    linetable_entry **best_entry);
406
407 static std::vector<symtab_and_line> decode_digits_list_mode
408   (struct linespec_state *self,
409    linespec_p ls,
410    struct symtab_and_line val);
411
412 static void minsym_found (struct linespec_state *self, struct objfile *objfile,
413                           struct minimal_symbol *msymbol,
414                           std::vector<symtab_and_line> *result);
415
416 static bool compare_symbols (const block_symbol &a, const block_symbol &b);
417
418 static bool compare_msymbols (const bound_minimal_symbol &a,
419                               const bound_minimal_symbol &b);
420
421 /* Permitted quote characters for the parser.  This is different from the
422    completer's quote characters to allow backward compatibility with the
423    previous parser.  */
424 static const char *const linespec_quote_characters = "\"\'";
425
426 /* Lexer functions.  */
427
428 /* Lex a number from the input in PARSER.  This only supports
429    decimal numbers.
430
431    Return true if input is decimal numbers.  Return false if not.  */
432
433 static int
434 linespec_lexer_lex_number (linespec_parser *parser, linespec_token *tokenp)
435 {
436   tokenp->type = LSTOKEN_NUMBER;
437   LS_TOKEN_STOKEN (*tokenp).length = 0;
438   LS_TOKEN_STOKEN (*tokenp).ptr = PARSER_STREAM (parser);
439
440   /* Keep any sign at the start of the stream.  */
441   if (*PARSER_STREAM (parser) == '+' || *PARSER_STREAM (parser) == '-')
442     {
443       ++LS_TOKEN_STOKEN (*tokenp).length;
444       ++(PARSER_STREAM (parser));
445     }
446
447   while (isdigit (*PARSER_STREAM (parser)))
448     {
449       ++LS_TOKEN_STOKEN (*tokenp).length;
450       ++(PARSER_STREAM (parser));
451     }
452
453   /* If the next character in the input buffer is not a space, comma,
454      quote, or colon, this input does not represent a number.  */
455   if (*PARSER_STREAM (parser) != '\0'
456       && !isspace (*PARSER_STREAM (parser)) && *PARSER_STREAM (parser) != ','
457       && *PARSER_STREAM (parser) != ':'
458       && !strchr (linespec_quote_characters, *PARSER_STREAM (parser)))
459     {
460       PARSER_STREAM (parser) = LS_TOKEN_STOKEN (*tokenp).ptr;
461       return 0;
462     }
463
464   return 1;
465 }
466
467 /* See linespec.h.  */
468
469 const char *
470 linespec_lexer_lex_keyword (const char *p)
471 {
472   int i;
473
474   if (p != NULL)
475     {
476       for (i = 0; linespec_keywords[i] != NULL; ++i)
477         {
478           int len = strlen (linespec_keywords[i]);
479
480           /* If P begins with one of the keywords and the next
481              character is whitespace, we may have found a keyword.
482              It is only a keyword if it is not followed by another
483              keyword.  */
484           if (strncmp (p, linespec_keywords[i], len) == 0
485               && isspace (p[len]))
486             {
487               int j;
488
489               /* Special case: "if" ALWAYS stops the lexer, since it
490                  is not possible to predict what is going to appear in
491                  the condition, which can only be parsed after SaLs have
492                  been found.  */
493               if (i != IF_KEYWORD_INDEX)
494                 {
495                   p += len;
496                   p = skip_spaces (p);
497                   for (j = 0; linespec_keywords[j] != NULL; ++j)
498                     {
499                       int nextlen = strlen (linespec_keywords[j]);
500
501                       if (strncmp (p, linespec_keywords[j], nextlen) == 0
502                           && isspace (p[nextlen]))
503                         return NULL;
504                     }
505                 }
506
507               return linespec_keywords[i];
508             }
509         }
510     }
511
512   return NULL;
513 }
514
515 /*  See description in linespec.h.  */
516
517 int
518 is_ada_operator (const char *string)
519 {
520   const struct ada_opname_map *mapping;
521
522   for (mapping = ada_opname_table;
523        mapping->encoded != NULL
524          && !startswith (string, mapping->decoded); ++mapping)
525     ;
526
527   return mapping->decoded == NULL ? 0 : strlen (mapping->decoded);
528 }
529
530 /* Find QUOTE_CHAR in STRING, accounting for the ':' terminal.  Return
531    the location of QUOTE_CHAR, or NULL if not found.  */
532
533 static const char *
534 skip_quote_char (const char *string, char quote_char)
535 {
536   const char *p, *last;
537
538   p = last = find_toplevel_char (string, quote_char);
539   while (p && *p != '\0' && *p != ':')
540     {
541       p = find_toplevel_char (p, quote_char);
542       if (p != NULL)
543         last = p++;
544     }
545
546   return last;
547 }
548
549 /* Make a writable copy of the string given in TOKEN, trimming
550    any trailing whitespace.  */
551
552 static gdb::unique_xmalloc_ptr<char>
553 copy_token_string (linespec_token token)
554 {
555   const char *str, *s;
556
557   if (token.type == LSTOKEN_KEYWORD)
558     return gdb::unique_xmalloc_ptr<char> (xstrdup (LS_TOKEN_KEYWORD (token)));
559
560   str = LS_TOKEN_STOKEN (token).ptr;
561   s = remove_trailing_whitespace (str, str + LS_TOKEN_STOKEN (token).length);
562
563   return gdb::unique_xmalloc_ptr<char> (savestring (str, s - str));
564 }
565
566 /* Does P represent the end of a quote-enclosed linespec?  */
567
568 static int
569 is_closing_quote_enclosed (const char *p)
570 {
571   if (strchr (linespec_quote_characters, *p))
572     ++p;
573   p = skip_spaces ((char *) p);
574   return (*p == '\0' || linespec_lexer_lex_keyword (p));
575 }
576
577 /* Find the end of the parameter list that starts with *INPUT.
578    This helper function assists with lexing string segments
579    which might contain valid (non-terminating) commas.  */
580
581 static const char *
582 find_parameter_list_end (const char *input)
583 {
584   char end_char, start_char;
585   int depth;
586   const char *p;
587
588   start_char = *input;
589   if (start_char == '(')
590     end_char = ')';
591   else if (start_char == '<')
592     end_char = '>';
593   else
594     return NULL;
595
596   p = input;
597   depth = 0;
598   while (*p)
599     {
600       if (*p == start_char)
601         ++depth;
602       else if (*p == end_char)
603         {
604           if (--depth == 0)
605             {
606               ++p;
607               break;
608             }
609         }
610       ++p;
611     }
612
613   return p;
614 }
615
616 /* If the [STRING, STRING_LEN) string ends with what looks like a
617    keyword, return the keyword start offset in STRING.  Return -1
618    otherwise.  */
619
620 static size_t
621 string_find_incomplete_keyword_at_end (const char * const *keywords,
622                                        const char *string, size_t string_len)
623 {
624   const char *end = string + string_len;
625   const char *p = end;
626
627   while (p > string && *p != ' ')
628     --p;
629   if (p > string)
630     {
631       p++;
632       size_t len = end - p;
633       for (size_t i = 0; keywords[i] != NULL; ++i)
634         if (strncmp (keywords[i], p, len) == 0)
635           return p - string;
636     }
637
638   return -1;
639 }
640
641 /* Lex a string from the input in PARSER.  */
642
643 static linespec_token
644 linespec_lexer_lex_string (linespec_parser *parser)
645 {
646   linespec_token token;
647   const char *start = PARSER_STREAM (parser);
648
649   token.type = LSTOKEN_STRING;
650
651   /* If the input stream starts with a quote character, skip to the next
652      quote character, regardless of the content.  */
653   if (strchr (linespec_quote_characters, *PARSER_STREAM (parser)))
654     {
655       const char *end;
656       char quote_char = *PARSER_STREAM (parser);
657
658       /* Special case: Ada operators.  */
659       if (PARSER_STATE (parser)->language->la_language == language_ada
660           && quote_char == '\"')
661         {
662           int len = is_ada_operator (PARSER_STREAM (parser));
663
664           if (len != 0)
665             {
666               /* The input is an Ada operator.  Return the quoted string
667                  as-is.  */
668               LS_TOKEN_STOKEN (token).ptr = PARSER_STREAM (parser);
669               LS_TOKEN_STOKEN (token).length = len;
670               PARSER_STREAM (parser) += len;
671               return token;
672             }
673
674           /* The input does not represent an Ada operator -- fall through
675              to normal quoted string handling.  */
676         }
677
678       /* Skip past the beginning quote.  */
679       ++(PARSER_STREAM (parser));
680
681       /* Mark the start of the string.  */
682       LS_TOKEN_STOKEN (token).ptr = PARSER_STREAM (parser);
683
684       /* Skip to the ending quote.  */
685       end = skip_quote_char (PARSER_STREAM (parser), quote_char);
686
687       /* This helps the completer mode decide whether we have a
688          complete string.  */
689       parser->completion_quote_char = quote_char;
690       parser->completion_quote_end = end;
691
692       /* Error if the input did not terminate properly, unless in
693          completion mode.  */
694       if (end == NULL)
695         {
696           if (parser->completion_tracker == NULL)
697             error (_("unmatched quote"));
698
699           /* In completion mode, we'll try to complete the incomplete
700              token.  */
701           token.type = LSTOKEN_STRING;
702           while (*PARSER_STREAM (parser) != '\0')
703             PARSER_STREAM (parser)++;
704           LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - 1 - start;
705         }
706       else
707         {
708           /* Skip over the ending quote and mark the length of the string.  */
709           PARSER_STREAM (parser) = (char *) ++end;
710           LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - 2 - start;
711         }
712     }
713   else
714     {
715       const char *p;
716
717       /* Otherwise, only identifier characters are permitted.
718          Spaces are the exception.  In general, we keep spaces,
719          but only if the next characters in the input do not resolve
720          to one of the keywords.
721
722          This allows users to forgo quoting CV-qualifiers, template arguments,
723          and similar common language constructs.  */
724
725       while (1)
726         {
727           if (isspace (*PARSER_STREAM (parser)))
728             {
729               p = skip_spaces (PARSER_STREAM (parser));
730               /* When we get here we know we've found something followed by
731                  a space (we skip over parens and templates below).
732                  So if we find a keyword now, we know it is a keyword and not,
733                  say, a function name.  */
734               if (linespec_lexer_lex_keyword (p) != NULL)
735                 {
736                   LS_TOKEN_STOKEN (token).ptr = start;
737                   LS_TOKEN_STOKEN (token).length
738                     = PARSER_STREAM (parser) - start;
739                   return token;
740                 }
741
742               /* Advance past the whitespace.  */
743               PARSER_STREAM (parser) = p;
744             }
745
746           /* If the next character is EOI or (single) ':', the
747              string is complete;  return the token.  */
748           if (*PARSER_STREAM (parser) == 0)
749             {
750               LS_TOKEN_STOKEN (token).ptr = start;
751               LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
752               return token;
753             }
754           else if (PARSER_STREAM (parser)[0] == ':')
755             {
756               /* Do not tokenize the C++ scope operator. */
757               if (PARSER_STREAM (parser)[1] == ':')
758                 ++(PARSER_STREAM (parser));
759
760               /* Do not tokenize ABI tags such as "[abi:cxx11]".  */
761               else if (PARSER_STREAM (parser) - start > 4
762                        && startswith (PARSER_STREAM (parser) - 4, "[abi"))
763                 ++(PARSER_STREAM (parser));
764
765               /* Do not tokenify if the input length so far is one
766                  (i.e, a single-letter drive name) and the next character
767                  is a directory separator.  This allows Windows-style
768                  paths to be recognized as filenames without quoting it.  */
769               else if ((PARSER_STREAM (parser) - start) != 1
770                        || !IS_DIR_SEPARATOR (PARSER_STREAM (parser)[1]))
771                 {
772                   LS_TOKEN_STOKEN (token).ptr = start;
773                   LS_TOKEN_STOKEN (token).length
774                     = PARSER_STREAM (parser) - start;
775                   return token;
776                 }
777             }
778           /* Special case: permit quote-enclosed linespecs.  */
779           else if (parser->is_quote_enclosed
780                    && strchr (linespec_quote_characters,
781                               *PARSER_STREAM (parser))
782                    && is_closing_quote_enclosed (PARSER_STREAM (parser)))
783             {
784               LS_TOKEN_STOKEN (token).ptr = start;
785               LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
786               return token;
787             }
788           /* Because commas may terminate a linespec and appear in
789              the middle of valid string input, special cases for
790              '<' and '(' are necessary.  */
791           else if (*PARSER_STREAM (parser) == '<'
792                    || *PARSER_STREAM (parser) == '(')
793             {
794               /* Don't interpret 'operator<' / 'operator<<' as a
795                  template parameter list though.  */
796               if (*PARSER_STREAM (parser) == '<'
797                   && (PARSER_STATE (parser)->language->la_language
798                       == language_cplus)
799                   && (PARSER_STREAM (parser) - start) >= CP_OPERATOR_LEN)
800                 {
801                   const char *op = PARSER_STREAM (parser);
802
803                   while (op > start && isspace (op[-1]))
804                     op--;
805                   if (op - start >= CP_OPERATOR_LEN)
806                     {
807                       op -= CP_OPERATOR_LEN;
808                       if (strncmp (op, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0
809                           && (op == start
810                               || !(isalnum (op[-1]) || op[-1] == '_')))
811                         {
812                           /* This is an operator name.  Keep going.  */
813                           ++(PARSER_STREAM (parser));
814                           if (*PARSER_STREAM (parser) == '<')
815                             ++(PARSER_STREAM (parser));
816                           continue;
817                         }
818                     }
819                 }
820
821               const char *end = find_parameter_list_end (PARSER_STREAM (parser));
822               PARSER_STREAM (parser) = end;
823
824               /* Don't loop around to the normal \0 case above because
825                  we don't want to misinterpret a potential keyword at
826                  the end of the token when the string isn't
827                  "()<>"-balanced.  This handles "b
828                  function(thread<tab>" in completion mode.  */
829               if (*end == '\0')
830                 {
831                   LS_TOKEN_STOKEN (token).ptr = start;
832                   LS_TOKEN_STOKEN (token).length
833                     = PARSER_STREAM (parser) - start;
834                   return token;
835                 }
836               else
837                 continue;
838             }
839           /* Commas are terminators, but not if they are part of an
840              operator name.  */
841           else if (*PARSER_STREAM (parser) == ',')
842             {
843               if ((PARSER_STATE (parser)->language->la_language
844                    == language_cplus)
845                   && (PARSER_STREAM (parser) - start) > CP_OPERATOR_LEN)
846                 {
847                   const char *op = strstr (start, CP_OPERATOR_STR);
848
849                   if (op != NULL && is_operator_name (op))
850                     {
851                       /* This is an operator name.  Keep going.  */
852                       ++(PARSER_STREAM (parser));
853                       continue;
854                     }
855                 }
856
857               /* Comma terminates the string.  */
858               LS_TOKEN_STOKEN (token).ptr = start;
859               LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
860               return token;
861             }
862
863           /* Advance the stream.  */
864           ++(PARSER_STREAM (parser));
865         }
866     }
867
868   return token;
869 }
870
871 /* Lex a single linespec token from PARSER.  */
872
873 static linespec_token
874 linespec_lexer_lex_one (linespec_parser *parser)
875 {
876   const char *keyword;
877
878   if (parser->lexer.current.type == LSTOKEN_CONSUMED)
879     {
880       /* Skip any whitespace.  */
881       PARSER_STREAM (parser) = skip_spaces (PARSER_STREAM (parser));
882
883       /* Check for a keyword, they end the linespec.  */
884       keyword = linespec_lexer_lex_keyword (PARSER_STREAM (parser));
885       if (keyword != NULL)
886         {
887           parser->lexer.current.type = LSTOKEN_KEYWORD;
888           LS_TOKEN_KEYWORD (parser->lexer.current) = keyword;
889           /* We do not advance the stream here intentionally:
890              we would like lexing to stop when a keyword is seen.
891
892              PARSER_STREAM (parser) +=  strlen (keyword);  */
893
894           return parser->lexer.current;
895         }
896
897       /* Handle other tokens.  */
898       switch (*PARSER_STREAM (parser))
899         {
900         case 0:
901           parser->lexer.current.type = LSTOKEN_EOI;
902           break;
903
904         case '+': case '-':
905         case '0': case '1': case '2': case '3': case '4':
906         case '5': case '6': case '7': case '8': case '9':
907            if (!linespec_lexer_lex_number (parser, &(parser->lexer.current)))
908              parser->lexer.current = linespec_lexer_lex_string (parser);
909           break;
910
911         case ':':
912           /* If we have a scope operator, lex the input as a string.
913              Otherwise, return LSTOKEN_COLON.  */
914           if (PARSER_STREAM (parser)[1] == ':')
915             parser->lexer.current = linespec_lexer_lex_string (parser);
916           else
917             {
918               parser->lexer.current.type = LSTOKEN_COLON;
919               ++(PARSER_STREAM (parser));
920             }
921           break;
922
923         case '\'': case '\"':
924           /* Special case: permit quote-enclosed linespecs.  */
925           if (parser->is_quote_enclosed
926               && is_closing_quote_enclosed (PARSER_STREAM (parser)))
927             {
928               ++(PARSER_STREAM (parser));
929               parser->lexer.current.type = LSTOKEN_EOI;
930             }
931           else
932             parser->lexer.current = linespec_lexer_lex_string (parser);
933           break;
934
935         case ',':
936           parser->lexer.current.type = LSTOKEN_COMMA;
937           LS_TOKEN_STOKEN (parser->lexer.current).ptr
938             = PARSER_STREAM (parser);
939           LS_TOKEN_STOKEN (parser->lexer.current).length = 1;
940           ++(PARSER_STREAM (parser));
941           break;
942
943         default:
944           /* If the input is not a number, it must be a string.
945              [Keywords were already considered above.]  */
946           parser->lexer.current = linespec_lexer_lex_string (parser);
947           break;
948         }
949     }
950
951   return parser->lexer.current;
952 }
953
954 /* Consume the current token and return the next token in PARSER's
955    input stream.  Also advance the completion word for completion
956    mode.  */
957
958 static linespec_token
959 linespec_lexer_consume_token (linespec_parser *parser)
960 {
961   gdb_assert (parser->lexer.current.type != LSTOKEN_EOI);
962
963   bool advance_word = (parser->lexer.current.type != LSTOKEN_STRING
964                        || *PARSER_STREAM (parser) != '\0');
965
966   /* If we're moving past a string to some other token, it must be the
967      quote was terminated.  */
968   if (parser->completion_quote_char)
969     {
970       gdb_assert (parser->lexer.current.type == LSTOKEN_STRING);
971
972       /* If the string was the last (non-EOI) token, we're past the
973          quote, but remember that for later.  */
974       if (*PARSER_STREAM (parser) != '\0')
975         {
976           parser->completion_quote_char = '\0';
977           parser->completion_quote_end = NULL;;
978         }
979     }
980
981   parser->lexer.current.type = LSTOKEN_CONSUMED;
982   linespec_lexer_lex_one (parser);
983
984   if (parser->lexer.current.type == LSTOKEN_STRING)
985     {
986       /* Advance the completion word past a potential initial
987          quote-char.  */
988       parser->completion_word = LS_TOKEN_STOKEN (parser->lexer.current).ptr;
989     }
990   else if (advance_word)
991     {
992       /* Advance the completion word past any whitespace.  */
993       parser->completion_word = PARSER_STREAM (parser);
994     }
995
996   return parser->lexer.current;
997 }
998
999 /* Return the next token without consuming the current token.  */
1000
1001 static linespec_token
1002 linespec_lexer_peek_token (linespec_parser *parser)
1003 {
1004   linespec_token next;
1005   const char *saved_stream = PARSER_STREAM (parser);
1006   linespec_token saved_token = parser->lexer.current;
1007   int saved_completion_quote_char = parser->completion_quote_char;
1008   const char *saved_completion_quote_end = parser->completion_quote_end;
1009   const char *saved_completion_word = parser->completion_word;
1010
1011   next = linespec_lexer_consume_token (parser);
1012   PARSER_STREAM (parser) = saved_stream;
1013   parser->lexer.current = saved_token;
1014   parser->completion_quote_char = saved_completion_quote_char;
1015   parser->completion_quote_end = saved_completion_quote_end;
1016   parser->completion_word = saved_completion_word;
1017   return next;
1018 }
1019
1020 /* Helper functions.  */
1021
1022 /* Add SAL to SALS, and also update SELF->CANONICAL_NAMES to reflect
1023    the new sal, if needed.  If not NULL, SYMNAME is the name of the
1024    symbol to use when constructing the new canonical name.
1025
1026    If LITERAL_CANONICAL is non-zero, SYMNAME will be used as the
1027    canonical name for the SAL.  */
1028
1029 static void
1030 add_sal_to_sals (struct linespec_state *self,
1031                  std::vector<symtab_and_line> *sals,
1032                  struct symtab_and_line *sal,
1033                  const char *symname, int literal_canonical)
1034 {
1035   sals->push_back (*sal);
1036
1037   if (self->canonical)
1038     {
1039       struct linespec_canonical_name *canonical;
1040
1041       self->canonical_names = XRESIZEVEC (struct linespec_canonical_name,
1042                                           self->canonical_names,
1043                                           sals->size ());
1044       canonical = &self->canonical_names[sals->size () - 1];
1045       if (!literal_canonical && sal->symtab)
1046         {
1047           symtab_to_fullname (sal->symtab);
1048
1049           /* Note that the filter doesn't have to be a valid linespec
1050              input.  We only apply the ":LINE" treatment to Ada for
1051              the time being.  */
1052           if (symname != NULL && sal->line != 0
1053               && self->language->la_language == language_ada)
1054             canonical->suffix = xstrprintf ("%s:%d", symname, sal->line);
1055           else if (symname != NULL)
1056             canonical->suffix = xstrdup (symname);
1057           else
1058             canonical->suffix = xstrprintf ("%d", sal->line);
1059           canonical->symtab = sal->symtab;
1060         }
1061       else
1062         {
1063           if (symname != NULL)
1064             canonical->suffix = xstrdup (symname);
1065           else
1066             canonical->suffix = xstrdup ("<unknown>");
1067           canonical->symtab = NULL;
1068         }
1069     }
1070 }
1071
1072 /* A hash function for address_entry.  */
1073
1074 static hashval_t
1075 hash_address_entry (const void *p)
1076 {
1077   const struct address_entry *aep = (const struct address_entry *) p;
1078   hashval_t hash;
1079
1080   hash = iterative_hash_object (aep->pspace, 0);
1081   return iterative_hash_object (aep->addr, hash);
1082 }
1083
1084 /* An equality function for address_entry.  */
1085
1086 static int
1087 eq_address_entry (const void *a, const void *b)
1088 {
1089   const struct address_entry *aea = (const struct address_entry *) a;
1090   const struct address_entry *aeb = (const struct address_entry *) b;
1091
1092   return aea->pspace == aeb->pspace && aea->addr == aeb->addr;
1093 }
1094
1095 /* Check whether the address, represented by PSPACE and ADDR, is
1096    already in the set.  If so, return 0.  Otherwise, add it and return
1097    1.  */
1098
1099 static int
1100 maybe_add_address (htab_t set, struct program_space *pspace, CORE_ADDR addr)
1101 {
1102   struct address_entry e, *p;
1103   void **slot;
1104
1105   e.pspace = pspace;
1106   e.addr = addr;
1107   slot = htab_find_slot (set, &e, INSERT);
1108   if (*slot)
1109     return 0;
1110
1111   p = XNEW (struct address_entry);
1112   memcpy (p, &e, sizeof (struct address_entry));
1113   *slot = p;
1114
1115   return 1;
1116 }
1117
1118 /* A helper that walks over all matching symtabs in all objfiles and
1119    calls CALLBACK for each symbol matching NAME.  If SEARCH_PSPACE is
1120    not NULL, then the search is restricted to just that program
1121    space.  If INCLUDE_INLINE is true then symbols representing
1122    inlined instances of functions will be included in the result.  */
1123
1124 static void
1125 iterate_over_all_matching_symtabs
1126   (struct linespec_state *state,
1127    const lookup_name_info &lookup_name,
1128    const domain_enum name_domain,
1129    enum search_domain search_domain,
1130    struct program_space *search_pspace, bool include_inline,
1131    gdb::function_view<symbol_found_callback_ftype> callback)
1132 {
1133   struct objfile *objfile;
1134   struct program_space *pspace;
1135
1136   ALL_PSPACES (pspace)
1137   {
1138     if (search_pspace != NULL && search_pspace != pspace)
1139       continue;
1140     if (pspace->executing_startup)
1141       continue;
1142
1143     set_current_program_space (pspace);
1144
1145     ALL_OBJFILES (objfile)
1146     {
1147       struct compunit_symtab *cu;
1148
1149       if (objfile->sf)
1150         objfile->sf->qf->expand_symtabs_matching (objfile,
1151                                                   NULL,
1152                                                   lookup_name,
1153                                                   NULL, NULL,
1154                                                   search_domain);
1155
1156       ALL_OBJFILE_COMPUNITS (objfile, cu)
1157         {
1158           struct symtab *symtab = COMPUNIT_FILETABS (cu);
1159
1160           iterate_over_file_blocks (symtab, lookup_name, name_domain, callback);
1161
1162           if (include_inline)
1163             {
1164               struct block *block;
1165               int i;
1166
1167               for (i = FIRST_LOCAL_BLOCK;
1168                    i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab));
1169                    i++)
1170                 {
1171                   block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i);
1172                   state->language->la_iterate_over_symbols
1173                     (block, lookup_name, name_domain, [&] (block_symbol *bsym)
1174                      {
1175                        /* Restrict calls to CALLBACK to symbols
1176                           representing inline symbols only.  */
1177                        if (SYMBOL_INLINED (bsym->symbol))
1178                          return callback (bsym);
1179                        return true;
1180                      });
1181                 }
1182             }
1183         }
1184     }
1185   }
1186 }
1187
1188 /* Returns the block to be used for symbol searches from
1189    the current location.  */
1190
1191 static const struct block *
1192 get_current_search_block (void)
1193 {
1194   const struct block *block;
1195   enum language save_language;
1196
1197   /* get_selected_block can change the current language when there is
1198      no selected frame yet.  */
1199   save_language = current_language->la_language;
1200   block = get_selected_block (0);
1201   set_language (save_language);
1202
1203   return block;
1204 }
1205
1206 /* Iterate over static and global blocks.  */
1207
1208 static void
1209 iterate_over_file_blocks
1210   (struct symtab *symtab, const lookup_name_info &name,
1211    domain_enum domain, gdb::function_view<symbol_found_callback_ftype> callback)
1212 {
1213   struct block *block;
1214
1215   for (block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
1216        block != NULL;
1217        block = BLOCK_SUPERBLOCK (block))
1218     LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback);
1219 }
1220
1221 /* A helper for find_method.  This finds all methods in type T of
1222    language T_LANG which match NAME.  It adds matching symbol names to
1223    RESULT_NAMES, and adds T's direct superclasses to SUPERCLASSES.  */
1224
1225 static void
1226 find_methods (struct type *t, enum language t_lang, const char *name,
1227               std::vector<const char *> *result_names,
1228               std::vector<struct type *> *superclasses)
1229 {
1230   int ibase;
1231   const char *class_name = TYPE_NAME (t);
1232
1233   /* Ignore this class if it doesn't have a name.  This is ugly, but
1234      unless we figure out how to get the physname without the name of
1235      the class, then the loop can't do any good.  */
1236   if (class_name)
1237     {
1238       int method_counter;
1239       lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
1240       symbol_name_matcher_ftype *symbol_name_compare
1241         = get_symbol_name_matcher (language_def (t_lang), lookup_name);
1242
1243       t = check_typedef (t);
1244
1245       /* Loop over each method name.  At this level, all overloads of a name
1246          are counted as a single name.  There is an inner loop which loops over
1247          each overload.  */
1248
1249       for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1250            method_counter >= 0;
1251            --method_counter)
1252         {
1253           const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1254           char dem_opname[64];
1255
1256           if (startswith (method_name, "__") ||
1257               startswith (method_name, "op") ||
1258               startswith (method_name, "type"))
1259             {
1260               if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
1261                 method_name = dem_opname;
1262               else if (cplus_demangle_opname (method_name, dem_opname, 0))
1263                 method_name = dem_opname;
1264             }
1265
1266           if (symbol_name_compare (method_name, lookup_name, NULL))
1267             {
1268               int field_counter;
1269
1270               for (field_counter = (TYPE_FN_FIELDLIST_LENGTH (t, method_counter)
1271                                     - 1);
1272                    field_counter >= 0;
1273                    --field_counter)
1274                 {
1275                   struct fn_field *f;
1276                   const char *phys_name;
1277
1278                   f = TYPE_FN_FIELDLIST1 (t, method_counter);
1279                   if (TYPE_FN_FIELD_STUB (f, field_counter))
1280                     continue;
1281                   phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1282                   result_names->push_back (phys_name);
1283                 }
1284             }
1285         }
1286     }
1287
1288   for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1289     superclasses->push_back (TYPE_BASECLASS (t, ibase));
1290 }
1291
1292 /* Find an instance of the character C in the string S that is outside
1293    of all parenthesis pairs, single-quoted strings, and double-quoted
1294    strings.  Also, ignore the char within a template name, like a ','
1295    within foo<int, int>, while considering C++ operator</operator<<.  */
1296
1297 const char *
1298 find_toplevel_char (const char *s, char c)
1299 {
1300   int quoted = 0;               /* zero if we're not in quotes;
1301                                    '"' if we're in a double-quoted string;
1302                                    '\'' if we're in a single-quoted string.  */
1303   int depth = 0;                /* Number of unclosed parens we've seen.  */
1304   const char *scan;
1305
1306   for (scan = s; *scan; scan++)
1307     {
1308       if (quoted)
1309         {
1310           if (*scan == quoted)
1311             quoted = 0;
1312           else if (*scan == '\\' && *(scan + 1))
1313             scan++;
1314         }
1315       else if (*scan == c && ! quoted && depth == 0)
1316         return scan;
1317       else if (*scan == '"' || *scan == '\'')
1318         quoted = *scan;
1319       else if (*scan == '(' || *scan == '<')
1320         depth++;
1321       else if ((*scan == ')' || *scan == '>') && depth > 0)
1322         depth--;
1323       else if (*scan == 'o' && !quoted && depth == 0)
1324         {
1325           /* Handle C++ operator names.  */
1326           if (strncmp (scan, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0)
1327             {
1328               scan += CP_OPERATOR_LEN;
1329               if (*scan == c)
1330                 return scan;
1331               while (isspace (*scan))
1332                 {
1333                   ++scan;
1334                   if (*scan == c)
1335                     return scan;
1336                 }
1337               if (*scan == '\0')
1338                 break;
1339
1340               switch (*scan)
1341                 {
1342                   /* Skip over one less than the appropriate number of
1343                      characters: the for loop will skip over the last
1344                      one.  */
1345                 case '<':
1346                   if (scan[1] == '<')
1347                     {
1348                       scan++;
1349                       if (*scan == c)
1350                         return scan;
1351                     }
1352                   break;
1353                 case '>':
1354                   if (scan[1] == '>')
1355                     {
1356                       scan++;
1357                       if (*scan == c)
1358                         return scan;
1359                     }
1360                   break;
1361                 }
1362             }
1363         }
1364     }
1365
1366   return 0;
1367 }
1368
1369 /* The string equivalent of find_toplevel_char.  Returns a pointer
1370    to the location of NEEDLE in HAYSTACK, ignoring any occurrences
1371    inside "()" and "<>".  Returns NULL if NEEDLE was not found.  */
1372
1373 static const char *
1374 find_toplevel_string (const char *haystack, const char *needle)
1375 {
1376   const char *s = haystack;
1377
1378   do
1379     {
1380       s = find_toplevel_char (s, *needle);
1381
1382       if (s != NULL)
1383         {
1384           /* Found first char in HAYSTACK;  check rest of string.  */
1385           if (startswith (s, needle))
1386             return s;
1387
1388           /* Didn't find it; loop over HAYSTACK, looking for the next
1389              instance of the first character of NEEDLE.  */
1390           ++s;
1391         }
1392     }
1393   while (s != NULL && *s != '\0');
1394
1395   /* NEEDLE was not found in HAYSTACK.  */
1396   return NULL;
1397 }
1398
1399 /* Convert CANONICAL to its string representation using
1400    symtab_to_fullname for SYMTAB.  */
1401
1402 static std::string
1403 canonical_to_fullform (const struct linespec_canonical_name *canonical)
1404 {
1405   if (canonical->symtab == NULL)
1406     return canonical->suffix;
1407   else
1408     return string_printf ("%s:%s", symtab_to_fullname (canonical->symtab),
1409                           canonical->suffix);
1410 }
1411
1412 /* Given FILTERS, a list of canonical names, filter the sals in RESULT
1413    and store the result in SELF->CANONICAL.  */
1414
1415 static void
1416 filter_results (struct linespec_state *self,
1417                 std::vector<symtab_and_line> *result,
1418                 const std::vector<const char *> &filters)
1419 {
1420   for (const char *name : filters)
1421     {
1422       linespec_sals lsal;
1423
1424       for (size_t j = 0; j < result->size (); ++j)
1425         {
1426           const struct linespec_canonical_name *canonical;
1427
1428           canonical = &self->canonical_names[j];
1429           std::string fullform = canonical_to_fullform (canonical);
1430
1431           if (name == fullform)
1432             lsal.sals.push_back ((*result)[j]);
1433         }
1434
1435       if (!lsal.sals.empty ())
1436         {
1437           lsal.canonical = xstrdup (name);
1438           self->canonical->lsals.push_back (std::move (lsal));
1439         }
1440     }
1441
1442   self->canonical->pre_expanded = 0;
1443 }
1444
1445 /* Store RESULT into SELF->CANONICAL.  */
1446
1447 static void
1448 convert_results_to_lsals (struct linespec_state *self,
1449                           std::vector<symtab_and_line> *result)
1450 {
1451   struct linespec_sals lsal;
1452
1453   lsal.canonical = NULL;
1454   lsal.sals = std::move (*result);
1455   self->canonical->lsals.push_back (std::move (lsal));
1456 }
1457
1458 /* A structure that contains two string representations of a struct
1459    linespec_canonical_name:
1460      - one where the the symtab's fullname is used;
1461      - one where the filename followed the "set filename-display"
1462        setting.  */
1463
1464 struct decode_line_2_item
1465 {
1466   decode_line_2_item (std::string &&fullform_, std::string &&displayform_,
1467                       bool selected_)
1468     : fullform (std::move (fullform_)),
1469       displayform (std::move (displayform_)),
1470       selected (selected_)
1471   {
1472   }
1473
1474   /* The form using symtab_to_fullname.  */
1475   std::string fullform;
1476
1477   /* The form using symtab_to_filename_for_display.  */
1478   std::string displayform;
1479
1480   /* Field is initialized to zero and it is set to one if the user
1481      requested breakpoint for this entry.  */
1482   unsigned int selected : 1;
1483 };
1484
1485 /* Helper for std::sort to sort decode_line_2_item entries by
1486    DISPLAYFORM and secondarily by FULLFORM.  */
1487
1488 static bool
1489 decode_line_2_compare_items (const decode_line_2_item &a,
1490                              const decode_line_2_item &b)
1491 {
1492   if (a.displayform != b.displayform)
1493     return a.displayform < b.displayform;
1494   return a.fullform < b.fullform;
1495 }
1496
1497 /* Handle multiple results in RESULT depending on SELECT_MODE.  This
1498    will either return normally, throw an exception on multiple
1499    results, or present a menu to the user.  On return, the SALS vector
1500    in SELF->CANONICAL is set up properly.  */
1501
1502 static void
1503 decode_line_2 (struct linespec_state *self,
1504                std::vector<symtab_and_line> *result,
1505                const char *select_mode)
1506 {
1507   char *args;
1508   const char *prompt;
1509   int i;
1510   std::vector<const char *> filters;
1511   std::vector<struct decode_line_2_item> items;
1512
1513   gdb_assert (select_mode != multiple_symbols_all);
1514   gdb_assert (self->canonical != NULL);
1515   gdb_assert (!result->empty ());
1516
1517   /* Prepare ITEMS array.  */
1518   for (i = 0; i < result->size (); ++i)
1519     {
1520       const struct linespec_canonical_name *canonical;
1521       std::string displayform;
1522
1523       canonical = &self->canonical_names[i];
1524       gdb_assert (canonical->suffix != NULL);
1525
1526       std::string fullform = canonical_to_fullform (canonical);
1527
1528       if (canonical->symtab == NULL)
1529         displayform = canonical->suffix;
1530       else
1531         {
1532           const char *fn_for_display;
1533
1534           fn_for_display = symtab_to_filename_for_display (canonical->symtab);
1535           displayform = string_printf ("%s:%s", fn_for_display,
1536                                        canonical->suffix);
1537         }
1538
1539       items.emplace_back (std::move (fullform), std::move (displayform),
1540                           false);
1541     }
1542
1543   /* Sort the list of method names.  */
1544   std::sort (items.begin (), items.end (), decode_line_2_compare_items);
1545
1546   /* Remove entries with the same FULLFORM.  */
1547   items.erase (std::unique (items.begin (), items.end (),
1548                             [] (const struct decode_line_2_item &a,
1549                                 const struct decode_line_2_item &b)
1550                               {
1551                                 return a.fullform == b.fullform;
1552                               }),
1553                items.end ());
1554
1555   if (select_mode == multiple_symbols_cancel && items.size () > 1)
1556     error (_("canceled because the command is ambiguous\n"
1557              "See set/show multiple-symbol."));
1558   
1559   if (select_mode == multiple_symbols_all || items.size () == 1)
1560     {
1561       convert_results_to_lsals (self, result);
1562       return;
1563     }
1564
1565   printf_unfiltered (_("[0] cancel\n[1] all\n"));
1566   for (i = 0; i < items.size (); i++)
1567     printf_unfiltered ("[%d] %s\n", i + 2, items[i].displayform.c_str ());
1568
1569   prompt = getenv ("PS2");
1570   if (prompt == NULL)
1571     {
1572       prompt = "> ";
1573     }
1574   args = command_line_input (prompt, "overload-choice");
1575
1576   if (args == 0 || *args == 0)
1577     error_no_arg (_("one or more choice numbers"));
1578
1579   number_or_range_parser parser (args);
1580   while (!parser.finished ())
1581     {
1582       int num = parser.get_number ();
1583
1584       if (num == 0)
1585         error (_("canceled"));
1586       else if (num == 1)
1587         {
1588           /* We intentionally make this result in a single breakpoint,
1589              contrary to what older versions of gdb did.  The
1590              rationale is that this lets a user get the
1591              multiple_symbols_all behavior even with the 'ask'
1592              setting; and he can get separate breakpoints by entering
1593              "2-57" at the query.  */
1594           convert_results_to_lsals (self, result);
1595           return;
1596         }
1597
1598       num -= 2;
1599       if (num >= items.size ())
1600         printf_unfiltered (_("No choice number %d.\n"), num);
1601       else
1602         {
1603           struct decode_line_2_item *item = &items[num];
1604
1605           if (!item->selected)
1606             {
1607               filters.push_back (item->fullform.c_str ());
1608               item->selected = 1;
1609             }
1610           else
1611             {
1612               printf_unfiltered (_("duplicate request for %d ignored.\n"),
1613                                  num + 2);
1614             }
1615         }
1616     }
1617
1618   filter_results (self, result, filters);
1619 }
1620
1621 \f
1622
1623 /* The parser of linespec itself.  */
1624
1625 /* Throw an appropriate error when SYMBOL is not found (optionally in
1626    FILENAME).  */
1627
1628 static void ATTRIBUTE_NORETURN
1629 symbol_not_found_error (const char *symbol, const char *filename)
1630 {
1631   if (symbol == NULL)
1632     symbol = "";
1633
1634   if (!have_full_symbols ()
1635       && !have_partial_symbols ()
1636       && !have_minimal_symbols ())
1637     throw_error (NOT_FOUND_ERROR,
1638                  _("No symbol table is loaded.  Use the \"file\" command."));
1639
1640   /* If SYMBOL starts with '$', the user attempted to either lookup
1641      a function/variable in his code starting with '$' or an internal
1642      variable of that name.  Since we do not know which, be concise and
1643      explain both possibilities.  */
1644   if (*symbol == '$')
1645     {
1646       if (filename)
1647         throw_error (NOT_FOUND_ERROR,
1648                      _("Undefined convenience variable or function \"%s\" "
1649                        "not defined in \"%s\"."), symbol, filename);
1650       else
1651         throw_error (NOT_FOUND_ERROR,
1652                      _("Undefined convenience variable or function \"%s\" "
1653                        "not defined."), symbol);
1654     }
1655   else
1656     {
1657       if (filename)
1658         throw_error (NOT_FOUND_ERROR,
1659                      _("Function \"%s\" not defined in \"%s\"."),
1660                      symbol, filename);
1661       else
1662         throw_error (NOT_FOUND_ERROR,
1663                      _("Function \"%s\" not defined."), symbol);
1664     }
1665 }
1666
1667 /* Throw an appropriate error when an unexpected token is encountered 
1668    in the input.  */
1669
1670 static void ATTRIBUTE_NORETURN
1671 unexpected_linespec_error (linespec_parser *parser)
1672 {
1673   linespec_token token;
1674   static const char * token_type_strings[]
1675     = {"keyword", "colon", "string", "number", "comma", "end of input"};
1676
1677   /* Get the token that generated the error.  */
1678   token = linespec_lexer_lex_one (parser);
1679
1680   /* Finally, throw the error.  */
1681   if (token.type == LSTOKEN_STRING || token.type == LSTOKEN_NUMBER
1682       || token.type == LSTOKEN_KEYWORD)
1683     {
1684       gdb::unique_xmalloc_ptr<char> string = copy_token_string (token);
1685       throw_error (GENERIC_ERROR,
1686                    _("malformed linespec error: unexpected %s, \"%s\""),
1687                    token_type_strings[token.type], string.get ());
1688     }
1689   else
1690     throw_error (GENERIC_ERROR,
1691                  _("malformed linespec error: unexpected %s"),
1692                  token_type_strings[token.type]);
1693 }
1694
1695 /* Throw an undefined label error.  */
1696
1697 static void ATTRIBUTE_NORETURN
1698 undefined_label_error (const char *function, const char *label)
1699 {
1700   if (function != NULL)
1701     throw_error (NOT_FOUND_ERROR,
1702                 _("No label \"%s\" defined in function \"%s\"."),
1703                 label, function);
1704   else
1705     throw_error (NOT_FOUND_ERROR,
1706                 _("No label \"%s\" defined in current function."),
1707                 label);
1708 }
1709
1710 /* Throw a source file not found error.  */
1711
1712 static void ATTRIBUTE_NORETURN
1713 source_file_not_found_error (const char *name)
1714 {
1715   throw_error (NOT_FOUND_ERROR, _("No source file named %s."), name);
1716 }
1717
1718 /* Unless at EIO, save the current stream position as completion word
1719    point, and consume the next token.  */
1720
1721 static linespec_token
1722 save_stream_and_consume_token (linespec_parser *parser)
1723 {
1724   if (linespec_lexer_peek_token (parser).type != LSTOKEN_EOI)
1725     parser->completion_word = PARSER_STREAM (parser);
1726   return linespec_lexer_consume_token (parser);
1727 }
1728
1729 /* See description in linespec.h.  */
1730
1731 struct line_offset
1732 linespec_parse_line_offset (const char *string)
1733 {
1734   const char *start = string;
1735   struct line_offset line_offset = {0, LINE_OFFSET_NONE};
1736
1737   if (*string == '+')
1738     {
1739       line_offset.sign = LINE_OFFSET_PLUS;
1740       ++string;
1741     }
1742   else if (*string == '-')
1743     {
1744       line_offset.sign = LINE_OFFSET_MINUS;
1745       ++string;
1746     }
1747
1748   if (*string != '\0' && !isdigit (*string))
1749     error (_("malformed line offset: \"%s\""), start);
1750
1751   /* Right now, we only allow base 10 for offsets.  */
1752   line_offset.offset = atoi (string);
1753   return line_offset;
1754 }
1755
1756 /* In completion mode, if the user is still typing the number, there's
1757    no possible completion to offer.  But if there's already input past
1758    the number, setup to expect NEXT.  */
1759
1760 static void
1761 set_completion_after_number (linespec_parser *parser,
1762                              linespec_complete_what next)
1763 {
1764   if (*PARSER_STREAM (parser) == ' ')
1765     {
1766       parser->completion_word = skip_spaces (PARSER_STREAM (parser) + 1);
1767       parser->complete_what = next;
1768     }
1769   else
1770     {
1771       parser->completion_word = PARSER_STREAM (parser);
1772       parser->complete_what = linespec_complete_what::NOTHING;
1773     }
1774 }
1775
1776 /* Parse the basic_spec in PARSER's input.  */
1777
1778 static void
1779 linespec_parse_basic (linespec_parser *parser)
1780 {
1781   gdb::unique_xmalloc_ptr<char> name;
1782   linespec_token token;
1783   std::vector<block_symbol> symbols;
1784   std::vector<block_symbol> *labels;
1785   std::vector<bound_minimal_symbol> minimal_symbols;
1786
1787   /* Get the next token.  */
1788   token = linespec_lexer_lex_one (parser);
1789
1790   /* If it is EOI or KEYWORD, issue an error.  */
1791   if (token.type == LSTOKEN_KEYWORD)
1792     {
1793       parser->complete_what = linespec_complete_what::NOTHING;
1794       unexpected_linespec_error (parser);
1795     }
1796   else if (token.type == LSTOKEN_EOI)
1797     {
1798       unexpected_linespec_error (parser);
1799     }
1800   /* If it is a LSTOKEN_NUMBER, we have an offset.  */
1801   else if (token.type == LSTOKEN_NUMBER)
1802     {
1803       set_completion_after_number (parser, linespec_complete_what::KEYWORD);
1804
1805       /* Record the line offset and get the next token.  */
1806       name = copy_token_string (token);
1807       PARSER_EXPLICIT (parser)->line_offset
1808         = linespec_parse_line_offset (name.get ());
1809
1810       /* Get the next token.  */
1811       token = linespec_lexer_consume_token (parser);
1812
1813       /* If the next token is a comma, stop parsing and return.  */
1814       if (token.type == LSTOKEN_COMMA)
1815         {
1816           parser->complete_what = linespec_complete_what::NOTHING;
1817           return;
1818         }
1819
1820       /* If the next token is anything but EOI or KEYWORD, issue
1821          an error.  */
1822       if (token.type != LSTOKEN_KEYWORD && token.type != LSTOKEN_EOI)
1823         unexpected_linespec_error (parser);
1824     }
1825
1826   if (token.type == LSTOKEN_KEYWORD || token.type == LSTOKEN_EOI)
1827     return;
1828
1829   /* Next token must be LSTOKEN_STRING.  */
1830   if (token.type != LSTOKEN_STRING)
1831     {
1832       parser->complete_what = linespec_complete_what::NOTHING;
1833       unexpected_linespec_error (parser);
1834     }
1835
1836   /* The current token will contain the name of a function, method,
1837      or label.  */
1838   name = copy_token_string (token);
1839
1840   if (parser->completion_tracker != NULL)
1841     {
1842       /* If the function name ends with a ":", then this may be an
1843          incomplete "::" scope operator instead of a label separator.
1844          E.g.,
1845            "b klass:<tab>"
1846          which should expand to:
1847            "b klass::method()"
1848
1849          Do a tentative completion assuming the later.  If we find
1850          completions, advance the stream past the colon token and make
1851          it part of the function name/token.  */
1852
1853       if (!parser->completion_quote_char
1854           && strcmp (PARSER_STREAM (parser), ":") == 0)
1855         {
1856           completion_tracker tmp_tracker;
1857           const char *source_filename
1858             = PARSER_EXPLICIT (parser)->source_filename;
1859           symbol_name_match_type match_type
1860             = PARSER_EXPLICIT (parser)->func_name_match_type;
1861
1862           linespec_complete_function (tmp_tracker,
1863                                       parser->completion_word,
1864                                       match_type,
1865                                       source_filename);
1866
1867           if (tmp_tracker.have_completions ())
1868             {
1869               PARSER_STREAM (parser)++;
1870               LS_TOKEN_STOKEN (token).length++;
1871
1872               name.reset (savestring (parser->completion_word,
1873                                       (PARSER_STREAM (parser)
1874                                        - parser->completion_word)));
1875             }
1876         }
1877
1878       PARSER_EXPLICIT (parser)->function_name = name.release ();
1879     }
1880   else
1881     {
1882       /* Try looking it up as a function/method.  */
1883       find_linespec_symbols (PARSER_STATE (parser),
1884                              PARSER_RESULT (parser)->file_symtabs, name.get (),
1885                              PARSER_EXPLICIT (parser)->func_name_match_type,
1886                              &symbols, &minimal_symbols);
1887
1888       if (!symbols.empty () || !minimal_symbols.empty ())
1889         {
1890           PARSER_RESULT (parser)->function_symbols
1891             = new std::vector<block_symbol> (std::move (symbols));
1892           PARSER_RESULT (parser)->minimal_symbols
1893             = new std::vector<bound_minimal_symbol>
1894                 (std::move (minimal_symbols));
1895           PARSER_EXPLICIT (parser)->function_name = name.release ();
1896         }
1897       else
1898         {
1899           /* NAME was not a function or a method.  So it must be a label
1900              name or user specified variable like "break foo.c:$zippo".  */
1901           labels = find_label_symbols (PARSER_STATE (parser), NULL,
1902                                        &symbols, name.get ());
1903           if (labels != NULL)
1904             {
1905               PARSER_RESULT (parser)->labels.label_symbols = labels;
1906               PARSER_RESULT (parser)->labels.function_symbols
1907                 = new std::vector<block_symbol> (std::move (symbols));
1908               PARSER_EXPLICIT (parser)->label_name = name.release ();
1909             }
1910           else if (token.type == LSTOKEN_STRING
1911                    && *LS_TOKEN_STOKEN (token).ptr == '$')
1912             {
1913               /* User specified a convenience variable or history value.  */
1914               PARSER_EXPLICIT (parser)->line_offset
1915                 = linespec_parse_variable (PARSER_STATE (parser), name.get ());
1916
1917               if (PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN)
1918                 {
1919                   /* The user-specified variable was not valid.  Do not
1920                      throw an error here.  parse_linespec will do it for us.  */
1921                   PARSER_EXPLICIT (parser)->function_name = name.release ();
1922                   return;
1923                 }
1924             }
1925           else
1926             {
1927               /* The name is also not a label.  Abort parsing.  Do not throw
1928                  an error here.  parse_linespec will do it for us.  */
1929
1930               /* Save a copy of the name we were trying to lookup.  */
1931               PARSER_EXPLICIT (parser)->function_name = name.release ();
1932               return;
1933             }
1934         }
1935     }
1936
1937   int previous_qc = parser->completion_quote_char;
1938
1939   /* Get the next token.  */
1940   token = linespec_lexer_consume_token (parser);
1941
1942   if (token.type == LSTOKEN_EOI)
1943     {
1944       if (previous_qc && !parser->completion_quote_char)
1945         parser->complete_what = linespec_complete_what::KEYWORD;
1946     }
1947   else if (token.type == LSTOKEN_COLON)
1948     {
1949       /* User specified a label or a lineno.  */
1950       token = linespec_lexer_consume_token (parser);
1951
1952       if (token.type == LSTOKEN_NUMBER)
1953         {
1954           /* User specified an offset.  Record the line offset and
1955              get the next token.  */
1956           set_completion_after_number (parser, linespec_complete_what::KEYWORD);
1957
1958           name = copy_token_string (token);
1959           PARSER_EXPLICIT (parser)->line_offset
1960             = linespec_parse_line_offset (name.get ());
1961
1962           /* Get the next token.  */
1963           token = linespec_lexer_consume_token (parser);
1964         }
1965       else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
1966         {
1967           parser->complete_what = linespec_complete_what::LABEL;
1968         }
1969       else if (token.type == LSTOKEN_STRING)
1970         {
1971           parser->complete_what = linespec_complete_what::LABEL;
1972
1973           /* If we have text after the label separated by whitespace
1974              (e.g., "b func():lab i<tab>"), don't consider it part of
1975              the label.  In completion mode that should complete to
1976              "if", in normal mode, the 'i' should be treated as
1977              garbage.  */
1978           if (parser->completion_quote_char == '\0')
1979             {
1980               const char *ptr = LS_TOKEN_STOKEN (token).ptr;
1981               for (size_t i = 0; i < LS_TOKEN_STOKEN (token).length; i++)
1982                 {
1983                   if (ptr[i] == ' ')
1984                     {
1985                       LS_TOKEN_STOKEN (token).length = i;
1986                       PARSER_STREAM (parser) = skip_spaces (ptr + i + 1);
1987                       break;
1988                     }
1989                 }
1990             }
1991
1992           if (parser->completion_tracker != NULL)
1993             {
1994               if (PARSER_STREAM (parser)[-1] == ' ')
1995                 {
1996                   parser->completion_word = PARSER_STREAM (parser);
1997                   parser->complete_what = linespec_complete_what::KEYWORD;
1998                 }
1999             }
2000           else
2001             {
2002               /* Grab a copy of the label's name and look it up.  */
2003               name = copy_token_string (token);
2004               labels
2005                 = find_label_symbols (PARSER_STATE (parser),
2006                                       PARSER_RESULT (parser)->function_symbols,
2007                                       &symbols, name.get ());
2008
2009               if (labels != NULL)
2010                 {
2011                   PARSER_RESULT (parser)->labels.label_symbols = labels;
2012                   PARSER_RESULT (parser)->labels.function_symbols
2013                     = new std::vector<block_symbol> (std::move (symbols));
2014                   PARSER_EXPLICIT (parser)->label_name = name.release ();
2015                 }
2016               else
2017                 {
2018                   /* We don't know what it was, but it isn't a label.  */
2019                   undefined_label_error
2020                     (PARSER_EXPLICIT (parser)->function_name, name.get ());
2021                 }
2022
2023             }
2024
2025           /* Check for a line offset.  */
2026           token = save_stream_and_consume_token (parser);
2027           if (token.type == LSTOKEN_COLON)
2028             {
2029               /* Get the next token.  */
2030               token = linespec_lexer_consume_token (parser);
2031
2032               /* It must be a line offset.  */
2033               if (token.type != LSTOKEN_NUMBER)
2034                 unexpected_linespec_error (parser);
2035
2036               /* Record the line offset and get the next token.  */
2037               name = copy_token_string (token);
2038
2039               PARSER_EXPLICIT (parser)->line_offset
2040                 = linespec_parse_line_offset (name.get ());
2041
2042               /* Get the next token.  */
2043               token = linespec_lexer_consume_token (parser);
2044             }
2045         }
2046       else
2047         {
2048           /* Trailing ':' in the input. Issue an error.  */
2049           unexpected_linespec_error (parser);
2050         }
2051     }
2052 }
2053
2054 /* Canonicalize the linespec contained in LS.  The result is saved into
2055    STATE->canonical.  This function handles both linespec and explicit
2056    locations.  */
2057
2058 static void
2059 canonicalize_linespec (struct linespec_state *state, const linespec_p ls)
2060 {
2061   struct event_location *canon;
2062   struct explicit_location *explicit_loc;
2063
2064   /* If canonicalization was not requested, no need to do anything.  */
2065   if (!state->canonical)
2066     return;
2067
2068   /* Save everything as an explicit location.  */
2069   state->canonical->location
2070     = new_explicit_location (&ls->explicit_loc);
2071   canon = state->canonical->location.get ();
2072   explicit_loc = get_explicit_location (canon);
2073
2074   if (explicit_loc->label_name != NULL)
2075     {
2076       state->canonical->special_display = 1;
2077
2078       if (explicit_loc->function_name == NULL)
2079         {
2080           /* No function was specified, so add the symbol name.  */
2081           gdb_assert (!ls->labels.function_symbols->empty ()
2082                       && (ls->labels.function_symbols->size () == 1));
2083           block_symbol s = ls->labels.function_symbols->front ();
2084           explicit_loc->function_name
2085             = xstrdup (SYMBOL_NATURAL_NAME (s.symbol));
2086         }
2087     }
2088
2089   /* If this location originally came from a linespec, save a string
2090      representation of it for display and saving to file.  */
2091   if (state->is_linespec)
2092     {
2093       char *linespec = explicit_location_to_linespec (explicit_loc);
2094
2095       set_event_location_string (canon, linespec);
2096       xfree (linespec);
2097     }
2098 }
2099
2100 /* Given a line offset in LS, construct the relevant SALs.  */
2101
2102 static std::vector<symtab_and_line>
2103 create_sals_line_offset (struct linespec_state *self,
2104                          linespec_p ls)
2105 {
2106   int use_default = 0;
2107
2108   /* This is where we need to make sure we have good defaults.
2109      We must guarantee that this section of code is never executed
2110      when we are called with just a function name, since
2111      set_default_source_symtab_and_line uses
2112      select_source_symtab that calls us with such an argument.  */
2113
2114   if (ls->file_symtabs->size () == 1
2115       && ls->file_symtabs->front () == nullptr)
2116     {
2117       const char *fullname;
2118
2119       set_current_program_space (self->program_space);
2120
2121       /* Make sure we have at least a default source line.  */
2122       set_default_source_symtab_and_line ();
2123       initialize_defaults (&self->default_symtab, &self->default_line);
2124       fullname = symtab_to_fullname (self->default_symtab);
2125       *ls->file_symtabs
2126         = collect_symtabs_from_filename (fullname, self->search_pspace);
2127       use_default = 1;
2128     }
2129
2130   symtab_and_line val;
2131   val.line = ls->explicit_loc.line_offset.offset;
2132   switch (ls->explicit_loc.line_offset.sign)
2133     {
2134     case LINE_OFFSET_PLUS:
2135       if (ls->explicit_loc.line_offset.offset == 0)
2136         val.line = 5;
2137       if (use_default)
2138         val.line = self->default_line + val.line;
2139       break;
2140
2141     case LINE_OFFSET_MINUS:
2142       if (ls->explicit_loc.line_offset.offset == 0)
2143         val.line = 15;
2144       if (use_default)
2145         val.line = self->default_line - val.line;
2146       else
2147         val.line = -val.line;
2148       break;
2149
2150     case LINE_OFFSET_NONE:
2151       break;                    /* No need to adjust val.line.  */
2152     }
2153
2154   std::vector<symtab_and_line> values;
2155   if (self->list_mode)
2156     values = decode_digits_list_mode (self, ls, val);
2157   else
2158     {
2159       struct linetable_entry *best_entry = NULL;
2160       int i, j;
2161
2162       std::vector<symtab_and_line> intermediate_results
2163         = decode_digits_ordinary (self, ls, val.line, &best_entry);
2164       if (intermediate_results.empty () && best_entry != NULL)
2165         intermediate_results = decode_digits_ordinary (self, ls,
2166                                                        best_entry->line,
2167                                                        &best_entry);
2168
2169       /* For optimized code, the compiler can scatter one source line
2170          across disjoint ranges of PC values, even when no duplicate
2171          functions or inline functions are involved.  For example,
2172          'for (;;)' inside a non-template, non-inline, and non-ctor-or-dtor
2173          function can result in two PC ranges.  In this case, we don't
2174          want to set a breakpoint on the first PC of each range.  To filter
2175          such cases, we use containing blocks -- for each PC found
2176          above, we see if there are other PCs that are in the same
2177          block.  If yes, the other PCs are filtered out.  */
2178
2179       gdb::def_vector<int> filter (intermediate_results.size ());
2180       gdb::def_vector<const block *> blocks (intermediate_results.size ());
2181
2182       for (i = 0; i < intermediate_results.size (); ++i)
2183         {
2184           set_current_program_space (intermediate_results[i].pspace);
2185
2186           filter[i] = 1;
2187           blocks[i] = block_for_pc_sect (intermediate_results[i].pc,
2188                                          intermediate_results[i].section);
2189         }
2190
2191       for (i = 0; i < intermediate_results.size (); ++i)
2192         {
2193           if (blocks[i] != NULL)
2194             for (j = i + 1; j < intermediate_results.size (); ++j)
2195               {
2196                 if (blocks[j] == blocks[i])
2197                   {
2198                     filter[j] = 0;
2199                     break;
2200                   }
2201               }
2202         }
2203
2204       for (i = 0; i < intermediate_results.size (); ++i)
2205         if (filter[i])
2206           {
2207             struct symbol *sym = (blocks[i]
2208                                   ? block_containing_function (blocks[i])
2209                                   : NULL);
2210
2211             if (self->funfirstline)
2212               skip_prologue_sal (&intermediate_results[i]);
2213             intermediate_results[i].symbol = sym;
2214             add_sal_to_sals (self, &values, &intermediate_results[i],
2215                              sym ? SYMBOL_NATURAL_NAME (sym) : NULL, 0);
2216           }
2217     }
2218
2219   if (values.empty ())
2220     {
2221       if (ls->explicit_loc.source_filename)
2222         throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
2223                      val.line, ls->explicit_loc.source_filename);
2224       else
2225         throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
2226                      val.line);
2227     }
2228
2229   return values;
2230 }
2231
2232 /* Convert the given ADDRESS into SaLs.  */
2233
2234 static std::vector<symtab_and_line>
2235 convert_address_location_to_sals (struct linespec_state *self,
2236                                   CORE_ADDR address)
2237 {
2238   symtab_and_line sal = find_pc_line (address, 0);
2239   sal.pc = address;
2240   sal.section = find_pc_overlay (address);
2241   sal.explicit_pc = 1;
2242   sal.symbol = find_pc_sect_containing_function (sal.pc, sal.section);
2243
2244   std::vector<symtab_and_line> sals;
2245   add_sal_to_sals (self, &sals, &sal, core_addr_to_string (address), 1);
2246
2247   return sals;
2248 }
2249
2250 /* Create and return SALs from the linespec LS.  */
2251
2252 static std::vector<symtab_and_line>
2253 convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
2254 {
2255   std::vector<symtab_and_line> sals;
2256
2257   if (ls->labels.label_symbols != NULL)
2258     {
2259       /* We have just a bunch of functions/methods or labels.  */
2260       struct symtab_and_line sal;
2261
2262       for (const auto &sym : *ls->labels.label_symbols)
2263         {
2264           struct program_space *pspace
2265             = SYMTAB_PSPACE (symbol_symtab (sym.symbol));
2266
2267           if (symbol_to_sal (&sal, state->funfirstline, sym.symbol)
2268               && maybe_add_address (state->addr_set, pspace, sal.pc))
2269             add_sal_to_sals (state, &sals, &sal,
2270                              SYMBOL_NATURAL_NAME (sym.symbol), 0);
2271         }
2272     }
2273   else if (ls->function_symbols != NULL || ls->minimal_symbols != NULL)
2274     {
2275       /* We have just a bunch of functions and/or methods.  */
2276       if (ls->function_symbols != NULL)
2277         {
2278           /* Sort symbols so that symbols with the same program space are next
2279              to each other.  */
2280           std::sort (ls->function_symbols->begin (),
2281                      ls->function_symbols->end (),
2282                      compare_symbols);
2283
2284           for (const auto &sym : *ls->function_symbols)
2285             {
2286               program_space *pspace
2287                 = SYMTAB_PSPACE (symbol_symtab (sym.symbol));
2288               set_current_program_space (pspace);
2289
2290               /* Don't skip to the first line of the function if we
2291                  had found an ifunc minimal symbol for this function,
2292                  because that means that this function is an ifunc
2293                  resolver with the same name as the ifunc itself.  */
2294               bool found_ifunc = false;
2295
2296               if (state->funfirstline
2297                    && ls->minimal_symbols != NULL
2298                    && SYMBOL_CLASS (sym.symbol) == LOC_BLOCK)
2299                 {
2300                   const CORE_ADDR addr
2301                     = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym.symbol));
2302
2303                   for (const auto &elem : *ls->minimal_symbols)
2304                     {
2305                       if (MSYMBOL_TYPE (elem.minsym) == mst_text_gnu_ifunc
2306                           || MSYMBOL_TYPE (elem.minsym) == mst_data_gnu_ifunc)
2307                         {
2308                           CORE_ADDR msym_addr = BMSYMBOL_VALUE_ADDRESS (elem);
2309                           if (MSYMBOL_TYPE (elem.minsym) == mst_data_gnu_ifunc)
2310                             {
2311                               struct gdbarch *gdbarch
2312                                 = get_objfile_arch (elem.objfile);
2313                               msym_addr
2314                                 = (gdbarch_convert_from_func_ptr_addr
2315                                    (gdbarch,
2316                                     msym_addr,
2317                                     current_top_target ()));
2318                             }
2319
2320                           if (msym_addr == addr)
2321                             {
2322                               found_ifunc = true;
2323                               break;
2324                             }
2325                         }
2326                     }
2327                 }
2328
2329               if (!found_ifunc)
2330                 {
2331                   symtab_and_line sal;
2332                   if (symbol_to_sal (&sal, state->funfirstline, sym.symbol)
2333                       && maybe_add_address (state->addr_set, pspace, sal.pc))
2334                     add_sal_to_sals (state, &sals, &sal,
2335                                      SYMBOL_NATURAL_NAME (sym.symbol), 0);
2336                 }
2337             }
2338         }
2339
2340       if (ls->minimal_symbols != NULL)
2341         {
2342           /* Sort minimal symbols by program space, too  */
2343           std::sort (ls->minimal_symbols->begin (),
2344                      ls->minimal_symbols->end (),
2345                      compare_msymbols);
2346
2347           for (const auto &elem : *ls->minimal_symbols)
2348             {
2349               program_space *pspace = elem.objfile->pspace;
2350               set_current_program_space (pspace);
2351               minsym_found (state, elem.objfile, elem.minsym, &sals);
2352             }
2353         }
2354     }
2355   else if (ls->explicit_loc.line_offset.sign != LINE_OFFSET_UNKNOWN)
2356     {
2357       /* Only an offset was specified.  */
2358         sals = create_sals_line_offset (state, ls);
2359
2360         /* Make sure we have a filename for canonicalization.  */
2361         if (ls->explicit_loc.source_filename == NULL)
2362           {
2363             const char *fullname = symtab_to_fullname (state->default_symtab);
2364
2365             /* It may be more appropriate to keep DEFAULT_SYMTAB in its symtab
2366                form so that displaying SOURCE_FILENAME can follow the current
2367                FILENAME_DISPLAY_STRING setting.  But as it is used only rarely
2368                it has been kept for code simplicity only in absolute form.  */
2369             ls->explicit_loc.source_filename = xstrdup (fullname);
2370           }
2371     }
2372   else
2373     {
2374       /* We haven't found any results...  */
2375       return sals;
2376     }
2377
2378   canonicalize_linespec (state, ls);
2379
2380   if (!sals.empty () && state->canonical != NULL)
2381     state->canonical->pre_expanded = 1;
2382
2383   return sals;
2384 }
2385
2386 /* Build RESULT from the explicit location components SOURCE_FILENAME,
2387    FUNCTION_NAME, LABEL_NAME and LINE_OFFSET.  */
2388
2389 static void
2390 convert_explicit_location_to_linespec (struct linespec_state *self,
2391                                        linespec_p result,
2392                                        const char *source_filename,
2393                                        const char *function_name,
2394                                        symbol_name_match_type fname_match_type,
2395                                        const char *label_name,
2396                                        struct line_offset line_offset)
2397 {
2398   std::vector<block_symbol> symbols;
2399   std::vector<block_symbol> *labels;
2400   std::vector<bound_minimal_symbol> minimal_symbols;
2401
2402   result->explicit_loc.func_name_match_type = fname_match_type;
2403
2404   if (source_filename != NULL)
2405     {
2406       TRY
2407         {
2408           *result->file_symtabs
2409             = symtabs_from_filename (source_filename, self->search_pspace);
2410         }
2411       CATCH (except, RETURN_MASK_ERROR)
2412         {
2413           source_file_not_found_error (source_filename);
2414         }
2415       END_CATCH
2416       result->explicit_loc.source_filename = xstrdup (source_filename);
2417     }
2418   else
2419     {
2420       /* A NULL entry means to use the default symtab.  */
2421       result->file_symtabs->push_back (nullptr);
2422     }
2423
2424   if (function_name != NULL)
2425     {
2426       find_linespec_symbols (self, result->file_symtabs,
2427                              function_name, fname_match_type,
2428                              &symbols, &minimal_symbols);
2429
2430       if (symbols.empty () && minimal_symbols.empty ())
2431         symbol_not_found_error (function_name,
2432                                 result->explicit_loc.source_filename);
2433
2434       result->explicit_loc.function_name = xstrdup (function_name);
2435       result->function_symbols
2436         = new std::vector<block_symbol> (std::move (symbols));
2437       result->minimal_symbols
2438         = new std::vector<bound_minimal_symbol> (std::move (minimal_symbols));
2439     }
2440
2441   if (label_name != NULL)
2442     {
2443       labels = find_label_symbols (self, result->function_symbols,
2444                                    &symbols, label_name);
2445
2446       if (labels == NULL)
2447         undefined_label_error (result->explicit_loc.function_name,
2448                                label_name);
2449
2450       result->explicit_loc.label_name = xstrdup (label_name);
2451       result->labels.label_symbols = labels;
2452       result->labels.function_symbols
2453         = new std::vector<block_symbol> (std::move (symbols));
2454     }
2455
2456   if (line_offset.sign != LINE_OFFSET_UNKNOWN)
2457     result->explicit_loc.line_offset = line_offset;
2458 }
2459
2460 /* Convert the explicit location EXPLICIT_LOC into SaLs.  */
2461
2462 static std::vector<symtab_and_line>
2463 convert_explicit_location_to_sals (struct linespec_state *self,
2464                                    linespec_p result,
2465                                    const struct explicit_location *explicit_loc)
2466 {
2467   convert_explicit_location_to_linespec (self, result,
2468                                          explicit_loc->source_filename,
2469                                          explicit_loc->function_name,
2470                                          explicit_loc->func_name_match_type,
2471                                          explicit_loc->label_name,
2472                                          explicit_loc->line_offset);
2473   return convert_linespec_to_sals (self, result);
2474 }
2475
2476 /* Parse a string that specifies a linespec.
2477
2478    The basic grammar of linespecs:
2479
2480    linespec -> var_spec | basic_spec
2481    var_spec -> '$' (STRING | NUMBER)
2482
2483    basic_spec -> file_offset_spec | function_spec | label_spec
2484    file_offset_spec -> opt_file_spec offset_spec
2485    function_spec -> opt_file_spec function_name_spec opt_label_spec
2486    label_spec -> label_name_spec
2487
2488    opt_file_spec -> "" | file_name_spec ':'
2489    opt_label_spec -> "" | ':' label_name_spec
2490
2491    file_name_spec -> STRING
2492    function_name_spec -> STRING
2493    label_name_spec -> STRING
2494    function_name_spec -> STRING
2495    offset_spec -> NUMBER
2496                -> '+' NUMBER
2497                -> '-' NUMBER
2498
2499    This may all be followed by several keywords such as "if EXPR",
2500    which we ignore.
2501
2502    A comma will terminate parsing.
2503
2504    The function may be an undebuggable function found in minimal symbol table.
2505
2506    If the argument FUNFIRSTLINE is nonzero, we want the first line
2507    of real code inside a function when a function is specified, and it is
2508    not OK to specify a variable or type to get its line number.
2509
2510    DEFAULT_SYMTAB specifies the file to use if none is specified.
2511    It defaults to current_source_symtab.
2512    DEFAULT_LINE specifies the line number to use for relative
2513    line numbers (that start with signs).  Defaults to current_source_line.
2514    If CANONICAL is non-NULL, store an array of strings containing the canonical
2515    line specs there if necessary.  Currently overloaded member functions and
2516    line numbers or static functions without a filename yield a canonical
2517    line spec.  The array and the line spec strings are allocated on the heap,
2518    it is the callers responsibility to free them.
2519
2520    Note that it is possible to return zero for the symtab
2521    if no file is validly specified.  Callers must check that.
2522    Also, the line number returned may be invalid.  */
2523
2524 /* Parse the linespec in ARG.  MATCH_TYPE indicates how function names
2525    should be matched.  */
2526
2527 static std::vector<symtab_and_line>
2528 parse_linespec (linespec_parser *parser, const char *arg,
2529                 symbol_name_match_type match_type)
2530 {
2531   linespec_token token;
2532   struct gdb_exception file_exception = exception_none;
2533
2534   /* A special case to start.  It has become quite popular for
2535      IDEs to work around bugs in the previous parser by quoting
2536      the entire linespec, so we attempt to deal with this nicely.  */
2537   parser->is_quote_enclosed = 0;
2538   if (parser->completion_tracker == NULL
2539       && !is_ada_operator (arg)
2540       && strchr (linespec_quote_characters, *arg) != NULL)
2541     {
2542       const char *end;
2543
2544       end = skip_quote_char (arg + 1, *arg);
2545       if (end != NULL && is_closing_quote_enclosed (end))
2546         {
2547           /* Here's the special case.  Skip ARG past the initial
2548              quote.  */
2549           ++arg;
2550           parser->is_quote_enclosed = 1;
2551         }
2552     }
2553
2554   parser->lexer.saved_arg = arg;
2555   parser->lexer.stream = arg;
2556   parser->completion_word = arg;
2557   parser->complete_what = linespec_complete_what::FUNCTION;
2558   PARSER_EXPLICIT (parser)->func_name_match_type = match_type;
2559
2560   /* Initialize the default symtab and line offset.  */
2561   initialize_defaults (&PARSER_STATE (parser)->default_symtab,
2562                        &PARSER_STATE (parser)->default_line);
2563
2564   /* Objective-C shortcut.  */
2565   if (parser->completion_tracker == NULL)
2566     {
2567       std::vector<symtab_and_line> values
2568         = decode_objc (PARSER_STATE (parser), PARSER_RESULT (parser), arg);
2569       if (!values.empty ())
2570         return values;
2571     }
2572   else
2573     {
2574       /* "-"/"+" is either an objc selector, or a number.  There's
2575          nothing to complete the latter to, so just let the caller
2576          complete on functions, which finds objc selectors, if there's
2577          any.  */
2578       if ((arg[0] == '-' || arg[0] == '+') && arg[1] == '\0')
2579         return {};
2580     }
2581
2582   /* Start parsing.  */
2583
2584   /* Get the first token.  */
2585   token = linespec_lexer_consume_token (parser);
2586
2587   /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER.  */
2588   if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
2589     {
2590       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2591       if (parser->completion_tracker == NULL)
2592         PARSER_RESULT (parser)->file_symtabs->push_back (nullptr);
2593
2594       /* User specified a convenience variable or history value.  */
2595       gdb::unique_xmalloc_ptr<char> var = copy_token_string (token);
2596       PARSER_EXPLICIT (parser)->line_offset
2597         = linespec_parse_variable (PARSER_STATE (parser), var.get ());
2598
2599       /* If a line_offset wasn't found (VAR is the name of a user
2600          variable/function), then skip to normal symbol processing.  */
2601       if (PARSER_EXPLICIT (parser)->line_offset.sign != LINE_OFFSET_UNKNOWN)
2602         {
2603           /* Consume this token.  */
2604           linespec_lexer_consume_token (parser);
2605
2606           goto convert_to_sals;
2607         }
2608     }
2609   else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
2610     {
2611       /* Let the default linespec_complete_what::FUNCTION kick in.  */
2612       unexpected_linespec_error (parser);
2613     }
2614   else if (token.type != LSTOKEN_STRING && token.type != LSTOKEN_NUMBER)
2615     {
2616       parser->complete_what = linespec_complete_what::NOTHING;
2617       unexpected_linespec_error (parser);
2618     }
2619
2620   /* Shortcut: If the next token is not LSTOKEN_COLON, we know that
2621      this token cannot represent a filename.  */
2622   token = linespec_lexer_peek_token (parser);
2623
2624   if (token.type == LSTOKEN_COLON)
2625     {
2626       /* Get the current token again and extract the filename.  */
2627       token = linespec_lexer_lex_one (parser);
2628       gdb::unique_xmalloc_ptr<char> user_filename = copy_token_string (token);
2629
2630       /* Check if the input is a filename.  */
2631       TRY
2632         {
2633           *PARSER_RESULT (parser)->file_symtabs
2634             = symtabs_from_filename (user_filename.get (),
2635                                      PARSER_STATE (parser)->search_pspace);
2636         }
2637       CATCH (ex, RETURN_MASK_ERROR)
2638         {
2639           file_exception = ex;
2640         }
2641       END_CATCH
2642
2643       if (file_exception.reason >= 0)
2644         {
2645           /* Symtabs were found for the file.  Record the filename.  */
2646           PARSER_EXPLICIT (parser)->source_filename = user_filename.release ();
2647
2648           /* Get the next token.  */
2649           token = linespec_lexer_consume_token (parser);
2650
2651           /* This is LSTOKEN_COLON; consume it.  */
2652           linespec_lexer_consume_token (parser);
2653         }
2654       else
2655         {
2656           /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2657           PARSER_RESULT (parser)->file_symtabs->push_back (nullptr);
2658         }
2659     }
2660   /* If the next token is not EOI, KEYWORD, or COMMA, issue an error.  */
2661   else if (parser->completion_tracker == NULL
2662            && (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD
2663                && token.type != LSTOKEN_COMMA))
2664     {
2665       /* TOKEN is the _next_ token, not the one currently in the parser.
2666          Consuming the token will give the correct error message.  */
2667       linespec_lexer_consume_token (parser);
2668       unexpected_linespec_error (parser);
2669     }
2670   else
2671     {
2672       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2673       PARSER_RESULT (parser)->file_symtabs->push_back (nullptr);
2674     }
2675
2676   /* Parse the rest of the linespec.  */
2677   linespec_parse_basic (parser);
2678
2679   if (parser->completion_tracker == NULL
2680       && PARSER_RESULT (parser)->function_symbols == NULL
2681       && PARSER_RESULT (parser)->labels.label_symbols == NULL
2682       && PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN
2683       && PARSER_RESULT (parser)->minimal_symbols == NULL)
2684     {
2685       /* The linespec didn't parse.  Re-throw the file exception if
2686          there was one.  */
2687       if (file_exception.reason < 0)
2688         throw_exception (file_exception);
2689
2690       /* Otherwise, the symbol is not found.  */
2691       symbol_not_found_error (PARSER_EXPLICIT (parser)->function_name,
2692                               PARSER_EXPLICIT (parser)->source_filename);
2693     }
2694
2695  convert_to_sals:
2696
2697   /* Get the last token and record how much of the input was parsed,
2698      if necessary.  */
2699   token = linespec_lexer_lex_one (parser);
2700   if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD)
2701     unexpected_linespec_error (parser);
2702   else if (token.type == LSTOKEN_KEYWORD)
2703     {
2704       /* Setup the completion word past the keyword.  Lexing never
2705          advances past a keyword automatically, so skip it
2706          manually.  */
2707       parser->completion_word
2708         = skip_spaces (skip_to_space (PARSER_STREAM (parser)));
2709       parser->complete_what = linespec_complete_what::EXPRESSION;
2710     }
2711
2712   /* Convert the data in PARSER_RESULT to SALs.  */
2713   if (parser->completion_tracker == NULL)
2714     return convert_linespec_to_sals (PARSER_STATE (parser),
2715                                      PARSER_RESULT (parser));
2716
2717   return {};
2718 }
2719
2720
2721 /* A constructor for linespec_state.  */
2722
2723 static void
2724 linespec_state_constructor (struct linespec_state *self,
2725                             int flags, const struct language_defn *language,
2726                             struct program_space *search_pspace,
2727                             struct symtab *default_symtab,
2728                             int default_line,
2729                             struct linespec_result *canonical)
2730 {
2731   memset (self, 0, sizeof (*self));
2732   self->language = language;
2733   self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
2734   self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
2735   self->search_pspace = search_pspace;
2736   self->default_symtab = default_symtab;
2737   self->default_line = default_line;
2738   self->canonical = canonical;
2739   self->program_space = current_program_space;
2740   self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
2741                                       xfree, xcalloc, xfree);
2742   self->is_linespec = 0;
2743 }
2744
2745 /* Initialize a new linespec parser.  */
2746
2747 linespec_parser::linespec_parser (int flags,
2748                                   const struct language_defn *language,
2749                                   struct program_space *search_pspace,
2750                                   struct symtab *default_symtab,
2751                                   int default_line,
2752                                   struct linespec_result *canonical)
2753 {
2754   lexer.current.type = LSTOKEN_CONSUMED;
2755   PARSER_RESULT (this)->file_symtabs = new std::vector<symtab *> ();
2756   PARSER_EXPLICIT (this)->func_name_match_type
2757     = symbol_name_match_type::WILD;
2758   PARSER_EXPLICIT (this)->line_offset.sign = LINE_OFFSET_UNKNOWN;
2759   linespec_state_constructor (PARSER_STATE (this), flags, language,
2760                               search_pspace,
2761                               default_symtab, default_line, canonical);
2762 }
2763
2764 /* A destructor for linespec_state.  */
2765
2766 static void
2767 linespec_state_destructor (struct linespec_state *self)
2768 {
2769   htab_delete (self->addr_set);
2770 }
2771
2772 /* Delete a linespec parser.  */
2773
2774 linespec_parser::~linespec_parser ()
2775 {
2776   xfree (PARSER_EXPLICIT (this)->source_filename);
2777   xfree (PARSER_EXPLICIT (this)->label_name);
2778   xfree (PARSER_EXPLICIT (this)->function_name);
2779
2780   delete PARSER_RESULT (this)->file_symtabs;
2781   delete PARSER_RESULT (this)->function_symbols;
2782   delete PARSER_RESULT (this)->minimal_symbols;
2783   delete PARSER_RESULT (this)->labels.label_symbols;
2784   delete PARSER_RESULT (this)->labels.function_symbols;
2785
2786   linespec_state_destructor (PARSER_STATE (this));
2787 }
2788
2789 /* See description in linespec.h.  */
2790
2791 void
2792 linespec_lex_to_end (const char **stringp)
2793 {
2794   linespec_token token;
2795   const char *orig;
2796
2797   if (stringp == NULL || *stringp == NULL)
2798     return;
2799
2800   linespec_parser parser (0, current_language, NULL, NULL, 0, NULL);
2801   parser.lexer.saved_arg = *stringp;
2802   PARSER_STREAM (&parser) = orig = *stringp;
2803
2804   do
2805     {
2806       /* Stop before any comma tokens;  we need it to keep it
2807          as the next token in the string.  */
2808       token = linespec_lexer_peek_token (&parser);
2809       if (token.type == LSTOKEN_COMMA)
2810         break;
2811       token = linespec_lexer_consume_token (&parser);
2812     }
2813   while (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD);
2814
2815   *stringp += PARSER_STREAM (&parser) - orig;
2816 }
2817
2818 /* See linespec.h.  */
2819
2820 void
2821 linespec_complete_function (completion_tracker &tracker,
2822                             const char *function,
2823                             symbol_name_match_type func_match_type,
2824                             const char *source_filename)
2825 {
2826   complete_symbol_mode mode = complete_symbol_mode::LINESPEC;
2827
2828   if (source_filename != NULL)
2829     {
2830       collect_file_symbol_completion_matches (tracker, mode, func_match_type,
2831                                               function, function, source_filename);
2832     }
2833   else
2834     {
2835       collect_symbol_completion_matches (tracker, mode, func_match_type,
2836                                          function, function);
2837
2838     }
2839 }
2840
2841 /* Helper for complete_linespec to simplify it.  SOURCE_FILENAME is
2842    only meaningful if COMPONENT is FUNCTION.  */
2843
2844 static void
2845 complete_linespec_component (linespec_parser *parser,
2846                              completion_tracker &tracker,
2847                              const char *text,
2848                              linespec_complete_what component,
2849                              const char *source_filename)
2850 {
2851   if (component == linespec_complete_what::KEYWORD)
2852     {
2853       complete_on_enum (tracker, linespec_keywords, text, text);
2854     }
2855   else if (component == linespec_complete_what::EXPRESSION)
2856     {
2857       const char *word
2858         = advance_to_expression_complete_word_point (tracker, text);
2859       complete_expression (tracker, text, word);
2860     }
2861   else if (component == linespec_complete_what::FUNCTION)
2862     {
2863       completion_list fn_list;
2864
2865       symbol_name_match_type match_type
2866         = PARSER_EXPLICIT (parser)->func_name_match_type;
2867       linespec_complete_function (tracker, text, match_type, source_filename);
2868       if (source_filename == NULL)
2869         {
2870           /* Haven't seen a source component, like in "b
2871              file.c:function[TAB]".  Maybe this wasn't a function, but
2872              a filename instead, like "b file.[TAB]".  */
2873           fn_list = complete_source_filenames (text);
2874         }
2875
2876       /* If we only have a single filename completion, append a ':' for
2877          the user, since that's the only thing that can usefully follow
2878          the filename.  */
2879       if (fn_list.size () == 1 && !tracker.have_completions ())
2880         {
2881           char *fn = fn_list[0].release ();
2882
2883           /* If we also need to append a quote char, it needs to be
2884              appended before the ':'.  Append it now, and make ':' the
2885              new "quote" char.  */
2886           if (tracker.quote_char ())
2887             {
2888               char quote_char_str[2] = { (char) tracker.quote_char () };
2889
2890               fn = reconcat (fn, fn, quote_char_str, (char *) NULL);
2891               tracker.set_quote_char (':');
2892             }
2893           else
2894             fn = reconcat (fn, fn, ":", (char *) NULL);
2895           fn_list[0].reset (fn);
2896
2897           /* Tell readline to skip appending a space.  */
2898           tracker.set_suppress_append_ws (true);
2899         }
2900       tracker.add_completions (std::move (fn_list));
2901     }
2902 }
2903
2904 /* Helper for linespec_complete_label.  Find labels that match
2905    LABEL_NAME in the function symbols listed in the PARSER, and add
2906    them to the tracker.  */
2907
2908 static void
2909 complete_label (completion_tracker &tracker,
2910                 linespec_parser *parser,
2911                 const char *label_name)
2912 {
2913   std::vector<block_symbol> label_function_symbols;
2914   std::vector<block_symbol> *labels
2915     = find_label_symbols (PARSER_STATE (parser),
2916                           PARSER_RESULT (parser)->function_symbols,
2917                           &label_function_symbols,
2918                           label_name, true);
2919
2920   if (labels != nullptr)
2921     {
2922       for (const auto &label : *labels)
2923         {
2924           char *match = xstrdup (SYMBOL_SEARCH_NAME (label.symbol));
2925           tracker.add_completion (gdb::unique_xmalloc_ptr<char> (match));
2926         }
2927       delete labels;
2928     }
2929 }
2930
2931 /* See linespec.h.  */
2932
2933 void
2934 linespec_complete_label (completion_tracker &tracker,
2935                          const struct language_defn *language,
2936                          const char *source_filename,
2937                          const char *function_name,
2938                          symbol_name_match_type func_name_match_type,
2939                          const char *label_name)
2940 {
2941   linespec_parser parser (0, language, NULL, NULL, 0, NULL);
2942
2943   line_offset unknown_offset = { 0, LINE_OFFSET_UNKNOWN };
2944
2945   TRY
2946     {
2947       convert_explicit_location_to_linespec (PARSER_STATE (&parser),
2948                                              PARSER_RESULT (&parser),
2949                                              source_filename,
2950                                              function_name,
2951                                              func_name_match_type,
2952                                              NULL, unknown_offset);
2953     }
2954   CATCH (ex, RETURN_MASK_ERROR)
2955     {
2956       return;
2957     }
2958   END_CATCH
2959
2960   complete_label (tracker, &parser, label_name);
2961 }
2962
2963 /* See description in linespec.h.  */
2964
2965 void
2966 linespec_complete (completion_tracker &tracker, const char *text,
2967                    symbol_name_match_type match_type)
2968 {
2969   const char *orig = text;
2970
2971   linespec_parser parser (0, current_language, NULL, NULL, 0, NULL);
2972   parser.lexer.saved_arg = text;
2973   PARSER_EXPLICIT (&parser)->func_name_match_type = match_type;
2974   PARSER_STREAM (&parser) = text;
2975
2976   parser.completion_tracker = &tracker;
2977   PARSER_STATE (&parser)->is_linespec = 1;
2978
2979   /* Parse as much as possible.  parser.completion_word will hold
2980      furthest completion point we managed to parse to.  */
2981   TRY
2982     {
2983       parse_linespec (&parser, text, match_type);
2984     }
2985   CATCH (except, RETURN_MASK_ERROR)
2986     {
2987     }
2988   END_CATCH
2989
2990   if (parser.completion_quote_char != '\0'
2991       && parser.completion_quote_end != NULL
2992       && parser.completion_quote_end[1] == '\0')
2993     {
2994       /* If completing a quoted string with the cursor right at
2995          terminating quote char, complete the completion word without
2996          interpretation, so that readline advances the cursor one
2997          whitespace past the quote, even if there's no match.  This
2998          makes these cases behave the same:
2999
3000            before: "b function()"
3001            after:  "b function() "
3002
3003            before: "b 'function()'"
3004            after:  "b 'function()' "
3005
3006          and trusts the user in this case:
3007
3008            before: "b 'not_loaded_function_yet()'"
3009            after:  "b 'not_loaded_function_yet()' "
3010       */
3011       parser.complete_what = linespec_complete_what::NOTHING;
3012       parser.completion_quote_char = '\0';
3013
3014       gdb::unique_xmalloc_ptr<char> text_copy
3015         (xstrdup (parser.completion_word));
3016       tracker.add_completion (std::move (text_copy));
3017     }
3018
3019   tracker.set_quote_char (parser.completion_quote_char);
3020
3021   if (parser.complete_what == linespec_complete_what::LABEL)
3022     {
3023       parser.complete_what = linespec_complete_what::NOTHING;
3024
3025       const char *func_name = PARSER_EXPLICIT (&parser)->function_name;
3026
3027       std::vector<block_symbol> function_symbols;
3028       std::vector<bound_minimal_symbol> minimal_symbols;
3029       find_linespec_symbols (PARSER_STATE (&parser),
3030                              PARSER_RESULT (&parser)->file_symtabs,
3031                              func_name, match_type,
3032                              &function_symbols, &minimal_symbols);
3033
3034       PARSER_RESULT (&parser)->function_symbols
3035         = new std::vector<block_symbol> (std::move (function_symbols));
3036       PARSER_RESULT (&parser)->minimal_symbols
3037         = new std::vector<bound_minimal_symbol> (std::move (minimal_symbols));
3038
3039       complete_label (tracker, &parser, parser.completion_word);
3040     }
3041   else if (parser.complete_what == linespec_complete_what::FUNCTION)
3042     {
3043       /* While parsing/lexing, we didn't know whether the completion
3044          word completes to a unique function/source name already or
3045          not.
3046
3047          E.g.:
3048            "b function() <tab>"
3049          may need to complete either to:
3050            "b function() const"
3051          or to:
3052            "b function() if/thread/task"
3053
3054          Or, this:
3055            "b foo t"
3056          may need to complete either to:
3057            "b foo template_fun<T>()"
3058          with "foo" being the template function's return type, or to:
3059            "b foo thread/task"
3060
3061          Or, this:
3062            "b file<TAB>"
3063          may need to complete either to a source file name:
3064            "b file.c"
3065          or this, also a filename, but a unique completion:
3066            "b file.c:"
3067          or to a function name:
3068            "b file_function"
3069
3070          Address that by completing assuming source or function, and
3071          seeing if we find a completion that matches exactly the
3072          completion word.  If so, then it must be a function (see note
3073          below) and we advance the completion word to the end of input
3074          and switch to KEYWORD completion mode.
3075
3076          Note: if we find a unique completion for a source filename,
3077          then it won't match the completion word, because the LCD will
3078          contain a trailing ':'.  And if we're completing at or after
3079          the ':', then complete_linespec_component won't try to
3080          complete on source filenames.  */
3081
3082       const char *word = parser.completion_word;
3083
3084       complete_linespec_component (&parser, tracker,
3085                                    parser.completion_word,
3086                                    linespec_complete_what::FUNCTION,
3087                                    PARSER_EXPLICIT (&parser)->source_filename);
3088
3089       parser.complete_what = linespec_complete_what::NOTHING;
3090
3091       if (tracker.quote_char ())
3092         {
3093           /* The function/file name was not close-quoted, so this
3094              can't be a keyword.  Note: complete_linespec_component
3095              may have swapped the original quote char for ':' when we
3096              get here, but that still indicates the same.  */
3097         }
3098       else if (!tracker.have_completions ())
3099         {
3100           size_t key_start;
3101           size_t wordlen = strlen (parser.completion_word);
3102
3103           key_start
3104             = string_find_incomplete_keyword_at_end (linespec_keywords,
3105                                                      parser.completion_word,
3106                                                      wordlen);
3107
3108           if (key_start != -1
3109               || (wordlen > 0
3110                   && parser.completion_word[wordlen - 1] == ' '))
3111             {
3112               parser.completion_word += key_start;
3113               parser.complete_what = linespec_complete_what::KEYWORD;
3114             }
3115         }
3116       else if (tracker.completes_to_completion_word (word))
3117         {
3118           /* Skip the function and complete on keywords.  */
3119           parser.completion_word += strlen (word);
3120           parser.complete_what = linespec_complete_what::KEYWORD;
3121           tracker.discard_completions ();
3122         }
3123     }
3124
3125   tracker.advance_custom_word_point_by (parser.completion_word - orig);
3126
3127   complete_linespec_component (&parser, tracker,
3128                                parser.completion_word,
3129                                parser.complete_what,
3130                                PARSER_EXPLICIT (&parser)->source_filename);
3131
3132   /* If we're past the "filename:function:label:offset" linespec, and
3133      didn't find any match, then assume the user might want to create
3134      a pending breakpoint anyway and offer the keyword
3135      completions.  */
3136   if (!parser.completion_quote_char
3137       && (parser.complete_what == linespec_complete_what::FUNCTION
3138           || parser.complete_what == linespec_complete_what::LABEL
3139           || parser.complete_what == linespec_complete_what::NOTHING)
3140       && !tracker.have_completions ())
3141     {
3142       const char *end
3143         = parser.completion_word + strlen (parser.completion_word);
3144
3145       if (end > orig && end[-1] == ' ')
3146         {
3147           tracker.advance_custom_word_point_by (end - parser.completion_word);
3148
3149           complete_linespec_component (&parser, tracker, end,
3150                                        linespec_complete_what::KEYWORD,
3151                                        NULL);
3152         }
3153     }
3154 }
3155
3156 /* A helper function for decode_line_full and decode_line_1 to
3157    turn LOCATION into std::vector<symtab_and_line>.  */
3158
3159 static std::vector<symtab_and_line>
3160 event_location_to_sals (linespec_parser *parser,
3161                         const struct event_location *location)
3162 {
3163   std::vector<symtab_and_line> result;
3164
3165   switch (event_location_type (location))
3166     {
3167     case LINESPEC_LOCATION:
3168       {
3169         PARSER_STATE (parser)->is_linespec = 1;
3170         TRY
3171           {
3172             const linespec_location *ls = get_linespec_location (location);
3173             result = parse_linespec (parser,
3174                                      ls->spec_string, ls->match_type);
3175           }
3176         CATCH (except, RETURN_MASK_ERROR)
3177           {
3178             throw_exception (except);
3179           }
3180         END_CATCH
3181       }
3182       break;
3183
3184     case ADDRESS_LOCATION:
3185       {
3186         const char *addr_string = get_address_string_location (location);
3187         CORE_ADDR addr = get_address_location (location);
3188
3189         if (addr_string != NULL)
3190           {
3191             addr = linespec_expression_to_pc (&addr_string);
3192             if (PARSER_STATE (parser)->canonical != NULL)
3193               PARSER_STATE (parser)->canonical->location
3194                 = copy_event_location (location);
3195           }
3196
3197         result = convert_address_location_to_sals (PARSER_STATE (parser),
3198                                                    addr);
3199       }
3200       break;
3201
3202     case EXPLICIT_LOCATION:
3203       {
3204         const struct explicit_location *explicit_loc;
3205
3206         explicit_loc = get_explicit_location_const (location);
3207         result = convert_explicit_location_to_sals (PARSER_STATE (parser),
3208                                                     PARSER_RESULT (parser),
3209                                                     explicit_loc);
3210       }
3211       break;
3212
3213     case PROBE_LOCATION:
3214       /* Probes are handled by their own decoders.  */
3215       gdb_assert_not_reached ("attempt to decode probe location");
3216       break;
3217
3218     default:
3219       gdb_assert_not_reached ("unhandled event location type");
3220     }
3221
3222   return result;
3223 }
3224
3225 /* See linespec.h.  */
3226
3227 void
3228 decode_line_full (const struct event_location *location, int flags,
3229                   struct program_space *search_pspace,
3230                   struct symtab *default_symtab,
3231                   int default_line, struct linespec_result *canonical,
3232                   const char *select_mode,
3233                   const char *filter)
3234 {
3235   std::vector<const char *> filters;
3236   struct linespec_state *state;
3237
3238   gdb_assert (canonical != NULL);
3239   /* The filter only makes sense for 'all'.  */
3240   gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
3241   gdb_assert (select_mode == NULL
3242               || select_mode == multiple_symbols_all
3243               || select_mode == multiple_symbols_ask
3244               || select_mode == multiple_symbols_cancel);
3245   gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
3246
3247   linespec_parser parser (flags, current_language,
3248                           search_pspace, default_symtab,
3249                           default_line, canonical);
3250
3251   scoped_restore_current_program_space restore_pspace;
3252
3253   std::vector<symtab_and_line> result = event_location_to_sals (&parser,
3254                                                                 location);
3255   state = PARSER_STATE (&parser);
3256
3257   gdb_assert (result.size () == 1 || canonical->pre_expanded);
3258   canonical->pre_expanded = 1;
3259
3260   /* Arrange for allocated canonical names to be freed.  */
3261   std::vector<gdb::unique_xmalloc_ptr<char>> hold_names;
3262   for (int i = 0; i < result.size (); ++i)
3263     {
3264       gdb_assert (state->canonical_names[i].suffix != NULL);
3265       hold_names.emplace_back (state->canonical_names[i].suffix);
3266     }
3267
3268   if (select_mode == NULL)
3269     {
3270       if (top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ())
3271         select_mode = multiple_symbols_all;
3272       else
3273         select_mode = multiple_symbols_select_mode ();
3274     }
3275
3276   if (select_mode == multiple_symbols_all)
3277     {
3278       if (filter != NULL)
3279         {
3280           filters.push_back (filter);
3281           filter_results (state, &result, filters);
3282         }
3283       else
3284         convert_results_to_lsals (state, &result);
3285     }
3286   else
3287     decode_line_2 (state, &result, select_mode);
3288 }
3289
3290 /* See linespec.h.  */
3291
3292 std::vector<symtab_and_line>
3293 decode_line_1 (const struct event_location *location, int flags,
3294                struct program_space *search_pspace,
3295                struct symtab *default_symtab,
3296                int default_line)
3297 {
3298   linespec_parser parser (flags, current_language,
3299                           search_pspace, default_symtab,
3300                           default_line, NULL);
3301
3302   scoped_restore_current_program_space restore_pspace;
3303
3304   return event_location_to_sals (&parser, location);
3305 }
3306
3307 /* See linespec.h.  */
3308
3309 std::vector<symtab_and_line>
3310 decode_line_with_current_source (const char *string, int flags)
3311 {
3312   if (string == 0)
3313     error (_("Empty line specification."));
3314
3315   /* We use whatever is set as the current source line.  We do not try
3316      and get a default source symtab+line or it will recursively call us!  */
3317   symtab_and_line cursal = get_current_source_symtab_and_line ();
3318
3319   event_location_up location = string_to_event_location (&string,
3320                                                          current_language);
3321   std::vector<symtab_and_line> sals
3322     = decode_line_1 (location.get (), flags, NULL, cursal.symtab, cursal.line);
3323
3324   if (*string)
3325     error (_("Junk at end of line specification: %s"), string);
3326
3327   return sals;
3328 }
3329
3330 /* See linespec.h.  */
3331
3332 std::vector<symtab_and_line>
3333 decode_line_with_last_displayed (const char *string, int flags)
3334 {
3335   if (string == 0)
3336     error (_("Empty line specification."));
3337
3338   event_location_up location = string_to_event_location (&string,
3339                                                          current_language);
3340   std::vector<symtab_and_line> sals
3341     = (last_displayed_sal_is_valid ()
3342        ? decode_line_1 (location.get (), flags, NULL,
3343                         get_last_displayed_symtab (),
3344                         get_last_displayed_line ())
3345        : decode_line_1 (location.get (), flags, NULL,
3346                         (struct symtab *) NULL, 0));
3347
3348   if (*string)
3349     error (_("Junk at end of line specification: %s"), string);
3350
3351   return sals;
3352 }
3353
3354 \f
3355
3356 /* First, some functions to initialize stuff at the beggining of the
3357    function.  */
3358
3359 static void
3360 initialize_defaults (struct symtab **default_symtab, int *default_line)
3361 {
3362   if (*default_symtab == 0)
3363     {
3364       /* Use whatever we have for the default source line.  We don't use
3365          get_current_or_default_symtab_and_line as it can recurse and call
3366          us back!  */
3367       struct symtab_and_line cursal = 
3368         get_current_source_symtab_and_line ();
3369       
3370       *default_symtab = cursal.symtab;
3371       *default_line = cursal.line;
3372     }
3373 }
3374
3375 \f
3376
3377 /* Evaluate the expression pointed to by EXP_PTR into a CORE_ADDR,
3378    advancing EXP_PTR past any parsed text.  */
3379
3380 CORE_ADDR
3381 linespec_expression_to_pc (const char **exp_ptr)
3382 {
3383   if (current_program_space->executing_startup)
3384     /* The error message doesn't really matter, because this case
3385        should only hit during breakpoint reset.  */
3386     throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
3387                                     "program space is in startup"));
3388
3389   (*exp_ptr)++;
3390   return value_as_address (parse_to_comma_and_eval (exp_ptr));
3391 }
3392
3393 \f
3394
3395 /* Here's where we recognise an Objective-C Selector.  An Objective C
3396    selector may be implemented by more than one class, therefore it
3397    may represent more than one method/function.  This gives us a
3398    situation somewhat analogous to C++ overloading.  If there's more
3399    than one method that could represent the selector, then use some of
3400    the existing C++ code to let the user choose one.  */
3401
3402 static std::vector<symtab_and_line>
3403 decode_objc (struct linespec_state *self, linespec_p ls, const char *arg)
3404 {
3405   struct collect_info info;
3406   std::vector<const char *> symbol_names;
3407   const char *new_argptr;
3408
3409   info.state = self;
3410   std::vector<symtab *> symtabs;
3411   symtabs.push_back (nullptr);
3412
3413   info.file_symtabs = &symtabs;
3414
3415   std::vector<block_symbol> symbols;
3416   info.result.symbols = &symbols;
3417   std::vector<bound_minimal_symbol> minimal_symbols;
3418   info.result.minimal_symbols = &minimal_symbols;
3419
3420   new_argptr = find_imps (arg, &symbol_names);
3421   if (symbol_names.empty ())
3422     return {};
3423
3424   add_all_symbol_names_from_pspace (&info, NULL, symbol_names,
3425                                     FUNCTIONS_DOMAIN);
3426
3427   std::vector<symtab_and_line> values;
3428   if (!symbols.empty () || !minimal_symbols.empty ())
3429     {
3430       char *saved_arg;
3431
3432       saved_arg = (char *) alloca (new_argptr - arg + 1);
3433       memcpy (saved_arg, arg, new_argptr - arg);
3434       saved_arg[new_argptr - arg] = '\0';
3435
3436       ls->explicit_loc.function_name = xstrdup (saved_arg);
3437       ls->function_symbols
3438         = new std::vector<block_symbol> (std::move (symbols));
3439       ls->minimal_symbols
3440         = new std::vector<bound_minimal_symbol> (std::move (minimal_symbols));
3441       values = convert_linespec_to_sals (self, ls);
3442
3443       if (self->canonical)
3444         {
3445           std::string holder;
3446           const char *str;
3447
3448           self->canonical->pre_expanded = 1;
3449
3450           if (ls->explicit_loc.source_filename)
3451             {
3452               holder = string_printf ("%s:%s",
3453                                       ls->explicit_loc.source_filename,
3454                                       saved_arg);
3455               str = holder.c_str ();
3456             }
3457           else
3458             str = saved_arg;
3459
3460           self->canonical->location
3461             = new_linespec_location (&str, symbol_name_match_type::FULL);
3462         }
3463     }
3464
3465   return values;
3466 }
3467
3468 namespace {
3469
3470 /* A function object that serves as symbol_found_callback_ftype
3471    callback for iterate_over_symbols.  This is used by
3472    lookup_prefix_sym to collect type symbols.  */
3473 class decode_compound_collector
3474 {
3475 public:
3476   decode_compound_collector ()
3477   {
3478     m_unique_syms = htab_create_alloc (1, htab_hash_pointer,
3479                                        htab_eq_pointer, NULL,
3480                                        xcalloc, xfree);
3481   }
3482
3483   ~decode_compound_collector ()
3484   {
3485     if (m_unique_syms != NULL)
3486       htab_delete (m_unique_syms);
3487   }
3488
3489   /* Return all symbols collected.  */
3490   std::vector<block_symbol> release_symbols ()
3491   {
3492     return std::move (m_symbols);
3493   }
3494
3495   /* Callable as a symbol_found_callback_ftype callback.  */
3496   bool operator () (block_symbol *bsym);
3497
3498 private:
3499   /* A hash table of all symbols we found.  We use this to avoid
3500      adding any symbol more than once.  */
3501   htab_t m_unique_syms;
3502
3503   /* The result vector.  */
3504   std::vector<block_symbol>  m_symbols;
3505 };
3506
3507 bool
3508 decode_compound_collector::operator () (block_symbol *bsym)
3509 {
3510   void **slot;
3511   struct type *t;
3512   struct symbol *sym = bsym->symbol;
3513
3514   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
3515     return true; /* Continue iterating.  */
3516
3517   t = SYMBOL_TYPE (sym);
3518   t = check_typedef (t);
3519   if (TYPE_CODE (t) != TYPE_CODE_STRUCT
3520       && TYPE_CODE (t) != TYPE_CODE_UNION
3521       && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
3522     return true; /* Continue iterating.  */
3523
3524   slot = htab_find_slot (m_unique_syms, sym, INSERT);
3525   if (!*slot)
3526     {
3527       *slot = sym;
3528       m_symbols.push_back (*bsym);
3529     }
3530
3531   return true; /* Continue iterating.  */
3532 }
3533
3534 } // namespace
3535
3536 /* Return any symbols corresponding to CLASS_NAME in FILE_SYMTABS.  */
3537
3538 static std::vector<block_symbol>
3539 lookup_prefix_sym (struct linespec_state *state,
3540                    std::vector<symtab *> *file_symtabs,
3541                    const char *class_name)
3542 {
3543   decode_compound_collector collector;
3544
3545   lookup_name_info lookup_name (class_name, symbol_name_match_type::FULL);
3546
3547   for (const auto &elt : *file_symtabs)
3548     {
3549       if (elt == nullptr)
3550         {
3551           iterate_over_all_matching_symtabs (state, lookup_name,
3552                                              STRUCT_DOMAIN, ALL_DOMAIN,
3553                                              NULL, false, collector);
3554           iterate_over_all_matching_symtabs (state, lookup_name,
3555                                              VAR_DOMAIN, ALL_DOMAIN,
3556                                              NULL, false, collector);
3557         }
3558       else
3559         {
3560           /* Program spaces that are executing startup should have
3561              been filtered out earlier.  */
3562           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
3563           set_current_program_space (SYMTAB_PSPACE (elt));
3564           iterate_over_file_blocks (elt, lookup_name, STRUCT_DOMAIN, collector);
3565           iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN, collector);
3566         }
3567     }
3568
3569   return collector.release_symbols ();
3570 }
3571
3572 /* A std::sort comparison function for symbols.  The resulting order does
3573    not actually matter; we just need to be able to sort them so that
3574    symbols with the same program space end up next to each other.  */
3575
3576 static bool
3577 compare_symbols (const block_symbol &a, const block_symbol &b)
3578 {
3579   uintptr_t uia, uib;
3580
3581   uia = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (a.symbol));
3582   uib = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (b.symbol));
3583
3584   if (uia < uib)
3585     return true;
3586   if (uia > uib)
3587     return false;
3588
3589   uia = (uintptr_t) a.symbol;
3590   uib = (uintptr_t) b.symbol;
3591
3592   if (uia < uib)
3593     return true;
3594
3595   return false;
3596 }
3597
3598 /* Like compare_symbols but for minimal symbols.  */
3599
3600 static bool
3601 compare_msymbols (const bound_minimal_symbol &a, const bound_minimal_symbol &b)
3602 {
3603   uintptr_t uia, uib;
3604
3605   uia = (uintptr_t) a.objfile->pspace;
3606   uib = (uintptr_t) a.objfile->pspace;
3607
3608   if (uia < uib)
3609     return true;
3610   if (uia > uib)
3611     return false;
3612
3613   uia = (uintptr_t) a.minsym;
3614   uib = (uintptr_t) b.minsym;
3615
3616   if (uia < uib)
3617     return true;
3618
3619   return false;
3620 }
3621
3622 /* Look for all the matching instances of each symbol in NAMES.  Only
3623    instances from PSPACE are considered; other program spaces are
3624    handled by our caller.  If PSPACE is NULL, then all program spaces
3625    are considered.  Results are stored into INFO.  */
3626
3627 static void
3628 add_all_symbol_names_from_pspace (struct collect_info *info,
3629                                   struct program_space *pspace,
3630                                   const std::vector<const char *> &names,
3631                                   enum search_domain search_domain)
3632 {
3633   for (const char *iter : names)
3634     add_matching_symbols_to_info (iter,
3635                                   symbol_name_match_type::FULL,
3636                                   search_domain, info, pspace);
3637 }
3638
3639 static void
3640 find_superclass_methods (std::vector<struct type *> &&superclasses,
3641                          const char *name, enum language name_lang,
3642                          std::vector<const char *> *result_names)
3643 {
3644   size_t old_len = result_names->size ();
3645
3646   while (1)
3647     {
3648       std::vector<struct type *> new_supers;
3649
3650       for (type *t : superclasses)
3651         find_methods (t, name_lang, name, result_names, &new_supers);
3652
3653       if (result_names->size () != old_len || new_supers.empty ())
3654         break;
3655
3656       superclasses = std::move (new_supers);
3657     }
3658 }
3659
3660 /* This finds the method METHOD_NAME in the class CLASS_NAME whose type is
3661    given by one of the symbols in SYM_CLASSES.  Matches are returned
3662    in SYMBOLS (for debug symbols) and MINSYMS (for minimal symbols).  */
3663
3664 static void
3665 find_method (struct linespec_state *self, std::vector<symtab *> *file_symtabs,
3666              const char *class_name, const char *method_name,
3667              std::vector<block_symbol> *sym_classes,
3668              std::vector<block_symbol> *symbols,
3669              std::vector<bound_minimal_symbol> *minsyms)
3670 {
3671   size_t last_result_len;
3672   std::vector<struct type *> superclass_vec;
3673   std::vector<const char *> result_names;
3674   struct collect_info info;
3675
3676   /* Sort symbols so that symbols with the same program space are next
3677      to each other.  */
3678   std::sort (sym_classes->begin (), sym_classes->end (),
3679              compare_symbols);
3680
3681   info.state = self;
3682   info.file_symtabs = file_symtabs;
3683   info.result.symbols = symbols;
3684   info.result.minimal_symbols = minsyms;
3685
3686   /* Iterate over all the types, looking for the names of existing
3687      methods matching METHOD_NAME.  If we cannot find a direct method in a
3688      given program space, then we consider inherited methods; this is
3689      not ideal (ideal would be to respect C++ hiding rules), but it
3690      seems good enough and is what GDB has historically done.  We only
3691      need to collect the names because later we find all symbols with
3692      those names.  This loop is written in a somewhat funny way
3693      because we collect data across the program space before deciding
3694      what to do.  */
3695   last_result_len = 0;
3696   unsigned int ix = 0;
3697   for (const auto &elt : *sym_classes)
3698     {
3699       struct type *t;
3700       struct program_space *pspace;
3701       struct symbol *sym = elt.symbol;
3702
3703       /* Program spaces that are executing startup should have
3704          been filtered out earlier.  */
3705       pspace = SYMTAB_PSPACE (symbol_symtab (sym));
3706       gdb_assert (!pspace->executing_startup);
3707       set_current_program_space (pspace);
3708       t = check_typedef (SYMBOL_TYPE (sym));
3709       find_methods (t, SYMBOL_LANGUAGE (sym),
3710                     method_name, &result_names, &superclass_vec);
3711
3712       /* Handle all items from a single program space at once; and be
3713          sure not to miss the last batch.  */
3714       if (ix == sym_classes->size () - 1
3715           || (pspace
3716               != SYMTAB_PSPACE (symbol_symtab (sym_classes->at (ix + 1).symbol))))
3717         {
3718           /* If we did not find a direct implementation anywhere in
3719              this program space, consider superclasses.  */
3720           if (result_names.size () == last_result_len)
3721             find_superclass_methods (std::move (superclass_vec), method_name,
3722                                      SYMBOL_LANGUAGE (sym), &result_names);
3723
3724           /* We have a list of candidate symbol names, so now we
3725              iterate over the symbol tables looking for all
3726              matches in this pspace.  */
3727           add_all_symbol_names_from_pspace (&info, pspace, result_names,
3728                                             FUNCTIONS_DOMAIN);
3729
3730           superclass_vec.clear ();
3731           last_result_len = result_names.size ();
3732           ++ix;
3733         }
3734     }
3735
3736   if (!symbols->empty () || !minsyms->empty ())
3737     return;
3738
3739   /* Throw an NOT_FOUND_ERROR.  This will be caught by the caller
3740      and other attempts to locate the symbol will be made.  */
3741   throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
3742 }
3743
3744 \f
3745
3746 namespace {
3747
3748 /* This function object is a callback for iterate_over_symtabs, used
3749    when collecting all matching symtabs.  */
3750
3751 class symtab_collector
3752 {
3753 public:
3754   symtab_collector ()
3755   {
3756     m_symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
3757                                   NULL);
3758   }
3759
3760   ~symtab_collector ()
3761   {
3762     if (m_symtab_table != NULL)
3763       htab_delete (m_symtab_table);
3764   }
3765
3766   /* Callable as a symbol_found_callback_ftype callback.  */
3767   bool operator () (symtab *sym);
3768
3769   /* Return an rvalue reference to the collected symtabs.  */
3770   std::vector<symtab *> &&release_symtabs ()
3771   {
3772     return std::move (m_symtabs);
3773   }
3774
3775 private:
3776   /* The result vector of symtabs.  */
3777   std::vector<symtab *> m_symtabs;
3778
3779   /* This is used to ensure the symtabs are unique.  */
3780   htab_t m_symtab_table;
3781 };
3782
3783 bool
3784 symtab_collector::operator () (struct symtab *symtab)
3785 {
3786   void **slot;
3787
3788   slot = htab_find_slot (m_symtab_table, symtab, INSERT);
3789   if (!*slot)
3790     {
3791       *slot = symtab;
3792       m_symtabs.push_back (symtab);
3793     }
3794
3795   return false;
3796 }
3797
3798 } // namespace
3799
3800 /* Given a file name, return a list of all matching symtabs.  If
3801    SEARCH_PSPACE is not NULL, the search is restricted to just that
3802    program space.  */
3803
3804 static std::vector<symtab *>
3805 collect_symtabs_from_filename (const char *file,
3806                                struct program_space *search_pspace)
3807 {
3808   symtab_collector collector;
3809
3810   /* Find that file's data.  */
3811   if (search_pspace == NULL)
3812     {
3813       struct program_space *pspace;
3814
3815       ALL_PSPACES (pspace)
3816         {
3817           if (pspace->executing_startup)
3818             continue;
3819
3820           set_current_program_space (pspace);
3821           iterate_over_symtabs (file, collector);
3822         }
3823     }
3824   else
3825     {
3826       set_current_program_space (search_pspace);
3827       iterate_over_symtabs (file, collector);
3828     }
3829
3830   return collector.release_symtabs ();
3831 }
3832
3833 /* Return all the symtabs associated to the FILENAME.  If SEARCH_PSPACE is
3834    not NULL, the search is restricted to just that program space.  */
3835
3836 static std::vector<symtab *>
3837 symtabs_from_filename (const char *filename,
3838                        struct program_space *search_pspace)
3839 {
3840   std::vector<symtab *> result
3841     = collect_symtabs_from_filename (filename, search_pspace);
3842
3843   if (result.empty ())
3844     {
3845       if (!have_full_symbols () && !have_partial_symbols ())
3846         throw_error (NOT_FOUND_ERROR,
3847                      _("No symbol table is loaded.  "
3848                        "Use the \"file\" command."));
3849       source_file_not_found_error (filename);
3850     }
3851
3852   return result;
3853 }
3854
3855 /* See symtab.h.  */
3856
3857 void
3858 symbol_searcher::find_all_symbols (const std::string &name,
3859                                    const struct language_defn *language,
3860                                    enum search_domain search_domain,
3861                                    std::vector<symtab *> *search_symtabs,
3862                                    struct program_space *search_pspace)
3863 {
3864   symbol_searcher_collect_info info;
3865   struct linespec_state state;
3866
3867   memset (&state, 0, sizeof (state));
3868   state.language = language;
3869   info.state = &state;
3870
3871   info.result.symbols = &m_symbols;
3872   info.result.minimal_symbols = &m_minimal_symbols;
3873   std::vector<symtab *> all_symtabs;
3874   if (search_symtabs == nullptr)
3875     {
3876       all_symtabs.push_back (nullptr);
3877       search_symtabs = &all_symtabs;
3878     }
3879   info.file_symtabs = search_symtabs;
3880
3881   add_matching_symbols_to_info (name.c_str (), symbol_name_match_type::WILD,
3882                                 search_domain, &info, search_pspace);
3883 }
3884
3885 /* Look up a function symbol named NAME in symtabs FILE_SYMTABS.  Matching
3886    debug symbols are returned in SYMBOLS.  Matching minimal symbols are
3887    returned in MINSYMS.  */
3888
3889 static void
3890 find_function_symbols (struct linespec_state *state,
3891                        std::vector<symtab *> *file_symtabs, const char *name,
3892                        symbol_name_match_type name_match_type,
3893                        std::vector<block_symbol> *symbols,
3894                        std::vector<bound_minimal_symbol> *minsyms)
3895 {
3896   struct collect_info info;
3897   std::vector<const char *> symbol_names;
3898
3899   info.state = state;
3900   info.result.symbols = symbols;
3901   info.result.minimal_symbols = minsyms;
3902   info.file_symtabs = file_symtabs;
3903
3904   /* Try NAME as an Objective-C selector.  */
3905   find_imps (name, &symbol_names);
3906   if (!symbol_names.empty ())
3907     add_all_symbol_names_from_pspace (&info, state->search_pspace,
3908                                       symbol_names, FUNCTIONS_DOMAIN);
3909   else
3910     add_matching_symbols_to_info (name, name_match_type, FUNCTIONS_DOMAIN,
3911                                   &info, state->search_pspace);
3912 }
3913
3914 /* Find all symbols named NAME in FILE_SYMTABS, returning debug symbols
3915    in SYMBOLS and minimal symbols in MINSYMS.  */
3916
3917 static void
3918 find_linespec_symbols (struct linespec_state *state,
3919                        std::vector<symtab *> *file_symtabs,
3920                        const char *lookup_name,
3921                        symbol_name_match_type name_match_type,
3922                        std::vector <block_symbol> *symbols,
3923                        std::vector<bound_minimal_symbol> *minsyms)
3924 {
3925   std::string canon = cp_canonicalize_string_no_typedefs (lookup_name);
3926   if (!canon.empty ())
3927     lookup_name = canon.c_str ();
3928
3929   /* It's important to not call expand_symtabs_matching unnecessarily
3930      as it can really slow things down (by unnecessarily expanding
3931      potentially 1000s of symtabs, which when debugging some apps can
3932      cost 100s of seconds).  Avoid this to some extent by *first* calling
3933      find_function_symbols, and only if that doesn't find anything
3934      *then* call find_method.  This handles two important cases:
3935      1) break (anonymous namespace)::foo
3936      2) break class::method where method is in class (and not a baseclass)  */
3937
3938   find_function_symbols (state, file_symtabs, lookup_name,
3939                          name_match_type, symbols, minsyms);
3940
3941   /* If we were unable to locate a symbol of the same name, try dividing
3942      the name into class and method names and searching the class and its
3943      baseclasses.  */
3944   if (symbols->empty () && minsyms->empty ())
3945     {
3946       std::string klass, method;
3947       const char *last, *p, *scope_op;
3948
3949       /* See if we can find a scope operator and break this symbol
3950          name into namespaces${SCOPE_OPERATOR}class_name and method_name.  */
3951       scope_op = "::";
3952       p = find_toplevel_string (lookup_name, scope_op);
3953
3954       last = NULL;
3955       while (p != NULL)
3956         {
3957           last = p;
3958           p = find_toplevel_string (p + strlen (scope_op), scope_op);
3959         }
3960
3961       /* If no scope operator was found, there is nothing more we can do;
3962          we already attempted to lookup the entire name as a symbol
3963          and failed.  */
3964       if (last == NULL)
3965         return;
3966
3967       /* LOOKUP_NAME points to the class name.
3968          LAST points to the method name.  */
3969       klass = std::string (lookup_name, last - lookup_name);
3970
3971       /* Skip past the scope operator.  */
3972       last += strlen (scope_op);
3973       method = last;
3974
3975       /* Find a list of classes named KLASS.  */
3976       std::vector<block_symbol> classes
3977         = lookup_prefix_sym (state, file_symtabs, klass.c_str ());
3978       if (!classes.empty ())
3979         {
3980           /* Now locate a list of suitable methods named METHOD.  */
3981           TRY
3982             {
3983               find_method (state, file_symtabs,
3984                            klass.c_str (), method.c_str (),
3985                            &classes, symbols, minsyms);
3986             }
3987
3988           /* If successful, we're done.  If NOT_FOUND_ERROR
3989              was not thrown, rethrow the exception that we did get.  */
3990           CATCH (except, RETURN_MASK_ERROR)
3991             {
3992               if (except.error != NOT_FOUND_ERROR)
3993                 throw_exception (except);
3994             }
3995           END_CATCH
3996         }
3997     }
3998 }
3999
4000 /* Helper for find_label_symbols.  Find all labels that match name
4001    NAME in BLOCK.  Return all labels that match in FUNCTION_SYMBOLS.
4002    Return the actual function symbol in which the label was found in
4003    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
4004    interpreted as a label name prefix.  Otherwise, only a label named
4005    exactly NAME match.  */
4006
4007 static void
4008 find_label_symbols_in_block (const struct block *block,
4009                              const char *name, struct symbol *fn_sym,
4010                              bool completion_mode,
4011                              std::vector<block_symbol> *result,
4012                              std::vector<block_symbol> *label_funcs_ret)
4013 {
4014   if (completion_mode)
4015     {
4016       struct block_iterator iter;
4017       struct symbol *sym;
4018       size_t name_len = strlen (name);
4019
4020       int (*cmp) (const char *, const char *, size_t);
4021       cmp = case_sensitivity == case_sensitive_on ? strncmp : strncasecmp;
4022
4023       ALL_BLOCK_SYMBOLS (block, iter, sym)
4024         {
4025           if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4026                                      SYMBOL_DOMAIN (sym), LABEL_DOMAIN)
4027               && cmp (SYMBOL_SEARCH_NAME (sym), name, name_len) == 0)
4028             {
4029               result->push_back ({sym, block});
4030               label_funcs_ret->push_back ({fn_sym, block});
4031             }
4032         }
4033     }
4034   else
4035     {
4036       struct block_symbol label_sym
4037         = lookup_symbol (name, block, LABEL_DOMAIN, 0);
4038
4039       if (label_sym.symbol != NULL)
4040         {
4041           result->push_back (label_sym);
4042           label_funcs_ret->push_back ({fn_sym, block});
4043         }
4044     }
4045 }
4046
4047 /* Return all labels that match name NAME in FUNCTION_SYMBOLS or NULL
4048    if no matches were found.
4049
4050    Return the actual function symbol in which the label was found in
4051    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
4052    interpreted as a label name prefix.  Otherwise, only labels named
4053    exactly NAME match.  */
4054
4055
4056 static std::vector<block_symbol> *
4057 find_label_symbols (struct linespec_state *self,
4058                     std::vector<block_symbol> *function_symbols,
4059                     std::vector<block_symbol> *label_funcs_ret,
4060                     const char *name,
4061                     bool completion_mode)
4062 {
4063   const struct block *block;
4064   struct symbol *fn_sym;
4065   std::vector<block_symbol> result;
4066
4067   if (function_symbols == NULL)
4068     {
4069       set_current_program_space (self->program_space);
4070       block = get_current_search_block ();
4071
4072       for (;
4073            block && !BLOCK_FUNCTION (block);
4074            block = BLOCK_SUPERBLOCK (block))
4075         ;
4076       if (!block)
4077         return NULL;
4078       fn_sym = BLOCK_FUNCTION (block);
4079
4080       find_label_symbols_in_block (block, name, fn_sym, completion_mode,
4081                                    &result, label_funcs_ret);
4082     }
4083   else
4084     {
4085       for (const auto &elt : *function_symbols)
4086         {
4087           fn_sym = elt.symbol;
4088           set_current_program_space (SYMTAB_PSPACE (symbol_symtab (fn_sym)));
4089           block = SYMBOL_BLOCK_VALUE (fn_sym);
4090
4091           find_label_symbols_in_block (block, name, fn_sym, completion_mode,
4092                                        &result, label_funcs_ret);
4093         }
4094     }
4095
4096   if (!result.empty ())
4097     return new std::vector<block_symbol> (std::move (result));
4098   return nullptr;
4099 }
4100
4101 \f
4102
4103 /* A helper for create_sals_line_offset that handles the 'list_mode' case.  */
4104
4105 static std::vector<symtab_and_line>
4106 decode_digits_list_mode (struct linespec_state *self,
4107                          linespec_p ls,
4108                          struct symtab_and_line val)
4109 {
4110   gdb_assert (self->list_mode);
4111
4112   std::vector<symtab_and_line> values;
4113
4114   for (const auto &elt : *ls->file_symtabs)
4115     {
4116       /* The logic above should ensure this.  */
4117       gdb_assert (elt != NULL);
4118
4119       set_current_program_space (SYMTAB_PSPACE (elt));
4120
4121       /* Simplistic search just for the list command.  */
4122       val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
4123       if (val.symtab == NULL)
4124         val.symtab = elt;
4125       val.pspace = SYMTAB_PSPACE (elt);
4126       val.pc = 0;
4127       val.explicit_line = 1;
4128
4129       add_sal_to_sals (self, &values, &val, NULL, 0);
4130     }
4131
4132   return values;
4133 }
4134
4135 /* A helper for create_sals_line_offset that iterates over the symtabs,
4136    adding lines to the VEC.  */
4137
4138 static std::vector<symtab_and_line>
4139 decode_digits_ordinary (struct linespec_state *self,
4140                         linespec_p ls,
4141                         int line,
4142                         struct linetable_entry **best_entry)
4143 {
4144   std::vector<symtab_and_line> sals;
4145   for (const auto &elt : *ls->file_symtabs)
4146     {
4147       std::vector<CORE_ADDR> pcs;
4148
4149       /* The logic above should ensure this.  */
4150       gdb_assert (elt != NULL);
4151
4152       set_current_program_space (SYMTAB_PSPACE (elt));
4153
4154       pcs = find_pcs_for_symtab_line (elt, line, best_entry);
4155       for (CORE_ADDR pc : pcs)
4156         {
4157           symtab_and_line sal;
4158           sal.pspace = SYMTAB_PSPACE (elt);
4159           sal.symtab = elt;
4160           sal.line = line;
4161           sal.pc = pc;
4162           sals.push_back (std::move (sal));
4163         }
4164     }
4165
4166   return sals;
4167 }
4168
4169 \f
4170
4171 /* Return the line offset represented by VARIABLE.  */
4172
4173 static struct line_offset
4174 linespec_parse_variable (struct linespec_state *self, const char *variable)
4175 {
4176   int index = 0;
4177   const char *p;
4178   struct line_offset offset = {0, LINE_OFFSET_NONE};
4179
4180   p = (variable[1] == '$') ? variable + 2 : variable + 1;
4181   if (*p == '$')
4182     ++p;
4183   while (*p >= '0' && *p <= '9')
4184     ++p;
4185   if (!*p)              /* Reached end of token without hitting non-digit.  */
4186     {
4187       /* We have a value history reference.  */
4188       struct value *val_history;
4189
4190       sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index);
4191       val_history
4192         = access_value_history ((variable[1] == '$') ? -index : index);
4193       if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
4194         error (_("History values used in line "
4195                  "specs must have integer values."));
4196       offset.offset = value_as_long (val_history);
4197     }
4198   else
4199     {
4200       /* Not all digits -- may be user variable/function or a
4201          convenience variable.  */
4202       LONGEST valx;
4203       struct internalvar *ivar;
4204
4205       /* Try it as a convenience variable.  If it is not a convenience
4206          variable, return and allow normal symbol lookup to occur.  */
4207       ivar = lookup_only_internalvar (variable + 1);
4208       if (ivar == NULL)
4209         /* No internal variable with that name.  Mark the offset
4210            as unknown to allow the name to be looked up as a symbol.  */
4211         offset.sign = LINE_OFFSET_UNKNOWN;
4212       else
4213         {
4214           /* We found a valid variable name.  If it is not an integer,
4215              throw an error.  */
4216           if (!get_internalvar_integer (ivar, &valx))
4217             error (_("Convenience variables used in line "
4218                      "specs must have integer values."));
4219           else
4220             offset.offset = valx;
4221         }
4222     }
4223
4224   return offset;
4225 }
4226 \f
4227
4228 /* We've found a minimal symbol MSYMBOL in OBJFILE to associate with our
4229    linespec; return the SAL in RESULT.  This function should return SALs
4230    matching those from find_function_start_sal, otherwise false
4231    multiple-locations breakpoints could be placed.  */
4232
4233 static void
4234 minsym_found (struct linespec_state *self, struct objfile *objfile,
4235               struct minimal_symbol *msymbol,
4236               std::vector<symtab_and_line> *result)
4237 {
4238   bool want_start_sal;
4239
4240   CORE_ADDR func_addr;
4241   bool is_function = msymbol_is_function (objfile, msymbol, &func_addr);
4242
4243   if (is_function)
4244     {
4245       const char *msym_name = MSYMBOL_LINKAGE_NAME (msymbol);
4246
4247       if (MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
4248           || MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
4249         want_start_sal = gnu_ifunc_resolve_name (msym_name, &func_addr);
4250       else
4251         want_start_sal = true;
4252     }
4253
4254   symtab_and_line sal;
4255
4256   if (is_function && want_start_sal)
4257     sal = find_function_start_sal (func_addr, NULL, self->funfirstline);
4258   else
4259     {
4260       sal.objfile = objfile;
4261       sal.msymbol = msymbol;
4262       /* Store func_addr, not the minsym's address in case this was an
4263          ifunc that hasn't been resolved yet.  */
4264       if (is_function)
4265         sal.pc = func_addr;
4266       else
4267         sal.pc = MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
4268       sal.pspace = current_program_space;
4269     }
4270
4271   sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
4272
4273   if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
4274     add_sal_to_sals (self, result, &sal, MSYMBOL_NATURAL_NAME (msymbol), 0);
4275 }
4276
4277 /* A helper function to classify a minimal_symbol_type according to
4278    priority.  */
4279
4280 static int
4281 classify_mtype (enum minimal_symbol_type t)
4282 {
4283   switch (t)
4284     {
4285     case mst_file_text:
4286     case mst_file_data:
4287     case mst_file_bss:
4288       /* Intermediate priority.  */
4289       return 1;
4290
4291     case mst_solib_trampoline:
4292       /* Lowest priority.  */
4293       return 2;
4294
4295     default:
4296       /* Highest priority.  */
4297       return 0;
4298     }
4299 }
4300
4301 /* Callback for std::sort that sorts symbols by priority.  */
4302
4303 static bool
4304 compare_msyms (const bound_minimal_symbol &a, const bound_minimal_symbol &b)
4305 {
4306   enum minimal_symbol_type ta = MSYMBOL_TYPE (a.minsym);
4307   enum minimal_symbol_type tb = MSYMBOL_TYPE (b.minsym);
4308
4309   return classify_mtype (ta) < classify_mtype (tb);
4310 }
4311
4312 /* Helper for search_minsyms_for_name that adds the symbol to the
4313    result.  */
4314
4315 static void
4316 add_minsym (struct minimal_symbol *minsym, struct objfile *objfile,
4317             struct symtab *symtab, int list_mode,
4318             std::vector<struct bound_minimal_symbol> *msyms)
4319 {
4320   if (symtab != NULL)
4321     {
4322       /* We're looking for a label for which we don't have debug
4323          info.  */
4324       CORE_ADDR func_addr;
4325       if (msymbol_is_function (objfile, minsym, &func_addr))
4326         {
4327           symtab_and_line sal = find_pc_sect_line (func_addr, NULL, 0);
4328
4329           if (symtab != sal.symtab)
4330             return;
4331         }
4332     }
4333
4334   /* Exclude data symbols when looking for breakpoint locations.  */
4335   if (!list_mode && !msymbol_is_function (objfile, minsym))
4336     return;
4337
4338   struct bound_minimal_symbol mo = {minsym, objfile};
4339   msyms->push_back (mo);
4340   return;
4341 }
4342
4343 /* Search for minimal symbols called NAME.  If SEARCH_PSPACE
4344    is not NULL, the search is restricted to just that program
4345    space.
4346
4347    If SYMTAB is NULL, search all objfiles, otherwise
4348    restrict results to the given SYMTAB.  */
4349
4350 static void
4351 search_minsyms_for_name (struct collect_info *info,
4352                          const lookup_name_info &name,
4353                          struct program_space *search_pspace,
4354                          struct symtab *symtab)
4355 {
4356   std::vector<struct bound_minimal_symbol> minsyms;
4357
4358   if (symtab == NULL)
4359     {
4360       struct program_space *pspace;
4361
4362       ALL_PSPACES (pspace)
4363       {
4364         struct objfile *objfile;
4365
4366         if (search_pspace != NULL && search_pspace != pspace)
4367           continue;
4368         if (pspace->executing_startup)
4369           continue;
4370
4371         set_current_program_space (pspace);
4372
4373         ALL_OBJFILES (objfile)
4374         {
4375           iterate_over_minimal_symbols (objfile, name,
4376                                         [&] (struct minimal_symbol *msym)
4377                                           {
4378                                             add_minsym (msym, objfile, nullptr,
4379                                                         info->state->list_mode,
4380                                                         &minsyms);
4381                                             return false;
4382                                           });
4383         }
4384       }
4385     }
4386   else
4387     {
4388       if (search_pspace == NULL || SYMTAB_PSPACE (symtab) == search_pspace)
4389         {
4390           set_current_program_space (SYMTAB_PSPACE (symtab));
4391           iterate_over_minimal_symbols
4392             (SYMTAB_OBJFILE (symtab), name,
4393              [&] (struct minimal_symbol *msym)
4394                {
4395                  add_minsym (msym, SYMTAB_OBJFILE (symtab), symtab,
4396                              info->state->list_mode, &minsyms);
4397                  return false;
4398                });
4399         }
4400     }
4401
4402   if (!minsyms.empty ())
4403     {
4404       int classification;
4405
4406       std::sort (minsyms.begin (), minsyms.end (), compare_msyms);
4407
4408       /* Now the minsyms are in classification order.  So, we walk
4409          over them and process just the minsyms with the same
4410          classification as the very first minsym in the list.  */
4411       classification = classify_mtype (MSYMBOL_TYPE (minsyms[0].minsym));
4412
4413       for (const bound_minimal_symbol &item : minsyms)
4414         {
4415           if (classify_mtype (MSYMBOL_TYPE (item.minsym)) != classification)
4416             break;
4417
4418           info->result.minimal_symbols->push_back (item);
4419         }
4420     }
4421 }
4422
4423 /* A helper function to add all symbols matching NAME to INFO.  If
4424    PSPACE is not NULL, the search is restricted to just that program
4425    space.  */
4426
4427 static void
4428 add_matching_symbols_to_info (const char *name,
4429                               symbol_name_match_type name_match_type,
4430                               enum search_domain search_domain,
4431                               struct collect_info *info,
4432                               struct program_space *pspace)
4433 {
4434   lookup_name_info lookup_name (name, name_match_type);
4435
4436   for (const auto &elt : *info->file_symtabs)
4437     {
4438       if (elt == nullptr)
4439         {
4440           iterate_over_all_matching_symtabs (info->state, lookup_name,
4441                                              VAR_DOMAIN, search_domain,
4442                                              pspace, true,
4443                                              [&] (block_symbol *bsym)
4444             { return info->add_symbol (bsym); });
4445           search_minsyms_for_name (info, lookup_name, pspace, NULL);
4446         }
4447       else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
4448         {
4449           int prev_len = info->result.symbols->size ();
4450
4451           /* Program spaces that are executing startup should have
4452              been filtered out earlier.  */
4453           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
4454           set_current_program_space (SYMTAB_PSPACE (elt));
4455           iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN,
4456                                     [&] (block_symbol *bsym)
4457             { return info->add_symbol (bsym); });
4458
4459           /* If no new symbols were found in this iteration and this symtab
4460              is in assembler, we might actually be looking for a label for
4461              which we don't have debug info.  Check for a minimal symbol in
4462              this case.  */
4463           if (prev_len == info->result.symbols->size ()
4464               && elt->language == language_asm)
4465             search_minsyms_for_name (info, lookup_name, pspace, elt);
4466         }
4467     }
4468 }
4469
4470 \f
4471
4472 /* Now come some functions that are called from multiple places within
4473    decode_line_1.  */
4474
4475 static int
4476 symbol_to_sal (struct symtab_and_line *result,
4477                int funfirstline, struct symbol *sym)
4478 {
4479   if (SYMBOL_CLASS (sym) == LOC_BLOCK)
4480     {
4481       *result = find_function_start_sal (sym, funfirstline);
4482       return 1;
4483     }
4484   else
4485     {
4486       if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
4487         {
4488           *result = {};
4489           result->symtab = symbol_symtab (sym);
4490           result->symbol = sym;
4491           result->line = SYMBOL_LINE (sym);
4492           result->pc = SYMBOL_VALUE_ADDRESS (sym);
4493           result->pspace = SYMTAB_PSPACE (result->symtab);
4494           result->explicit_pc = 1;
4495           return 1;
4496         }
4497       else if (funfirstline)
4498         {
4499           /* Nothing.  */
4500         }
4501       else if (SYMBOL_LINE (sym) != 0)
4502         {
4503           /* We know its line number.  */
4504           *result = {};
4505           result->symtab = symbol_symtab (sym);
4506           result->symbol = sym;
4507           result->line = SYMBOL_LINE (sym);
4508           result->pc = SYMBOL_VALUE_ADDRESS (sym);
4509           result->pspace = SYMTAB_PSPACE (result->symtab);
4510           return 1;
4511         }
4512     }
4513
4514   return 0;
4515 }
4516
4517 linespec_result::~linespec_result ()
4518 {
4519   for (linespec_sals &lsal : lsals)
4520     xfree (lsal.canonical);
4521 }
4522
4523 /* Return the quote characters permitted by the linespec parser.  */
4524
4525 const char *
4526 get_gdb_linespec_parser_quote_characters (void)
4527 {
4528   return linespec_quote_characters;
4529 }