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