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