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