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