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