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