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