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