Fix some indentation in linespec.c
[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       /* Try looking it up as a function/method.  */
1901       find_linespec_symbols (PARSER_STATE (parser),
1902                              PARSER_RESULT (parser)->file_symtabs, name,
1903                              PARSER_EXPLICIT (parser)->func_name_match_type,
1904                              &symbols, &minimal_symbols);
1905
1906       if (symbols != NULL || minimal_symbols != NULL)
1907         {
1908           PARSER_RESULT (parser)->function_symbols = symbols;
1909           PARSER_RESULT (parser)->minimal_symbols = minimal_symbols;
1910           PARSER_EXPLICIT (parser)->function_name = name;
1911           symbols = NULL;
1912           discard_cleanups (cleanup);
1913         }
1914       else
1915         {
1916           /* NAME was not a function or a method.  So it must be a label
1917              name or user specified variable like "break foo.c:$zippo".  */
1918           labels = find_label_symbols (PARSER_STATE (parser), NULL,
1919                                        &symbols, name);
1920           if (labels != NULL)
1921             {
1922               PARSER_RESULT (parser)->labels.label_symbols = labels;
1923               PARSER_RESULT (parser)->labels.function_symbols = symbols;
1924               PARSER_EXPLICIT (parser)->label_name = name;
1925               symbols = NULL;
1926               discard_cleanups (cleanup);
1927             }
1928           else if (token.type == LSTOKEN_STRING
1929                    && *LS_TOKEN_STOKEN (token).ptr == '$')
1930             {
1931               /* User specified a convenience variable or history value.  */
1932               PARSER_EXPLICIT (parser)->line_offset
1933                 = linespec_parse_variable (PARSER_STATE (parser), name);
1934
1935               if (PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN)
1936                 {
1937                   /* The user-specified variable was not valid.  Do not
1938                      throw an error here.  parse_linespec will do it for us.  */
1939                   PARSER_EXPLICIT (parser)->function_name = name;
1940                   discard_cleanups (cleanup);
1941                   return;
1942                 }
1943
1944               /* The convenience variable/history value parsed correctly.
1945                  NAME is no longer needed.  */
1946               do_cleanups (cleanup);
1947             }
1948           else
1949             {
1950               /* The name is also not a label.  Abort parsing.  Do not throw
1951                  an error here.  parse_linespec will do it for us.  */
1952
1953               /* Save a copy of the name we were trying to lookup.  */
1954               PARSER_EXPLICIT (parser)->function_name = name;
1955               discard_cleanups (cleanup);
1956               return;
1957             }
1958         }
1959     }
1960
1961   int previous_qc = parser->completion_quote_char;
1962
1963   /* Get the next token.  */
1964   token = linespec_lexer_consume_token (parser);
1965
1966   if (token.type == LSTOKEN_EOI)
1967     {
1968       if (previous_qc && !parser->completion_quote_char)
1969         parser->complete_what = linespec_complete_what::KEYWORD;
1970     }
1971   else if (token.type == LSTOKEN_COLON)
1972     {
1973       /* User specified a label or a lineno.  */
1974       token = linespec_lexer_consume_token (parser);
1975
1976       if (token.type == LSTOKEN_NUMBER)
1977         {
1978           /* User specified an offset.  Record the line offset and
1979              get the next token.  */
1980           set_completion_after_number (parser, linespec_complete_what::KEYWORD);
1981
1982           name = copy_token_string (token);
1983           cleanup = make_cleanup (xfree, name);
1984           PARSER_EXPLICIT (parser)->line_offset
1985             = linespec_parse_line_offset (name);
1986           do_cleanups (cleanup);
1987
1988           /* Get the next token.  */
1989           token = linespec_lexer_consume_token (parser);
1990         }
1991       else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
1992         {
1993           parser->complete_what = linespec_complete_what::LABEL;
1994         }
1995       else if (token.type == LSTOKEN_STRING)
1996         {
1997           parser->complete_what = linespec_complete_what::LABEL;
1998
1999           /* If we have text after the label separated by whitespace
2000              (e.g., "b func():lab i<tab>"), don't consider it part of
2001              the label.  In completion mode that should complete to
2002              "if", in normal mode, the 'i' should be treated as
2003              garbage.  */
2004           if (parser->completion_quote_char == '\0')
2005             {
2006               const char *ptr = LS_TOKEN_STOKEN (token).ptr;
2007               for (size_t i = 0; i < LS_TOKEN_STOKEN (token).length; i++)
2008                 {
2009                   if (ptr[i] == ' ')
2010                     {
2011                       LS_TOKEN_STOKEN (token).length = i;
2012                       PARSER_STREAM (parser) = skip_spaces (ptr + i + 1);
2013                       break;
2014                     }
2015                 }
2016             }
2017
2018           if (parser->completion_tracker != NULL)
2019             {
2020               if (PARSER_STREAM (parser)[-1] == ' ')
2021                 {
2022                   parser->completion_word = PARSER_STREAM (parser);
2023                   parser->complete_what = linespec_complete_what::KEYWORD;
2024                 }
2025             }
2026           else
2027             {
2028               /* Grab a copy of the label's name and look it up.  */
2029               name = copy_token_string (token);
2030               cleanup = make_cleanup (xfree, name);
2031               labels
2032                 = find_label_symbols (PARSER_STATE (parser),
2033                                       PARSER_RESULT (parser)->function_symbols,
2034                                       &symbols, name);
2035
2036               if (labels != NULL)
2037                 {
2038                   PARSER_RESULT (parser)->labels.label_symbols = labels;
2039                   PARSER_RESULT (parser)->labels.function_symbols = symbols;
2040                   PARSER_EXPLICIT (parser)->label_name = name;
2041                   symbols = NULL;
2042                   discard_cleanups (cleanup);
2043                 }
2044               else
2045                 {
2046                   /* We don't know what it was, but it isn't a label.  */
2047                   undefined_label_error
2048                     (PARSER_EXPLICIT (parser)->function_name, name);
2049                 }
2050
2051             }
2052
2053           /* Check for a line offset.  */
2054           token = save_stream_and_consume_token (parser);
2055           if (token.type == LSTOKEN_COLON)
2056             {
2057               /* Get the next token.  */
2058               token = linespec_lexer_consume_token (parser);
2059
2060               /* It must be a line offset.  */
2061               if (token.type != LSTOKEN_NUMBER)
2062                 unexpected_linespec_error (parser);
2063
2064               /* Record the line offset and get the next token.  */
2065               name = copy_token_string (token);
2066               cleanup = make_cleanup (xfree, name);
2067
2068               PARSER_EXPLICIT (parser)->line_offset
2069                 = linespec_parse_line_offset (name);
2070               do_cleanups (cleanup);
2071
2072               /* Get the next token.  */
2073               token = linespec_lexer_consume_token (parser);
2074             }
2075         }
2076       else
2077         {
2078           /* Trailing ':' in the input. Issue an error.  */
2079           unexpected_linespec_error (parser);
2080         }
2081     }
2082 }
2083
2084 /* Canonicalize the linespec contained in LS.  The result is saved into
2085    STATE->canonical.  This function handles both linespec and explicit
2086    locations.  */
2087
2088 static void
2089 canonicalize_linespec (struct linespec_state *state, const linespec_p ls)
2090 {
2091   struct event_location *canon;
2092   struct explicit_location *explicit_loc;
2093
2094   /* If canonicalization was not requested, no need to do anything.  */
2095   if (!state->canonical)
2096     return;
2097
2098   /* Save everything as an explicit location.  */
2099   state->canonical->location
2100     = new_explicit_location (&ls->explicit_loc);
2101   canon = state->canonical->location.get ();
2102   explicit_loc = get_explicit_location (canon);
2103
2104   if (explicit_loc->label_name != NULL)
2105     {
2106       state->canonical->special_display = 1;
2107
2108       if (explicit_loc->function_name == NULL)
2109         {
2110           struct symbol *s;
2111
2112           /* No function was specified, so add the symbol name.  */
2113           gdb_assert (ls->labels.function_symbols != NULL
2114                       && (VEC_length (symbolp, ls->labels.function_symbols)
2115                           == 1));
2116           s = VEC_index (symbolp, ls->labels.function_symbols, 0);
2117           explicit_loc->function_name = xstrdup (SYMBOL_NATURAL_NAME (s));
2118         }
2119     }
2120
2121   /* If this location originally came from a linespec, save a string
2122      representation of it for display and saving to file.  */
2123   if (state->is_linespec)
2124     {
2125       char *linespec = explicit_location_to_linespec (explicit_loc);
2126
2127       set_event_location_string (canon, linespec);
2128       xfree (linespec);
2129     }
2130 }
2131
2132 /* Given a line offset in LS, construct the relevant SALs.  */
2133
2134 static std::vector<symtab_and_line>
2135 create_sals_line_offset (struct linespec_state *self,
2136                          linespec_p ls)
2137 {
2138   int use_default = 0;
2139
2140   /* This is where we need to make sure we have good defaults.
2141      We must guarantee that this section of code is never executed
2142      when we are called with just a function name, since
2143      set_default_source_symtab_and_line uses
2144      select_source_symtab that calls us with such an argument.  */
2145
2146   if (VEC_length (symtab_ptr, ls->file_symtabs) == 1
2147       && VEC_index (symtab_ptr, ls->file_symtabs, 0) == NULL)
2148     {
2149       const char *fullname;
2150
2151       set_current_program_space (self->program_space);
2152
2153       /* Make sure we have at least a default source line.  */
2154       set_default_source_symtab_and_line ();
2155       initialize_defaults (&self->default_symtab, &self->default_line);
2156       fullname = symtab_to_fullname (self->default_symtab);
2157       VEC_pop (symtab_ptr, ls->file_symtabs);
2158       VEC_free (symtab_ptr, ls->file_symtabs);
2159       ls->file_symtabs = collect_symtabs_from_filename (fullname,
2160                                                         self->search_pspace);
2161       use_default = 1;
2162     }
2163
2164   symtab_and_line val;
2165   val.line = ls->explicit_loc.line_offset.offset;
2166   switch (ls->explicit_loc.line_offset.sign)
2167     {
2168     case LINE_OFFSET_PLUS:
2169       if (ls->explicit_loc.line_offset.offset == 0)
2170         val.line = 5;
2171       if (use_default)
2172         val.line = self->default_line + val.line;
2173       break;
2174
2175     case LINE_OFFSET_MINUS:
2176       if (ls->explicit_loc.line_offset.offset == 0)
2177         val.line = 15;
2178       if (use_default)
2179         val.line = self->default_line - val.line;
2180       else
2181         val.line = -val.line;
2182       break;
2183
2184     case LINE_OFFSET_NONE:
2185       break;                    /* No need to adjust val.line.  */
2186     }
2187
2188   std::vector<symtab_and_line> values;
2189   if (self->list_mode)
2190     values = decode_digits_list_mode (self, ls, val);
2191   else
2192     {
2193       struct linetable_entry *best_entry = NULL;
2194       int i, j;
2195
2196       std::vector<symtab_and_line> intermediate_results
2197         = decode_digits_ordinary (self, ls, val.line, &best_entry);
2198       if (intermediate_results.empty () && best_entry != NULL)
2199         intermediate_results = decode_digits_ordinary (self, ls,
2200                                                        best_entry->line,
2201                                                        &best_entry);
2202
2203       /* For optimized code, the compiler can scatter one source line
2204          across disjoint ranges of PC values, even when no duplicate
2205          functions or inline functions are involved.  For example,
2206          'for (;;)' inside a non-template, non-inline, and non-ctor-or-dtor
2207          function can result in two PC ranges.  In this case, we don't
2208          want to set a breakpoint on the first PC of each range.  To filter
2209          such cases, we use containing blocks -- for each PC found
2210          above, we see if there are other PCs that are in the same
2211          block.  If yes, the other PCs are filtered out.  */
2212
2213       gdb::def_vector<int> filter (intermediate_results.size ());
2214       gdb::def_vector<const block *> blocks (intermediate_results.size ());
2215
2216       for (i = 0; i < intermediate_results.size (); ++i)
2217         {
2218           set_current_program_space (intermediate_results[i].pspace);
2219
2220           filter[i] = 1;
2221           blocks[i] = block_for_pc_sect (intermediate_results[i].pc,
2222                                          intermediate_results[i].section);
2223         }
2224
2225       for (i = 0; i < intermediate_results.size (); ++i)
2226         {
2227           if (blocks[i] != NULL)
2228             for (j = i + 1; j < intermediate_results.size (); ++j)
2229               {
2230                 if (blocks[j] == blocks[i])
2231                   {
2232                     filter[j] = 0;
2233                     break;
2234                   }
2235               }
2236         }
2237
2238       for (i = 0; i < intermediate_results.size (); ++i)
2239         if (filter[i])
2240           {
2241             struct symbol *sym = (blocks[i]
2242                                   ? block_containing_function (blocks[i])
2243                                   : NULL);
2244
2245             if (self->funfirstline)
2246               skip_prologue_sal (&intermediate_results[i]);
2247             add_sal_to_sals (self, &values, &intermediate_results[i],
2248                              sym ? SYMBOL_NATURAL_NAME (sym) : NULL, 0);
2249           }
2250     }
2251
2252   if (values.empty ())
2253     {
2254       if (ls->explicit_loc.source_filename)
2255         throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
2256                      val.line, ls->explicit_loc.source_filename);
2257       else
2258         throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
2259                      val.line);
2260     }
2261
2262   return values;
2263 }
2264
2265 /* Convert the given ADDRESS into SaLs.  */
2266
2267 static std::vector<symtab_and_line>
2268 convert_address_location_to_sals (struct linespec_state *self,
2269                                   CORE_ADDR address)
2270 {
2271   symtab_and_line sal = find_pc_line (address, 0);
2272   sal.pc = address;
2273   sal.section = find_pc_overlay (address);
2274   sal.explicit_pc = 1;
2275
2276   std::vector<symtab_and_line> sals;
2277   add_sal_to_sals (self, &sals, &sal, core_addr_to_string (address), 1);
2278
2279   return sals;
2280 }
2281
2282 /* Create and return SALs from the linespec LS.  */
2283
2284 static std::vector<symtab_and_line>
2285 convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
2286 {
2287   std::vector<symtab_and_line> sals;
2288
2289   if (ls->labels.label_symbols != NULL)
2290     {
2291       /* We have just a bunch of functions/methods or labels.  */
2292       int i;
2293       struct symtab_and_line sal;
2294       struct symbol *sym;
2295
2296       for (i = 0; VEC_iterate (symbolp, ls->labels.label_symbols, i, sym); ++i)
2297         {
2298           struct program_space *pspace = SYMTAB_PSPACE (symbol_symtab (sym));
2299
2300           if (symbol_to_sal (&sal, state->funfirstline, sym)
2301               && maybe_add_address (state->addr_set, pspace, sal.pc))
2302             add_sal_to_sals (state, &sals, &sal,
2303                              SYMBOL_NATURAL_NAME (sym), 0);
2304         }
2305     }
2306   else if (ls->function_symbols != NULL || ls->minimal_symbols != NULL)
2307     {
2308       /* We have just a bunch of functions and/or methods.  */
2309       int i;
2310       struct symtab_and_line sal;
2311       struct symbol *sym;
2312       bound_minimal_symbol_d *elem;
2313       struct program_space *pspace;
2314
2315       if (ls->function_symbols != NULL)
2316         {
2317           /* Sort symbols so that symbols with the same program space are next
2318              to each other.  */
2319           qsort (VEC_address (symbolp, ls->function_symbols),
2320                  VEC_length (symbolp, ls->function_symbols),
2321                  sizeof (symbolp), compare_symbols);
2322
2323           for (i = 0; VEC_iterate (symbolp, ls->function_symbols, i, sym); ++i)
2324             {
2325               pspace = SYMTAB_PSPACE (symbol_symtab (sym));
2326               set_current_program_space (pspace);
2327               if (symbol_to_sal (&sal, state->funfirstline, sym)
2328                   && maybe_add_address (state->addr_set, pspace, sal.pc))
2329                 add_sal_to_sals (state, &sals, &sal,
2330                                  SYMBOL_NATURAL_NAME (sym), 0);
2331             }
2332         }
2333
2334       if (ls->minimal_symbols != NULL)
2335         {
2336           /* Sort minimal symbols by program space, too.  */
2337           qsort (VEC_address (bound_minimal_symbol_d, ls->minimal_symbols),
2338                  VEC_length (bound_minimal_symbol_d, ls->minimal_symbols),
2339                  sizeof (bound_minimal_symbol_d), compare_msymbols);
2340
2341           for (i = 0;
2342                VEC_iterate (bound_minimal_symbol_d, ls->minimal_symbols,
2343                             i, elem);
2344                ++i)
2345             {
2346               pspace = elem->objfile->pspace;
2347               set_current_program_space (pspace);
2348               minsym_found (state, elem->objfile, elem->minsym, &sals);
2349             }
2350         }
2351     }
2352   else if (ls->explicit_loc.line_offset.sign != LINE_OFFSET_UNKNOWN)
2353     {
2354       /* Only an offset was specified.  */
2355         sals = create_sals_line_offset (state, ls);
2356
2357         /* Make sure we have a filename for canonicalization.  */
2358         if (ls->explicit_loc.source_filename == NULL)
2359           {
2360             const char *fullname = symtab_to_fullname (state->default_symtab);
2361
2362             /* It may be more appropriate to keep DEFAULT_SYMTAB in its symtab
2363                form so that displaying SOURCE_FILENAME can follow the current
2364                FILENAME_DISPLAY_STRING setting.  But as it is used only rarely
2365                it has been kept for code simplicity only in absolute form.  */
2366             ls->explicit_loc.source_filename = xstrdup (fullname);
2367           }
2368     }
2369   else
2370     {
2371       /* We haven't found any results...  */
2372       return sals;
2373     }
2374
2375   canonicalize_linespec (state, ls);
2376
2377   if (!sals.empty () && state->canonical != NULL)
2378     state->canonical->pre_expanded = 1;
2379
2380   return sals;
2381 }
2382
2383 /* Build RESULT from the explicit location components SOURCE_FILENAME,
2384    FUNCTION_NAME, LABEL_NAME and LINE_OFFSET.  */
2385
2386 static void
2387 convert_explicit_location_to_linespec (struct linespec_state *self,
2388                                        linespec_p result,
2389                                        const char *source_filename,
2390                                        const char *function_name,
2391                                        symbol_name_match_type fname_match_type,
2392                                        const char *label_name,
2393                                        struct line_offset line_offset)
2394 {
2395   VEC (symbolp) *symbols, *labels;
2396   VEC (bound_minimal_symbol_d) *minimal_symbols;
2397
2398   result->explicit_loc.func_name_match_type = fname_match_type;
2399
2400   if (source_filename != NULL)
2401     {
2402       TRY
2403         {
2404           result->file_symtabs
2405             = symtabs_from_filename (source_filename, self->search_pspace);
2406         }
2407       CATCH (except, RETURN_MASK_ERROR)
2408         {
2409           source_file_not_found_error (source_filename);
2410         }
2411       END_CATCH
2412       result->explicit_loc.source_filename = xstrdup (source_filename);
2413     }
2414   else
2415     {
2416       /* A NULL entry means to use the default symtab.  */
2417       VEC_safe_push (symtab_ptr, result->file_symtabs, NULL);
2418     }
2419
2420   if (function_name != NULL)
2421     {
2422       find_linespec_symbols (self, result->file_symtabs,
2423                              function_name, fname_match_type,
2424                              &symbols, &minimal_symbols);
2425
2426       if (symbols == NULL && minimal_symbols == NULL)
2427         symbol_not_found_error (function_name,
2428                                 result->explicit_loc.source_filename);
2429
2430       result->explicit_loc.function_name = xstrdup (function_name);
2431       result->function_symbols = symbols;
2432       result->minimal_symbols = minimal_symbols;
2433     }
2434
2435   if (label_name != NULL)
2436     {
2437       symbols = NULL;
2438       labels = find_label_symbols (self, result->function_symbols,
2439                                    &symbols, label_name);
2440
2441       if (labels == NULL)
2442         undefined_label_error (result->explicit_loc.function_name,
2443                                label_name);
2444
2445       result->explicit_loc.label_name = xstrdup (label_name);
2446       result->labels.label_symbols = labels;
2447       result->labels.function_symbols = symbols;
2448     }
2449
2450   if (line_offset.sign != LINE_OFFSET_UNKNOWN)
2451     result->explicit_loc.line_offset = line_offset;
2452 }
2453
2454 /* Convert the explicit location EXPLICIT_LOC into SaLs.  */
2455
2456 static std::vector<symtab_and_line>
2457 convert_explicit_location_to_sals (struct linespec_state *self,
2458                                    linespec_p result,
2459                                    const struct explicit_location *explicit_loc)
2460 {
2461   convert_explicit_location_to_linespec (self, result,
2462                                          explicit_loc->source_filename,
2463                                          explicit_loc->function_name,
2464                                          explicit_loc->func_name_match_type,
2465                                          explicit_loc->label_name,
2466                                          explicit_loc->line_offset);
2467   return convert_linespec_to_sals (self, result);
2468 }
2469
2470 /* Parse a string that specifies a linespec.
2471
2472    The basic grammar of linespecs:
2473
2474    linespec -> var_spec | basic_spec
2475    var_spec -> '$' (STRING | NUMBER)
2476
2477    basic_spec -> file_offset_spec | function_spec | label_spec
2478    file_offset_spec -> opt_file_spec offset_spec
2479    function_spec -> opt_file_spec function_name_spec opt_label_spec
2480    label_spec -> label_name_spec
2481
2482    opt_file_spec -> "" | file_name_spec ':'
2483    opt_label_spec -> "" | ':' label_name_spec
2484
2485    file_name_spec -> STRING
2486    function_name_spec -> STRING
2487    label_name_spec -> STRING
2488    function_name_spec -> STRING
2489    offset_spec -> NUMBER
2490                -> '+' NUMBER
2491                -> '-' NUMBER
2492
2493    This may all be followed by several keywords such as "if EXPR",
2494    which we ignore.
2495
2496    A comma will terminate parsing.
2497
2498    The function may be an undebuggable function found in minimal symbol table.
2499
2500    If the argument FUNFIRSTLINE is nonzero, we want the first line
2501    of real code inside a function when a function is specified, and it is
2502    not OK to specify a variable or type to get its line number.
2503
2504    DEFAULT_SYMTAB specifies the file to use if none is specified.
2505    It defaults to current_source_symtab.
2506    DEFAULT_LINE specifies the line number to use for relative
2507    line numbers (that start with signs).  Defaults to current_source_line.
2508    If CANONICAL is non-NULL, store an array of strings containing the canonical
2509    line specs there if necessary.  Currently overloaded member functions and
2510    line numbers or static functions without a filename yield a canonical
2511    line spec.  The array and the line spec strings are allocated on the heap,
2512    it is the callers responsibility to free them.
2513
2514    Note that it is possible to return zero for the symtab
2515    if no file is validly specified.  Callers must check that.
2516    Also, the line number returned may be invalid.  */
2517
2518 /* Parse the linespec in ARG.  MATCH_TYPE indicates how function names
2519    should be matched.  */
2520
2521 static std::vector<symtab_and_line>
2522 parse_linespec (linespec_parser *parser, const char *arg,
2523                 symbol_name_match_type match_type)
2524 {
2525   linespec_token token;
2526   struct gdb_exception file_exception = exception_none;
2527   struct cleanup *cleanup;
2528
2529   /* A special case to start.  It has become quite popular for
2530      IDEs to work around bugs in the previous parser by quoting
2531      the entire linespec, so we attempt to deal with this nicely.  */
2532   parser->is_quote_enclosed = 0;
2533   if (parser->completion_tracker == NULL
2534       && !is_ada_operator (arg)
2535       && strchr (linespec_quote_characters, *arg) != NULL)
2536     {
2537       const char *end;
2538
2539       end = skip_quote_char (arg + 1, *arg);
2540       if (end != NULL && is_closing_quote_enclosed (end))
2541         {
2542           /* Here's the special case.  Skip ARG past the initial
2543              quote.  */
2544           ++arg;
2545           parser->is_quote_enclosed = 1;
2546         }
2547     }
2548
2549   parser->lexer.saved_arg = arg;
2550   parser->lexer.stream = arg;
2551   parser->completion_word = arg;
2552   parser->complete_what = linespec_complete_what::FUNCTION;
2553   PARSER_EXPLICIT (parser)->func_name_match_type = match_type;
2554
2555   /* Initialize the default symtab and line offset.  */
2556   initialize_defaults (&PARSER_STATE (parser)->default_symtab,
2557                        &PARSER_STATE (parser)->default_line);
2558
2559   /* Objective-C shortcut.  */
2560   if (parser->completion_tracker == NULL)
2561     {
2562       std::vector<symtab_and_line> values
2563         = decode_objc (PARSER_STATE (parser), PARSER_RESULT (parser), arg);
2564       if (!values.empty ())
2565         return values;
2566     }
2567   else
2568     {
2569       /* "-"/"+" is either an objc selector, or a number.  There's
2570          nothing to complete the latter to, so just let the caller
2571          complete on functions, which finds objc selectors, if there's
2572          any.  */
2573       if ((arg[0] == '-' || arg[0] == '+') && arg[1] == '\0')
2574         return {};
2575     }
2576
2577   /* Start parsing.  */
2578
2579   /* Get the first token.  */
2580   token = linespec_lexer_consume_token (parser);
2581
2582   /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER.  */
2583   if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
2584     {
2585       char *var;
2586
2587       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2588       if (parser->completion_tracker == NULL)
2589         VEC_safe_push (symtab_ptr, PARSER_RESULT (parser)->file_symtabs, NULL);
2590
2591       /* User specified a convenience variable or history value.  */
2592       var = copy_token_string (token);
2593       cleanup = make_cleanup (xfree, var);
2594       PARSER_EXPLICIT (parser)->line_offset
2595         = linespec_parse_variable (PARSER_STATE (parser), var);
2596       do_cleanups (cleanup);
2597
2598       /* If a line_offset wasn't found (VAR is the name of a user
2599          variable/function), then skip to normal symbol processing.  */
2600       if (PARSER_EXPLICIT (parser)->line_offset.sign != LINE_OFFSET_UNKNOWN)
2601         {
2602           /* Consume this token.  */
2603           linespec_lexer_consume_token (parser);
2604
2605           goto convert_to_sals;
2606         }
2607     }
2608   else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
2609     {
2610       /* Let the default linespec_complete_what::FUNCTION kick in.  */
2611       unexpected_linespec_error (parser);
2612     }
2613   else if (token.type != LSTOKEN_STRING && token.type != LSTOKEN_NUMBER)
2614     {
2615       parser->complete_what = linespec_complete_what::NOTHING;
2616       unexpected_linespec_error (parser);
2617     }
2618
2619   /* Shortcut: If the next token is not LSTOKEN_COLON, we know that
2620      this token cannot represent a filename.  */
2621   token = linespec_lexer_peek_token (parser);
2622
2623   if (token.type == LSTOKEN_COLON)
2624     {
2625       char *user_filename;
2626
2627       /* Get the current token again and extract the filename.  */
2628       token = linespec_lexer_lex_one (parser);
2629       user_filename = copy_token_string (token);
2630
2631       /* Check if the input is a filename.  */
2632       TRY
2633         {
2634           PARSER_RESULT (parser)->file_symtabs
2635             = symtabs_from_filename (user_filename,
2636                                      PARSER_STATE (parser)->search_pspace);
2637         }
2638       CATCH (ex, RETURN_MASK_ERROR)
2639         {
2640           file_exception = ex;
2641         }
2642       END_CATCH
2643
2644       if (file_exception.reason >= 0)
2645         {
2646           /* Symtabs were found for the file.  Record the filename.  */
2647           PARSER_EXPLICIT (parser)->source_filename = user_filename;
2648
2649           /* Get the next token.  */
2650           token = linespec_lexer_consume_token (parser);
2651
2652           /* This is LSTOKEN_COLON; consume it.  */
2653           linespec_lexer_consume_token (parser);
2654         }
2655       else
2656         {
2657           /* No symtabs found -- discard user_filename.  */
2658           xfree (user_filename);
2659
2660           /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2661           VEC_safe_push (symtab_ptr, PARSER_RESULT (parser)->file_symtabs, NULL);
2662         }
2663     }
2664   /* If the next token is not EOI, KEYWORD, or COMMA, issue an error.  */
2665   else if (parser->completion_tracker == NULL
2666            && (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD
2667                && token.type != LSTOKEN_COMMA))
2668     {
2669       /* TOKEN is the _next_ token, not the one currently in the parser.
2670          Consuming the token will give the correct error message.  */
2671       linespec_lexer_consume_token (parser);
2672       unexpected_linespec_error (parser);
2673     }
2674   else
2675     {
2676       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2677       VEC_safe_push (symtab_ptr, PARSER_RESULT (parser)->file_symtabs, NULL);
2678     }
2679
2680   /* Parse the rest of the linespec.  */
2681   linespec_parse_basic (parser);
2682
2683   if (parser->completion_tracker == NULL
2684       && PARSER_RESULT (parser)->function_symbols == NULL
2685       && PARSER_RESULT (parser)->labels.label_symbols == NULL
2686       && PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN
2687       && PARSER_RESULT (parser)->minimal_symbols == NULL)
2688     {
2689       /* The linespec didn't parse.  Re-throw the file exception if
2690          there was one.  */
2691       if (file_exception.reason < 0)
2692         throw_exception (file_exception);
2693
2694       /* Otherwise, the symbol is not found.  */
2695       symbol_not_found_error (PARSER_EXPLICIT (parser)->function_name,
2696                               PARSER_EXPLICIT (parser)->source_filename);
2697     }
2698
2699  convert_to_sals:
2700
2701   /* Get the last token and record how much of the input was parsed,
2702      if necessary.  */
2703   token = linespec_lexer_lex_one (parser);
2704   if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD)
2705     unexpected_linespec_error (parser);
2706   else if (token.type == LSTOKEN_KEYWORD)
2707     {
2708       /* Setup the completion word past the keyword.  Lexing never
2709          advances past a keyword automatically, so skip it
2710          manually.  */
2711       parser->completion_word
2712         = skip_spaces (skip_to_space (PARSER_STREAM (parser)));
2713       parser->complete_what = linespec_complete_what::EXPRESSION;
2714     }
2715
2716   /* Convert the data in PARSER_RESULT to SALs.  */
2717   if (parser->completion_tracker == NULL)
2718     return convert_linespec_to_sals (PARSER_STATE (parser),
2719                                      PARSER_RESULT (parser));
2720
2721   return {};
2722 }
2723
2724
2725 /* A constructor for linespec_state.  */
2726
2727 static void
2728 linespec_state_constructor (struct linespec_state *self,
2729                             int flags, const struct language_defn *language,
2730                             struct program_space *search_pspace,
2731                             struct symtab *default_symtab,
2732                             int default_line,
2733                             struct linespec_result *canonical)
2734 {
2735   memset (self, 0, sizeof (*self));
2736   self->language = language;
2737   self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
2738   self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
2739   self->search_pspace = search_pspace;
2740   self->default_symtab = default_symtab;
2741   self->default_line = default_line;
2742   self->canonical = canonical;
2743   self->program_space = current_program_space;
2744   self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
2745                                       xfree, xcalloc, xfree);
2746   self->is_linespec = 0;
2747 }
2748
2749 /* Initialize a new linespec parser.  */
2750
2751 static void
2752 linespec_parser_new (linespec_parser *parser,
2753                      int flags, const struct language_defn *language,
2754                      struct program_space *search_pspace,
2755                      struct symtab *default_symtab,
2756                      int default_line,
2757                      struct linespec_result *canonical)
2758 {
2759   memset (parser, 0, sizeof (linespec_parser));
2760   parser->lexer.current.type = LSTOKEN_CONSUMED;
2761   memset (PARSER_RESULT (parser), 0, sizeof (struct linespec));
2762   PARSER_EXPLICIT (parser)->func_name_match_type
2763     = symbol_name_match_type::WILD;
2764   PARSER_EXPLICIT (parser)->line_offset.sign = LINE_OFFSET_UNKNOWN;
2765   linespec_state_constructor (PARSER_STATE (parser), flags, language,
2766                               search_pspace,
2767                               default_symtab, default_line, canonical);
2768 }
2769
2770 /* A destructor for linespec_state.  */
2771
2772 static void
2773 linespec_state_destructor (struct linespec_state *self)
2774 {
2775   htab_delete (self->addr_set);
2776 }
2777
2778 /* Delete a linespec parser.  */
2779
2780 static void
2781 linespec_parser_delete (void *arg)
2782 {
2783   linespec_parser *parser = (linespec_parser *) arg;
2784
2785   xfree (PARSER_EXPLICIT (parser)->source_filename);
2786   xfree (PARSER_EXPLICIT (parser)->label_name);
2787   xfree (PARSER_EXPLICIT (parser)->function_name);
2788
2789   if (PARSER_RESULT (parser)->file_symtabs != NULL)
2790     VEC_free (symtab_ptr, PARSER_RESULT (parser)->file_symtabs);
2791
2792   if (PARSER_RESULT (parser)->function_symbols != NULL)
2793     VEC_free (symbolp, PARSER_RESULT (parser)->function_symbols);
2794
2795   if (PARSER_RESULT (parser)->minimal_symbols != NULL)
2796     VEC_free (bound_minimal_symbol_d, PARSER_RESULT (parser)->minimal_symbols);
2797
2798   if (PARSER_RESULT (parser)->labels.label_symbols != NULL)
2799     VEC_free (symbolp, PARSER_RESULT (parser)->labels.label_symbols);
2800
2801   if (PARSER_RESULT (parser)->labels.function_symbols != NULL)
2802     VEC_free (symbolp, PARSER_RESULT (parser)->labels.function_symbols);
2803
2804   linespec_state_destructor (PARSER_STATE (parser));
2805 }
2806
2807 /* See description in linespec.h.  */
2808
2809 void
2810 linespec_lex_to_end (const char **stringp)
2811 {
2812   linespec_parser parser;
2813   struct cleanup *cleanup;
2814   linespec_token token;
2815   const char *orig;
2816
2817   if (stringp == NULL || *stringp == NULL)
2818     return;
2819
2820   linespec_parser_new (&parser, 0, current_language, NULL, NULL, 0, NULL);
2821   cleanup = make_cleanup (linespec_parser_delete, &parser);
2822   parser.lexer.saved_arg = *stringp;
2823   PARSER_STREAM (&parser) = orig = *stringp;
2824
2825   do
2826     {
2827       /* Stop before any comma tokens;  we need it to keep it
2828          as the next token in the string.  */
2829       token = linespec_lexer_peek_token (&parser);
2830       if (token.type == LSTOKEN_COMMA)
2831         break;
2832       token = linespec_lexer_consume_token (&parser);
2833     }
2834   while (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD);
2835
2836   *stringp += PARSER_STREAM (&parser) - orig;
2837   do_cleanups (cleanup);
2838 }
2839
2840 /* See linespec.h.  */
2841
2842 void
2843 linespec_complete_function (completion_tracker &tracker,
2844                             const char *function,
2845                             symbol_name_match_type func_match_type,
2846                             const char *source_filename)
2847 {
2848   complete_symbol_mode mode = complete_symbol_mode::LINESPEC;
2849
2850   if (source_filename != NULL)
2851     {
2852       collect_file_symbol_completion_matches (tracker, mode, func_match_type,
2853                                               function, function, source_filename);
2854     }
2855   else
2856     {
2857       collect_symbol_completion_matches (tracker, mode, func_match_type,
2858                                          function, function);
2859
2860     }
2861 }
2862
2863 /* Helper for complete_linespec to simplify it.  SOURCE_FILENAME is
2864    only meaningful if COMPONENT is FUNCTION.  */
2865
2866 static void
2867 complete_linespec_component (linespec_parser *parser,
2868                              completion_tracker &tracker,
2869                              const char *text,
2870                              linespec_complete_what component,
2871                              const char *source_filename)
2872 {
2873   if (component == linespec_complete_what::KEYWORD)
2874     {
2875       complete_on_enum (tracker, linespec_keywords, text, text);
2876     }
2877   else if (component == linespec_complete_what::EXPRESSION)
2878     {
2879       const char *word
2880         = advance_to_expression_complete_word_point (tracker, text);
2881       complete_expression (tracker, text, word);
2882     }
2883   else if (component == linespec_complete_what::FUNCTION)
2884     {
2885       completion_list fn_list;
2886
2887       symbol_name_match_type match_type
2888         = PARSER_EXPLICIT (parser)->func_name_match_type;
2889       linespec_complete_function (tracker, text, match_type, source_filename);
2890       if (source_filename == NULL)
2891         {
2892           /* Haven't seen a source component, like in "b
2893              file.c:function[TAB]".  Maybe this wasn't a function, but
2894              a filename instead, like "b file.[TAB]".  */
2895           fn_list = complete_source_filenames (text);
2896         }
2897
2898       /* If we only have a single filename completion, append a ':' for
2899          the user, since that's the only thing that can usefully follow
2900          the filename.  */
2901       if (fn_list.size () == 1 && !tracker.have_completions ())
2902         {
2903           char *fn = fn_list[0].release ();
2904
2905           /* If we also need to append a quote char, it needs to be
2906              appended before the ':'.  Append it now, and make ':' the
2907              new "quote" char.  */
2908           if (tracker.quote_char ())
2909             {
2910               char quote_char_str[2] = { tracker.quote_char () };
2911
2912               fn = reconcat (fn, fn, quote_char_str, (char *) NULL);
2913               tracker.set_quote_char (':');
2914             }
2915           else
2916             fn = reconcat (fn, fn, ":", (char *) NULL);
2917           fn_list[0].reset (fn);
2918
2919           /* Tell readline to skip appending a space.  */
2920           tracker.set_suppress_append_ws (true);
2921         }
2922       tracker.add_completions (std::move (fn_list));
2923     }
2924 }
2925
2926 /* Helper for linespec_complete_label.  Find labels that match
2927    LABEL_NAME in the function symbols listed in the PARSER, and add
2928    them to the tracker.  */
2929
2930 static void
2931 complete_label (completion_tracker &tracker,
2932                 linespec_parser *parser,
2933                 const char *label_name)
2934 {
2935   VEC (symbolp) *label_function_symbols = NULL;
2936   VEC (symbolp) *labels
2937     = find_label_symbols (PARSER_STATE (parser),
2938                           PARSER_RESULT (parser)->function_symbols,
2939                           &label_function_symbols,
2940                           label_name, true);
2941
2942   symbol *label;
2943   for (int ix = 0;
2944        VEC_iterate (symbolp, labels, ix, label); ++ix)
2945     {
2946       char *match = xstrdup (SYMBOL_SEARCH_NAME (label));
2947       tracker.add_completion (gdb::unique_xmalloc_ptr<char> (match));
2948     }
2949   VEC_free (symbolp, labels);
2950 }
2951
2952 /* See linespec.h.  */
2953
2954 void
2955 linespec_complete_label (completion_tracker &tracker,
2956                          const struct language_defn *language,
2957                          const char *source_filename,
2958                          const char *function_name,
2959                          symbol_name_match_type func_name_match_type,
2960                          const char *label_name)
2961 {
2962   linespec_parser parser;
2963   struct cleanup *cleanup;
2964
2965   linespec_parser_new (&parser, 0, language, NULL, NULL, 0, NULL);
2966   cleanup = make_cleanup (linespec_parser_delete, &parser);
2967
2968   line_offset unknown_offset = { 0, LINE_OFFSET_UNKNOWN };
2969
2970   TRY
2971     {
2972       convert_explicit_location_to_linespec (PARSER_STATE (&parser),
2973                                              PARSER_RESULT (&parser),
2974                                              source_filename,
2975                                              function_name,
2976                                              func_name_match_type,
2977                                              NULL, unknown_offset);
2978     }
2979   CATCH (ex, RETURN_MASK_ERROR)
2980     {
2981       do_cleanups (cleanup);
2982       return;
2983     }
2984   END_CATCH
2985
2986   complete_label (tracker, &parser, label_name);
2987
2988   do_cleanups (cleanup);
2989 }
2990
2991 /* See description in linespec.h.  */
2992
2993 void
2994 linespec_complete (completion_tracker &tracker, const char *text,
2995                    symbol_name_match_type match_type)
2996 {
2997   linespec_parser parser;
2998   struct cleanup *cleanup;
2999   const char *orig = text;
3000
3001   linespec_parser_new (&parser, 0, current_language, NULL, NULL, 0, NULL);
3002   cleanup = make_cleanup (linespec_parser_delete, &parser);
3003   parser.lexer.saved_arg = text;
3004   PARSER_EXPLICIT (&parser)->func_name_match_type = match_type;
3005   PARSER_STREAM (&parser) = text;
3006
3007   parser.completion_tracker = &tracker;
3008   PARSER_STATE (&parser)->is_linespec = 1;
3009
3010   /* Parse as much as possible.  parser.completion_word will hold
3011      furthest completion point we managed to parse to.  */
3012   TRY
3013     {
3014       parse_linespec (&parser, text, match_type);
3015     }
3016   CATCH (except, RETURN_MASK_ERROR)
3017     {
3018     }
3019   END_CATCH
3020
3021   if (parser.completion_quote_char != '\0'
3022       && parser.completion_quote_end != NULL
3023       && parser.completion_quote_end[1] == '\0')
3024     {
3025       /* If completing a quoted string with the cursor right at
3026          terminating quote char, complete the completion word without
3027          interpretation, so that readline advances the cursor one
3028          whitespace past the quote, even if there's no match.  This
3029          makes these cases behave the same:
3030
3031            before: "b function()"
3032            after:  "b function() "
3033
3034            before: "b 'function()'"
3035            after:  "b 'function()' "
3036
3037          and trusts the user in this case:
3038
3039            before: "b 'not_loaded_function_yet()'"
3040            after:  "b 'not_loaded_function_yet()' "
3041       */
3042       parser.complete_what = linespec_complete_what::NOTHING;
3043       parser.completion_quote_char = '\0';
3044
3045       gdb::unique_xmalloc_ptr<char> text_copy
3046         (xstrdup (parser.completion_word));
3047       tracker.add_completion (std::move (text_copy));
3048     }
3049
3050   tracker.set_quote_char (parser.completion_quote_char);
3051
3052   if (parser.complete_what == linespec_complete_what::LABEL)
3053     {
3054       parser.complete_what = linespec_complete_what::NOTHING;
3055
3056       const char *func_name = PARSER_EXPLICIT (&parser)->function_name;
3057
3058       VEC (symbolp) *function_symbols;
3059       VEC (bound_minimal_symbol_d) *minimal_symbols;
3060       find_linespec_symbols (PARSER_STATE (&parser),
3061                              PARSER_RESULT (&parser)->file_symtabs,
3062                              func_name, match_type,
3063                              &function_symbols, &minimal_symbols);
3064
3065       PARSER_RESULT (&parser)->function_symbols = function_symbols;
3066       PARSER_RESULT (&parser)->minimal_symbols = minimal_symbols;
3067
3068       complete_label (tracker, &parser, parser.completion_word);
3069     }
3070   else if (parser.complete_what == linespec_complete_what::FUNCTION)
3071     {
3072       /* While parsing/lexing, we didn't know whether the completion
3073          word completes to a unique function/source name already or
3074          not.
3075
3076          E.g.:
3077            "b function() <tab>"
3078          may need to complete either to:
3079            "b function() const"
3080          or to:
3081            "b function() if/thread/task"
3082
3083          Or, this:
3084            "b foo t"
3085          may need to complete either to:
3086            "b foo template_fun<T>()"
3087          with "foo" being the template function's return type, or to:
3088            "b foo thread/task"
3089
3090          Or, this:
3091            "b file<TAB>"
3092          may need to complete either to a source file name:
3093            "b file.c"
3094          or this, also a filename, but a unique completion:
3095            "b file.c:"
3096          or to a function name:
3097            "b file_function"
3098
3099          Address that by completing assuming source or function, and
3100          seeing if we find a completion that matches exactly the
3101          completion word.  If so, then it must be a function (see note
3102          below) and we advance the completion word to the end of input
3103          and switch to KEYWORD completion mode.
3104
3105          Note: if we find a unique completion for a source filename,
3106          then it won't match the completion word, because the LCD will
3107          contain a trailing ':'.  And if we're completing at or after
3108          the ':', then complete_linespec_component won't try to
3109          complete on source filenames.  */
3110
3111       const char *word = parser.completion_word;
3112
3113       complete_linespec_component (&parser, tracker,
3114                                    parser.completion_word,
3115                                    linespec_complete_what::FUNCTION,
3116                                    PARSER_EXPLICIT (&parser)->source_filename);
3117
3118       parser.complete_what = linespec_complete_what::NOTHING;
3119
3120       if (tracker.quote_char ())
3121         {
3122           /* The function/file name was not close-quoted, so this
3123              can't be a keyword.  Note: complete_linespec_component
3124              may have swapped the original quote char for ':' when we
3125              get here, but that still indicates the same.  */
3126         }
3127       else if (!tracker.have_completions ())
3128         {
3129           size_t key_start;
3130           size_t wordlen = strlen (parser.completion_word);
3131
3132           key_start
3133             = string_find_incomplete_keyword_at_end (linespec_keywords,
3134                                                      parser.completion_word,
3135                                                      wordlen);
3136
3137           if (key_start != -1
3138               || (wordlen > 0
3139                   && parser.completion_word[wordlen - 1] == ' '))
3140             {
3141               parser.completion_word += key_start;
3142               parser.complete_what = linespec_complete_what::KEYWORD;
3143             }
3144         }
3145       else if (tracker.completes_to_completion_word (word))
3146         {
3147           /* Skip the function and complete on keywords.  */
3148           parser.completion_word += strlen (word);
3149           parser.complete_what = linespec_complete_what::KEYWORD;
3150           tracker.discard_completions ();
3151         }
3152     }
3153
3154   tracker.advance_custom_word_point_by (parser.completion_word - orig);
3155
3156   complete_linespec_component (&parser, tracker,
3157                                parser.completion_word,
3158                                parser.complete_what,
3159                                PARSER_EXPLICIT (&parser)->source_filename);
3160
3161   /* If we're past the "filename:function:label:offset" linespec, and
3162      didn't find any match, then assume the user might want to create
3163      a pending breakpoint anyway and offer the keyword
3164      completions.  */
3165   if (!parser.completion_quote_char
3166       && (parser.complete_what == linespec_complete_what::FUNCTION
3167           || parser.complete_what == linespec_complete_what::LABEL
3168           || parser.complete_what == linespec_complete_what::NOTHING)
3169       && !tracker.have_completions ())
3170     {
3171       const char *end
3172         = parser.completion_word + strlen (parser.completion_word);
3173
3174       if (end > orig && end[-1] == ' ')
3175         {
3176           tracker.advance_custom_word_point_by (end - parser.completion_word);
3177
3178           complete_linespec_component (&parser, tracker, end,
3179                                        linespec_complete_what::KEYWORD,
3180                                        NULL);
3181         }
3182     }
3183
3184   do_cleanups (cleanup);
3185 }
3186
3187 /* A helper function for decode_line_full and decode_line_1 to
3188    turn LOCATION into std::vector<symtab_and_line>.  */
3189
3190 static std::vector<symtab_and_line>
3191 event_location_to_sals (linespec_parser *parser,
3192                         const struct event_location *location)
3193 {
3194   std::vector<symtab_and_line> result;
3195
3196   switch (event_location_type (location))
3197     {
3198     case LINESPEC_LOCATION:
3199       {
3200         PARSER_STATE (parser)->is_linespec = 1;
3201         TRY
3202           {
3203             const linespec_location *ls = get_linespec_location (location);
3204             result = parse_linespec (parser,
3205                                      ls->spec_string, ls->match_type);
3206           }
3207         CATCH (except, RETURN_MASK_ERROR)
3208           {
3209             throw_exception (except);
3210           }
3211         END_CATCH
3212       }
3213       break;
3214
3215     case ADDRESS_LOCATION:
3216       {
3217         const char *addr_string = get_address_string_location (location);
3218         CORE_ADDR addr = get_address_location (location);
3219
3220         if (addr_string != NULL)
3221           {
3222             char *expr = xstrdup (addr_string);
3223             const char *const_expr = expr;
3224             struct cleanup *cleanup = make_cleanup (xfree, expr);
3225
3226             addr = linespec_expression_to_pc (&const_expr);
3227             if (PARSER_STATE (parser)->canonical != NULL)
3228               PARSER_STATE (parser)->canonical->location
3229                 = copy_event_location (location);
3230
3231             do_cleanups (cleanup);
3232           }
3233
3234         result = convert_address_location_to_sals (PARSER_STATE (parser),
3235                                                    addr);
3236       }
3237       break;
3238
3239     case EXPLICIT_LOCATION:
3240       {
3241         const struct explicit_location *explicit_loc;
3242
3243         explicit_loc = get_explicit_location_const (location);
3244         result = convert_explicit_location_to_sals (PARSER_STATE (parser),
3245                                                     PARSER_RESULT (parser),
3246                                                     explicit_loc);
3247       }
3248       break;
3249
3250     case PROBE_LOCATION:
3251       /* Probes are handled by their own decoders.  */
3252       gdb_assert_not_reached ("attempt to decode probe location");
3253       break;
3254
3255     default:
3256       gdb_assert_not_reached ("unhandled event location type");
3257     }
3258
3259   return result;
3260 }
3261
3262 /* See linespec.h.  */
3263
3264 void
3265 decode_line_full (const struct event_location *location, int flags,
3266                   struct program_space *search_pspace,
3267                   struct symtab *default_symtab,
3268                   int default_line, struct linespec_result *canonical,
3269                   const char *select_mode,
3270                   const char *filter)
3271 {
3272   struct cleanup *cleanups;
3273   VEC (const_char_ptr) *filters = NULL;
3274   linespec_parser parser;
3275   struct linespec_state *state;
3276
3277   gdb_assert (canonical != NULL);
3278   /* The filter only makes sense for 'all'.  */
3279   gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
3280   gdb_assert (select_mode == NULL
3281               || select_mode == multiple_symbols_all
3282               || select_mode == multiple_symbols_ask
3283               || select_mode == multiple_symbols_cancel);
3284   gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
3285
3286   linespec_parser_new (&parser, flags, current_language,
3287                        search_pspace, default_symtab,
3288                        default_line, canonical);
3289   cleanups = make_cleanup (linespec_parser_delete, &parser);
3290
3291   scoped_restore_current_program_space restore_pspace;
3292
3293   std::vector<symtab_and_line> result = event_location_to_sals (&parser,
3294                                                                 location);
3295   state = PARSER_STATE (&parser);
3296
3297   gdb_assert (result.size () == 1 || canonical->pre_expanded);
3298   canonical->pre_expanded = 1;
3299
3300   /* Arrange for allocated canonical names to be freed.  */
3301   if (!result.empty ())
3302     {
3303       int i;
3304
3305       make_cleanup (xfree, state->canonical_names);
3306       for (i = 0; i < result.size (); ++i)
3307         {
3308           gdb_assert (state->canonical_names[i].suffix != NULL);
3309           make_cleanup (xfree, state->canonical_names[i].suffix);
3310         }
3311     }
3312
3313   if (select_mode == NULL)
3314     {
3315       if (interp_ui_out (top_level_interpreter ())->is_mi_like_p ())
3316         select_mode = multiple_symbols_all;
3317       else
3318         select_mode = multiple_symbols_select_mode ();
3319     }
3320
3321   if (select_mode == multiple_symbols_all)
3322     {
3323       if (filter != NULL)
3324         {
3325           make_cleanup (VEC_cleanup (const_char_ptr), &filters);
3326           VEC_safe_push (const_char_ptr, filters, filter);
3327           filter_results (state, &result, filters);
3328         }
3329       else
3330         convert_results_to_lsals (state, &result);
3331     }
3332   else
3333     decode_line_2 (state, &result, select_mode);
3334
3335   do_cleanups (cleanups);
3336 }
3337
3338 /* See linespec.h.  */
3339
3340 std::vector<symtab_and_line>
3341 decode_line_1 (const struct event_location *location, int flags,
3342                struct program_space *search_pspace,
3343                struct symtab *default_symtab,
3344                int default_line)
3345 {
3346   linespec_parser parser;
3347   struct cleanup *cleanups;
3348
3349   linespec_parser_new (&parser, flags, current_language,
3350                        search_pspace, default_symtab,
3351                        default_line, NULL);
3352   cleanups = make_cleanup (linespec_parser_delete, &parser);
3353
3354   scoped_restore_current_program_space restore_pspace;
3355
3356   std::vector<symtab_and_line> result = event_location_to_sals (&parser,
3357                                                                 location);
3358
3359   do_cleanups (cleanups);
3360   return result;
3361 }
3362
3363 /* See linespec.h.  */
3364
3365 std::vector<symtab_and_line>
3366 decode_line_with_current_source (const char *string, int flags)
3367 {
3368   if (string == 0)
3369     error (_("Empty line specification."));
3370
3371   /* We use whatever is set as the current source line.  We do not try
3372      and get a default source symtab+line or it will recursively call us!  */
3373   symtab_and_line cursal = get_current_source_symtab_and_line ();
3374
3375   event_location_up location = string_to_event_location (&string,
3376                                                          current_language);
3377   std::vector<symtab_and_line> sals
3378     = decode_line_1 (location.get (), flags, NULL, cursal.symtab, cursal.line);
3379
3380   if (*string)
3381     error (_("Junk at end of line specification: %s"), string);
3382
3383   return sals;
3384 }
3385
3386 /* See linespec.h.  */
3387
3388 std::vector<symtab_and_line>
3389 decode_line_with_last_displayed (const char *string, int flags)
3390 {
3391   if (string == 0)
3392     error (_("Empty line specification."));
3393
3394   event_location_up location = string_to_event_location (&string,
3395                                                          current_language);
3396   std::vector<symtab_and_line> sals
3397     = (last_displayed_sal_is_valid ()
3398        ? decode_line_1 (location.get (), flags, NULL,
3399                         get_last_displayed_symtab (),
3400                         get_last_displayed_line ())
3401        : decode_line_1 (location.get (), flags, NULL,
3402                         (struct symtab *) NULL, 0));
3403
3404   if (*string)
3405     error (_("Junk at end of line specification: %s"), string);
3406
3407   return sals;
3408 }
3409
3410 \f
3411
3412 /* First, some functions to initialize stuff at the beggining of the
3413    function.  */
3414
3415 static void
3416 initialize_defaults (struct symtab **default_symtab, int *default_line)
3417 {
3418   if (*default_symtab == 0)
3419     {
3420       /* Use whatever we have for the default source line.  We don't use
3421          get_current_or_default_symtab_and_line as it can recurse and call
3422          us back!  */
3423       struct symtab_and_line cursal = 
3424         get_current_source_symtab_and_line ();
3425       
3426       *default_symtab = cursal.symtab;
3427       *default_line = cursal.line;
3428     }
3429 }
3430
3431 \f
3432
3433 /* Evaluate the expression pointed to by EXP_PTR into a CORE_ADDR,
3434    advancing EXP_PTR past any parsed text.  */
3435
3436 CORE_ADDR
3437 linespec_expression_to_pc (const char **exp_ptr)
3438 {
3439   if (current_program_space->executing_startup)
3440     /* The error message doesn't really matter, because this case
3441        should only hit during breakpoint reset.  */
3442     throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
3443                                     "program space is in startup"));
3444
3445   (*exp_ptr)++;
3446   return value_as_address (parse_to_comma_and_eval (exp_ptr));
3447 }
3448
3449 \f
3450
3451 /* Here's where we recognise an Objective-C Selector.  An Objective C
3452    selector may be implemented by more than one class, therefore it
3453    may represent more than one method/function.  This gives us a
3454    situation somewhat analogous to C++ overloading.  If there's more
3455    than one method that could represent the selector, then use some of
3456    the existing C++ code to let the user choose one.  */
3457
3458 static std::vector<symtab_and_line>
3459 decode_objc (struct linespec_state *self, linespec_p ls, const char *arg)
3460 {
3461   struct collect_info info;
3462   VEC (const_char_ptr) *symbol_names = NULL;
3463   const char *new_argptr;
3464   struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
3465                                           &symbol_names);
3466
3467   info.state = self;
3468   info.file_symtabs = NULL;
3469   VEC_safe_push (symtab_ptr, info.file_symtabs, NULL);
3470   make_cleanup (VEC_cleanup (symtab_ptr), &info.file_symtabs);
3471   info.result.symbols = NULL;
3472   info.result.minimal_symbols = NULL;
3473
3474   new_argptr = find_imps (arg, &symbol_names);
3475   if (VEC_empty (const_char_ptr, symbol_names))
3476     {
3477       do_cleanups (cleanup);
3478       return {};
3479     }
3480
3481   add_all_symbol_names_from_pspace (&info, NULL, symbol_names,
3482                                     FUNCTIONS_DOMAIN);
3483
3484   std::vector<symtab_and_line> values;
3485   if (!VEC_empty (symbolp, info.result.symbols)
3486       || !VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
3487     {
3488       char *saved_arg;
3489
3490       saved_arg = (char *) alloca (new_argptr - arg + 1);
3491       memcpy (saved_arg, arg, new_argptr - arg);
3492       saved_arg[new_argptr - arg] = '\0';
3493
3494       ls->explicit_loc.function_name = xstrdup (saved_arg);
3495       ls->function_symbols = info.result.symbols;
3496       ls->minimal_symbols = info.result.minimal_symbols;
3497       values = convert_linespec_to_sals (self, ls);
3498
3499       if (self->canonical)
3500         {
3501           std::string holder;
3502           const char *str;
3503
3504           self->canonical->pre_expanded = 1;
3505
3506           if (ls->explicit_loc.source_filename)
3507             {
3508               holder = string_printf ("%s:%s",
3509                                       ls->explicit_loc.source_filename,
3510                                       saved_arg);
3511               str = holder.c_str ();
3512             }
3513           else
3514             str = saved_arg;
3515
3516           self->canonical->location
3517             = new_linespec_location (&str, symbol_name_match_type::FULL);
3518         }
3519     }
3520
3521   do_cleanups (cleanup);
3522
3523   return values;
3524 }
3525
3526 namespace {
3527
3528 /* A function object that serves as symbol_found_callback_ftype
3529    callback for iterate_over_symbols.  This is used by
3530    lookup_prefix_sym to collect type symbols.  */
3531 class decode_compound_collector
3532 {
3533 public:
3534   decode_compound_collector ()
3535     : m_symbols (NULL)
3536   {
3537     m_unique_syms = htab_create_alloc (1, htab_hash_pointer,
3538                                        htab_eq_pointer, NULL,
3539                                        xcalloc, xfree);
3540   }
3541
3542   ~decode_compound_collector ()
3543   {
3544     if (m_unique_syms != NULL)
3545       htab_delete (m_unique_syms);
3546   }
3547
3548   /* Releases ownership of the collected symbols and returns them.  */
3549   VEC (symbolp) *release_symbols ()
3550   {
3551     VEC (symbolp) *res = m_symbols;
3552     m_symbols = NULL;
3553     return res;
3554   }
3555
3556   /* Callable as a symbol_found_callback_ftype callback.  */
3557   bool operator () (symbol *sym);
3558
3559 private:
3560   /* A hash table of all symbols we found.  We use this to avoid
3561      adding any symbol more than once.  */
3562   htab_t m_unique_syms;
3563
3564   /* The result vector.  */
3565   VEC (symbolp) *m_symbols;
3566 };
3567
3568 bool
3569 decode_compound_collector::operator () (symbol *sym)
3570 {
3571   void **slot;
3572   struct type *t;
3573
3574   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
3575     return true; /* Continue iterating.  */
3576
3577   t = SYMBOL_TYPE (sym);
3578   t = check_typedef (t);
3579   if (TYPE_CODE (t) != TYPE_CODE_STRUCT
3580       && TYPE_CODE (t) != TYPE_CODE_UNION
3581       && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
3582     return true; /* Continue iterating.  */
3583
3584   slot = htab_find_slot (m_unique_syms, sym, INSERT);
3585   if (!*slot)
3586     {
3587       *slot = sym;
3588       VEC_safe_push (symbolp, m_symbols, sym);
3589     }
3590
3591   return true; /* Continue iterating.  */
3592 }
3593
3594 } // namespace
3595
3596 /* Return any symbols corresponding to CLASS_NAME in FILE_SYMTABS.  */
3597
3598 static VEC (symbolp) *
3599 lookup_prefix_sym (struct linespec_state *state, VEC (symtab_ptr) *file_symtabs,
3600                    const char *class_name)
3601 {
3602   int ix;
3603   struct symtab *elt;
3604   decode_compound_collector collector;
3605
3606   lookup_name_info lookup_name (class_name, symbol_name_match_type::FULL);
3607
3608   for (ix = 0; VEC_iterate (symtab_ptr, file_symtabs, ix, elt); ++ix)
3609     {
3610       if (elt == NULL)
3611         {
3612           iterate_over_all_matching_symtabs (state, lookup_name,
3613                                              STRUCT_DOMAIN, ALL_DOMAIN,
3614                                              NULL, false, collector);
3615           iterate_over_all_matching_symtabs (state, lookup_name,
3616                                              VAR_DOMAIN, ALL_DOMAIN,
3617                                              NULL, false, collector);
3618         }
3619       else
3620         {
3621           /* Program spaces that are executing startup should have
3622              been filtered out earlier.  */
3623           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
3624           set_current_program_space (SYMTAB_PSPACE (elt));
3625           iterate_over_file_blocks (elt, lookup_name, STRUCT_DOMAIN, collector);
3626           iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN, collector);
3627         }
3628     }
3629
3630   return collector.release_symbols ();
3631 }
3632
3633 /* A qsort comparison function for symbols.  The resulting order does
3634    not actually matter; we just need to be able to sort them so that
3635    symbols with the same program space end up next to each other.  */
3636
3637 static int
3638 compare_symbols (const void *a, const void *b)
3639 {
3640   struct symbol * const *sa = (struct symbol * const*) a;
3641   struct symbol * const *sb = (struct symbol * const*) b;
3642   uintptr_t uia, uib;
3643
3644   uia = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (*sa));
3645   uib = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (*sb));
3646
3647   if (uia < uib)
3648     return -1;
3649   if (uia > uib)
3650     return 1;
3651
3652   uia = (uintptr_t) *sa;
3653   uib = (uintptr_t) *sb;
3654
3655   if (uia < uib)
3656     return -1;
3657   if (uia > uib)
3658     return 1;
3659
3660   return 0;
3661 }
3662
3663 /* Like compare_symbols but for minimal symbols.  */
3664
3665 static int
3666 compare_msymbols (const void *a, const void *b)
3667 {
3668   const struct bound_minimal_symbol *sa
3669     = (const struct bound_minimal_symbol *) a;
3670   const struct bound_minimal_symbol *sb
3671     = (const struct bound_minimal_symbol *) b;
3672   uintptr_t uia, uib;
3673
3674   uia = (uintptr_t) sa->objfile->pspace;
3675   uib = (uintptr_t) sa->objfile->pspace;
3676
3677   if (uia < uib)
3678     return -1;
3679   if (uia > uib)
3680     return 1;
3681
3682   uia = (uintptr_t) sa->minsym;
3683   uib = (uintptr_t) sb->minsym;
3684
3685   if (uia < uib)
3686     return -1;
3687   if (uia > uib)
3688     return 1;
3689
3690   return 0;
3691 }
3692
3693 /* Look for all the matching instances of each symbol in NAMES.  Only
3694    instances from PSPACE are considered; other program spaces are
3695    handled by our caller.  If PSPACE is NULL, then all program spaces
3696    are considered.  Results are stored into INFO.  */
3697
3698 static void
3699 add_all_symbol_names_from_pspace (struct collect_info *info,
3700                                   struct program_space *pspace,
3701                                   VEC (const_char_ptr) *names,
3702                                   enum search_domain search_domain)
3703 {
3704   int ix;
3705   const char *iter;
3706
3707   for (ix = 0; VEC_iterate (const_char_ptr, names, ix, iter); ++ix)
3708     add_matching_symbols_to_info (iter,
3709                                   symbol_name_match_type::FULL,
3710                                   search_domain, info, pspace);
3711 }
3712
3713 static void
3714 find_superclass_methods (VEC (typep) *superclasses,
3715                          const char *name, enum language name_lang,
3716                          VEC (const_char_ptr) **result_names)
3717 {
3718   int old_len = VEC_length (const_char_ptr, *result_names);
3719   VEC (typep) *iter_classes;
3720   struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
3721
3722   iter_classes = superclasses;
3723   while (1)
3724     {
3725       VEC (typep) *new_supers = NULL;
3726       int ix;
3727       struct type *t;
3728
3729       make_cleanup (VEC_cleanup (typep), &new_supers);
3730       for (ix = 0; VEC_iterate (typep, iter_classes, ix, t); ++ix)
3731         find_methods (t, name_lang, name, result_names, &new_supers);
3732
3733       if (VEC_length (const_char_ptr, *result_names) != old_len
3734           || VEC_empty (typep, new_supers))
3735         break;
3736
3737       iter_classes = new_supers;
3738     }
3739
3740   do_cleanups (cleanup);
3741 }
3742
3743 /* This finds the method METHOD_NAME in the class CLASS_NAME whose type is
3744    given by one of the symbols in SYM_CLASSES.  Matches are returned
3745    in SYMBOLS (for debug symbols) and MINSYMS (for minimal symbols).  */
3746
3747 static void
3748 find_method (struct linespec_state *self, VEC (symtab_ptr) *file_symtabs,
3749              const char *class_name, const char *method_name,
3750              VEC (symbolp) *sym_classes, VEC (symbolp) **symbols,
3751              VEC (bound_minimal_symbol_d) **minsyms)
3752 {
3753   struct symbol *sym;
3754   struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
3755   int ix;
3756   int last_result_len;
3757   VEC (typep) *superclass_vec;
3758   VEC (const_char_ptr) *result_names;
3759   struct collect_info info;
3760
3761   /* Sort symbols so that symbols with the same program space are next
3762      to each other.  */
3763   qsort (VEC_address (symbolp, sym_classes),
3764          VEC_length (symbolp, sym_classes),
3765          sizeof (symbolp),
3766          compare_symbols);
3767
3768   info.state = self;
3769   info.file_symtabs = file_symtabs;
3770   info.result.symbols = NULL;
3771   info.result.minimal_symbols = NULL;
3772
3773   /* Iterate over all the types, looking for the names of existing
3774      methods matching METHOD_NAME.  If we cannot find a direct method in a
3775      given program space, then we consider inherited methods; this is
3776      not ideal (ideal would be to respect C++ hiding rules), but it
3777      seems good enough and is what GDB has historically done.  We only
3778      need to collect the names because later we find all symbols with
3779      those names.  This loop is written in a somewhat funny way
3780      because we collect data across the program space before deciding
3781      what to do.  */
3782   superclass_vec = NULL;
3783   make_cleanup (VEC_cleanup (typep), &superclass_vec);
3784   result_names = NULL;
3785   make_cleanup (VEC_cleanup (const_char_ptr), &result_names);
3786   last_result_len = 0;
3787   for (ix = 0; VEC_iterate (symbolp, sym_classes, ix, sym); ++ix)
3788     {
3789       struct type *t;
3790       struct program_space *pspace;
3791
3792       /* Program spaces that are executing startup should have
3793          been filtered out earlier.  */
3794       pspace = SYMTAB_PSPACE (symbol_symtab (sym));
3795       gdb_assert (!pspace->executing_startup);
3796       set_current_program_space (pspace);
3797       t = check_typedef (SYMBOL_TYPE (sym));
3798       find_methods (t, SYMBOL_LANGUAGE (sym),
3799                     method_name, &result_names, &superclass_vec);
3800
3801       /* Handle all items from a single program space at once; and be
3802          sure not to miss the last batch.  */
3803       if (ix == VEC_length (symbolp, sym_classes) - 1
3804           || (pspace
3805               != SYMTAB_PSPACE (symbol_symtab (VEC_index (symbolp, sym_classes,
3806                                                           ix + 1)))))
3807         {
3808           /* If we did not find a direct implementation anywhere in
3809              this program space, consider superclasses.  */
3810           if (VEC_length (const_char_ptr, result_names) == last_result_len)
3811             find_superclass_methods (superclass_vec, method_name,
3812                                      SYMBOL_LANGUAGE (sym), &result_names);
3813
3814           /* We have a list of candidate symbol names, so now we
3815              iterate over the symbol tables looking for all
3816              matches in this pspace.  */
3817           add_all_symbol_names_from_pspace (&info, pspace, result_names,
3818                                             FUNCTIONS_DOMAIN);
3819
3820           VEC_truncate (typep, superclass_vec, 0);
3821           last_result_len = VEC_length (const_char_ptr, result_names);
3822         }
3823     }
3824
3825   if (!VEC_empty (symbolp, info.result.symbols)
3826       || !VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
3827     {
3828       *symbols = info.result.symbols;
3829       *minsyms = info.result.minimal_symbols;
3830       do_cleanups (cleanup);
3831       return;
3832     }
3833
3834   /* Throw an NOT_FOUND_ERROR.  This will be caught by the caller
3835      and other attempts to locate the symbol will be made.  */
3836   throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
3837 }
3838
3839 \f
3840
3841 namespace {
3842
3843 /* This function object is a callback for iterate_over_symtabs, used
3844    when collecting all matching symtabs.  */
3845
3846 class symtab_collector
3847 {
3848 public:
3849   symtab_collector ()
3850   {
3851     m_symtabs = NULL;
3852     m_symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
3853                                   NULL);
3854   }
3855
3856   ~symtab_collector ()
3857   {
3858     if (m_symtab_table != NULL)
3859       htab_delete (m_symtab_table);
3860   }
3861
3862   /* Callable as a symbol_found_callback_ftype callback.  */
3863   bool operator () (symtab *sym);
3864
3865   /* Releases ownership of the collected symtabs and returns them.  */
3866   VEC (symtab_ptr) *release_symtabs ()
3867   {
3868     VEC (symtab_ptr) *res = m_symtabs;
3869     m_symtabs = NULL;
3870     return res;
3871   }
3872
3873 private:
3874   /* The result vector of symtabs.  */
3875   VEC (symtab_ptr) *m_symtabs;
3876
3877   /* This is used to ensure the symtabs are unique.  */
3878   htab_t m_symtab_table;
3879 };
3880
3881 bool
3882 symtab_collector::operator () (struct symtab *symtab)
3883 {
3884   void **slot;
3885
3886   slot = htab_find_slot (m_symtab_table, symtab, INSERT);
3887   if (!*slot)
3888     {
3889       *slot = symtab;
3890       VEC_safe_push (symtab_ptr, m_symtabs, symtab);
3891     }
3892
3893   return false;
3894 }
3895
3896 } // namespace
3897
3898 /* Given a file name, return a VEC of all matching symtabs.  If
3899    SEARCH_PSPACE is not NULL, the search is restricted to just that
3900    program space.  */
3901
3902 static VEC (symtab_ptr) *
3903 collect_symtabs_from_filename (const char *file,
3904                                struct program_space *search_pspace)
3905 {
3906   symtab_collector collector;
3907
3908   /* Find that file's data.  */
3909   if (search_pspace == NULL)
3910     {
3911       struct program_space *pspace;
3912
3913       ALL_PSPACES (pspace)
3914         {
3915           if (pspace->executing_startup)
3916             continue;
3917
3918           set_current_program_space (pspace);
3919           iterate_over_symtabs (file, collector);
3920         }
3921     }
3922   else
3923     {
3924       set_current_program_space (search_pspace);
3925       iterate_over_symtabs (file, collector);
3926     }
3927
3928   return collector.release_symtabs ();
3929 }
3930
3931 /* Return all the symtabs associated to the FILENAME.  If SEARCH_PSPACE is
3932    not NULL, the search is restricted to just that program space.  */
3933
3934 static VEC (symtab_ptr) *
3935 symtabs_from_filename (const char *filename,
3936                        struct program_space *search_pspace)
3937 {
3938   VEC (symtab_ptr) *result;
3939   
3940   result = collect_symtabs_from_filename (filename, search_pspace);
3941
3942   if (VEC_empty (symtab_ptr, result))
3943     {
3944       if (!have_full_symbols () && !have_partial_symbols ())
3945         throw_error (NOT_FOUND_ERROR,
3946                      _("No symbol table is loaded.  "
3947                        "Use the \"file\" command."));
3948       source_file_not_found_error (filename);
3949     }
3950
3951   return result;
3952 }
3953
3954 /* Look up a function symbol named NAME in symtabs FILE_SYMTABS.  Matching
3955    debug symbols are returned in SYMBOLS.  Matching minimal symbols are
3956    returned in MINSYMS.  */
3957
3958 static void
3959 find_function_symbols (struct linespec_state *state,
3960                        VEC (symtab_ptr) *file_symtabs, const char *name,
3961                        symbol_name_match_type name_match_type,
3962                        VEC (symbolp) **symbols,
3963                        VEC (bound_minimal_symbol_d) **minsyms)
3964 {
3965   struct collect_info info;
3966   VEC (const_char_ptr) *symbol_names = NULL;
3967   struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
3968                                           &symbol_names);
3969
3970   info.state = state;
3971   info.result.symbols = NULL;
3972   info.result.minimal_symbols = NULL;
3973   info.file_symtabs = file_symtabs;
3974
3975   /* Try NAME as an Objective-C selector.  */
3976   find_imps (name, &symbol_names);
3977   if (!VEC_empty (const_char_ptr, symbol_names))
3978     add_all_symbol_names_from_pspace (&info, state->search_pspace,
3979                                       symbol_names, FUNCTIONS_DOMAIN);
3980   else
3981     add_matching_symbols_to_info (name, name_match_type, FUNCTIONS_DOMAIN,
3982                                   &info, state->search_pspace);
3983
3984   do_cleanups (cleanup);
3985
3986   if (VEC_empty (symbolp, info.result.symbols))
3987     {
3988       VEC_free (symbolp, info.result.symbols);
3989       *symbols = NULL;
3990     }
3991   else
3992     *symbols = info.result.symbols;
3993
3994   if (VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
3995     {
3996       VEC_free (bound_minimal_symbol_d, info.result.minimal_symbols);
3997       *minsyms = NULL;
3998     }
3999   else
4000     *minsyms = info.result.minimal_symbols;
4001 }
4002
4003 /* Find all symbols named NAME in FILE_SYMTABS, returning debug symbols
4004    in SYMBOLS and minimal symbols in MINSYMS.  */
4005
4006 static void
4007 find_linespec_symbols (struct linespec_state *state,
4008                        VEC (symtab_ptr) *file_symtabs,
4009                        const char *lookup_name,
4010                        symbol_name_match_type name_match_type,
4011                        VEC (symbolp) **symbols,
4012                        VEC (bound_minimal_symbol_d) **minsyms)
4013 {
4014   std::string canon = cp_canonicalize_string_no_typedefs (lookup_name);
4015   if (!canon.empty ())
4016     lookup_name = canon.c_str ();
4017
4018   /* It's important to not call expand_symtabs_matching unnecessarily
4019      as it can really slow things down (by unnecessarily expanding
4020      potentially 1000s of symtabs, which when debugging some apps can
4021      cost 100s of seconds).  Avoid this to some extent by *first* calling
4022      find_function_symbols, and only if that doesn't find anything
4023      *then* call find_method.  This handles two important cases:
4024      1) break (anonymous namespace)::foo
4025      2) break class::method where method is in class (and not a baseclass)  */
4026
4027   find_function_symbols (state, file_symtabs, lookup_name,
4028                          name_match_type,
4029                          symbols, minsyms);
4030
4031   /* If we were unable to locate a symbol of the same name, try dividing
4032      the name into class and method names and searching the class and its
4033      baseclasses.  */
4034   if (VEC_empty (symbolp, *symbols)
4035       && VEC_empty (bound_minimal_symbol_d, *minsyms))
4036     {
4037       std::string klass, method;
4038       const char *last, *p, *scope_op;
4039       VEC (symbolp) *classes;
4040
4041       /* See if we can find a scope operator and break this symbol
4042          name into namespaces${SCOPE_OPERATOR}class_name and method_name.  */
4043       scope_op = "::";
4044       p = find_toplevel_string (lookup_name, scope_op);
4045
4046       last = NULL;
4047       while (p != NULL)
4048         {
4049           last = p;
4050           p = find_toplevel_string (p + strlen (scope_op), scope_op);
4051         }
4052
4053       /* If no scope operator was found, there is nothing more we can do;
4054          we already attempted to lookup the entire name as a symbol
4055          and failed.  */
4056       if (last == NULL)
4057         return;
4058
4059       /* LOOKUP_NAME points to the class name.
4060          LAST points to the method name.  */
4061       klass = std::string (lookup_name, last - lookup_name);
4062
4063       /* Skip past the scope operator.  */
4064       last += strlen (scope_op);
4065       method = last;
4066
4067       /* Find a list of classes named KLASS.  */
4068       classes = lookup_prefix_sym (state, file_symtabs, klass.c_str ());
4069       struct cleanup *old_chain
4070         = make_cleanup (VEC_cleanup (symbolp), &classes);
4071
4072       if (!VEC_empty (symbolp, classes))
4073         {
4074           /* Now locate a list of suitable methods named METHOD.  */
4075           TRY
4076             {
4077               find_method (state, file_symtabs,
4078                            klass.c_str (), method.c_str (),
4079                            classes, symbols, minsyms);
4080             }
4081
4082           /* If successful, we're done.  If NOT_FOUND_ERROR
4083              was not thrown, rethrow the exception that we did get.  */
4084           CATCH (except, RETURN_MASK_ERROR)
4085             {
4086               if (except.error != NOT_FOUND_ERROR)
4087                 throw_exception (except);
4088             }
4089           END_CATCH
4090         }
4091
4092       do_cleanups (old_chain);
4093     }
4094 }
4095
4096 /* Helper for find_label_symbols.  Find all labels that match name
4097    NAME in BLOCK.  Return all labels that match in FUNCTION_SYMBOLS.
4098    Return the actual function symbol in which the label was found in
4099    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
4100    interpreted as a label name prefix.  Otherwise, only a label named
4101    exactly NAME match.  */
4102
4103 static void
4104 find_label_symbols_in_block (const struct block *block,
4105                              const char *name, struct symbol *fn_sym,
4106                              bool completion_mode,
4107                              VEC (symbolp) **result,
4108                              VEC (symbolp) **label_funcs_ret)
4109 {
4110   if (completion_mode)
4111     {
4112       struct block_iterator iter;
4113       struct symbol *sym;
4114       size_t name_len = strlen (name);
4115
4116       int (*cmp) (const char *, const char *, size_t);
4117       cmp = case_sensitivity == case_sensitive_on ? strncmp : strncasecmp;
4118
4119       ALL_BLOCK_SYMBOLS (block, iter, sym)
4120         {
4121           if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4122                                      SYMBOL_DOMAIN (sym), LABEL_DOMAIN)
4123               && cmp (SYMBOL_SEARCH_NAME (sym), name, name_len) == 0)
4124             {
4125               VEC_safe_push (symbolp, *result, sym);
4126               VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
4127             }
4128         }
4129     }
4130   else
4131     {
4132       struct symbol *sym = lookup_symbol (name, block, LABEL_DOMAIN, 0).symbol;
4133
4134       if (sym != NULL)
4135         {
4136           VEC_safe_push (symbolp, *result, sym);
4137           VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
4138         }
4139     }
4140 }
4141
4142 /* Return all labels that match name NAME in FUNCTION_SYMBOLS.  Return
4143    the actual function symbol in which the label was found in
4144    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
4145    interpreted as a label name prefix.  Otherwise, only labels named
4146    exactly NAME match.  */
4147
4148 static VEC (symbolp) *
4149 find_label_symbols (struct linespec_state *self,
4150                     VEC (symbolp) *function_symbols,
4151                     VEC (symbolp) **label_funcs_ret, const char *name,
4152                     bool completion_mode)
4153 {
4154   int ix;
4155   const struct block *block;
4156   struct symbol *fn_sym;
4157   VEC (symbolp) *result = NULL;
4158
4159   if (function_symbols == NULL)
4160     {
4161       set_current_program_space (self->program_space);
4162       block = get_current_search_block ();
4163
4164       for (;
4165            block && !BLOCK_FUNCTION (block);
4166            block = BLOCK_SUPERBLOCK (block))
4167         ;
4168       if (!block)
4169         return NULL;
4170       fn_sym = BLOCK_FUNCTION (block);
4171
4172       find_label_symbols_in_block (block, name, fn_sym, completion_mode,
4173                                    &result, label_funcs_ret);
4174     }
4175   else
4176     {
4177       for (ix = 0;
4178            VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
4179         {
4180           set_current_program_space (SYMTAB_PSPACE (symbol_symtab (fn_sym)));
4181           block = SYMBOL_BLOCK_VALUE (fn_sym);
4182
4183           find_label_symbols_in_block (block, name, fn_sym, completion_mode,
4184                                        &result, label_funcs_ret);
4185         }
4186     }
4187
4188   return result;
4189 }
4190
4191 \f
4192
4193 /* A helper for create_sals_line_offset that handles the 'list_mode' case.  */
4194
4195 static std::vector<symtab_and_line>
4196 decode_digits_list_mode (struct linespec_state *self,
4197                          linespec_p ls,
4198                          struct symtab_and_line val)
4199 {
4200   int ix;
4201   struct symtab *elt;
4202
4203   gdb_assert (self->list_mode);
4204
4205   std::vector<symtab_and_line> values;
4206
4207   for (ix = 0; VEC_iterate (symtab_ptr, ls->file_symtabs, ix, elt);
4208        ++ix)
4209     {
4210       /* The logic above should ensure this.  */
4211       gdb_assert (elt != NULL);
4212
4213       set_current_program_space (SYMTAB_PSPACE (elt));
4214
4215       /* Simplistic search just for the list command.  */
4216       val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
4217       if (val.symtab == NULL)
4218         val.symtab = elt;
4219       val.pspace = SYMTAB_PSPACE (elt);
4220       val.pc = 0;
4221       val.explicit_line = 1;
4222
4223       add_sal_to_sals (self, &values, &val, NULL, 0);
4224     }
4225
4226   return values;
4227 }
4228
4229 /* A helper for create_sals_line_offset that iterates over the symtabs,
4230    adding lines to the VEC.  */
4231
4232 static std::vector<symtab_and_line>
4233 decode_digits_ordinary (struct linespec_state *self,
4234                         linespec_p ls,
4235                         int line,
4236                         struct linetable_entry **best_entry)
4237 {
4238   int ix;
4239   struct symtab *elt;
4240
4241   std::vector<symtab_and_line> sals;
4242   for (ix = 0; VEC_iterate (symtab_ptr, ls->file_symtabs, ix, elt); ++ix)
4243     {
4244       std::vector<CORE_ADDR> pcs;
4245
4246       /* The logic above should ensure this.  */
4247       gdb_assert (elt != NULL);
4248
4249       set_current_program_space (SYMTAB_PSPACE (elt));
4250
4251       pcs = find_pcs_for_symtab_line (elt, line, best_entry);
4252       for (CORE_ADDR pc : pcs)
4253         {
4254           symtab_and_line sal;
4255           sal.pspace = SYMTAB_PSPACE (elt);
4256           sal.symtab = elt;
4257           sal.line = line;
4258           sal.pc = pc;
4259           sals.push_back (std::move (sal));
4260         }
4261     }
4262
4263   return sals;
4264 }
4265
4266 \f
4267
4268 /* Return the line offset represented by VARIABLE.  */
4269
4270 static struct line_offset
4271 linespec_parse_variable (struct linespec_state *self, const char *variable)
4272 {
4273   int index = 0;
4274   const char *p;
4275   struct line_offset offset = {0, LINE_OFFSET_NONE};
4276
4277   p = (variable[1] == '$') ? variable + 2 : variable + 1;
4278   if (*p == '$')
4279     ++p;
4280   while (*p >= '0' && *p <= '9')
4281     ++p;
4282   if (!*p)              /* Reached end of token without hitting non-digit.  */
4283     {
4284       /* We have a value history reference.  */
4285       struct value *val_history;
4286
4287       sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index);
4288       val_history
4289         = access_value_history ((variable[1] == '$') ? -index : index);
4290       if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
4291         error (_("History values used in line "
4292                  "specs must have integer values."));
4293       offset.offset = value_as_long (val_history);
4294     }
4295   else
4296     {
4297       /* Not all digits -- may be user variable/function or a
4298          convenience variable.  */
4299       LONGEST valx;
4300       struct internalvar *ivar;
4301
4302       /* Try it as a convenience variable.  If it is not a convenience
4303          variable, return and allow normal symbol lookup to occur.  */
4304       ivar = lookup_only_internalvar (variable + 1);
4305       if (ivar == NULL)
4306         /* No internal variable with that name.  Mark the offset
4307            as unknown to allow the name to be looked up as a symbol.  */
4308         offset.sign = LINE_OFFSET_UNKNOWN;
4309       else
4310         {
4311           /* We found a valid variable name.  If it is not an integer,
4312              throw an error.  */
4313           if (!get_internalvar_integer (ivar, &valx))
4314             error (_("Convenience variables used in line "
4315                      "specs must have integer values."));
4316           else
4317             offset.offset = valx;
4318         }
4319     }
4320
4321   return offset;
4322 }
4323 \f
4324
4325 /* We've found a minimal symbol MSYMBOL in OBJFILE to associate with our
4326    linespec; return the SAL in RESULT.  This function should return SALs
4327    matching those from find_function_start_sal, otherwise false
4328    multiple-locations breakpoints could be placed.  */
4329
4330 static void
4331 minsym_found (struct linespec_state *self, struct objfile *objfile,
4332               struct minimal_symbol *msymbol,
4333               std::vector<symtab_and_line> *result)
4334 {
4335   struct symtab_and_line sal;
4336
4337   CORE_ADDR func_addr;
4338   if (msymbol_is_function (objfile, msymbol, &func_addr))
4339     {
4340       sal = find_pc_sect_line (func_addr, NULL, 0);
4341
4342       if (self->funfirstline)
4343         {
4344           if (sal.symtab != NULL
4345               && (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab))
4346                   || SYMTAB_LANGUAGE (sal.symtab) == language_asm))
4347             {
4348               struct gdbarch *gdbarch = get_objfile_arch (objfile);
4349
4350               sal.pc = func_addr;
4351               if (gdbarch_skip_entrypoint_p (gdbarch))
4352                 sal.pc = gdbarch_skip_entrypoint (gdbarch, sal.pc);
4353             }
4354           else
4355             skip_prologue_sal (&sal);
4356         }
4357     }
4358   else
4359     {
4360       sal.objfile = objfile;
4361       sal.pc = MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
4362       sal.pspace = current_program_space;
4363     }
4364
4365   sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
4366
4367   if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
4368     add_sal_to_sals (self, result, &sal, MSYMBOL_NATURAL_NAME (msymbol), 0);
4369 }
4370
4371 /* A helper function to classify a minimal_symbol_type according to
4372    priority.  */
4373
4374 static int
4375 classify_mtype (enum minimal_symbol_type t)
4376 {
4377   switch (t)
4378     {
4379     case mst_file_text:
4380     case mst_file_data:
4381     case mst_file_bss:
4382       /* Intermediate priority.  */
4383       return 1;
4384
4385     case mst_solib_trampoline:
4386       /* Lowest priority.  */
4387       return 2;
4388
4389     default:
4390       /* Highest priority.  */
4391       return 0;
4392     }
4393 }
4394
4395 /* Callback for std::sort that sorts symbols by priority.  */
4396
4397 static bool
4398 compare_msyms (const bound_minimal_symbol &a, const bound_minimal_symbol &b)
4399 {
4400   enum minimal_symbol_type ta = MSYMBOL_TYPE (a.minsym);
4401   enum minimal_symbol_type tb = MSYMBOL_TYPE (b.minsym);
4402
4403   return classify_mtype (ta) < classify_mtype (tb);
4404 }
4405
4406 /* Helper for search_minsyms_for_name that adds the symbol to the
4407    result.  */
4408
4409 static void
4410 add_minsym (struct minimal_symbol *minsym, struct objfile *objfile,
4411             struct symtab *symtab, int list_mode,
4412             std::vector<struct bound_minimal_symbol> *msyms)
4413 {
4414   if (symtab != NULL)
4415     {
4416       /* We're looking for a label for which we don't have debug
4417          info.  */
4418       CORE_ADDR func_addr;
4419       if (msymbol_is_function (objfile, minsym, &func_addr))
4420         {
4421           symtab_and_line sal = find_pc_sect_line (func_addr, NULL, 0);
4422
4423           if (symtab != sal.symtab)
4424             return;
4425         }
4426     }
4427
4428   /* Exclude data symbols when looking for breakpoint locations.  */
4429   if (!list_mode && !msymbol_is_function (objfile, minsym))
4430     return;
4431
4432   struct bound_minimal_symbol mo = {minsym, objfile};
4433   msyms->push_back (mo);
4434 }
4435
4436 /* Search for minimal symbols called NAME.  If SEARCH_PSPACE
4437    is not NULL, the search is restricted to just that program
4438    space.
4439
4440    If SYMTAB is NULL, search all objfiles, otherwise
4441    restrict results to the given SYMTAB.  */
4442
4443 static void
4444 search_minsyms_for_name (struct collect_info *info,
4445                          const lookup_name_info &name,
4446                          struct program_space *search_pspace,
4447                          struct symtab *symtab)
4448 {
4449   std::vector<struct bound_minimal_symbol> minsyms;
4450
4451   if (symtab == NULL)
4452     {
4453       struct program_space *pspace;
4454
4455       ALL_PSPACES (pspace)
4456       {
4457         struct objfile *objfile;
4458
4459         if (search_pspace != NULL && search_pspace != pspace)
4460           continue;
4461         if (pspace->executing_startup)
4462           continue;
4463
4464         set_current_program_space (pspace);
4465
4466         ALL_OBJFILES (objfile)
4467         {
4468           iterate_over_minimal_symbols (objfile, name,
4469                                         [&] (struct minimal_symbol *msym)
4470                                           {
4471                                             add_minsym (msym, objfile, nullptr,
4472                                                         info->state->list_mode,
4473                                                         &minsyms);
4474                                           });
4475         }
4476       }
4477     }
4478   else
4479     {
4480       if (search_pspace == NULL || SYMTAB_PSPACE (symtab) == search_pspace)
4481         {
4482           set_current_program_space (SYMTAB_PSPACE (symtab));
4483           iterate_over_minimal_symbols
4484             (SYMTAB_OBJFILE (symtab), name,
4485              [&] (struct minimal_symbol *msym)
4486                {
4487                  add_minsym (msym, SYMTAB_OBJFILE (symtab), symtab,
4488                              info->state->list_mode, &minsyms);
4489                });
4490         }
4491     }
4492
4493   if (!minsyms.empty ())
4494     {
4495       int classification;
4496
4497       std::sort (minsyms.begin (), minsyms.end (), compare_msyms);
4498
4499       /* Now the minsyms are in classification order.  So, we walk
4500          over them and process just the minsyms with the same
4501          classification as the very first minsym in the list.  */
4502       classification = classify_mtype (MSYMBOL_TYPE (minsyms[0].minsym));
4503
4504       for (const struct bound_minimal_symbol &item : minsyms)
4505         {
4506           if (classify_mtype (MSYMBOL_TYPE (item.minsym)) != classification)
4507             break;
4508
4509           VEC_safe_push (bound_minimal_symbol_d,
4510                          info->result.minimal_symbols, &item);
4511         }
4512     }
4513 }
4514
4515 /* A helper function to add all symbols matching NAME to INFO.  If
4516    PSPACE is not NULL, the search is restricted to just that program
4517    space.  */
4518
4519 static void
4520 add_matching_symbols_to_info (const char *name,
4521                               symbol_name_match_type name_match_type,
4522                               enum search_domain search_domain,
4523                               struct collect_info *info,
4524                               struct program_space *pspace)
4525 {
4526   int ix;
4527   struct symtab *elt;
4528
4529   lookup_name_info lookup_name (name, name_match_type);
4530
4531   for (ix = 0; VEC_iterate (symtab_ptr, info->file_symtabs, ix, elt); ++ix)
4532     {
4533       if (elt == NULL)
4534         {
4535           iterate_over_all_matching_symtabs (info->state, lookup_name,
4536                                              VAR_DOMAIN, search_domain,
4537                                              pspace, true, [&] (symbol *sym)
4538             { return info->add_symbol (sym); });
4539           search_minsyms_for_name (info, lookup_name, pspace, NULL);
4540         }
4541       else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
4542         {
4543           int prev_len = VEC_length (symbolp, info->result.symbols);
4544
4545           /* Program spaces that are executing startup should have
4546              been filtered out earlier.  */
4547           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
4548           set_current_program_space (SYMTAB_PSPACE (elt));
4549           iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN,
4550                                     [&] (symbol *sym)
4551             { return info->add_symbol (sym); });
4552
4553           /* If no new symbols were found in this iteration and this symtab
4554              is in assembler, we might actually be looking for a label for
4555              which we don't have debug info.  Check for a minimal symbol in
4556              this case.  */
4557           if (prev_len == VEC_length (symbolp, info->result.symbols)
4558               && elt->language == language_asm)
4559             search_minsyms_for_name (info, lookup_name, pspace, elt);
4560         }
4561     }
4562 }
4563
4564 \f
4565
4566 /* Now come some functions that are called from multiple places within
4567    decode_line_1.  */
4568
4569 static int
4570 symbol_to_sal (struct symtab_and_line *result,
4571                int funfirstline, struct symbol *sym)
4572 {
4573   if (SYMBOL_CLASS (sym) == LOC_BLOCK)
4574     {
4575       *result = find_function_start_sal (sym, funfirstline);
4576       return 1;
4577     }
4578   else
4579     {
4580       if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
4581         {
4582           *result = {};
4583           result->symtab = symbol_symtab (sym);
4584           result->symbol = sym;
4585           result->line = SYMBOL_LINE (sym);
4586           result->pc = SYMBOL_VALUE_ADDRESS (sym);
4587           result->pspace = SYMTAB_PSPACE (result->symtab);
4588           result->explicit_pc = 1;
4589           return 1;
4590         }
4591       else if (funfirstline)
4592         {
4593           /* Nothing.  */
4594         }
4595       else if (SYMBOL_LINE (sym) != 0)
4596         {
4597           /* We know its line number.  */
4598           *result = {};
4599           result->symtab = symbol_symtab (sym);
4600           result->symbol = sym;
4601           result->line = SYMBOL_LINE (sym);
4602           result->pc = SYMBOL_VALUE_ADDRESS (sym);
4603           result->pspace = SYMTAB_PSPACE (result->symtab);
4604           return 1;
4605         }
4606     }
4607
4608   return 0;
4609 }
4610
4611 linespec_result::~linespec_result ()
4612 {
4613   for (linespec_sals &lsal : lsals)
4614     xfree (lsal.canonical);
4615 }
4616
4617 /* Return the quote characters permitted by the linespec parser.  */
4618
4619 const char *
4620 get_gdb_linespec_parser_quote_characters (void)
4621 {
4622   return linespec_quote_characters;
4623 }