ld TDIRS substitution
[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 program_space *pspace;
1134
1135   ALL_PSPACES (pspace)
1136   {
1137     if (search_pspace != NULL && search_pspace != pspace)
1138       continue;
1139     if (pspace->executing_startup)
1140       continue;
1141
1142     set_current_program_space (pspace);
1143
1144     for (objfile *objfile : current_program_space->objfiles ())
1145       {
1146         if (objfile->sf)
1147           objfile->sf->qf->expand_symtabs_matching (objfile,
1148                                                     NULL,
1149                                                     lookup_name,
1150                                                     NULL, NULL,
1151                                                     search_domain);
1152
1153         for (compunit_symtab *cu : objfile->compunits ())
1154           {
1155             struct symtab *symtab = COMPUNIT_FILETABS (cu);
1156
1157             iterate_over_file_blocks (symtab, lookup_name, name_domain,
1158                                       callback);
1159
1160             if (include_inline)
1161               {
1162                 const struct block *block;
1163                 int i;
1164
1165                 for (i = FIRST_LOCAL_BLOCK;
1166                      i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab));
1167                      i++)
1168                   {
1169                     block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i);
1170                     state->language->la_iterate_over_symbols
1171                       (block, lookup_name, name_domain,
1172                        [&] (block_symbol *bsym)
1173                        {
1174                          /* Restrict calls to CALLBACK to symbols
1175                             representing inline symbols only.  */
1176                          if (SYMBOL_INLINED (bsym->symbol))
1177                            return callback (bsym);
1178                          return true;
1179                        });
1180                   }
1181               }
1182           }
1183       }
1184   }
1185 }
1186
1187 /* Returns the block to be used for symbol searches from
1188    the current location.  */
1189
1190 static const struct block *
1191 get_current_search_block (void)
1192 {
1193   /* get_selected_block can change the current language when there is
1194      no selected frame yet.  */
1195   scoped_restore_current_language save_language;
1196   return get_selected_block (0);
1197 }
1198
1199 /* Iterate over static and global blocks.  */
1200
1201 static void
1202 iterate_over_file_blocks
1203   (struct symtab *symtab, const lookup_name_info &name,
1204    domain_enum domain, gdb::function_view<symbol_found_callback_ftype> callback)
1205 {
1206   const struct block *block;
1207
1208   for (block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
1209        block != NULL;
1210        block = BLOCK_SUPERBLOCK (block))
1211     LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback);
1212 }
1213
1214 /* A helper for find_method.  This finds all methods in type T of
1215    language T_LANG which match NAME.  It adds matching symbol names to
1216    RESULT_NAMES, and adds T's direct superclasses to SUPERCLASSES.  */
1217
1218 static void
1219 find_methods (struct type *t, enum language t_lang, const char *name,
1220               std::vector<const char *> *result_names,
1221               std::vector<struct type *> *superclasses)
1222 {
1223   int ibase;
1224   const char *class_name = TYPE_NAME (t);
1225
1226   /* Ignore this class if it doesn't have a name.  This is ugly, but
1227      unless we figure out how to get the physname without the name of
1228      the class, then the loop can't do any good.  */
1229   if (class_name)
1230     {
1231       int method_counter;
1232       lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
1233       symbol_name_matcher_ftype *symbol_name_compare
1234         = get_symbol_name_matcher (language_def (t_lang), lookup_name);
1235
1236       t = check_typedef (t);
1237
1238       /* Loop over each method name.  At this level, all overloads of a name
1239          are counted as a single name.  There is an inner loop which loops over
1240          each overload.  */
1241
1242       for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1243            method_counter >= 0;
1244            --method_counter)
1245         {
1246           const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1247
1248           if (symbol_name_compare (method_name, lookup_name, NULL))
1249             {
1250               int field_counter;
1251
1252               for (field_counter = (TYPE_FN_FIELDLIST_LENGTH (t, method_counter)
1253                                     - 1);
1254                    field_counter >= 0;
1255                    --field_counter)
1256                 {
1257                   struct fn_field *f;
1258                   const char *phys_name;
1259
1260                   f = TYPE_FN_FIELDLIST1 (t, method_counter);
1261                   if (TYPE_FN_FIELD_STUB (f, field_counter))
1262                     continue;
1263                   phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1264                   result_names->push_back (phys_name);
1265                 }
1266             }
1267         }
1268     }
1269
1270   for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1271     superclasses->push_back (TYPE_BASECLASS (t, ibase));
1272 }
1273
1274 /* Find an instance of the character C in the string S that is outside
1275    of all parenthesis pairs, single-quoted strings, and double-quoted
1276    strings.  Also, ignore the char within a template name, like a ','
1277    within foo<int, int>, while considering C++ operator</operator<<.  */
1278
1279 const char *
1280 find_toplevel_char (const char *s, char c)
1281 {
1282   int quoted = 0;               /* zero if we're not in quotes;
1283                                    '"' if we're in a double-quoted string;
1284                                    '\'' if we're in a single-quoted string.  */
1285   int depth = 0;                /* Number of unclosed parens we've seen.  */
1286   const char *scan;
1287
1288   for (scan = s; *scan; scan++)
1289     {
1290       if (quoted)
1291         {
1292           if (*scan == quoted)
1293             quoted = 0;
1294           else if (*scan == '\\' && *(scan + 1))
1295             scan++;
1296         }
1297       else if (*scan == c && ! quoted && depth == 0)
1298         return scan;
1299       else if (*scan == '"' || *scan == '\'')
1300         quoted = *scan;
1301       else if (*scan == '(' || *scan == '<')
1302         depth++;
1303       else if ((*scan == ')' || *scan == '>') && depth > 0)
1304         depth--;
1305       else if (*scan == 'o' && !quoted && depth == 0)
1306         {
1307           /* Handle C++ operator names.  */
1308           if (strncmp (scan, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0)
1309             {
1310               scan += CP_OPERATOR_LEN;
1311               if (*scan == c)
1312                 return scan;
1313               while (isspace (*scan))
1314                 {
1315                   ++scan;
1316                   if (*scan == c)
1317                     return scan;
1318                 }
1319               if (*scan == '\0')
1320                 break;
1321
1322               switch (*scan)
1323                 {
1324                   /* Skip over one less than the appropriate number of
1325                      characters: the for loop will skip over the last
1326                      one.  */
1327                 case '<':
1328                   if (scan[1] == '<')
1329                     {
1330                       scan++;
1331                       if (*scan == c)
1332                         return scan;
1333                     }
1334                   break;
1335                 case '>':
1336                   if (scan[1] == '>')
1337                     {
1338                       scan++;
1339                       if (*scan == c)
1340                         return scan;
1341                     }
1342                   break;
1343                 }
1344             }
1345         }
1346     }
1347
1348   return 0;
1349 }
1350
1351 /* The string equivalent of find_toplevel_char.  Returns a pointer
1352    to the location of NEEDLE in HAYSTACK, ignoring any occurrences
1353    inside "()" and "<>".  Returns NULL if NEEDLE was not found.  */
1354
1355 static const char *
1356 find_toplevel_string (const char *haystack, const char *needle)
1357 {
1358   const char *s = haystack;
1359
1360   do
1361     {
1362       s = find_toplevel_char (s, *needle);
1363
1364       if (s != NULL)
1365         {
1366           /* Found first char in HAYSTACK;  check rest of string.  */
1367           if (startswith (s, needle))
1368             return s;
1369
1370           /* Didn't find it; loop over HAYSTACK, looking for the next
1371              instance of the first character of NEEDLE.  */
1372           ++s;
1373         }
1374     }
1375   while (s != NULL && *s != '\0');
1376
1377   /* NEEDLE was not found in HAYSTACK.  */
1378   return NULL;
1379 }
1380
1381 /* Convert CANONICAL to its string representation using
1382    symtab_to_fullname for SYMTAB.  */
1383
1384 static std::string
1385 canonical_to_fullform (const struct linespec_canonical_name *canonical)
1386 {
1387   if (canonical->symtab == NULL)
1388     return canonical->suffix;
1389   else
1390     return string_printf ("%s:%s", symtab_to_fullname (canonical->symtab),
1391                           canonical->suffix);
1392 }
1393
1394 /* Given FILTERS, a list of canonical names, filter the sals in RESULT
1395    and store the result in SELF->CANONICAL.  */
1396
1397 static void
1398 filter_results (struct linespec_state *self,
1399                 std::vector<symtab_and_line> *result,
1400                 const std::vector<const char *> &filters)
1401 {
1402   for (const char *name : filters)
1403     {
1404       linespec_sals lsal;
1405
1406       for (size_t j = 0; j < result->size (); ++j)
1407         {
1408           const struct linespec_canonical_name *canonical;
1409
1410           canonical = &self->canonical_names[j];
1411           std::string fullform = canonical_to_fullform (canonical);
1412
1413           if (name == fullform)
1414             lsal.sals.push_back ((*result)[j]);
1415         }
1416
1417       if (!lsal.sals.empty ())
1418         {
1419           lsal.canonical = xstrdup (name);
1420           self->canonical->lsals.push_back (std::move (lsal));
1421         }
1422     }
1423
1424   self->canonical->pre_expanded = 0;
1425 }
1426
1427 /* Store RESULT into SELF->CANONICAL.  */
1428
1429 static void
1430 convert_results_to_lsals (struct linespec_state *self,
1431                           std::vector<symtab_and_line> *result)
1432 {
1433   struct linespec_sals lsal;
1434
1435   lsal.canonical = NULL;
1436   lsal.sals = std::move (*result);
1437   self->canonical->lsals.push_back (std::move (lsal));
1438 }
1439
1440 /* A structure that contains two string representations of a struct
1441    linespec_canonical_name:
1442      - one where the symtab's fullname is used;
1443      - one where the filename followed the "set filename-display"
1444        setting.  */
1445
1446 struct decode_line_2_item
1447 {
1448   decode_line_2_item (std::string &&fullform_, std::string &&displayform_,
1449                       bool selected_)
1450     : fullform (std::move (fullform_)),
1451       displayform (std::move (displayform_)),
1452       selected (selected_)
1453   {
1454   }
1455
1456   /* The form using symtab_to_fullname.  */
1457   std::string fullform;
1458
1459   /* The form using symtab_to_filename_for_display.  */
1460   std::string displayform;
1461
1462   /* Field is initialized to zero and it is set to one if the user
1463      requested breakpoint for this entry.  */
1464   unsigned int selected : 1;
1465 };
1466
1467 /* Helper for std::sort to sort decode_line_2_item entries by
1468    DISPLAYFORM and secondarily by FULLFORM.  */
1469
1470 static bool
1471 decode_line_2_compare_items (const decode_line_2_item &a,
1472                              const decode_line_2_item &b)
1473 {
1474   if (a.displayform != b.displayform)
1475     return a.displayform < b.displayform;
1476   return a.fullform < b.fullform;
1477 }
1478
1479 /* Handle multiple results in RESULT depending on SELECT_MODE.  This
1480    will either return normally, throw an exception on multiple
1481    results, or present a menu to the user.  On return, the SALS vector
1482    in SELF->CANONICAL is set up properly.  */
1483
1484 static void
1485 decode_line_2 (struct linespec_state *self,
1486                std::vector<symtab_and_line> *result,
1487                const char *select_mode)
1488 {
1489   char *args;
1490   const char *prompt;
1491   int i;
1492   std::vector<const char *> filters;
1493   std::vector<struct decode_line_2_item> items;
1494
1495   gdb_assert (select_mode != multiple_symbols_all);
1496   gdb_assert (self->canonical != NULL);
1497   gdb_assert (!result->empty ());
1498
1499   /* Prepare ITEMS array.  */
1500   for (i = 0; i < result->size (); ++i)
1501     {
1502       const struct linespec_canonical_name *canonical;
1503       std::string displayform;
1504
1505       canonical = &self->canonical_names[i];
1506       gdb_assert (canonical->suffix != NULL);
1507
1508       std::string fullform = canonical_to_fullform (canonical);
1509
1510       if (canonical->symtab == NULL)
1511         displayform = canonical->suffix;
1512       else
1513         {
1514           const char *fn_for_display;
1515
1516           fn_for_display = symtab_to_filename_for_display (canonical->symtab);
1517           displayform = string_printf ("%s:%s", fn_for_display,
1518                                        canonical->suffix);
1519         }
1520
1521       items.emplace_back (std::move (fullform), std::move (displayform),
1522                           false);
1523     }
1524
1525   /* Sort the list of method names.  */
1526   std::sort (items.begin (), items.end (), decode_line_2_compare_items);
1527
1528   /* Remove entries with the same FULLFORM.  */
1529   items.erase (std::unique (items.begin (), items.end (),
1530                             [] (const struct decode_line_2_item &a,
1531                                 const struct decode_line_2_item &b)
1532                               {
1533                                 return a.fullform == b.fullform;
1534                               }),
1535                items.end ());
1536
1537   if (select_mode == multiple_symbols_cancel && items.size () > 1)
1538     error (_("canceled because the command is ambiguous\n"
1539              "See set/show multiple-symbol."));
1540   
1541   if (select_mode == multiple_symbols_all || items.size () == 1)
1542     {
1543       convert_results_to_lsals (self, result);
1544       return;
1545     }
1546
1547   printf_unfiltered (_("[0] cancel\n[1] all\n"));
1548   for (i = 0; i < items.size (); i++)
1549     printf_unfiltered ("[%d] %s\n", i + 2, items[i].displayform.c_str ());
1550
1551   prompt = getenv ("PS2");
1552   if (prompt == NULL)
1553     {
1554       prompt = "> ";
1555     }
1556   args = command_line_input (prompt, "overload-choice");
1557
1558   if (args == 0 || *args == 0)
1559     error_no_arg (_("one or more choice numbers"));
1560
1561   number_or_range_parser parser (args);
1562   while (!parser.finished ())
1563     {
1564       int num = parser.get_number ();
1565
1566       if (num == 0)
1567         error (_("canceled"));
1568       else if (num == 1)
1569         {
1570           /* We intentionally make this result in a single breakpoint,
1571              contrary to what older versions of gdb did.  The
1572              rationale is that this lets a user get the
1573              multiple_symbols_all behavior even with the 'ask'
1574              setting; and he can get separate breakpoints by entering
1575              "2-57" at the query.  */
1576           convert_results_to_lsals (self, result);
1577           return;
1578         }
1579
1580       num -= 2;
1581       if (num >= items.size ())
1582         printf_unfiltered (_("No choice number %d.\n"), num);
1583       else
1584         {
1585           struct decode_line_2_item *item = &items[num];
1586
1587           if (!item->selected)
1588             {
1589               filters.push_back (item->fullform.c_str ());
1590               item->selected = 1;
1591             }
1592           else
1593             {
1594               printf_unfiltered (_("duplicate request for %d ignored.\n"),
1595                                  num + 2);
1596             }
1597         }
1598     }
1599
1600   filter_results (self, result, filters);
1601 }
1602
1603 \f
1604
1605 /* The parser of linespec itself.  */
1606
1607 /* Throw an appropriate error when SYMBOL is not found (optionally in
1608    FILENAME).  */
1609
1610 static void ATTRIBUTE_NORETURN
1611 symbol_not_found_error (const char *symbol, const char *filename)
1612 {
1613   if (symbol == NULL)
1614     symbol = "";
1615
1616   if (!have_full_symbols ()
1617       && !have_partial_symbols ()
1618       && !have_minimal_symbols ())
1619     throw_error (NOT_FOUND_ERROR,
1620                  _("No symbol table is loaded.  Use the \"file\" command."));
1621
1622   /* If SYMBOL starts with '$', the user attempted to either lookup
1623      a function/variable in his code starting with '$' or an internal
1624      variable of that name.  Since we do not know which, be concise and
1625      explain both possibilities.  */
1626   if (*symbol == '$')
1627     {
1628       if (filename)
1629         throw_error (NOT_FOUND_ERROR,
1630                      _("Undefined convenience variable or function \"%s\" "
1631                        "not defined in \"%s\"."), symbol, filename);
1632       else
1633         throw_error (NOT_FOUND_ERROR,
1634                      _("Undefined convenience variable or function \"%s\" "
1635                        "not defined."), symbol);
1636     }
1637   else
1638     {
1639       if (filename)
1640         throw_error (NOT_FOUND_ERROR,
1641                      _("Function \"%s\" not defined in \"%s\"."),
1642                      symbol, filename);
1643       else
1644         throw_error (NOT_FOUND_ERROR,
1645                      _("Function \"%s\" not defined."), symbol);
1646     }
1647 }
1648
1649 /* Throw an appropriate error when an unexpected token is encountered 
1650    in the input.  */
1651
1652 static void ATTRIBUTE_NORETURN
1653 unexpected_linespec_error (linespec_parser *parser)
1654 {
1655   linespec_token token;
1656   static const char * token_type_strings[]
1657     = {"keyword", "colon", "string", "number", "comma", "end of input"};
1658
1659   /* Get the token that generated the error.  */
1660   token = linespec_lexer_lex_one (parser);
1661
1662   /* Finally, throw the error.  */
1663   if (token.type == LSTOKEN_STRING || token.type == LSTOKEN_NUMBER
1664       || token.type == LSTOKEN_KEYWORD)
1665     {
1666       gdb::unique_xmalloc_ptr<char> string = copy_token_string (token);
1667       throw_error (GENERIC_ERROR,
1668                    _("malformed linespec error: unexpected %s, \"%s\""),
1669                    token_type_strings[token.type], string.get ());
1670     }
1671   else
1672     throw_error (GENERIC_ERROR,
1673                  _("malformed linespec error: unexpected %s"),
1674                  token_type_strings[token.type]);
1675 }
1676
1677 /* Throw an undefined label error.  */
1678
1679 static void ATTRIBUTE_NORETURN
1680 undefined_label_error (const char *function, const char *label)
1681 {
1682   if (function != NULL)
1683     throw_error (NOT_FOUND_ERROR,
1684                 _("No label \"%s\" defined in function \"%s\"."),
1685                 label, function);
1686   else
1687     throw_error (NOT_FOUND_ERROR,
1688                 _("No label \"%s\" defined in current function."),
1689                 label);
1690 }
1691
1692 /* Throw a source file not found error.  */
1693
1694 static void ATTRIBUTE_NORETURN
1695 source_file_not_found_error (const char *name)
1696 {
1697   throw_error (NOT_FOUND_ERROR, _("No source file named %s."), name);
1698 }
1699
1700 /* Unless at EIO, save the current stream position as completion word
1701    point, and consume the next token.  */
1702
1703 static linespec_token
1704 save_stream_and_consume_token (linespec_parser *parser)
1705 {
1706   if (linespec_lexer_peek_token (parser).type != LSTOKEN_EOI)
1707     parser->completion_word = PARSER_STREAM (parser);
1708   return linespec_lexer_consume_token (parser);
1709 }
1710
1711 /* See description in linespec.h.  */
1712
1713 struct line_offset
1714 linespec_parse_line_offset (const char *string)
1715 {
1716   const char *start = string;
1717   struct line_offset line_offset = {0, LINE_OFFSET_NONE};
1718
1719   if (*string == '+')
1720     {
1721       line_offset.sign = LINE_OFFSET_PLUS;
1722       ++string;
1723     }
1724   else if (*string == '-')
1725     {
1726       line_offset.sign = LINE_OFFSET_MINUS;
1727       ++string;
1728     }
1729
1730   if (*string != '\0' && !isdigit (*string))
1731     error (_("malformed line offset: \"%s\""), start);
1732
1733   /* Right now, we only allow base 10 for offsets.  */
1734   line_offset.offset = atoi (string);
1735   return line_offset;
1736 }
1737
1738 /* In completion mode, if the user is still typing the number, there's
1739    no possible completion to offer.  But if there's already input past
1740    the number, setup to expect NEXT.  */
1741
1742 static void
1743 set_completion_after_number (linespec_parser *parser,
1744                              linespec_complete_what next)
1745 {
1746   if (*PARSER_STREAM (parser) == ' ')
1747     {
1748       parser->completion_word = skip_spaces (PARSER_STREAM (parser) + 1);
1749       parser->complete_what = next;
1750     }
1751   else
1752     {
1753       parser->completion_word = PARSER_STREAM (parser);
1754       parser->complete_what = linespec_complete_what::NOTHING;
1755     }
1756 }
1757
1758 /* Parse the basic_spec in PARSER's input.  */
1759
1760 static void
1761 linespec_parse_basic (linespec_parser *parser)
1762 {
1763   gdb::unique_xmalloc_ptr<char> name;
1764   linespec_token token;
1765   std::vector<block_symbol> symbols;
1766   std::vector<block_symbol> *labels;
1767   std::vector<bound_minimal_symbol> minimal_symbols;
1768
1769   /* Get the next token.  */
1770   token = linespec_lexer_lex_one (parser);
1771
1772   /* If it is EOI or KEYWORD, issue an error.  */
1773   if (token.type == LSTOKEN_KEYWORD)
1774     {
1775       parser->complete_what = linespec_complete_what::NOTHING;
1776       unexpected_linespec_error (parser);
1777     }
1778   else if (token.type == LSTOKEN_EOI)
1779     {
1780       unexpected_linespec_error (parser);
1781     }
1782   /* If it is a LSTOKEN_NUMBER, we have an offset.  */
1783   else if (token.type == LSTOKEN_NUMBER)
1784     {
1785       set_completion_after_number (parser, linespec_complete_what::KEYWORD);
1786
1787       /* Record the line offset and get the next token.  */
1788       name = copy_token_string (token);
1789       PARSER_EXPLICIT (parser)->line_offset
1790         = linespec_parse_line_offset (name.get ());
1791
1792       /* Get the next token.  */
1793       token = linespec_lexer_consume_token (parser);
1794
1795       /* If the next token is a comma, stop parsing and return.  */
1796       if (token.type == LSTOKEN_COMMA)
1797         {
1798           parser->complete_what = linespec_complete_what::NOTHING;
1799           return;
1800         }
1801
1802       /* If the next token is anything but EOI or KEYWORD, issue
1803          an error.  */
1804       if (token.type != LSTOKEN_KEYWORD && token.type != LSTOKEN_EOI)
1805         unexpected_linespec_error (parser);
1806     }
1807
1808   if (token.type == LSTOKEN_KEYWORD || token.type == LSTOKEN_EOI)
1809     return;
1810
1811   /* Next token must be LSTOKEN_STRING.  */
1812   if (token.type != LSTOKEN_STRING)
1813     {
1814       parser->complete_what = linespec_complete_what::NOTHING;
1815       unexpected_linespec_error (parser);
1816     }
1817
1818   /* The current token will contain the name of a function, method,
1819      or label.  */
1820   name = copy_token_string (token);
1821
1822   if (parser->completion_tracker != NULL)
1823     {
1824       /* If the function name ends with a ":", then this may be an
1825          incomplete "::" scope operator instead of a label separator.
1826          E.g.,
1827            "b klass:<tab>"
1828          which should expand to:
1829            "b klass::method()"
1830
1831          Do a tentative completion assuming the later.  If we find
1832          completions, advance the stream past the colon token and make
1833          it part of the function name/token.  */
1834
1835       if (!parser->completion_quote_char
1836           && strcmp (PARSER_STREAM (parser), ":") == 0)
1837         {
1838           completion_tracker tmp_tracker;
1839           const char *source_filename
1840             = PARSER_EXPLICIT (parser)->source_filename;
1841           symbol_name_match_type match_type
1842             = PARSER_EXPLICIT (parser)->func_name_match_type;
1843
1844           linespec_complete_function (tmp_tracker,
1845                                       parser->completion_word,
1846                                       match_type,
1847                                       source_filename);
1848
1849           if (tmp_tracker.have_completions ())
1850             {
1851               PARSER_STREAM (parser)++;
1852               LS_TOKEN_STOKEN (token).length++;
1853
1854               name.reset (savestring (parser->completion_word,
1855                                       (PARSER_STREAM (parser)
1856                                        - parser->completion_word)));
1857             }
1858         }
1859
1860       PARSER_EXPLICIT (parser)->function_name = name.release ();
1861     }
1862   else
1863     {
1864       /* Try looking it up as a function/method.  */
1865       find_linespec_symbols (PARSER_STATE (parser),
1866                              PARSER_RESULT (parser)->file_symtabs, name.get (),
1867                              PARSER_EXPLICIT (parser)->func_name_match_type,
1868                              &symbols, &minimal_symbols);
1869
1870       if (!symbols.empty () || !minimal_symbols.empty ())
1871         {
1872           PARSER_RESULT (parser)->function_symbols
1873             = new std::vector<block_symbol> (std::move (symbols));
1874           PARSER_RESULT (parser)->minimal_symbols
1875             = new std::vector<bound_minimal_symbol>
1876                 (std::move (minimal_symbols));
1877           PARSER_EXPLICIT (parser)->function_name = name.release ();
1878         }
1879       else
1880         {
1881           /* NAME was not a function or a method.  So it must be a label
1882              name or user specified variable like "break foo.c:$zippo".  */
1883           labels = find_label_symbols (PARSER_STATE (parser), NULL,
1884                                        &symbols, name.get ());
1885           if (labels != NULL)
1886             {
1887               PARSER_RESULT (parser)->labels.label_symbols = labels;
1888               PARSER_RESULT (parser)->labels.function_symbols
1889                 = new std::vector<block_symbol> (std::move (symbols));
1890               PARSER_EXPLICIT (parser)->label_name = name.release ();
1891             }
1892           else if (token.type == LSTOKEN_STRING
1893                    && *LS_TOKEN_STOKEN (token).ptr == '$')
1894             {
1895               /* User specified a convenience variable or history value.  */
1896               PARSER_EXPLICIT (parser)->line_offset
1897                 = linespec_parse_variable (PARSER_STATE (parser), name.get ());
1898
1899               if (PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN)
1900                 {
1901                   /* The user-specified variable was not valid.  Do not
1902                      throw an error here.  parse_linespec will do it for us.  */
1903                   PARSER_EXPLICIT (parser)->function_name = name.release ();
1904                   return;
1905                 }
1906             }
1907           else
1908             {
1909               /* The name is also not a label.  Abort parsing.  Do not throw
1910                  an error here.  parse_linespec will do it for us.  */
1911
1912               /* Save a copy of the name we were trying to lookup.  */
1913               PARSER_EXPLICIT (parser)->function_name = name.release ();
1914               return;
1915             }
1916         }
1917     }
1918
1919   int previous_qc = parser->completion_quote_char;
1920
1921   /* Get the next token.  */
1922   token = linespec_lexer_consume_token (parser);
1923
1924   if (token.type == LSTOKEN_EOI)
1925     {
1926       if (previous_qc && !parser->completion_quote_char)
1927         parser->complete_what = linespec_complete_what::KEYWORD;
1928     }
1929   else if (token.type == LSTOKEN_COLON)
1930     {
1931       /* User specified a label or a lineno.  */
1932       token = linespec_lexer_consume_token (parser);
1933
1934       if (token.type == LSTOKEN_NUMBER)
1935         {
1936           /* User specified an offset.  Record the line offset and
1937              get the next token.  */
1938           set_completion_after_number (parser, linespec_complete_what::KEYWORD);
1939
1940           name = copy_token_string (token);
1941           PARSER_EXPLICIT (parser)->line_offset
1942             = linespec_parse_line_offset (name.get ());
1943
1944           /* Get the next token.  */
1945           token = linespec_lexer_consume_token (parser);
1946         }
1947       else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
1948         {
1949           parser->complete_what = linespec_complete_what::LABEL;
1950         }
1951       else if (token.type == LSTOKEN_STRING)
1952         {
1953           parser->complete_what = linespec_complete_what::LABEL;
1954
1955           /* If we have text after the label separated by whitespace
1956              (e.g., "b func():lab i<tab>"), don't consider it part of
1957              the label.  In completion mode that should complete to
1958              "if", in normal mode, the 'i' should be treated as
1959              garbage.  */
1960           if (parser->completion_quote_char == '\0')
1961             {
1962               const char *ptr = LS_TOKEN_STOKEN (token).ptr;
1963               for (size_t i = 0; i < LS_TOKEN_STOKEN (token).length; i++)
1964                 {
1965                   if (ptr[i] == ' ')
1966                     {
1967                       LS_TOKEN_STOKEN (token).length = i;
1968                       PARSER_STREAM (parser) = skip_spaces (ptr + i + 1);
1969                       break;
1970                     }
1971                 }
1972             }
1973
1974           if (parser->completion_tracker != NULL)
1975             {
1976               if (PARSER_STREAM (parser)[-1] == ' ')
1977                 {
1978                   parser->completion_word = PARSER_STREAM (parser);
1979                   parser->complete_what = linespec_complete_what::KEYWORD;
1980                 }
1981             }
1982           else
1983             {
1984               /* Grab a copy of the label's name and look it up.  */
1985               name = copy_token_string (token);
1986               labels
1987                 = find_label_symbols (PARSER_STATE (parser),
1988                                       PARSER_RESULT (parser)->function_symbols,
1989                                       &symbols, name.get ());
1990
1991               if (labels != NULL)
1992                 {
1993                   PARSER_RESULT (parser)->labels.label_symbols = labels;
1994                   PARSER_RESULT (parser)->labels.function_symbols
1995                     = new std::vector<block_symbol> (std::move (symbols));
1996                   PARSER_EXPLICIT (parser)->label_name = name.release ();
1997                 }
1998               else
1999                 {
2000                   /* We don't know what it was, but it isn't a label.  */
2001                   undefined_label_error
2002                     (PARSER_EXPLICIT (parser)->function_name, name.get ());
2003                 }
2004
2005             }
2006
2007           /* Check for a line offset.  */
2008           token = save_stream_and_consume_token (parser);
2009           if (token.type == LSTOKEN_COLON)
2010             {
2011               /* Get the next token.  */
2012               token = linespec_lexer_consume_token (parser);
2013
2014               /* It must be a line offset.  */
2015               if (token.type != LSTOKEN_NUMBER)
2016                 unexpected_linespec_error (parser);
2017
2018               /* Record the line offset and get the next token.  */
2019               name = copy_token_string (token);
2020
2021               PARSER_EXPLICIT (parser)->line_offset
2022                 = linespec_parse_line_offset (name.get ());
2023
2024               /* Get the next token.  */
2025               token = linespec_lexer_consume_token (parser);
2026             }
2027         }
2028       else
2029         {
2030           /* Trailing ':' in the input. Issue an error.  */
2031           unexpected_linespec_error (parser);
2032         }
2033     }
2034 }
2035
2036 /* Canonicalize the linespec contained in LS.  The result is saved into
2037    STATE->canonical.  This function handles both linespec and explicit
2038    locations.  */
2039
2040 static void
2041 canonicalize_linespec (struct linespec_state *state, const linespec_p ls)
2042 {
2043   struct event_location *canon;
2044   struct explicit_location *explicit_loc;
2045
2046   /* If canonicalization was not requested, no need to do anything.  */
2047   if (!state->canonical)
2048     return;
2049
2050   /* Save everything as an explicit location.  */
2051   state->canonical->location
2052     = new_explicit_location (&ls->explicit_loc);
2053   canon = state->canonical->location.get ();
2054   explicit_loc = get_explicit_location (canon);
2055
2056   if (explicit_loc->label_name != NULL)
2057     {
2058       state->canonical->special_display = 1;
2059
2060       if (explicit_loc->function_name == NULL)
2061         {
2062           /* No function was specified, so add the symbol name.  */
2063           gdb_assert (!ls->labels.function_symbols->empty ()
2064                       && (ls->labels.function_symbols->size () == 1));
2065           block_symbol s = ls->labels.function_symbols->front ();
2066           explicit_loc->function_name
2067             = xstrdup (SYMBOL_NATURAL_NAME (s.symbol));
2068         }
2069     }
2070
2071   /* If this location originally came from a linespec, save a string
2072      representation of it for display and saving to file.  */
2073   if (state->is_linespec)
2074     {
2075       char *linespec = explicit_location_to_linespec (explicit_loc);
2076
2077       set_event_location_string (canon, linespec);
2078       xfree (linespec);
2079     }
2080 }
2081
2082 /* Given a line offset in LS, construct the relevant SALs.  */
2083
2084 static std::vector<symtab_and_line>
2085 create_sals_line_offset (struct linespec_state *self,
2086                          linespec_p ls)
2087 {
2088   int use_default = 0;
2089
2090   /* This is where we need to make sure we have good defaults.
2091      We must guarantee that this section of code is never executed
2092      when we are called with just a function name, since
2093      set_default_source_symtab_and_line uses
2094      select_source_symtab that calls us with such an argument.  */
2095
2096   if (ls->file_symtabs->size () == 1
2097       && ls->file_symtabs->front () == nullptr)
2098     {
2099       set_current_program_space (self->program_space);
2100
2101       /* Make sure we have at least a default source line.  */
2102       set_default_source_symtab_and_line ();
2103       initialize_defaults (&self->default_symtab, &self->default_line);
2104       *ls->file_symtabs
2105         = collect_symtabs_from_filename (self->default_symtab->filename,
2106                                          self->search_pspace);
2107       use_default = 1;
2108     }
2109
2110   symtab_and_line val;
2111   val.line = ls->explicit_loc.line_offset.offset;
2112   switch (ls->explicit_loc.line_offset.sign)
2113     {
2114     case LINE_OFFSET_PLUS:
2115       if (ls->explicit_loc.line_offset.offset == 0)
2116         val.line = 5;
2117       if (use_default)
2118         val.line = self->default_line + val.line;
2119       break;
2120
2121     case LINE_OFFSET_MINUS:
2122       if (ls->explicit_loc.line_offset.offset == 0)
2123         val.line = 15;
2124       if (use_default)
2125         val.line = self->default_line - val.line;
2126       else
2127         val.line = -val.line;
2128       break;
2129
2130     case LINE_OFFSET_NONE:
2131       break;                    /* No need to adjust val.line.  */
2132     }
2133
2134   std::vector<symtab_and_line> values;
2135   if (self->list_mode)
2136     values = decode_digits_list_mode (self, ls, val);
2137   else
2138     {
2139       struct linetable_entry *best_entry = NULL;
2140       int i, j;
2141
2142       std::vector<symtab_and_line> intermediate_results
2143         = decode_digits_ordinary (self, ls, val.line, &best_entry);
2144       if (intermediate_results.empty () && best_entry != NULL)
2145         intermediate_results = decode_digits_ordinary (self, ls,
2146                                                        best_entry->line,
2147                                                        &best_entry);
2148
2149       /* For optimized code, the compiler can scatter one source line
2150          across disjoint ranges of PC values, even when no duplicate
2151          functions or inline functions are involved.  For example,
2152          'for (;;)' inside a non-template, non-inline, and non-ctor-or-dtor
2153          function can result in two PC ranges.  In this case, we don't
2154          want to set a breakpoint on the first PC of each range.  To filter
2155          such cases, we use containing blocks -- for each PC found
2156          above, we see if there are other PCs that are in the same
2157          block.  If yes, the other PCs are filtered out.  */
2158
2159       gdb::def_vector<int> filter (intermediate_results.size ());
2160       gdb::def_vector<const block *> blocks (intermediate_results.size ());
2161
2162       for (i = 0; i < intermediate_results.size (); ++i)
2163         {
2164           set_current_program_space (intermediate_results[i].pspace);
2165
2166           filter[i] = 1;
2167           blocks[i] = block_for_pc_sect (intermediate_results[i].pc,
2168                                          intermediate_results[i].section);
2169         }
2170
2171       for (i = 0; i < intermediate_results.size (); ++i)
2172         {
2173           if (blocks[i] != NULL)
2174             for (j = i + 1; j < intermediate_results.size (); ++j)
2175               {
2176                 if (blocks[j] == blocks[i])
2177                   {
2178                     filter[j] = 0;
2179                     break;
2180                   }
2181               }
2182         }
2183
2184       for (i = 0; i < intermediate_results.size (); ++i)
2185         if (filter[i])
2186           {
2187             struct symbol *sym = (blocks[i]
2188                                   ? block_containing_function (blocks[i])
2189                                   : NULL);
2190
2191             if (self->funfirstline)
2192               skip_prologue_sal (&intermediate_results[i]);
2193             intermediate_results[i].symbol = sym;
2194             add_sal_to_sals (self, &values, &intermediate_results[i],
2195                              sym ? SYMBOL_NATURAL_NAME (sym) : NULL, 0);
2196           }
2197     }
2198
2199   if (values.empty ())
2200     {
2201       if (ls->explicit_loc.source_filename)
2202         throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
2203                      val.line, ls->explicit_loc.source_filename);
2204       else
2205         throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
2206                      val.line);
2207     }
2208
2209   return values;
2210 }
2211
2212 /* Convert the given ADDRESS into SaLs.  */
2213
2214 static std::vector<symtab_and_line>
2215 convert_address_location_to_sals (struct linespec_state *self,
2216                                   CORE_ADDR address)
2217 {
2218   symtab_and_line sal = find_pc_line (address, 0);
2219   sal.pc = address;
2220   sal.section = find_pc_overlay (address);
2221   sal.explicit_pc = 1;
2222   sal.symbol = find_pc_sect_containing_function (sal.pc, sal.section);
2223
2224   std::vector<symtab_and_line> sals;
2225   add_sal_to_sals (self, &sals, &sal, core_addr_to_string (address), 1);
2226
2227   return sals;
2228 }
2229
2230 /* Create and return SALs from the linespec LS.  */
2231
2232 static std::vector<symtab_and_line>
2233 convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
2234 {
2235   std::vector<symtab_and_line> sals;
2236
2237   if (ls->labels.label_symbols != NULL)
2238     {
2239       /* We have just a bunch of functions/methods or labels.  */
2240       struct symtab_and_line sal;
2241
2242       for (const auto &sym : *ls->labels.label_symbols)
2243         {
2244           struct program_space *pspace
2245             = SYMTAB_PSPACE (symbol_symtab (sym.symbol));
2246
2247           if (symbol_to_sal (&sal, state->funfirstline, sym.symbol)
2248               && maybe_add_address (state->addr_set, pspace, sal.pc))
2249             add_sal_to_sals (state, &sals, &sal,
2250                              SYMBOL_NATURAL_NAME (sym.symbol), 0);
2251         }
2252     }
2253   else if (ls->function_symbols != NULL || ls->minimal_symbols != NULL)
2254     {
2255       /* We have just a bunch of functions and/or methods.  */
2256       if (ls->function_symbols != NULL)
2257         {
2258           /* Sort symbols so that symbols with the same program space are next
2259              to each other.  */
2260           std::sort (ls->function_symbols->begin (),
2261                      ls->function_symbols->end (),
2262                      compare_symbols);
2263
2264           for (const auto &sym : *ls->function_symbols)
2265             {
2266               program_space *pspace
2267                 = SYMTAB_PSPACE (symbol_symtab (sym.symbol));
2268               set_current_program_space (pspace);
2269
2270               /* Don't skip to the first line of the function if we
2271                  had found an ifunc minimal symbol for this function,
2272                  because that means that this function is an ifunc
2273                  resolver with the same name as the ifunc itself.  */
2274               bool found_ifunc = false;
2275
2276               if (state->funfirstline
2277                    && ls->minimal_symbols != NULL
2278                    && SYMBOL_CLASS (sym.symbol) == LOC_BLOCK)
2279                 {
2280                   const CORE_ADDR addr
2281                     = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym.symbol));
2282
2283                   for (const auto &elem : *ls->minimal_symbols)
2284                     {
2285                       if (MSYMBOL_TYPE (elem.minsym) == mst_text_gnu_ifunc
2286                           || MSYMBOL_TYPE (elem.minsym) == mst_data_gnu_ifunc)
2287                         {
2288                           CORE_ADDR msym_addr = BMSYMBOL_VALUE_ADDRESS (elem);
2289                           if (MSYMBOL_TYPE (elem.minsym) == mst_data_gnu_ifunc)
2290                             {
2291                               struct gdbarch *gdbarch
2292                                 = get_objfile_arch (elem.objfile);
2293                               msym_addr
2294                                 = (gdbarch_convert_from_func_ptr_addr
2295                                    (gdbarch,
2296                                     msym_addr,
2297                                     current_top_target ()));
2298                             }
2299
2300                           if (msym_addr == addr)
2301                             {
2302                               found_ifunc = true;
2303                               break;
2304                             }
2305                         }
2306                     }
2307                 }
2308
2309               if (!found_ifunc)
2310                 {
2311                   symtab_and_line sal;
2312                   if (symbol_to_sal (&sal, state->funfirstline, sym.symbol)
2313                       && maybe_add_address (state->addr_set, pspace, sal.pc))
2314                     add_sal_to_sals (state, &sals, &sal,
2315                                      SYMBOL_NATURAL_NAME (sym.symbol), 0);
2316                 }
2317             }
2318         }
2319
2320       if (ls->minimal_symbols != NULL)
2321         {
2322           /* Sort minimal symbols by program space, too  */
2323           std::sort (ls->minimal_symbols->begin (),
2324                      ls->minimal_symbols->end (),
2325                      compare_msymbols);
2326
2327           for (const auto &elem : *ls->minimal_symbols)
2328             {
2329               program_space *pspace = elem.objfile->pspace;
2330               set_current_program_space (pspace);
2331               minsym_found (state, elem.objfile, elem.minsym, &sals);
2332             }
2333         }
2334     }
2335   else if (ls->explicit_loc.line_offset.sign != LINE_OFFSET_UNKNOWN)
2336     {
2337       /* Only an offset was specified.  */
2338         sals = create_sals_line_offset (state, ls);
2339
2340         /* Make sure we have a filename for canonicalization.  */
2341         if (ls->explicit_loc.source_filename == NULL)
2342           {
2343             const char *fullname = symtab_to_fullname (state->default_symtab);
2344
2345             /* It may be more appropriate to keep DEFAULT_SYMTAB in its symtab
2346                form so that displaying SOURCE_FILENAME can follow the current
2347                FILENAME_DISPLAY_STRING setting.  But as it is used only rarely
2348                it has been kept for code simplicity only in absolute form.  */
2349             ls->explicit_loc.source_filename = xstrdup (fullname);
2350           }
2351     }
2352   else
2353     {
2354       /* We haven't found any results...  */
2355       return sals;
2356     }
2357
2358   canonicalize_linespec (state, ls);
2359
2360   if (!sals.empty () && state->canonical != NULL)
2361     state->canonical->pre_expanded = 1;
2362
2363   return sals;
2364 }
2365
2366 /* Build RESULT from the explicit location components SOURCE_FILENAME,
2367    FUNCTION_NAME, LABEL_NAME and LINE_OFFSET.  */
2368
2369 static void
2370 convert_explicit_location_to_linespec (struct linespec_state *self,
2371                                        linespec_p result,
2372                                        const char *source_filename,
2373                                        const char *function_name,
2374                                        symbol_name_match_type fname_match_type,
2375                                        const char *label_name,
2376                                        struct line_offset line_offset)
2377 {
2378   std::vector<block_symbol> symbols;
2379   std::vector<block_symbol> *labels;
2380   std::vector<bound_minimal_symbol> minimal_symbols;
2381
2382   result->explicit_loc.func_name_match_type = fname_match_type;
2383
2384   if (source_filename != NULL)
2385     {
2386       try
2387         {
2388           *result->file_symtabs
2389             = symtabs_from_filename (source_filename, self->search_pspace);
2390         }
2391       catch (const gdb_exception_error &except)
2392         {
2393           source_file_not_found_error (source_filename);
2394         }
2395       result->explicit_loc.source_filename = xstrdup (source_filename);
2396     }
2397   else
2398     {
2399       /* A NULL entry means to use the default symtab.  */
2400       result->file_symtabs->push_back (nullptr);
2401     }
2402
2403   if (function_name != NULL)
2404     {
2405       find_linespec_symbols (self, result->file_symtabs,
2406                              function_name, fname_match_type,
2407                              &symbols, &minimal_symbols);
2408
2409       if (symbols.empty () && minimal_symbols.empty ())
2410         symbol_not_found_error (function_name,
2411                                 result->explicit_loc.source_filename);
2412
2413       result->explicit_loc.function_name = xstrdup (function_name);
2414       result->function_symbols
2415         = new std::vector<block_symbol> (std::move (symbols));
2416       result->minimal_symbols
2417         = new std::vector<bound_minimal_symbol> (std::move (minimal_symbols));
2418     }
2419
2420   if (label_name != NULL)
2421     {
2422       labels = find_label_symbols (self, result->function_symbols,
2423                                    &symbols, label_name);
2424
2425       if (labels == NULL)
2426         undefined_label_error (result->explicit_loc.function_name,
2427                                label_name);
2428
2429       result->explicit_loc.label_name = xstrdup (label_name);
2430       result->labels.label_symbols = labels;
2431       result->labels.function_symbols
2432         = new std::vector<block_symbol> (std::move (symbols));
2433     }
2434
2435   if (line_offset.sign != LINE_OFFSET_UNKNOWN)
2436     result->explicit_loc.line_offset = line_offset;
2437 }
2438
2439 /* Convert the explicit location EXPLICIT_LOC into SaLs.  */
2440
2441 static std::vector<symtab_and_line>
2442 convert_explicit_location_to_sals (struct linespec_state *self,
2443                                    linespec_p result,
2444                                    const struct explicit_location *explicit_loc)
2445 {
2446   convert_explicit_location_to_linespec (self, result,
2447                                          explicit_loc->source_filename,
2448                                          explicit_loc->function_name,
2449                                          explicit_loc->func_name_match_type,
2450                                          explicit_loc->label_name,
2451                                          explicit_loc->line_offset);
2452   return convert_linespec_to_sals (self, result);
2453 }
2454
2455 /* Parse a string that specifies a linespec.
2456
2457    The basic grammar of linespecs:
2458
2459    linespec -> var_spec | basic_spec
2460    var_spec -> '$' (STRING | NUMBER)
2461
2462    basic_spec -> file_offset_spec | function_spec | label_spec
2463    file_offset_spec -> opt_file_spec offset_spec
2464    function_spec -> opt_file_spec function_name_spec opt_label_spec
2465    label_spec -> label_name_spec
2466
2467    opt_file_spec -> "" | file_name_spec ':'
2468    opt_label_spec -> "" | ':' label_name_spec
2469
2470    file_name_spec -> STRING
2471    function_name_spec -> STRING
2472    label_name_spec -> STRING
2473    function_name_spec -> STRING
2474    offset_spec -> NUMBER
2475                -> '+' NUMBER
2476                -> '-' NUMBER
2477
2478    This may all be followed by several keywords such as "if EXPR",
2479    which we ignore.
2480
2481    A comma will terminate parsing.
2482
2483    The function may be an undebuggable function found in minimal symbol table.
2484
2485    If the argument FUNFIRSTLINE is nonzero, we want the first line
2486    of real code inside a function when a function is specified, and it is
2487    not OK to specify a variable or type to get its line number.
2488
2489    DEFAULT_SYMTAB specifies the file to use if none is specified.
2490    It defaults to current_source_symtab.
2491    DEFAULT_LINE specifies the line number to use for relative
2492    line numbers (that start with signs).  Defaults to current_source_line.
2493    If CANONICAL is non-NULL, store an array of strings containing the canonical
2494    line specs there if necessary.  Currently overloaded member functions and
2495    line numbers or static functions without a filename yield a canonical
2496    line spec.  The array and the line spec strings are allocated on the heap,
2497    it is the callers responsibility to free them.
2498
2499    Note that it is possible to return zero for the symtab
2500    if no file is validly specified.  Callers must check that.
2501    Also, the line number returned may be invalid.  */
2502
2503 /* Parse the linespec in ARG.  MATCH_TYPE indicates how function names
2504    should be matched.  */
2505
2506 static std::vector<symtab_and_line>
2507 parse_linespec (linespec_parser *parser, const char *arg,
2508                 symbol_name_match_type match_type)
2509 {
2510   linespec_token token;
2511   struct gdb_exception file_exception = exception_none;
2512
2513   /* A special case to start.  It has become quite popular for
2514      IDEs to work around bugs in the previous parser by quoting
2515      the entire linespec, so we attempt to deal with this nicely.  */
2516   parser->is_quote_enclosed = 0;
2517   if (parser->completion_tracker == NULL
2518       && !is_ada_operator (arg)
2519       && strchr (linespec_quote_characters, *arg) != NULL)
2520     {
2521       const char *end;
2522
2523       end = skip_quote_char (arg + 1, *arg);
2524       if (end != NULL && is_closing_quote_enclosed (end))
2525         {
2526           /* Here's the special case.  Skip ARG past the initial
2527              quote.  */
2528           ++arg;
2529           parser->is_quote_enclosed = 1;
2530         }
2531     }
2532
2533   parser->lexer.saved_arg = arg;
2534   parser->lexer.stream = arg;
2535   parser->completion_word = arg;
2536   parser->complete_what = linespec_complete_what::FUNCTION;
2537   PARSER_EXPLICIT (parser)->func_name_match_type = match_type;
2538
2539   /* Initialize the default symtab and line offset.  */
2540   initialize_defaults (&PARSER_STATE (parser)->default_symtab,
2541                        &PARSER_STATE (parser)->default_line);
2542
2543   /* Objective-C shortcut.  */
2544   if (parser->completion_tracker == NULL)
2545     {
2546       std::vector<symtab_and_line> values
2547         = decode_objc (PARSER_STATE (parser), PARSER_RESULT (parser), arg);
2548       if (!values.empty ())
2549         return values;
2550     }
2551   else
2552     {
2553       /* "-"/"+" is either an objc selector, or a number.  There's
2554          nothing to complete the latter to, so just let the caller
2555          complete on functions, which finds objc selectors, if there's
2556          any.  */
2557       if ((arg[0] == '-' || arg[0] == '+') && arg[1] == '\0')
2558         return {};
2559     }
2560
2561   /* Start parsing.  */
2562
2563   /* Get the first token.  */
2564   token = linespec_lexer_consume_token (parser);
2565
2566   /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER.  */
2567   if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
2568     {
2569       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2570       if (parser->completion_tracker == NULL)
2571         PARSER_RESULT (parser)->file_symtabs->push_back (nullptr);
2572
2573       /* User specified a convenience variable or history value.  */
2574       gdb::unique_xmalloc_ptr<char> var = copy_token_string (token);
2575       PARSER_EXPLICIT (parser)->line_offset
2576         = linespec_parse_variable (PARSER_STATE (parser), var.get ());
2577
2578       /* If a line_offset wasn't found (VAR is the name of a user
2579          variable/function), then skip to normal symbol processing.  */
2580       if (PARSER_EXPLICIT (parser)->line_offset.sign != LINE_OFFSET_UNKNOWN)
2581         {
2582           /* Consume this token.  */
2583           linespec_lexer_consume_token (parser);
2584
2585           goto convert_to_sals;
2586         }
2587     }
2588   else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
2589     {
2590       /* Let the default linespec_complete_what::FUNCTION kick in.  */
2591       unexpected_linespec_error (parser);
2592     }
2593   else if (token.type != LSTOKEN_STRING && token.type != LSTOKEN_NUMBER)
2594     {
2595       parser->complete_what = linespec_complete_what::NOTHING;
2596       unexpected_linespec_error (parser);
2597     }
2598
2599   /* Shortcut: If the next token is not LSTOKEN_COLON, we know that
2600      this token cannot represent a filename.  */
2601   token = linespec_lexer_peek_token (parser);
2602
2603   if (token.type == LSTOKEN_COLON)
2604     {
2605       /* Get the current token again and extract the filename.  */
2606       token = linespec_lexer_lex_one (parser);
2607       gdb::unique_xmalloc_ptr<char> user_filename = copy_token_string (token);
2608
2609       /* Check if the input is a filename.  */
2610       try
2611         {
2612           *PARSER_RESULT (parser)->file_symtabs
2613             = symtabs_from_filename (user_filename.get (),
2614                                      PARSER_STATE (parser)->search_pspace);
2615         }
2616       catch (const gdb_exception_error &ex)
2617         {
2618           file_exception = ex;
2619         }
2620
2621       if (file_exception.reason >= 0)
2622         {
2623           /* Symtabs were found for the file.  Record the filename.  */
2624           PARSER_EXPLICIT (parser)->source_filename = user_filename.release ();
2625
2626           /* Get the next token.  */
2627           token = linespec_lexer_consume_token (parser);
2628
2629           /* This is LSTOKEN_COLON; consume it.  */
2630           linespec_lexer_consume_token (parser);
2631         }
2632       else
2633         {
2634           /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2635           PARSER_RESULT (parser)->file_symtabs->push_back (nullptr);
2636         }
2637     }
2638   /* If the next token is not EOI, KEYWORD, or COMMA, issue an error.  */
2639   else if (parser->completion_tracker == NULL
2640            && (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD
2641                && token.type != LSTOKEN_COMMA))
2642     {
2643       /* TOKEN is the _next_ token, not the one currently in the parser.
2644          Consuming the token will give the correct error message.  */
2645       linespec_lexer_consume_token (parser);
2646       unexpected_linespec_error (parser);
2647     }
2648   else
2649     {
2650       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2651       PARSER_RESULT (parser)->file_symtabs->push_back (nullptr);
2652     }
2653
2654   /* Parse the rest of the linespec.  */
2655   linespec_parse_basic (parser);
2656
2657   if (parser->completion_tracker == NULL
2658       && PARSER_RESULT (parser)->function_symbols == NULL
2659       && PARSER_RESULT (parser)->labels.label_symbols == NULL
2660       && PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN
2661       && PARSER_RESULT (parser)->minimal_symbols == NULL)
2662     {
2663       /* The linespec didn't parse.  Re-throw the file exception if
2664          there was one.  */
2665       if (file_exception.reason < 0)
2666         throw_exception (file_exception);
2667
2668       /* Otherwise, the symbol is not found.  */
2669       symbol_not_found_error (PARSER_EXPLICIT (parser)->function_name,
2670                               PARSER_EXPLICIT (parser)->source_filename);
2671     }
2672
2673  convert_to_sals:
2674
2675   /* Get the last token and record how much of the input was parsed,
2676      if necessary.  */
2677   token = linespec_lexer_lex_one (parser);
2678   if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD)
2679     unexpected_linespec_error (parser);
2680   else if (token.type == LSTOKEN_KEYWORD)
2681     {
2682       /* Setup the completion word past the keyword.  Lexing never
2683          advances past a keyword automatically, so skip it
2684          manually.  */
2685       parser->completion_word
2686         = skip_spaces (skip_to_space (PARSER_STREAM (parser)));
2687       parser->complete_what = linespec_complete_what::EXPRESSION;
2688     }
2689
2690   /* Convert the data in PARSER_RESULT to SALs.  */
2691   if (parser->completion_tracker == NULL)
2692     return convert_linespec_to_sals (PARSER_STATE (parser),
2693                                      PARSER_RESULT (parser));
2694
2695   return {};
2696 }
2697
2698
2699 /* A constructor for linespec_state.  */
2700
2701 static void
2702 linespec_state_constructor (struct linespec_state *self,
2703                             int flags, const struct language_defn *language,
2704                             struct program_space *search_pspace,
2705                             struct symtab *default_symtab,
2706                             int default_line,
2707                             struct linespec_result *canonical)
2708 {
2709   memset (self, 0, sizeof (*self));
2710   self->language = language;
2711   self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
2712   self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
2713   self->search_pspace = search_pspace;
2714   self->default_symtab = default_symtab;
2715   self->default_line = default_line;
2716   self->canonical = canonical;
2717   self->program_space = current_program_space;
2718   self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
2719                                       xfree, xcalloc, xfree);
2720   self->is_linespec = 0;
2721 }
2722
2723 /* Initialize a new linespec parser.  */
2724
2725 linespec_parser::linespec_parser (int flags,
2726                                   const struct language_defn *language,
2727                                   struct program_space *search_pspace,
2728                                   struct symtab *default_symtab,
2729                                   int default_line,
2730                                   struct linespec_result *canonical)
2731 {
2732   lexer.current.type = LSTOKEN_CONSUMED;
2733   PARSER_RESULT (this)->file_symtabs = new std::vector<symtab *> ();
2734   PARSER_EXPLICIT (this)->func_name_match_type
2735     = symbol_name_match_type::WILD;
2736   PARSER_EXPLICIT (this)->line_offset.sign = LINE_OFFSET_UNKNOWN;
2737   linespec_state_constructor (PARSER_STATE (this), flags, language,
2738                               search_pspace,
2739                               default_symtab, default_line, canonical);
2740 }
2741
2742 /* A destructor for linespec_state.  */
2743
2744 static void
2745 linespec_state_destructor (struct linespec_state *self)
2746 {
2747   htab_delete (self->addr_set);
2748   xfree (self->canonical_names);
2749 }
2750
2751 /* Delete a linespec parser.  */
2752
2753 linespec_parser::~linespec_parser ()
2754 {
2755   xfree (PARSER_EXPLICIT (this)->source_filename);
2756   xfree (PARSER_EXPLICIT (this)->label_name);
2757   xfree (PARSER_EXPLICIT (this)->function_name);
2758
2759   delete PARSER_RESULT (this)->file_symtabs;
2760   delete PARSER_RESULT (this)->function_symbols;
2761   delete PARSER_RESULT (this)->minimal_symbols;
2762   delete PARSER_RESULT (this)->labels.label_symbols;
2763   delete PARSER_RESULT (this)->labels.function_symbols;
2764
2765   linespec_state_destructor (PARSER_STATE (this));
2766 }
2767
2768 /* See description in linespec.h.  */
2769
2770 void
2771 linespec_lex_to_end (const char **stringp)
2772 {
2773   linespec_token token;
2774   const char *orig;
2775
2776   if (stringp == NULL || *stringp == NULL)
2777     return;
2778
2779   linespec_parser parser (0, current_language, NULL, NULL, 0, NULL);
2780   parser.lexer.saved_arg = *stringp;
2781   PARSER_STREAM (&parser) = orig = *stringp;
2782
2783   do
2784     {
2785       /* Stop before any comma tokens;  we need it to keep it
2786          as the next token in the string.  */
2787       token = linespec_lexer_peek_token (&parser);
2788       if (token.type == LSTOKEN_COMMA)
2789         break;
2790       token = linespec_lexer_consume_token (&parser);
2791     }
2792   while (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD);
2793
2794   *stringp += PARSER_STREAM (&parser) - orig;
2795 }
2796
2797 /* See linespec.h.  */
2798
2799 void
2800 linespec_complete_function (completion_tracker &tracker,
2801                             const char *function,
2802                             symbol_name_match_type func_match_type,
2803                             const char *source_filename)
2804 {
2805   complete_symbol_mode mode = complete_symbol_mode::LINESPEC;
2806
2807   if (source_filename != NULL)
2808     {
2809       collect_file_symbol_completion_matches (tracker, mode, func_match_type,
2810                                               function, function, source_filename);
2811     }
2812   else
2813     {
2814       collect_symbol_completion_matches (tracker, mode, func_match_type,
2815                                          function, function);
2816
2817     }
2818 }
2819
2820 /* Helper for complete_linespec to simplify it.  SOURCE_FILENAME is
2821    only meaningful if COMPONENT is FUNCTION.  */
2822
2823 static void
2824 complete_linespec_component (linespec_parser *parser,
2825                              completion_tracker &tracker,
2826                              const char *text,
2827                              linespec_complete_what component,
2828                              const char *source_filename)
2829 {
2830   if (component == linespec_complete_what::KEYWORD)
2831     {
2832       complete_on_enum (tracker, linespec_keywords, text, text);
2833     }
2834   else if (component == linespec_complete_what::EXPRESSION)
2835     {
2836       const char *word
2837         = advance_to_expression_complete_word_point (tracker, text);
2838       complete_expression (tracker, text, word);
2839     }
2840   else if (component == linespec_complete_what::FUNCTION)
2841     {
2842       completion_list fn_list;
2843
2844       symbol_name_match_type match_type
2845         = PARSER_EXPLICIT (parser)->func_name_match_type;
2846       linespec_complete_function (tracker, text, match_type, source_filename);
2847       if (source_filename == NULL)
2848         {
2849           /* Haven't seen a source component, like in "b
2850              file.c:function[TAB]".  Maybe this wasn't a function, but
2851              a filename instead, like "b file.[TAB]".  */
2852           fn_list = complete_source_filenames (text);
2853         }
2854
2855       /* If we only have a single filename completion, append a ':' for
2856          the user, since that's the only thing that can usefully follow
2857          the filename.  */
2858       if (fn_list.size () == 1 && !tracker.have_completions ())
2859         {
2860           char *fn = fn_list[0].release ();
2861
2862           /* If we also need to append a quote char, it needs to be
2863              appended before the ':'.  Append it now, and make ':' the
2864              new "quote" char.  */
2865           if (tracker.quote_char ())
2866             {
2867               char quote_char_str[2] = { (char) tracker.quote_char () };
2868
2869               fn = reconcat (fn, fn, quote_char_str, (char *) NULL);
2870               tracker.set_quote_char (':');
2871             }
2872           else
2873             fn = reconcat (fn, fn, ":", (char *) NULL);
2874           fn_list[0].reset (fn);
2875
2876           /* Tell readline to skip appending a space.  */
2877           tracker.set_suppress_append_ws (true);
2878         }
2879       tracker.add_completions (std::move (fn_list));
2880     }
2881 }
2882
2883 /* Helper for linespec_complete_label.  Find labels that match
2884    LABEL_NAME in the function symbols listed in the PARSER, and add
2885    them to the tracker.  */
2886
2887 static void
2888 complete_label (completion_tracker &tracker,
2889                 linespec_parser *parser,
2890                 const char *label_name)
2891 {
2892   std::vector<block_symbol> label_function_symbols;
2893   std::vector<block_symbol> *labels
2894     = find_label_symbols (PARSER_STATE (parser),
2895                           PARSER_RESULT (parser)->function_symbols,
2896                           &label_function_symbols,
2897                           label_name, true);
2898
2899   if (labels != nullptr)
2900     {
2901       for (const auto &label : *labels)
2902         {
2903           char *match = xstrdup (SYMBOL_SEARCH_NAME (label.symbol));
2904           tracker.add_completion (gdb::unique_xmalloc_ptr<char> (match));
2905         }
2906       delete labels;
2907     }
2908 }
2909
2910 /* See linespec.h.  */
2911
2912 void
2913 linespec_complete_label (completion_tracker &tracker,
2914                          const struct language_defn *language,
2915                          const char *source_filename,
2916                          const char *function_name,
2917                          symbol_name_match_type func_name_match_type,
2918                          const char *label_name)
2919 {
2920   linespec_parser parser (0, language, NULL, NULL, 0, NULL);
2921
2922   line_offset unknown_offset = { 0, LINE_OFFSET_UNKNOWN };
2923
2924   try
2925     {
2926       convert_explicit_location_to_linespec (PARSER_STATE (&parser),
2927                                              PARSER_RESULT (&parser),
2928                                              source_filename,
2929                                              function_name,
2930                                              func_name_match_type,
2931                                              NULL, unknown_offset);
2932     }
2933   catch (const gdb_exception_error &ex)
2934     {
2935       return;
2936     }
2937
2938   complete_label (tracker, &parser, label_name);
2939 }
2940
2941 /* See description in linespec.h.  */
2942
2943 void
2944 linespec_complete (completion_tracker &tracker, const char *text,
2945                    symbol_name_match_type match_type)
2946 {
2947   const char *orig = text;
2948
2949   linespec_parser parser (0, current_language, NULL, NULL, 0, NULL);
2950   parser.lexer.saved_arg = text;
2951   PARSER_EXPLICIT (&parser)->func_name_match_type = match_type;
2952   PARSER_STREAM (&parser) = text;
2953
2954   parser.completion_tracker = &tracker;
2955   PARSER_STATE (&parser)->is_linespec = 1;
2956
2957   /* Parse as much as possible.  parser.completion_word will hold
2958      furthest completion point we managed to parse to.  */
2959   try
2960     {
2961       parse_linespec (&parser, text, match_type);
2962     }
2963   catch (const gdb_exception_error &except)
2964     {
2965     }
2966
2967   if (parser.completion_quote_char != '\0'
2968       && parser.completion_quote_end != NULL
2969       && parser.completion_quote_end[1] == '\0')
2970     {
2971       /* If completing a quoted string with the cursor right at
2972          terminating quote char, complete the completion word without
2973          interpretation, so that readline advances the cursor one
2974          whitespace past the quote, even if there's no match.  This
2975          makes these cases behave the same:
2976
2977            before: "b function()"
2978            after:  "b function() "
2979
2980            before: "b 'function()'"
2981            after:  "b 'function()' "
2982
2983          and trusts the user in this case:
2984
2985            before: "b 'not_loaded_function_yet()'"
2986            after:  "b 'not_loaded_function_yet()' "
2987       */
2988       parser.complete_what = linespec_complete_what::NOTHING;
2989       parser.completion_quote_char = '\0';
2990
2991       gdb::unique_xmalloc_ptr<char> text_copy
2992         (xstrdup (parser.completion_word));
2993       tracker.add_completion (std::move (text_copy));
2994     }
2995
2996   tracker.set_quote_char (parser.completion_quote_char);
2997
2998   if (parser.complete_what == linespec_complete_what::LABEL)
2999     {
3000       parser.complete_what = linespec_complete_what::NOTHING;
3001
3002       const char *func_name = PARSER_EXPLICIT (&parser)->function_name;
3003
3004       std::vector<block_symbol> function_symbols;
3005       std::vector<bound_minimal_symbol> minimal_symbols;
3006       find_linespec_symbols (PARSER_STATE (&parser),
3007                              PARSER_RESULT (&parser)->file_symtabs,
3008                              func_name, match_type,
3009                              &function_symbols, &minimal_symbols);
3010
3011       PARSER_RESULT (&parser)->function_symbols
3012         = new std::vector<block_symbol> (std::move (function_symbols));
3013       PARSER_RESULT (&parser)->minimal_symbols
3014         = new std::vector<bound_minimal_symbol> (std::move (minimal_symbols));
3015
3016       complete_label (tracker, &parser, parser.completion_word);
3017     }
3018   else if (parser.complete_what == linespec_complete_what::FUNCTION)
3019     {
3020       /* While parsing/lexing, we didn't know whether the completion
3021          word completes to a unique function/source name already or
3022          not.
3023
3024          E.g.:
3025            "b function() <tab>"
3026          may need to complete either to:
3027            "b function() const"
3028          or to:
3029            "b function() if/thread/task"
3030
3031          Or, this:
3032            "b foo t"
3033          may need to complete either to:
3034            "b foo template_fun<T>()"
3035          with "foo" being the template function's return type, or to:
3036            "b foo thread/task"
3037
3038          Or, this:
3039            "b file<TAB>"
3040          may need to complete either to a source file name:
3041            "b file.c"
3042          or this, also a filename, but a unique completion:
3043            "b file.c:"
3044          or to a function name:
3045            "b file_function"
3046
3047          Address that by completing assuming source or function, and
3048          seeing if we find a completion that matches exactly the
3049          completion word.  If so, then it must be a function (see note
3050          below) and we advance the completion word to the end of input
3051          and switch to KEYWORD completion mode.
3052
3053          Note: if we find a unique completion for a source filename,
3054          then it won't match the completion word, because the LCD will
3055          contain a trailing ':'.  And if we're completing at or after
3056          the ':', then complete_linespec_component won't try to
3057          complete on source filenames.  */
3058
3059       const char *word = parser.completion_word;
3060
3061       complete_linespec_component (&parser, tracker,
3062                                    parser.completion_word,
3063                                    linespec_complete_what::FUNCTION,
3064                                    PARSER_EXPLICIT (&parser)->source_filename);
3065
3066       parser.complete_what = linespec_complete_what::NOTHING;
3067
3068       if (tracker.quote_char ())
3069         {
3070           /* The function/file name was not close-quoted, so this
3071              can't be a keyword.  Note: complete_linespec_component
3072              may have swapped the original quote char for ':' when we
3073              get here, but that still indicates the same.  */
3074         }
3075       else if (!tracker.have_completions ())
3076         {
3077           size_t key_start;
3078           size_t wordlen = strlen (parser.completion_word);
3079
3080           key_start
3081             = string_find_incomplete_keyword_at_end (linespec_keywords,
3082                                                      parser.completion_word,
3083                                                      wordlen);
3084
3085           if (key_start != -1
3086               || (wordlen > 0
3087                   && parser.completion_word[wordlen - 1] == ' '))
3088             {
3089               parser.completion_word += key_start;
3090               parser.complete_what = linespec_complete_what::KEYWORD;
3091             }
3092         }
3093       else if (tracker.completes_to_completion_word (word))
3094         {
3095           /* Skip the function and complete on keywords.  */
3096           parser.completion_word += strlen (word);
3097           parser.complete_what = linespec_complete_what::KEYWORD;
3098           tracker.discard_completions ();
3099         }
3100     }
3101
3102   tracker.advance_custom_word_point_by (parser.completion_word - orig);
3103
3104   complete_linespec_component (&parser, tracker,
3105                                parser.completion_word,
3106                                parser.complete_what,
3107                                PARSER_EXPLICIT (&parser)->source_filename);
3108
3109   /* If we're past the "filename:function:label:offset" linespec, and
3110      didn't find any match, then assume the user might want to create
3111      a pending breakpoint anyway and offer the keyword
3112      completions.  */
3113   if (!parser.completion_quote_char
3114       && (parser.complete_what == linespec_complete_what::FUNCTION
3115           || parser.complete_what == linespec_complete_what::LABEL
3116           || parser.complete_what == linespec_complete_what::NOTHING)
3117       && !tracker.have_completions ())
3118     {
3119       const char *end
3120         = parser.completion_word + strlen (parser.completion_word);
3121
3122       if (end > orig && end[-1] == ' ')
3123         {
3124           tracker.advance_custom_word_point_by (end - parser.completion_word);
3125
3126           complete_linespec_component (&parser, tracker, end,
3127                                        linespec_complete_what::KEYWORD,
3128                                        NULL);
3129         }
3130     }
3131 }
3132
3133 /* A helper function for decode_line_full and decode_line_1 to
3134    turn LOCATION into std::vector<symtab_and_line>.  */
3135
3136 static std::vector<symtab_and_line>
3137 event_location_to_sals (linespec_parser *parser,
3138                         const struct event_location *location)
3139 {
3140   std::vector<symtab_and_line> result;
3141
3142   switch (event_location_type (location))
3143     {
3144     case LINESPEC_LOCATION:
3145       {
3146         PARSER_STATE (parser)->is_linespec = 1;
3147         try
3148           {
3149             const linespec_location *ls = get_linespec_location (location);
3150             result = parse_linespec (parser,
3151                                      ls->spec_string, ls->match_type);
3152           }
3153         catch (const gdb_exception_error &except)
3154           {
3155             throw;
3156           }
3157       }
3158       break;
3159
3160     case ADDRESS_LOCATION:
3161       {
3162         const char *addr_string = get_address_string_location (location);
3163         CORE_ADDR addr = get_address_location (location);
3164
3165         if (addr_string != NULL)
3166           {
3167             addr = linespec_expression_to_pc (&addr_string);
3168             if (PARSER_STATE (parser)->canonical != NULL)
3169               PARSER_STATE (parser)->canonical->location
3170                 = copy_event_location (location);
3171           }
3172
3173         result = convert_address_location_to_sals (PARSER_STATE (parser),
3174                                                    addr);
3175       }
3176       break;
3177
3178     case EXPLICIT_LOCATION:
3179       {
3180         const struct explicit_location *explicit_loc;
3181
3182         explicit_loc = get_explicit_location_const (location);
3183         result = convert_explicit_location_to_sals (PARSER_STATE (parser),
3184                                                     PARSER_RESULT (parser),
3185                                                     explicit_loc);
3186       }
3187       break;
3188
3189     case PROBE_LOCATION:
3190       /* Probes are handled by their own decoders.  */
3191       gdb_assert_not_reached ("attempt to decode probe location");
3192       break;
3193
3194     default:
3195       gdb_assert_not_reached ("unhandled event location type");
3196     }
3197
3198   return result;
3199 }
3200
3201 /* See linespec.h.  */
3202
3203 void
3204 decode_line_full (const struct event_location *location, int flags,
3205                   struct program_space *search_pspace,
3206                   struct symtab *default_symtab,
3207                   int default_line, struct linespec_result *canonical,
3208                   const char *select_mode,
3209                   const char *filter)
3210 {
3211   std::vector<const char *> filters;
3212   struct linespec_state *state;
3213
3214   gdb_assert (canonical != NULL);
3215   /* The filter only makes sense for 'all'.  */
3216   gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
3217   gdb_assert (select_mode == NULL
3218               || select_mode == multiple_symbols_all
3219               || select_mode == multiple_symbols_ask
3220               || select_mode == multiple_symbols_cancel);
3221   gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
3222
3223   linespec_parser parser (flags, current_language,
3224                           search_pspace, default_symtab,
3225                           default_line, canonical);
3226
3227   scoped_restore_current_program_space restore_pspace;
3228
3229   std::vector<symtab_and_line> result = event_location_to_sals (&parser,
3230                                                                 location);
3231   state = PARSER_STATE (&parser);
3232
3233   gdb_assert (result.size () == 1 || canonical->pre_expanded);
3234   canonical->pre_expanded = 1;
3235
3236   /* Arrange for allocated canonical names to be freed.  */
3237   std::vector<gdb::unique_xmalloc_ptr<char>> hold_names;
3238   for (int i = 0; i < result.size (); ++i)
3239     {
3240       gdb_assert (state->canonical_names[i].suffix != NULL);
3241       hold_names.emplace_back (state->canonical_names[i].suffix);
3242     }
3243
3244   if (select_mode == NULL)
3245     {
3246       if (top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ())
3247         select_mode = multiple_symbols_all;
3248       else
3249         select_mode = multiple_symbols_select_mode ();
3250     }
3251
3252   if (select_mode == multiple_symbols_all)
3253     {
3254       if (filter != NULL)
3255         {
3256           filters.push_back (filter);
3257           filter_results (state, &result, filters);
3258         }
3259       else
3260         convert_results_to_lsals (state, &result);
3261     }
3262   else
3263     decode_line_2 (state, &result, select_mode);
3264 }
3265
3266 /* See linespec.h.  */
3267
3268 std::vector<symtab_and_line>
3269 decode_line_1 (const struct event_location *location, int flags,
3270                struct program_space *search_pspace,
3271                struct symtab *default_symtab,
3272                int default_line)
3273 {
3274   linespec_parser parser (flags, current_language,
3275                           search_pspace, default_symtab,
3276                           default_line, NULL);
3277
3278   scoped_restore_current_program_space restore_pspace;
3279
3280   return event_location_to_sals (&parser, location);
3281 }
3282
3283 /* See linespec.h.  */
3284
3285 std::vector<symtab_and_line>
3286 decode_line_with_current_source (const char *string, int flags)
3287 {
3288   if (string == 0)
3289     error (_("Empty line specification."));
3290
3291   /* We use whatever is set as the current source line.  We do not try
3292      and get a default source symtab+line or it will recursively call us!  */
3293   symtab_and_line cursal = get_current_source_symtab_and_line ();
3294
3295   event_location_up location = string_to_event_location (&string,
3296                                                          current_language);
3297   std::vector<symtab_and_line> sals
3298     = decode_line_1 (location.get (), flags, NULL, cursal.symtab, cursal.line);
3299
3300   if (*string)
3301     error (_("Junk at end of line specification: %s"), string);
3302
3303   return sals;
3304 }
3305
3306 /* See linespec.h.  */
3307
3308 std::vector<symtab_and_line>
3309 decode_line_with_last_displayed (const char *string, int flags)
3310 {
3311   if (string == 0)
3312     error (_("Empty line specification."));
3313
3314   event_location_up location = string_to_event_location (&string,
3315                                                          current_language);
3316   std::vector<symtab_and_line> sals
3317     = (last_displayed_sal_is_valid ()
3318        ? decode_line_1 (location.get (), flags, NULL,
3319                         get_last_displayed_symtab (),
3320                         get_last_displayed_line ())
3321        : decode_line_1 (location.get (), flags, NULL,
3322                         (struct symtab *) NULL, 0));
3323
3324   if (*string)
3325     error (_("Junk at end of line specification: %s"), string);
3326
3327   return sals;
3328 }
3329
3330 \f
3331
3332 /* First, some functions to initialize stuff at the beggining of the
3333    function.  */
3334
3335 static void
3336 initialize_defaults (struct symtab **default_symtab, int *default_line)
3337 {
3338   if (*default_symtab == 0)
3339     {
3340       /* Use whatever we have for the default source line.  We don't use
3341          get_current_or_default_symtab_and_line as it can recurse and call
3342          us back!  */
3343       struct symtab_and_line cursal = 
3344         get_current_source_symtab_and_line ();
3345       
3346       *default_symtab = cursal.symtab;
3347       *default_line = cursal.line;
3348     }
3349 }
3350
3351 \f
3352
3353 /* Evaluate the expression pointed to by EXP_PTR into a CORE_ADDR,
3354    advancing EXP_PTR past any parsed text.  */
3355
3356 CORE_ADDR
3357 linespec_expression_to_pc (const char **exp_ptr)
3358 {
3359   if (current_program_space->executing_startup)
3360     /* The error message doesn't really matter, because this case
3361        should only hit during breakpoint reset.  */
3362     throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
3363                                     "program space is in startup"));
3364
3365   (*exp_ptr)++;
3366   return value_as_address (parse_to_comma_and_eval (exp_ptr));
3367 }
3368
3369 \f
3370
3371 /* Here's where we recognise an Objective-C Selector.  An Objective C
3372    selector may be implemented by more than one class, therefore it
3373    may represent more than one method/function.  This gives us a
3374    situation somewhat analogous to C++ overloading.  If there's more
3375    than one method that could represent the selector, then use some of
3376    the existing C++ code to let the user choose one.  */
3377
3378 static std::vector<symtab_and_line>
3379 decode_objc (struct linespec_state *self, linespec_p ls, const char *arg)
3380 {
3381   struct collect_info info;
3382   std::vector<const char *> symbol_names;
3383   const char *new_argptr;
3384
3385   info.state = self;
3386   std::vector<symtab *> symtabs;
3387   symtabs.push_back (nullptr);
3388
3389   info.file_symtabs = &symtabs;
3390
3391   std::vector<block_symbol> symbols;
3392   info.result.symbols = &symbols;
3393   std::vector<bound_minimal_symbol> minimal_symbols;
3394   info.result.minimal_symbols = &minimal_symbols;
3395
3396   new_argptr = find_imps (arg, &symbol_names);
3397   if (symbol_names.empty ())
3398     return {};
3399
3400   add_all_symbol_names_from_pspace (&info, NULL, symbol_names,
3401                                     FUNCTIONS_DOMAIN);
3402
3403   std::vector<symtab_and_line> values;
3404   if (!symbols.empty () || !minimal_symbols.empty ())
3405     {
3406       char *saved_arg;
3407
3408       saved_arg = (char *) alloca (new_argptr - arg + 1);
3409       memcpy (saved_arg, arg, new_argptr - arg);
3410       saved_arg[new_argptr - arg] = '\0';
3411
3412       ls->explicit_loc.function_name = xstrdup (saved_arg);
3413       ls->function_symbols
3414         = new std::vector<block_symbol> (std::move (symbols));
3415       ls->minimal_symbols
3416         = new std::vector<bound_minimal_symbol> (std::move (minimal_symbols));
3417       values = convert_linespec_to_sals (self, ls);
3418
3419       if (self->canonical)
3420         {
3421           std::string holder;
3422           const char *str;
3423
3424           self->canonical->pre_expanded = 1;
3425
3426           if (ls->explicit_loc.source_filename)
3427             {
3428               holder = string_printf ("%s:%s",
3429                                       ls->explicit_loc.source_filename,
3430                                       saved_arg);
3431               str = holder.c_str ();
3432             }
3433           else
3434             str = saved_arg;
3435
3436           self->canonical->location
3437             = new_linespec_location (&str, symbol_name_match_type::FULL);
3438         }
3439     }
3440
3441   return values;
3442 }
3443
3444 namespace {
3445
3446 /* A function object that serves as symbol_found_callback_ftype
3447    callback for iterate_over_symbols.  This is used by
3448    lookup_prefix_sym to collect type symbols.  */
3449 class decode_compound_collector
3450 {
3451 public:
3452   decode_compound_collector ()
3453   {
3454     m_unique_syms = htab_create_alloc (1, htab_hash_pointer,
3455                                        htab_eq_pointer, NULL,
3456                                        xcalloc, xfree);
3457   }
3458
3459   ~decode_compound_collector ()
3460   {
3461     if (m_unique_syms != NULL)
3462       htab_delete (m_unique_syms);
3463   }
3464
3465   /* Return all symbols collected.  */
3466   std::vector<block_symbol> release_symbols ()
3467   {
3468     return std::move (m_symbols);
3469   }
3470
3471   /* Callable as a symbol_found_callback_ftype callback.  */
3472   bool operator () (block_symbol *bsym);
3473
3474 private:
3475   /* A hash table of all symbols we found.  We use this to avoid
3476      adding any symbol more than once.  */
3477   htab_t m_unique_syms;
3478
3479   /* The result vector.  */
3480   std::vector<block_symbol>  m_symbols;
3481 };
3482
3483 bool
3484 decode_compound_collector::operator () (block_symbol *bsym)
3485 {
3486   void **slot;
3487   struct type *t;
3488   struct symbol *sym = bsym->symbol;
3489
3490   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
3491     return true; /* Continue iterating.  */
3492
3493   t = SYMBOL_TYPE (sym);
3494   t = check_typedef (t);
3495   if (TYPE_CODE (t) != TYPE_CODE_STRUCT
3496       && TYPE_CODE (t) != TYPE_CODE_UNION
3497       && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
3498     return true; /* Continue iterating.  */
3499
3500   slot = htab_find_slot (m_unique_syms, sym, INSERT);
3501   if (!*slot)
3502     {
3503       *slot = sym;
3504       m_symbols.push_back (*bsym);
3505     }
3506
3507   return true; /* Continue iterating.  */
3508 }
3509
3510 } // namespace
3511
3512 /* Return any symbols corresponding to CLASS_NAME in FILE_SYMTABS.  */
3513
3514 static std::vector<block_symbol>
3515 lookup_prefix_sym (struct linespec_state *state,
3516                    std::vector<symtab *> *file_symtabs,
3517                    const char *class_name)
3518 {
3519   decode_compound_collector collector;
3520
3521   lookup_name_info lookup_name (class_name, symbol_name_match_type::FULL);
3522
3523   for (const auto &elt : *file_symtabs)
3524     {
3525       if (elt == nullptr)
3526         {
3527           iterate_over_all_matching_symtabs (state, lookup_name,
3528                                              STRUCT_DOMAIN, ALL_DOMAIN,
3529                                              NULL, false, collector);
3530           iterate_over_all_matching_symtabs (state, lookup_name,
3531                                              VAR_DOMAIN, ALL_DOMAIN,
3532                                              NULL, false, collector);
3533         }
3534       else
3535         {
3536           /* Program spaces that are executing startup should have
3537              been filtered out earlier.  */
3538           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
3539           set_current_program_space (SYMTAB_PSPACE (elt));
3540           iterate_over_file_blocks (elt, lookup_name, STRUCT_DOMAIN, collector);
3541           iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN, collector);
3542         }
3543     }
3544
3545   return collector.release_symbols ();
3546 }
3547
3548 /* A std::sort comparison function for symbols.  The resulting order does
3549    not actually matter; we just need to be able to sort them so that
3550    symbols with the same program space end up next to each other.  */
3551
3552 static bool
3553 compare_symbols (const block_symbol &a, const block_symbol &b)
3554 {
3555   uintptr_t uia, uib;
3556
3557   uia = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (a.symbol));
3558   uib = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (b.symbol));
3559
3560   if (uia < uib)
3561     return true;
3562   if (uia > uib)
3563     return false;
3564
3565   uia = (uintptr_t) a.symbol;
3566   uib = (uintptr_t) b.symbol;
3567
3568   if (uia < uib)
3569     return true;
3570
3571   return false;
3572 }
3573
3574 /* Like compare_symbols but for minimal symbols.  */
3575
3576 static bool
3577 compare_msymbols (const bound_minimal_symbol &a, const bound_minimal_symbol &b)
3578 {
3579   uintptr_t uia, uib;
3580
3581   uia = (uintptr_t) a.objfile->pspace;
3582   uib = (uintptr_t) a.objfile->pspace;
3583
3584   if (uia < uib)
3585     return true;
3586   if (uia > uib)
3587     return false;
3588
3589   uia = (uintptr_t) a.minsym;
3590   uib = (uintptr_t) b.minsym;
3591
3592   if (uia < uib)
3593     return true;
3594
3595   return false;
3596 }
3597
3598 /* Look for all the matching instances of each symbol in NAMES.  Only
3599    instances from PSPACE are considered; other program spaces are
3600    handled by our caller.  If PSPACE is NULL, then all program spaces
3601    are considered.  Results are stored into INFO.  */
3602
3603 static void
3604 add_all_symbol_names_from_pspace (struct collect_info *info,
3605                                   struct program_space *pspace,
3606                                   const std::vector<const char *> &names,
3607                                   enum search_domain search_domain)
3608 {
3609   for (const char *iter : names)
3610     add_matching_symbols_to_info (iter,
3611                                   symbol_name_match_type::FULL,
3612                                   search_domain, info, pspace);
3613 }
3614
3615 static void
3616 find_superclass_methods (std::vector<struct type *> &&superclasses,
3617                          const char *name, enum language name_lang,
3618                          std::vector<const char *> *result_names)
3619 {
3620   size_t old_len = result_names->size ();
3621
3622   while (1)
3623     {
3624       std::vector<struct type *> new_supers;
3625
3626       for (type *t : superclasses)
3627         find_methods (t, name_lang, name, result_names, &new_supers);
3628
3629       if (result_names->size () != old_len || new_supers.empty ())
3630         break;
3631
3632       superclasses = std::move (new_supers);
3633     }
3634 }
3635
3636 /* This finds the method METHOD_NAME in the class CLASS_NAME whose type is
3637    given by one of the symbols in SYM_CLASSES.  Matches are returned
3638    in SYMBOLS (for debug symbols) and MINSYMS (for minimal symbols).  */
3639
3640 static void
3641 find_method (struct linespec_state *self, std::vector<symtab *> *file_symtabs,
3642              const char *class_name, const char *method_name,
3643              std::vector<block_symbol> *sym_classes,
3644              std::vector<block_symbol> *symbols,
3645              std::vector<bound_minimal_symbol> *minsyms)
3646 {
3647   size_t last_result_len;
3648   std::vector<struct type *> superclass_vec;
3649   std::vector<const char *> result_names;
3650   struct collect_info info;
3651
3652   /* Sort symbols so that symbols with the same program space are next
3653      to each other.  */
3654   std::sort (sym_classes->begin (), sym_classes->end (),
3655              compare_symbols);
3656
3657   info.state = self;
3658   info.file_symtabs = file_symtabs;
3659   info.result.symbols = symbols;
3660   info.result.minimal_symbols = minsyms;
3661
3662   /* Iterate over all the types, looking for the names of existing
3663      methods matching METHOD_NAME.  If we cannot find a direct method in a
3664      given program space, then we consider inherited methods; this is
3665      not ideal (ideal would be to respect C++ hiding rules), but it
3666      seems good enough and is what GDB has historically done.  We only
3667      need to collect the names because later we find all symbols with
3668      those names.  This loop is written in a somewhat funny way
3669      because we collect data across the program space before deciding
3670      what to do.  */
3671   last_result_len = 0;
3672   unsigned int ix = 0;
3673   for (const auto &elt : *sym_classes)
3674     {
3675       struct type *t;
3676       struct program_space *pspace;
3677       struct symbol *sym = elt.symbol;
3678
3679       /* Program spaces that are executing startup should have
3680          been filtered out earlier.  */
3681       pspace = SYMTAB_PSPACE (symbol_symtab (sym));
3682       gdb_assert (!pspace->executing_startup);
3683       set_current_program_space (pspace);
3684       t = check_typedef (SYMBOL_TYPE (sym));
3685       find_methods (t, SYMBOL_LANGUAGE (sym),
3686                     method_name, &result_names, &superclass_vec);
3687
3688       /* Handle all items from a single program space at once; and be
3689          sure not to miss the last batch.  */
3690       if (ix == sym_classes->size () - 1
3691           || (pspace
3692               != SYMTAB_PSPACE (symbol_symtab (sym_classes->at (ix + 1).symbol))))
3693         {
3694           /* If we did not find a direct implementation anywhere in
3695              this program space, consider superclasses.  */
3696           if (result_names.size () == last_result_len)
3697             find_superclass_methods (std::move (superclass_vec), method_name,
3698                                      SYMBOL_LANGUAGE (sym), &result_names);
3699
3700           /* We have a list of candidate symbol names, so now we
3701              iterate over the symbol tables looking for all
3702              matches in this pspace.  */
3703           add_all_symbol_names_from_pspace (&info, pspace, result_names,
3704                                             FUNCTIONS_DOMAIN);
3705
3706           superclass_vec.clear ();
3707           last_result_len = result_names.size ();
3708           ++ix;
3709         }
3710     }
3711
3712   if (!symbols->empty () || !minsyms->empty ())
3713     return;
3714
3715   /* Throw an NOT_FOUND_ERROR.  This will be caught by the caller
3716      and other attempts to locate the symbol will be made.  */
3717   throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
3718 }
3719
3720 \f
3721
3722 namespace {
3723
3724 /* This function object is a callback for iterate_over_symtabs, used
3725    when collecting all matching symtabs.  */
3726
3727 class symtab_collector
3728 {
3729 public:
3730   symtab_collector ()
3731   {
3732     m_symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
3733                                   NULL);
3734   }
3735
3736   ~symtab_collector ()
3737   {
3738     if (m_symtab_table != NULL)
3739       htab_delete (m_symtab_table);
3740   }
3741
3742   /* Callable as a symbol_found_callback_ftype callback.  */
3743   bool operator () (symtab *sym);
3744
3745   /* Return an rvalue reference to the collected symtabs.  */
3746   std::vector<symtab *> &&release_symtabs ()
3747   {
3748     return std::move (m_symtabs);
3749   }
3750
3751 private:
3752   /* The result vector of symtabs.  */
3753   std::vector<symtab *> m_symtabs;
3754
3755   /* This is used to ensure the symtabs are unique.  */
3756   htab_t m_symtab_table;
3757 };
3758
3759 bool
3760 symtab_collector::operator () (struct symtab *symtab)
3761 {
3762   void **slot;
3763
3764   slot = htab_find_slot (m_symtab_table, symtab, INSERT);
3765   if (!*slot)
3766     {
3767       *slot = symtab;
3768       m_symtabs.push_back (symtab);
3769     }
3770
3771   return false;
3772 }
3773
3774 } // namespace
3775
3776 /* Given a file name, return a list of all matching symtabs.  If
3777    SEARCH_PSPACE is not NULL, the search is restricted to just that
3778    program space.  */
3779
3780 static std::vector<symtab *>
3781 collect_symtabs_from_filename (const char *file,
3782                                struct program_space *search_pspace)
3783 {
3784   symtab_collector collector;
3785
3786   /* Find that file's data.  */
3787   if (search_pspace == NULL)
3788     {
3789       struct program_space *pspace;
3790
3791       ALL_PSPACES (pspace)
3792         {
3793           if (pspace->executing_startup)
3794             continue;
3795
3796           set_current_program_space (pspace);
3797           iterate_over_symtabs (file, collector);
3798         }
3799     }
3800   else
3801     {
3802       set_current_program_space (search_pspace);
3803       iterate_over_symtabs (file, collector);
3804     }
3805
3806   return collector.release_symtabs ();
3807 }
3808
3809 /* Return all the symtabs associated to the FILENAME.  If SEARCH_PSPACE is
3810    not NULL, the search is restricted to just that program space.  */
3811
3812 static std::vector<symtab *>
3813 symtabs_from_filename (const char *filename,
3814                        struct program_space *search_pspace)
3815 {
3816   std::vector<symtab *> result
3817     = collect_symtabs_from_filename (filename, search_pspace);
3818
3819   if (result.empty ())
3820     {
3821       if (!have_full_symbols () && !have_partial_symbols ())
3822         throw_error (NOT_FOUND_ERROR,
3823                      _("No symbol table is loaded.  "
3824                        "Use the \"file\" command."));
3825       source_file_not_found_error (filename);
3826     }
3827
3828   return result;
3829 }
3830
3831 /* See symtab.h.  */
3832
3833 void
3834 symbol_searcher::find_all_symbols (const std::string &name,
3835                                    const struct language_defn *language,
3836                                    enum search_domain search_domain,
3837                                    std::vector<symtab *> *search_symtabs,
3838                                    struct program_space *search_pspace)
3839 {
3840   symbol_searcher_collect_info info;
3841   struct linespec_state state;
3842
3843   memset (&state, 0, sizeof (state));
3844   state.language = language;
3845   info.state = &state;
3846
3847   info.result.symbols = &m_symbols;
3848   info.result.minimal_symbols = &m_minimal_symbols;
3849   std::vector<symtab *> all_symtabs;
3850   if (search_symtabs == nullptr)
3851     {
3852       all_symtabs.push_back (nullptr);
3853       search_symtabs = &all_symtabs;
3854     }
3855   info.file_symtabs = search_symtabs;
3856
3857   add_matching_symbols_to_info (name.c_str (), symbol_name_match_type::WILD,
3858                                 search_domain, &info, search_pspace);
3859 }
3860
3861 /* Look up a function symbol named NAME in symtabs FILE_SYMTABS.  Matching
3862    debug symbols are returned in SYMBOLS.  Matching minimal symbols are
3863    returned in MINSYMS.  */
3864
3865 static void
3866 find_function_symbols (struct linespec_state *state,
3867                        std::vector<symtab *> *file_symtabs, const char *name,
3868                        symbol_name_match_type name_match_type,
3869                        std::vector<block_symbol> *symbols,
3870                        std::vector<bound_minimal_symbol> *minsyms)
3871 {
3872   struct collect_info info;
3873   std::vector<const char *> symbol_names;
3874
3875   info.state = state;
3876   info.result.symbols = symbols;
3877   info.result.minimal_symbols = minsyms;
3878   info.file_symtabs = file_symtabs;
3879
3880   /* Try NAME as an Objective-C selector.  */
3881   find_imps (name, &symbol_names);
3882   if (!symbol_names.empty ())
3883     add_all_symbol_names_from_pspace (&info, state->search_pspace,
3884                                       symbol_names, FUNCTIONS_DOMAIN);
3885   else
3886     add_matching_symbols_to_info (name, name_match_type, FUNCTIONS_DOMAIN,
3887                                   &info, state->search_pspace);
3888 }
3889
3890 /* Find all symbols named NAME in FILE_SYMTABS, returning debug symbols
3891    in SYMBOLS and minimal symbols in MINSYMS.  */
3892
3893 static void
3894 find_linespec_symbols (struct linespec_state *state,
3895                        std::vector<symtab *> *file_symtabs,
3896                        const char *lookup_name,
3897                        symbol_name_match_type name_match_type,
3898                        std::vector <block_symbol> *symbols,
3899                        std::vector<bound_minimal_symbol> *minsyms)
3900 {
3901   std::string canon = cp_canonicalize_string_no_typedefs (lookup_name);
3902   if (!canon.empty ())
3903     lookup_name = canon.c_str ();
3904
3905   /* It's important to not call expand_symtabs_matching unnecessarily
3906      as it can really slow things down (by unnecessarily expanding
3907      potentially 1000s of symtabs, which when debugging some apps can
3908      cost 100s of seconds).  Avoid this to some extent by *first* calling
3909      find_function_symbols, and only if that doesn't find anything
3910      *then* call find_method.  This handles two important cases:
3911      1) break (anonymous namespace)::foo
3912      2) break class::method where method is in class (and not a baseclass)  */
3913
3914   find_function_symbols (state, file_symtabs, lookup_name,
3915                          name_match_type, symbols, minsyms);
3916
3917   /* If we were unable to locate a symbol of the same name, try dividing
3918      the name into class and method names and searching the class and its
3919      baseclasses.  */
3920   if (symbols->empty () && minsyms->empty ())
3921     {
3922       std::string klass, method;
3923       const char *last, *p, *scope_op;
3924
3925       /* See if we can find a scope operator and break this symbol
3926          name into namespaces${SCOPE_OPERATOR}class_name and method_name.  */
3927       scope_op = "::";
3928       p = find_toplevel_string (lookup_name, scope_op);
3929
3930       last = NULL;
3931       while (p != NULL)
3932         {
3933           last = p;
3934           p = find_toplevel_string (p + strlen (scope_op), scope_op);
3935         }
3936
3937       /* If no scope operator was found, there is nothing more we can do;
3938          we already attempted to lookup the entire name as a symbol
3939          and failed.  */
3940       if (last == NULL)
3941         return;
3942
3943       /* LOOKUP_NAME points to the class name.
3944          LAST points to the method name.  */
3945       klass = std::string (lookup_name, last - lookup_name);
3946
3947       /* Skip past the scope operator.  */
3948       last += strlen (scope_op);
3949       method = last;
3950
3951       /* Find a list of classes named KLASS.  */
3952       std::vector<block_symbol> classes
3953         = lookup_prefix_sym (state, file_symtabs, klass.c_str ());
3954       if (!classes.empty ())
3955         {
3956           /* Now locate a list of suitable methods named METHOD.  */
3957           try
3958             {
3959               find_method (state, file_symtabs,
3960                            klass.c_str (), method.c_str (),
3961                            &classes, symbols, minsyms);
3962             }
3963
3964           /* If successful, we're done.  If NOT_FOUND_ERROR
3965              was not thrown, rethrow the exception that we did get.  */
3966           catch (const gdb_exception_error &except)
3967             {
3968               if (except.error != NOT_FOUND_ERROR)
3969                 throw;
3970             }
3971         }
3972     }
3973 }
3974
3975 /* Helper for find_label_symbols.  Find all labels that match name
3976    NAME in BLOCK.  Return all labels that match in FUNCTION_SYMBOLS.
3977    Return the actual function symbol in which the label was found in
3978    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
3979    interpreted as a label name prefix.  Otherwise, only a label named
3980    exactly NAME match.  */
3981
3982 static void
3983 find_label_symbols_in_block (const struct block *block,
3984                              const char *name, struct symbol *fn_sym,
3985                              bool completion_mode,
3986                              std::vector<block_symbol> *result,
3987                              std::vector<block_symbol> *label_funcs_ret)
3988 {
3989   if (completion_mode)
3990     {
3991       struct block_iterator iter;
3992       struct symbol *sym;
3993       size_t name_len = strlen (name);
3994
3995       int (*cmp) (const char *, const char *, size_t);
3996       cmp = case_sensitivity == case_sensitive_on ? strncmp : strncasecmp;
3997
3998       ALL_BLOCK_SYMBOLS (block, iter, sym)
3999         {
4000           if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4001                                      SYMBOL_DOMAIN (sym), LABEL_DOMAIN)
4002               && cmp (SYMBOL_SEARCH_NAME (sym), name, name_len) == 0)
4003             {
4004               result->push_back ({sym, block});
4005               label_funcs_ret->push_back ({fn_sym, block});
4006             }
4007         }
4008     }
4009   else
4010     {
4011       struct block_symbol label_sym
4012         = lookup_symbol (name, block, LABEL_DOMAIN, 0);
4013
4014       if (label_sym.symbol != NULL)
4015         {
4016           result->push_back (label_sym);
4017           label_funcs_ret->push_back ({fn_sym, block});
4018         }
4019     }
4020 }
4021
4022 /* Return all labels that match name NAME in FUNCTION_SYMBOLS or NULL
4023    if no matches were found.
4024
4025    Return the actual function symbol in which the label was found in
4026    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
4027    interpreted as a label name prefix.  Otherwise, only labels named
4028    exactly NAME match.  */
4029
4030
4031 static std::vector<block_symbol> *
4032 find_label_symbols (struct linespec_state *self,
4033                     std::vector<block_symbol> *function_symbols,
4034                     std::vector<block_symbol> *label_funcs_ret,
4035                     const char *name,
4036                     bool completion_mode)
4037 {
4038   const struct block *block;
4039   struct symbol *fn_sym;
4040   std::vector<block_symbol> result;
4041
4042   if (function_symbols == NULL)
4043     {
4044       set_current_program_space (self->program_space);
4045       block = get_current_search_block ();
4046
4047       for (;
4048            block && !BLOCK_FUNCTION (block);
4049            block = BLOCK_SUPERBLOCK (block))
4050         ;
4051       if (!block)
4052         return NULL;
4053       fn_sym = BLOCK_FUNCTION (block);
4054
4055       find_label_symbols_in_block (block, name, fn_sym, completion_mode,
4056                                    &result, label_funcs_ret);
4057     }
4058   else
4059     {
4060       for (const auto &elt : *function_symbols)
4061         {
4062           fn_sym = elt.symbol;
4063           set_current_program_space (SYMTAB_PSPACE (symbol_symtab (fn_sym)));
4064           block = SYMBOL_BLOCK_VALUE (fn_sym);
4065
4066           find_label_symbols_in_block (block, name, fn_sym, completion_mode,
4067                                        &result, label_funcs_ret);
4068         }
4069     }
4070
4071   if (!result.empty ())
4072     return new std::vector<block_symbol> (std::move (result));
4073   return nullptr;
4074 }
4075
4076 \f
4077
4078 /* A helper for create_sals_line_offset that handles the 'list_mode' case.  */
4079
4080 static std::vector<symtab_and_line>
4081 decode_digits_list_mode (struct linespec_state *self,
4082                          linespec_p ls,
4083                          struct symtab_and_line val)
4084 {
4085   gdb_assert (self->list_mode);
4086
4087   std::vector<symtab_and_line> values;
4088
4089   for (const auto &elt : *ls->file_symtabs)
4090     {
4091       /* The logic above should ensure this.  */
4092       gdb_assert (elt != NULL);
4093
4094       set_current_program_space (SYMTAB_PSPACE (elt));
4095
4096       /* Simplistic search just for the list command.  */
4097       val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
4098       if (val.symtab == NULL)
4099         val.symtab = elt;
4100       val.pspace = SYMTAB_PSPACE (elt);
4101       val.pc = 0;
4102       val.explicit_line = 1;
4103
4104       add_sal_to_sals (self, &values, &val, NULL, 0);
4105     }
4106
4107   return values;
4108 }
4109
4110 /* A helper for create_sals_line_offset that iterates over the symtabs,
4111    adding lines to the VEC.  */
4112
4113 static std::vector<symtab_and_line>
4114 decode_digits_ordinary (struct linespec_state *self,
4115                         linespec_p ls,
4116                         int line,
4117                         struct linetable_entry **best_entry)
4118 {
4119   std::vector<symtab_and_line> sals;
4120   for (const auto &elt : *ls->file_symtabs)
4121     {
4122       std::vector<CORE_ADDR> pcs;
4123
4124       /* The logic above should ensure this.  */
4125       gdb_assert (elt != NULL);
4126
4127       set_current_program_space (SYMTAB_PSPACE (elt));
4128
4129       pcs = find_pcs_for_symtab_line (elt, line, best_entry);
4130       for (CORE_ADDR pc : pcs)
4131         {
4132           symtab_and_line sal;
4133           sal.pspace = SYMTAB_PSPACE (elt);
4134           sal.symtab = elt;
4135           sal.line = line;
4136           sal.pc = pc;
4137           sals.push_back (std::move (sal));
4138         }
4139     }
4140
4141   return sals;
4142 }
4143
4144 \f
4145
4146 /* Return the line offset represented by VARIABLE.  */
4147
4148 static struct line_offset
4149 linespec_parse_variable (struct linespec_state *self, const char *variable)
4150 {
4151   int index = 0;
4152   const char *p;
4153   struct line_offset offset = {0, LINE_OFFSET_NONE};
4154
4155   p = (variable[1] == '$') ? variable + 2 : variable + 1;
4156   if (*p == '$')
4157     ++p;
4158   while (*p >= '0' && *p <= '9')
4159     ++p;
4160   if (!*p)              /* Reached end of token without hitting non-digit.  */
4161     {
4162       /* We have a value history reference.  */
4163       struct value *val_history;
4164
4165       sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index);
4166       val_history
4167         = access_value_history ((variable[1] == '$') ? -index : index);
4168       if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
4169         error (_("History values used in line "
4170                  "specs must have integer values."));
4171       offset.offset = value_as_long (val_history);
4172     }
4173   else
4174     {
4175       /* Not all digits -- may be user variable/function or a
4176          convenience variable.  */
4177       LONGEST valx;
4178       struct internalvar *ivar;
4179
4180       /* Try it as a convenience variable.  If it is not a convenience
4181          variable, return and allow normal symbol lookup to occur.  */
4182       ivar = lookup_only_internalvar (variable + 1);
4183       if (ivar == NULL)
4184         /* No internal variable with that name.  Mark the offset
4185            as unknown to allow the name to be looked up as a symbol.  */
4186         offset.sign = LINE_OFFSET_UNKNOWN;
4187       else
4188         {
4189           /* We found a valid variable name.  If it is not an integer,
4190              throw an error.  */
4191           if (!get_internalvar_integer (ivar, &valx))
4192             error (_("Convenience variables used in line "
4193                      "specs must have integer values."));
4194           else
4195             offset.offset = valx;
4196         }
4197     }
4198
4199   return offset;
4200 }
4201 \f
4202
4203 /* We've found a minimal symbol MSYMBOL in OBJFILE to associate with our
4204    linespec; return the SAL in RESULT.  This function should return SALs
4205    matching those from find_function_start_sal, otherwise false
4206    multiple-locations breakpoints could be placed.  */
4207
4208 static void
4209 minsym_found (struct linespec_state *self, struct objfile *objfile,
4210               struct minimal_symbol *msymbol,
4211               std::vector<symtab_and_line> *result)
4212 {
4213   bool want_start_sal;
4214
4215   CORE_ADDR func_addr;
4216   bool is_function = msymbol_is_function (objfile, msymbol, &func_addr);
4217
4218   if (is_function)
4219     {
4220       const char *msym_name = MSYMBOL_LINKAGE_NAME (msymbol);
4221
4222       if (MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
4223           || MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
4224         want_start_sal = gnu_ifunc_resolve_name (msym_name, &func_addr);
4225       else
4226         want_start_sal = true;
4227     }
4228
4229   symtab_and_line sal;
4230
4231   if (is_function && want_start_sal)
4232     sal = find_function_start_sal (func_addr, NULL, self->funfirstline);
4233   else
4234     {
4235       sal.objfile = objfile;
4236       sal.msymbol = msymbol;
4237       /* Store func_addr, not the minsym's address in case this was an
4238          ifunc that hasn't been resolved yet.  */
4239       if (is_function)
4240         sal.pc = func_addr;
4241       else
4242         sal.pc = MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
4243       sal.pspace = current_program_space;
4244     }
4245
4246   sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
4247
4248   if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
4249     add_sal_to_sals (self, result, &sal, MSYMBOL_NATURAL_NAME (msymbol), 0);
4250 }
4251
4252 /* A helper function to classify a minimal_symbol_type according to
4253    priority.  */
4254
4255 static int
4256 classify_mtype (enum minimal_symbol_type t)
4257 {
4258   switch (t)
4259     {
4260     case mst_file_text:
4261     case mst_file_data:
4262     case mst_file_bss:
4263       /* Intermediate priority.  */
4264       return 1;
4265
4266     case mst_solib_trampoline:
4267       /* Lowest priority.  */
4268       return 2;
4269
4270     default:
4271       /* Highest priority.  */
4272       return 0;
4273     }
4274 }
4275
4276 /* Callback for std::sort that sorts symbols by priority.  */
4277
4278 static bool
4279 compare_msyms (const bound_minimal_symbol &a, const bound_minimal_symbol &b)
4280 {
4281   enum minimal_symbol_type ta = MSYMBOL_TYPE (a.minsym);
4282   enum minimal_symbol_type tb = MSYMBOL_TYPE (b.minsym);
4283
4284   return classify_mtype (ta) < classify_mtype (tb);
4285 }
4286
4287 /* Helper for search_minsyms_for_name that adds the symbol to the
4288    result.  */
4289
4290 static void
4291 add_minsym (struct minimal_symbol *minsym, struct objfile *objfile,
4292             struct symtab *symtab, int list_mode,
4293             std::vector<struct bound_minimal_symbol> *msyms)
4294 {
4295   if (symtab != NULL)
4296     {
4297       /* We're looking for a label for which we don't have debug
4298          info.  */
4299       CORE_ADDR func_addr;
4300       if (msymbol_is_function (objfile, minsym, &func_addr))
4301         {
4302           symtab_and_line sal = find_pc_sect_line (func_addr, NULL, 0);
4303
4304           if (symtab != sal.symtab)
4305             return;
4306         }
4307     }
4308
4309   /* Exclude data symbols when looking for breakpoint locations.  */
4310   if (!list_mode && !msymbol_is_function (objfile, minsym))
4311     return;
4312
4313   struct bound_minimal_symbol mo = {minsym, objfile};
4314   msyms->push_back (mo);
4315   return;
4316 }
4317
4318 /* Search for minimal symbols called NAME.  If SEARCH_PSPACE
4319    is not NULL, the search is restricted to just that program
4320    space.
4321
4322    If SYMTAB is NULL, search all objfiles, otherwise
4323    restrict results to the given SYMTAB.  */
4324
4325 static void
4326 search_minsyms_for_name (struct collect_info *info,
4327                          const lookup_name_info &name,
4328                          struct program_space *search_pspace,
4329                          struct symtab *symtab)
4330 {
4331   std::vector<struct bound_minimal_symbol> minsyms;
4332
4333   if (symtab == NULL)
4334     {
4335       struct program_space *pspace;
4336
4337       ALL_PSPACES (pspace)
4338       {
4339         if (search_pspace != NULL && search_pspace != pspace)
4340           continue;
4341         if (pspace->executing_startup)
4342           continue;
4343
4344         set_current_program_space (pspace);
4345
4346         for (objfile *objfile : current_program_space->objfiles ())
4347           {
4348             iterate_over_minimal_symbols (objfile, name,
4349                                           [&] (struct minimal_symbol *msym)
4350                                           {
4351                                             add_minsym (msym, objfile, nullptr,
4352                                                         info->state->list_mode,
4353                                                         &minsyms);
4354                                             return false;
4355                                           });
4356           }
4357       }
4358     }
4359   else
4360     {
4361       if (search_pspace == NULL || SYMTAB_PSPACE (symtab) == search_pspace)
4362         {
4363           set_current_program_space (SYMTAB_PSPACE (symtab));
4364           iterate_over_minimal_symbols
4365             (SYMTAB_OBJFILE (symtab), name,
4366              [&] (struct minimal_symbol *msym)
4367                {
4368                  add_minsym (msym, SYMTAB_OBJFILE (symtab), symtab,
4369                              info->state->list_mode, &minsyms);
4370                  return false;
4371                });
4372         }
4373     }
4374
4375   if (!minsyms.empty ())
4376     {
4377       int classification;
4378
4379       std::sort (minsyms.begin (), minsyms.end (), compare_msyms);
4380
4381       /* Now the minsyms are in classification order.  So, we walk
4382          over them and process just the minsyms with the same
4383          classification as the very first minsym in the list.  */
4384       classification = classify_mtype (MSYMBOL_TYPE (minsyms[0].minsym));
4385
4386       for (const bound_minimal_symbol &item : minsyms)
4387         {
4388           if (classify_mtype (MSYMBOL_TYPE (item.minsym)) != classification)
4389             break;
4390
4391           info->result.minimal_symbols->push_back (item);
4392         }
4393     }
4394 }
4395
4396 /* A helper function to add all symbols matching NAME to INFO.  If
4397    PSPACE is not NULL, the search is restricted to just that program
4398    space.  */
4399
4400 static void
4401 add_matching_symbols_to_info (const char *name,
4402                               symbol_name_match_type name_match_type,
4403                               enum search_domain search_domain,
4404                               struct collect_info *info,
4405                               struct program_space *pspace)
4406 {
4407   lookup_name_info lookup_name (name, name_match_type);
4408
4409   for (const auto &elt : *info->file_symtabs)
4410     {
4411       if (elt == nullptr)
4412         {
4413           iterate_over_all_matching_symtabs (info->state, lookup_name,
4414                                              VAR_DOMAIN, search_domain,
4415                                              pspace, true,
4416                                              [&] (block_symbol *bsym)
4417             { return info->add_symbol (bsym); });
4418           search_minsyms_for_name (info, lookup_name, pspace, NULL);
4419         }
4420       else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
4421         {
4422           int prev_len = info->result.symbols->size ();
4423
4424           /* Program spaces that are executing startup should have
4425              been filtered out earlier.  */
4426           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
4427           set_current_program_space (SYMTAB_PSPACE (elt));
4428           iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN,
4429                                     [&] (block_symbol *bsym)
4430             { return info->add_symbol (bsym); });
4431
4432           /* If no new symbols were found in this iteration and this symtab
4433              is in assembler, we might actually be looking for a label for
4434              which we don't have debug info.  Check for a minimal symbol in
4435              this case.  */
4436           if (prev_len == info->result.symbols->size ()
4437               && elt->language == language_asm)
4438             search_minsyms_for_name (info, lookup_name, pspace, elt);
4439         }
4440     }
4441 }
4442
4443 \f
4444
4445 /* Now come some functions that are called from multiple places within
4446    decode_line_1.  */
4447
4448 static int
4449 symbol_to_sal (struct symtab_and_line *result,
4450                int funfirstline, struct symbol *sym)
4451 {
4452   if (SYMBOL_CLASS (sym) == LOC_BLOCK)
4453     {
4454       *result = find_function_start_sal (sym, funfirstline);
4455       return 1;
4456     }
4457   else
4458     {
4459       if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
4460         {
4461           *result = {};
4462           result->symtab = symbol_symtab (sym);
4463           result->symbol = sym;
4464           result->line = SYMBOL_LINE (sym);
4465           result->pc = SYMBOL_VALUE_ADDRESS (sym);
4466           result->pspace = SYMTAB_PSPACE (result->symtab);
4467           result->explicit_pc = 1;
4468           return 1;
4469         }
4470       else if (funfirstline)
4471         {
4472           /* Nothing.  */
4473         }
4474       else if (SYMBOL_LINE (sym) != 0)
4475         {
4476           /* We know its line number.  */
4477           *result = {};
4478           result->symtab = symbol_symtab (sym);
4479           result->symbol = sym;
4480           result->line = SYMBOL_LINE (sym);
4481           result->pc = SYMBOL_VALUE_ADDRESS (sym);
4482           result->pspace = SYMTAB_PSPACE (result->symtab);
4483           return 1;
4484         }
4485     }
4486
4487   return 0;
4488 }
4489
4490 linespec_result::~linespec_result ()
4491 {
4492   for (linespec_sals &lsal : lsals)
4493     xfree (lsal.canonical);
4494 }
4495
4496 /* Return the quote characters permitted by the linespec parser.  */
4497
4498 const char *
4499 get_gdb_linespec_parser_quote_characters (void)
4500 {
4501   return linespec_quote_characters;
4502 }