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