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