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