Use gdb::function_view in iterate_over_symtabs & co
[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  */
220
221 static const char * const linespec_keywords[] = { "if", "thread", "task" };
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; i < ARRAY_SIZE (linespec_keywords); ++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; j < ARRAY_SIZE (linespec_keywords); ++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) > 8
692                   /* strlen ("operator") */)
693                 {
694                   const char *p = strstr (start, "operator");
695
696                   if (p != NULL && is_operator_name (p))
697                     {
698                       /* This is an operator name.  Keep going.  */
699                       ++(PARSER_STREAM (parser));
700                       continue;
701                     }
702                 }
703
704               /* Comma terminates the string.  */
705               LS_TOKEN_STOKEN (token).ptr = start;
706               LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
707               return token;
708             }
709
710           /* Advance the stream.  */
711           ++(PARSER_STREAM (parser));
712         }
713     }
714
715   return token;
716 }
717
718 /* Lex a single linespec token from PARSER.  */
719
720 static linespec_token
721 linespec_lexer_lex_one (linespec_parser *parser)
722 {
723   const char *keyword;
724
725   if (parser->lexer.current.type == LSTOKEN_CONSUMED)
726     {
727       /* Skip any whitespace.  */
728       PARSER_STREAM (parser) = skip_spaces_const (PARSER_STREAM (parser));
729
730       /* Check for a keyword, they end the linespec.  */
731       keyword = linespec_lexer_lex_keyword (PARSER_STREAM (parser));
732       if (keyword != NULL)
733         {
734           parser->lexer.current.type = LSTOKEN_KEYWORD;
735           LS_TOKEN_KEYWORD (parser->lexer.current) = keyword;
736           /* We do not advance the stream here intentionally:
737              we would like lexing to stop when a keyword is seen.
738
739              PARSER_STREAM (parser) +=  strlen (keyword);  */
740
741           return parser->lexer.current;
742         }
743
744       /* Handle other tokens.  */
745       switch (*PARSER_STREAM (parser))
746         {
747         case 0:
748           parser->lexer.current.type = LSTOKEN_EOI;
749           break;
750
751         case '+': case '-':
752         case '0': case '1': case '2': case '3': case '4':
753         case '5': case '6': case '7': case '8': case '9':
754            if (!linespec_lexer_lex_number (parser, &(parser->lexer.current)))
755              parser->lexer.current = linespec_lexer_lex_string (parser);
756           break;
757
758         case ':':
759           /* If we have a scope operator, lex the input as a string.
760              Otherwise, return LSTOKEN_COLON.  */
761           if (PARSER_STREAM (parser)[1] == ':')
762             parser->lexer.current = linespec_lexer_lex_string (parser);
763           else
764             {
765               parser->lexer.current.type = LSTOKEN_COLON;
766               ++(PARSER_STREAM (parser));
767             }
768           break;
769
770         case '\'': case '\"':
771           /* Special case: permit quote-enclosed linespecs.  */
772           if (parser->is_quote_enclosed
773               && is_closing_quote_enclosed (PARSER_STREAM (parser)))
774             {
775               ++(PARSER_STREAM (parser));
776               parser->lexer.current.type = LSTOKEN_EOI;
777             }
778           else
779             parser->lexer.current = linespec_lexer_lex_string (parser);
780           break;
781
782         case ',':
783           parser->lexer.current.type = LSTOKEN_COMMA;
784           LS_TOKEN_STOKEN (parser->lexer.current).ptr
785             = PARSER_STREAM (parser);
786           LS_TOKEN_STOKEN (parser->lexer.current).length = 1;
787           ++(PARSER_STREAM (parser));
788           break;
789
790         default:
791           /* If the input is not a number, it must be a string.
792              [Keywords were already considered above.]  */
793           parser->lexer.current = linespec_lexer_lex_string (parser);
794           break;
795         }
796     }
797
798   return parser->lexer.current;
799 }
800
801 /* Consume the current token and return the next token in PARSER's
802    input stream.  */
803
804 static linespec_token
805 linespec_lexer_consume_token (linespec_parser *parser)
806 {
807   parser->lexer.current.type = LSTOKEN_CONSUMED;
808   return linespec_lexer_lex_one (parser);
809 }
810
811 /* Return the next token without consuming the current token.  */
812
813 static linespec_token
814 linespec_lexer_peek_token (linespec_parser *parser)
815 {
816   linespec_token next;
817   const char *saved_stream = PARSER_STREAM (parser);
818   linespec_token saved_token = parser->lexer.current;
819
820   next = linespec_lexer_consume_token (parser);
821   PARSER_STREAM (parser) = saved_stream;
822   parser->lexer.current = saved_token;
823   return next;
824 }
825
826 /* Helper functions.  */
827
828 /* Add SAL to SALS.  */
829
830 static void
831 add_sal_to_sals_basic (struct symtabs_and_lines *sals,
832                        struct symtab_and_line *sal)
833 {
834   ++sals->nelts;
835   sals->sals = XRESIZEVEC (struct symtab_and_line, sals->sals, sals->nelts);
836   sals->sals[sals->nelts - 1] = *sal;
837 }
838
839 /* Add SAL to SALS, and also update SELF->CANONICAL_NAMES to reflect
840    the new sal, if needed.  If not NULL, SYMNAME is the name of the
841    symbol to use when constructing the new canonical name.
842
843    If LITERAL_CANONICAL is non-zero, SYMNAME will be used as the
844    canonical name for the SAL.  */
845
846 static void
847 add_sal_to_sals (struct linespec_state *self,
848                  struct symtabs_and_lines *sals,
849                  struct symtab_and_line *sal,
850                  const char *symname, int literal_canonical)
851 {
852   add_sal_to_sals_basic (sals, sal);
853
854   if (self->canonical)
855     {
856       struct linespec_canonical_name *canonical;
857
858       self->canonical_names = XRESIZEVEC (struct linespec_canonical_name,
859                                           self->canonical_names, sals->nelts);
860       canonical = &self->canonical_names[sals->nelts - 1];
861       if (!literal_canonical && sal->symtab)
862         {
863           symtab_to_fullname (sal->symtab);
864
865           /* Note that the filter doesn't have to be a valid linespec
866              input.  We only apply the ":LINE" treatment to Ada for
867              the time being.  */
868           if (symname != NULL && sal->line != 0
869               && self->language->la_language == language_ada)
870             canonical->suffix = xstrprintf ("%s:%d", symname, sal->line);
871           else if (symname != NULL)
872             canonical->suffix = xstrdup (symname);
873           else
874             canonical->suffix = xstrprintf ("%d", sal->line);
875           canonical->symtab = sal->symtab;
876         }
877       else
878         {
879           if (symname != NULL)
880             canonical->suffix = xstrdup (symname);
881           else
882             canonical->suffix = xstrdup ("<unknown>");
883           canonical->symtab = NULL;
884         }
885     }
886 }
887
888 /* A hash function for address_entry.  */
889
890 static hashval_t
891 hash_address_entry (const void *p)
892 {
893   const struct address_entry *aep = (const struct address_entry *) p;
894   hashval_t hash;
895
896   hash = iterative_hash_object (aep->pspace, 0);
897   return iterative_hash_object (aep->addr, hash);
898 }
899
900 /* An equality function for address_entry.  */
901
902 static int
903 eq_address_entry (const void *a, const void *b)
904 {
905   const struct address_entry *aea = (const struct address_entry *) a;
906   const struct address_entry *aeb = (const struct address_entry *) b;
907
908   return aea->pspace == aeb->pspace && aea->addr == aeb->addr;
909 }
910
911 /* Check whether the address, represented by PSPACE and ADDR, is
912    already in the set.  If so, return 0.  Otherwise, add it and return
913    1.  */
914
915 static int
916 maybe_add_address (htab_t set, struct program_space *pspace, CORE_ADDR addr)
917 {
918   struct address_entry e, *p;
919   void **slot;
920
921   e.pspace = pspace;
922   e.addr = addr;
923   slot = htab_find_slot (set, &e, INSERT);
924   if (*slot)
925     return 0;
926
927   p = XNEW (struct address_entry);
928   memcpy (p, &e, sizeof (struct address_entry));
929   *slot = p;
930
931   return 1;
932 }
933
934 /* A helper that walks over all matching symtabs in all objfiles and
935    calls CALLBACK for each symbol matching NAME.  If SEARCH_PSPACE is
936    not NULL, then the search is restricted to just that program
937    space.  If INCLUDE_INLINE is true then symbols representing
938    inlined instances of functions will be included in the result.  */
939
940 static void
941 iterate_over_all_matching_symtabs
942   (struct linespec_state *state, const char *name, const domain_enum domain,
943    struct program_space *search_pspace, bool include_inline,
944    gdb::function_view<symbol_found_callback_ftype> callback)
945 {
946   struct objfile *objfile;
947   struct program_space *pspace;
948
949   /* The routine to be used for comparison.  */
950   symbol_name_cmp_ftype symbol_name_cmp
951     = (state->language->la_get_symbol_name_cmp != NULL
952        ? state->language->la_get_symbol_name_cmp (name)
953        : strcmp_iw);
954
955   ALL_PSPACES (pspace)
956   {
957     if (search_pspace != NULL && search_pspace != pspace)
958       continue;
959     if (pspace->executing_startup)
960       continue;
961
962     set_current_program_space (pspace);
963
964     ALL_OBJFILES (objfile)
965     {
966       struct compunit_symtab *cu;
967
968       if (objfile->sf)
969         objfile->sf->qf->expand_symtabs_matching
970           (objfile,
971            NULL,
972            [&] (const char *symbol_name)
973            {
974              return symbol_name_cmp (symbol_name, name) == 0;
975            },
976            NULL,
977            ALL_DOMAIN);
978
979       ALL_OBJFILE_COMPUNITS (objfile, cu)
980         {
981           struct symtab *symtab = COMPUNIT_FILETABS (cu);
982
983           iterate_over_file_blocks (symtab, name, domain, callback);
984
985           if (include_inline)
986             {
987               struct block *block;
988               int i;
989
990               for (i = FIRST_LOCAL_BLOCK;
991                    i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab));
992                    i++)
993                 {
994                   block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i);
995                   state->language->la_iterate_over_symbols
996                     (block, name, domain, [&] (symbol *sym)
997                      {
998                        /* Restrict calls to CALLBACK to symbols
999                           representing inline symbols only.  */
1000                        if (SYMBOL_INLINED (sym))
1001                          return callback (sym);
1002                        return true;
1003                      });
1004                 }
1005             }
1006         }
1007     }
1008   }
1009 }
1010
1011 /* Returns the block to be used for symbol searches from
1012    the current location.  */
1013
1014 static const struct block *
1015 get_current_search_block (void)
1016 {
1017   const struct block *block;
1018   enum language save_language;
1019
1020   /* get_selected_block can change the current language when there is
1021      no selected frame yet.  */
1022   save_language = current_language->la_language;
1023   block = get_selected_block (0);
1024   set_language (save_language);
1025
1026   return block;
1027 }
1028
1029 /* Iterate over static and global blocks.  */
1030
1031 static void
1032 iterate_over_file_blocks
1033   (struct symtab *symtab, const char *name, domain_enum domain,
1034    gdb::function_view<symbol_found_callback_ftype> callback)
1035 {
1036   struct block *block;
1037
1038   for (block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
1039        block != NULL;
1040        block = BLOCK_SUPERBLOCK (block))
1041     LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback);
1042 }
1043
1044 /* A helper for find_method.  This finds all methods in type T which
1045    match NAME.  It adds matching symbol names to RESULT_NAMES, and
1046    adds T's direct superclasses to SUPERCLASSES.  */
1047
1048 static void
1049 find_methods (struct type *t, const char *name,
1050               VEC (const_char_ptr) **result_names,
1051               VEC (typep) **superclasses)
1052 {
1053   int ibase;
1054   const char *class_name = type_name_no_tag (t);
1055
1056   /* Ignore this class if it doesn't have a name.  This is ugly, but
1057      unless we figure out how to get the physname without the name of
1058      the class, then the loop can't do any good.  */
1059   if (class_name)
1060     {
1061       int method_counter;
1062
1063       t = check_typedef (t);
1064
1065       /* Loop over each method name.  At this level, all overloads of a name
1066          are counted as a single name.  There is an inner loop which loops over
1067          each overload.  */
1068
1069       for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1070            method_counter >= 0;
1071            --method_counter)
1072         {
1073           const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1074           char dem_opname[64];
1075
1076           if (startswith (method_name, "__") ||
1077               startswith (method_name, "op") ||
1078               startswith (method_name, "type"))
1079             {
1080               if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
1081                 method_name = dem_opname;
1082               else if (cplus_demangle_opname (method_name, dem_opname, 0))
1083                 method_name = dem_opname;
1084             }
1085
1086           if (strcmp_iw (method_name, name) == 0)
1087             {
1088               int field_counter;
1089
1090               for (field_counter = (TYPE_FN_FIELDLIST_LENGTH (t, method_counter)
1091                                     - 1);
1092                    field_counter >= 0;
1093                    --field_counter)
1094                 {
1095                   struct fn_field *f;
1096                   const char *phys_name;
1097
1098                   f = TYPE_FN_FIELDLIST1 (t, method_counter);
1099                   if (TYPE_FN_FIELD_STUB (f, field_counter))
1100                     continue;
1101                   phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1102                   VEC_safe_push (const_char_ptr, *result_names, phys_name);
1103                 }
1104             }
1105         }
1106     }
1107
1108   for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1109     VEC_safe_push (typep, *superclasses, TYPE_BASECLASS (t, ibase));
1110 }
1111
1112 /* Find an instance of the character C in the string S that is outside
1113    of all parenthesis pairs, single-quoted strings, and double-quoted
1114    strings.  Also, ignore the char within a template name, like a ','
1115    within foo<int, int>.  */
1116
1117 const char *
1118 find_toplevel_char (const char *s, char c)
1119 {
1120   int quoted = 0;               /* zero if we're not in quotes;
1121                                    '"' if we're in a double-quoted string;
1122                                    '\'' if we're in a single-quoted string.  */
1123   int depth = 0;                /* Number of unclosed parens we've seen.  */
1124   const char *scan;
1125
1126   for (scan = s; *scan; scan++)
1127     {
1128       if (quoted)
1129         {
1130           if (*scan == quoted)
1131             quoted = 0;
1132           else if (*scan == '\\' && *(scan + 1))
1133             scan++;
1134         }
1135       else if (*scan == c && ! quoted && depth == 0)
1136         return scan;
1137       else if (*scan == '"' || *scan == '\'')
1138         quoted = *scan;
1139       else if (*scan == '(' || *scan == '<')
1140         depth++;
1141       else if ((*scan == ')' || *scan == '>') && depth > 0)
1142         depth--;
1143     }
1144
1145   return 0;
1146 }
1147
1148 /* The string equivalent of find_toplevel_char.  Returns a pointer
1149    to the location of NEEDLE in HAYSTACK, ignoring any occurrences
1150    inside "()" and "<>".  Returns NULL if NEEDLE was not found.  */
1151
1152 static const char *
1153 find_toplevel_string (const char *haystack, const char *needle)
1154 {
1155   const char *s = haystack;
1156
1157   do
1158     {
1159       s = find_toplevel_char (s, *needle);
1160
1161       if (s != NULL)
1162         {
1163           /* Found first char in HAYSTACK;  check rest of string.  */
1164           if (startswith (s, needle))
1165             return s;
1166
1167           /* Didn't find it; loop over HAYSTACK, looking for the next
1168              instance of the first character of NEEDLE.  */
1169           ++s;
1170         }
1171     }
1172   while (s != NULL && *s != '\0');
1173
1174   /* NEEDLE was not found in HAYSTACK.  */
1175   return NULL;
1176 }
1177
1178 /* Convert CANONICAL to its string representation using
1179    symtab_to_fullname for SYMTAB.  The caller must xfree the result.  */
1180
1181 static char *
1182 canonical_to_fullform (const struct linespec_canonical_name *canonical)
1183 {
1184   if (canonical->symtab == NULL)
1185     return xstrdup (canonical->suffix);
1186   else
1187     return xstrprintf ("%s:%s", symtab_to_fullname (canonical->symtab),
1188                        canonical->suffix);
1189 }
1190
1191 /* Given FILTERS, a list of canonical names, filter the sals in RESULT
1192    and store the result in SELF->CANONICAL.  */
1193
1194 static void
1195 filter_results (struct linespec_state *self,
1196                 struct symtabs_and_lines *result,
1197                 VEC (const_char_ptr) *filters)
1198 {
1199   int i;
1200   const char *name;
1201
1202   for (i = 0; VEC_iterate (const_char_ptr, filters, i, name); ++i)
1203     {
1204       struct linespec_sals lsal;
1205       int j;
1206
1207       memset (&lsal, 0, sizeof (lsal));
1208
1209       for (j = 0; j < result->nelts; ++j)
1210         {
1211           const struct linespec_canonical_name *canonical;
1212           char *fullform;
1213           struct cleanup *cleanup;
1214
1215           canonical = &self->canonical_names[j];
1216           fullform = canonical_to_fullform (canonical);
1217           cleanup = make_cleanup (xfree, fullform);
1218
1219           if (strcmp (name, fullform) == 0)
1220             add_sal_to_sals_basic (&lsal.sals, &result->sals[j]);
1221
1222           do_cleanups (cleanup);
1223         }
1224
1225       if (lsal.sals.nelts > 0)
1226         {
1227           lsal.canonical = xstrdup (name);
1228           VEC_safe_push (linespec_sals, self->canonical->sals, &lsal);
1229         }
1230     }
1231
1232   self->canonical->pre_expanded = 0;
1233 }
1234
1235 /* Store RESULT into SELF->CANONICAL.  */
1236
1237 static void
1238 convert_results_to_lsals (struct linespec_state *self,
1239                           struct symtabs_and_lines *result)
1240 {
1241   struct linespec_sals lsal;
1242
1243   lsal.canonical = NULL;
1244   lsal.sals = *result;
1245   VEC_safe_push (linespec_sals, self->canonical->sals, &lsal);
1246 }
1247
1248 /* A structure that contains two string representations of a struct
1249    linespec_canonical_name:
1250      - one where the the symtab's fullname is used;
1251      - one where the filename followed the "set filename-display"
1252        setting.  */
1253
1254 struct decode_line_2_item
1255 {
1256   /* The form using symtab_to_fullname.
1257      It must be xfree'ed after use.  */
1258   char *fullform;
1259
1260   /* The form using symtab_to_filename_for_display.
1261      It must be xfree'ed after use.  */
1262   char *displayform;
1263
1264   /* Field is initialized to zero and it is set to one if the user
1265      requested breakpoint for this entry.  */
1266   unsigned int selected : 1;
1267 };
1268
1269 /* Helper for qsort to sort decode_line_2_item entries by DISPLAYFORM and
1270    secondarily by FULLFORM.  */
1271
1272 static int
1273 decode_line_2_compare_items (const void *ap, const void *bp)
1274 {
1275   const struct decode_line_2_item *a = (const struct decode_line_2_item *) ap;
1276   const struct decode_line_2_item *b = (const struct decode_line_2_item *) bp;
1277   int retval;
1278
1279   retval = strcmp (a->displayform, b->displayform);
1280   if (retval != 0)
1281     return retval;
1282
1283   return strcmp (a->fullform, b->fullform);
1284 }
1285
1286 /* Handle multiple results in RESULT depending on SELECT_MODE.  This
1287    will either return normally, throw an exception on multiple
1288    results, or present a menu to the user.  On return, the SALS vector
1289    in SELF->CANONICAL is set up properly.  */
1290
1291 static void
1292 decode_line_2 (struct linespec_state *self,
1293                struct symtabs_and_lines *result,
1294                const char *select_mode)
1295 {
1296   char *args, *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 lione 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   canon = state->canonical->location
1753     = new_explicit_location (&ls->explicit_loc);
1754   explicit_loc = get_explicit_location (canon);
1755
1756   if (explicit_loc->label_name != NULL)
1757     {
1758       state->canonical->special_display = 1;
1759
1760       if (explicit_loc->function_name == NULL)
1761         {
1762           struct symbol *s;
1763
1764           /* No function was specified, so add the symbol name.  */
1765           gdb_assert (ls->labels.function_symbols != NULL
1766                       && (VEC_length (symbolp, ls->labels.function_symbols)
1767                           == 1));
1768           s = VEC_index (symbolp, ls->labels.function_symbols, 0);
1769           explicit_loc->function_name = xstrdup (SYMBOL_NATURAL_NAME (s));
1770         }
1771     }
1772
1773   /* If this location originally came from a linespec, save a string
1774      representation of it for display and saving to file.  */
1775   if (state->is_linespec)
1776     {
1777       char *linespec = explicit_location_to_linespec (explicit_loc);
1778
1779       set_event_location_string (canon, linespec);
1780       xfree (linespec);
1781     }
1782 }
1783
1784 /* Given a line offset in LS, construct the relevant SALs.  */
1785
1786 static struct symtabs_and_lines
1787 create_sals_line_offset (struct linespec_state *self,
1788                          linespec_p ls)
1789 {
1790   struct symtabs_and_lines values;
1791   struct symtab_and_line val;
1792   int use_default = 0;
1793
1794   init_sal (&val);
1795   values.sals = NULL;
1796   values.nelts = 0;
1797
1798   /* This is where we need to make sure we have good defaults.
1799      We must guarantee that this section of code is never executed
1800      when we are called with just a function name, since
1801      set_default_source_symtab_and_line uses
1802      select_source_symtab that calls us with such an argument.  */
1803
1804   if (VEC_length (symtab_ptr, ls->file_symtabs) == 1
1805       && VEC_index (symtab_ptr, ls->file_symtabs, 0) == NULL)
1806     {
1807       const char *fullname;
1808
1809       set_current_program_space (self->program_space);
1810
1811       /* Make sure we have at least a default source line.  */
1812       set_default_source_symtab_and_line ();
1813       initialize_defaults (&self->default_symtab, &self->default_line);
1814       fullname = symtab_to_fullname (self->default_symtab);
1815       VEC_pop (symtab_ptr, ls->file_symtabs);
1816       VEC_free (symtab_ptr, ls->file_symtabs);
1817       ls->file_symtabs = collect_symtabs_from_filename (fullname,
1818                                                         self->search_pspace);
1819       use_default = 1;
1820     }
1821
1822   val.line = ls->explicit_loc.line_offset.offset;
1823   switch (ls->explicit_loc.line_offset.sign)
1824     {
1825     case LINE_OFFSET_PLUS:
1826       if (ls->explicit_loc.line_offset.offset == 0)
1827         val.line = 5;
1828       if (use_default)
1829         val.line = self->default_line + val.line;
1830       break;
1831
1832     case LINE_OFFSET_MINUS:
1833       if (ls->explicit_loc.line_offset.offset == 0)
1834         val.line = 15;
1835       if (use_default)
1836         val.line = self->default_line - val.line;
1837       else
1838         val.line = -val.line;
1839       break;
1840
1841     case LINE_OFFSET_NONE:
1842       break;                    /* No need to adjust val.line.  */
1843     }
1844
1845   if (self->list_mode)
1846     decode_digits_list_mode (self, ls, &values, val);
1847   else
1848     {
1849       struct linetable_entry *best_entry = NULL;
1850       int *filter;
1851       const struct block **blocks;
1852       struct cleanup *cleanup;
1853       struct symtabs_and_lines intermediate_results;
1854       int i, j;
1855
1856       intermediate_results.sals = NULL;
1857       intermediate_results.nelts = 0;
1858
1859       decode_digits_ordinary (self, ls, val.line, &intermediate_results,
1860                               &best_entry);
1861       if (intermediate_results.nelts == 0 && best_entry != NULL)
1862         decode_digits_ordinary (self, ls, best_entry->line,
1863                                 &intermediate_results, &best_entry);
1864
1865       cleanup = make_cleanup (xfree, intermediate_results.sals);
1866
1867       /* For optimized code, the compiler can scatter one source line
1868          across disjoint ranges of PC values, even when no duplicate
1869          functions or inline functions are involved.  For example,
1870          'for (;;)' inside a non-template, non-inline, and non-ctor-or-dtor
1871          function can result in two PC ranges.  In this case, we don't
1872          want to set a breakpoint on the first PC of each range.  To filter
1873          such cases, we use containing blocks -- for each PC found
1874          above, we see if there are other PCs that are in the same
1875          block.  If yes, the other PCs are filtered out.  */
1876
1877       filter = XNEWVEC (int, intermediate_results.nelts);
1878       make_cleanup (xfree, filter);
1879       blocks = XNEWVEC (const struct block *, intermediate_results.nelts);
1880       make_cleanup (xfree, blocks);
1881
1882       for (i = 0; i < intermediate_results.nelts; ++i)
1883         {
1884           set_current_program_space (intermediate_results.sals[i].pspace);
1885
1886           filter[i] = 1;
1887           blocks[i] = block_for_pc_sect (intermediate_results.sals[i].pc,
1888                                          intermediate_results.sals[i].section);
1889         }
1890
1891       for (i = 0; i < intermediate_results.nelts; ++i)
1892         {
1893           if (blocks[i] != NULL)
1894             for (j = i + 1; j < intermediate_results.nelts; ++j)
1895               {
1896                 if (blocks[j] == blocks[i])
1897                   {
1898                     filter[j] = 0;
1899                     break;
1900                   }
1901               }
1902         }
1903
1904       for (i = 0; i < intermediate_results.nelts; ++i)
1905         if (filter[i])
1906           {
1907             struct symbol *sym = (blocks[i]
1908                                   ? block_containing_function (blocks[i])
1909                                   : NULL);
1910
1911             if (self->funfirstline)
1912               skip_prologue_sal (&intermediate_results.sals[i]);
1913             /* Make sure the line matches the request, not what was
1914                found.  */
1915             intermediate_results.sals[i].line = val.line;
1916             add_sal_to_sals (self, &values, &intermediate_results.sals[i],
1917                              sym ? SYMBOL_NATURAL_NAME (sym) : NULL, 0);
1918           }
1919
1920       do_cleanups (cleanup);
1921     }
1922
1923   if (values.nelts == 0)
1924     {
1925       if (ls->explicit_loc.source_filename)
1926         throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
1927                      val.line, ls->explicit_loc.source_filename);
1928       else
1929         throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
1930                      val.line);
1931     }
1932
1933   return values;
1934 }
1935
1936 /* Convert the given ADDRESS into SaLs.  */
1937
1938 static struct symtabs_and_lines
1939 convert_address_location_to_sals (struct linespec_state *self,
1940                                   CORE_ADDR address)
1941 {
1942   struct symtab_and_line sal;
1943   struct symtabs_and_lines sals = {NULL, 0};
1944
1945   sal = find_pc_line (address, 0);
1946   sal.pc = address;
1947   sal.section = find_pc_overlay (address);
1948   sal.explicit_pc = 1;
1949   add_sal_to_sals (self, &sals, &sal, core_addr_to_string (address), 1);
1950
1951   return sals;
1952 }
1953
1954 /* Create and return SALs from the linespec LS.  */
1955
1956 static struct symtabs_and_lines
1957 convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
1958 {
1959   struct symtabs_and_lines sals = {NULL, 0};
1960
1961   if (ls->labels.label_symbols != NULL)
1962     {
1963       /* We have just a bunch of functions/methods or labels.  */
1964       int i;
1965       struct symtab_and_line sal;
1966       struct symbol *sym;
1967
1968       for (i = 0; VEC_iterate (symbolp, ls->labels.label_symbols, i, sym); ++i)
1969         {
1970           struct program_space *pspace = SYMTAB_PSPACE (symbol_symtab (sym));
1971
1972           if (symbol_to_sal (&sal, state->funfirstline, sym)
1973               && maybe_add_address (state->addr_set, pspace, sal.pc))
1974             add_sal_to_sals (state, &sals, &sal,
1975                              SYMBOL_NATURAL_NAME (sym), 0);
1976         }
1977     }
1978   else if (ls->function_symbols != NULL || ls->minimal_symbols != NULL)
1979     {
1980       /* We have just a bunch of functions and/or methods.  */
1981       int i;
1982       struct symtab_and_line sal;
1983       struct symbol *sym;
1984       bound_minimal_symbol_d *elem;
1985       struct program_space *pspace;
1986
1987       if (ls->function_symbols != NULL)
1988         {
1989           /* Sort symbols so that symbols with the same program space are next
1990              to each other.  */
1991           qsort (VEC_address (symbolp, ls->function_symbols),
1992                  VEC_length (symbolp, ls->function_symbols),
1993                  sizeof (symbolp), compare_symbols);
1994
1995           for (i = 0; VEC_iterate (symbolp, ls->function_symbols, i, sym); ++i)
1996             {
1997               pspace = SYMTAB_PSPACE (symbol_symtab (sym));
1998               set_current_program_space (pspace);
1999               if (symbol_to_sal (&sal, state->funfirstline, sym)
2000                   && maybe_add_address (state->addr_set, pspace, sal.pc))
2001                 add_sal_to_sals (state, &sals, &sal,
2002                                  SYMBOL_NATURAL_NAME (sym), 0);
2003             }
2004         }
2005
2006       if (ls->minimal_symbols != NULL)
2007         {
2008           /* Sort minimal symbols by program space, too.  */
2009           qsort (VEC_address (bound_minimal_symbol_d, ls->minimal_symbols),
2010                  VEC_length (bound_minimal_symbol_d, ls->minimal_symbols),
2011                  sizeof (bound_minimal_symbol_d), compare_msymbols);
2012
2013           for (i = 0;
2014                VEC_iterate (bound_minimal_symbol_d, ls->minimal_symbols,
2015                             i, elem);
2016                ++i)
2017             {
2018               pspace = elem->objfile->pspace;
2019               set_current_program_space (pspace);
2020               minsym_found (state, elem->objfile, elem->minsym, &sals);
2021             }
2022         }
2023     }
2024   else if (ls->explicit_loc.line_offset.sign != LINE_OFFSET_UNKNOWN)
2025     {
2026       /* Only an offset was specified.  */
2027         sals = create_sals_line_offset (state, ls);
2028
2029         /* Make sure we have a filename for canonicalization.  */
2030         if (ls->explicit_loc.source_filename == NULL)
2031           {
2032             const char *fullname = symtab_to_fullname (state->default_symtab);
2033
2034             /* It may be more appropriate to keep DEFAULT_SYMTAB in its symtab
2035                form so that displaying SOURCE_FILENAME can follow the current
2036                FILENAME_DISPLAY_STRING setting.  But as it is used only rarely
2037                it has been kept for code simplicity only in absolute form.  */
2038             ls->explicit_loc.source_filename = xstrdup (fullname);
2039           }
2040     }
2041   else
2042     {
2043       /* We haven't found any results...  */
2044       return sals;
2045     }
2046
2047   canonicalize_linespec (state, ls);
2048
2049   if (sals.nelts > 0 && state->canonical != NULL)
2050     state->canonical->pre_expanded = 1;
2051
2052   return sals;
2053 }
2054
2055 /* Convert the explicit location EXPLICIT_LOC into SaLs.  */
2056
2057 static struct symtabs_and_lines
2058 convert_explicit_location_to_sals (struct linespec_state *self,
2059                                    linespec_p result,
2060                                    const struct explicit_location *explicit_loc)
2061 {
2062   VEC (symbolp) *symbols, *labels;
2063   VEC (bound_minimal_symbol_d) *minimal_symbols;
2064
2065   if (explicit_loc->source_filename != NULL)
2066     {
2067       TRY
2068         {
2069           result->file_symtabs
2070             = symtabs_from_filename (explicit_loc->source_filename,
2071                                      self->search_pspace);
2072         }
2073       CATCH (except, RETURN_MASK_ERROR)
2074         {
2075           source_file_not_found_error (explicit_loc->source_filename);
2076         }
2077       END_CATCH
2078       result->explicit_loc.source_filename
2079         = xstrdup (explicit_loc->source_filename);
2080     }
2081   else
2082     {
2083       /* A NULL entry means to use the default symtab.  */
2084       VEC_safe_push (symtab_ptr, result->file_symtabs, NULL);
2085     }
2086
2087   if (explicit_loc->function_name != NULL)
2088     {
2089       find_linespec_symbols (self, result->file_symtabs,
2090                              explicit_loc->function_name, &symbols,
2091                              &minimal_symbols);
2092
2093       if (symbols == NULL && minimal_symbols == NULL)
2094         symbol_not_found_error (explicit_loc->function_name,
2095                                 result->explicit_loc.source_filename);
2096
2097       result->explicit_loc.function_name
2098         = xstrdup (explicit_loc->function_name);
2099       result->function_symbols = symbols;
2100       result->minimal_symbols = minimal_symbols;
2101     }
2102
2103   if (explicit_loc->label_name != NULL)
2104     {
2105       symbols = NULL;
2106       labels = find_label_symbols (self, result->function_symbols,
2107                                    &symbols, explicit_loc->label_name);
2108
2109       if (labels == NULL)
2110         undefined_label_error (result->explicit_loc.function_name,
2111                                explicit_loc->label_name);
2112
2113       result->explicit_loc.label_name = xstrdup (explicit_loc->label_name);
2114       result->labels.label_symbols = labels;
2115       result->labels.function_symbols = symbols;
2116     }
2117
2118   if (explicit_loc->line_offset.sign != LINE_OFFSET_UNKNOWN)
2119     result->explicit_loc.line_offset = explicit_loc->line_offset;
2120
2121    return convert_linespec_to_sals (self, result);
2122 }
2123
2124 /* Parse a string that specifies a linespec.
2125
2126    The basic grammar of linespecs:
2127
2128    linespec -> var_spec | basic_spec
2129    var_spec -> '$' (STRING | NUMBER)
2130
2131    basic_spec -> file_offset_spec | function_spec | label_spec
2132    file_offset_spec -> opt_file_spec offset_spec
2133    function_spec -> opt_file_spec function_name_spec opt_label_spec
2134    label_spec -> label_name_spec
2135
2136    opt_file_spec -> "" | file_name_spec ':'
2137    opt_label_spec -> "" | ':' label_name_spec
2138
2139    file_name_spec -> STRING
2140    function_name_spec -> STRING
2141    label_name_spec -> STRING
2142    function_name_spec -> STRING
2143    offset_spec -> NUMBER
2144                -> '+' NUMBER
2145                -> '-' NUMBER
2146
2147    This may all be followed by several keywords such as "if EXPR",
2148    which we ignore.
2149
2150    A comma will terminate parsing.
2151
2152    The function may be an undebuggable function found in minimal symbol table.
2153
2154    If the argument FUNFIRSTLINE is nonzero, we want the first line
2155    of real code inside a function when a function is specified, and it is
2156    not OK to specify a variable or type to get its line number.
2157
2158    DEFAULT_SYMTAB specifies the file to use if none is specified.
2159    It defaults to current_source_symtab.
2160    DEFAULT_LINE specifies the line number to use for relative
2161    line numbers (that start with signs).  Defaults to current_source_line.
2162    If CANONICAL is non-NULL, store an array of strings containing the canonical
2163    line specs there if necessary.  Currently overloaded member functions and
2164    line numbers or static functions without a filename yield a canonical
2165    line spec.  The array and the line spec strings are allocated on the heap,
2166    it is the callers responsibility to free them.
2167
2168    Note that it is possible to return zero for the symtab
2169    if no file is validly specified.  Callers must check that.
2170    Also, the line number returned may be invalid.  */
2171
2172 /* Parse the linespec in ARG.  */
2173
2174 static struct symtabs_and_lines
2175 parse_linespec (linespec_parser *parser, const char *arg)
2176 {
2177   linespec_token token;
2178   struct symtabs_and_lines values;
2179   struct gdb_exception file_exception = exception_none;
2180   struct cleanup *cleanup;
2181
2182   /* A special case to start.  It has become quite popular for
2183      IDEs to work around bugs in the previous parser by quoting
2184      the entire linespec, so we attempt to deal with this nicely.  */
2185   parser->is_quote_enclosed = 0;
2186   if (!is_ada_operator (arg)
2187       && strchr (linespec_quote_characters, *arg) != NULL)
2188     {
2189       const char *end;
2190
2191       end = skip_quote_char (arg + 1, *arg);
2192       if (end != NULL && is_closing_quote_enclosed (end))
2193         {
2194           /* Here's the special case.  Skip ARG past the initial
2195              quote.  */
2196           ++arg;
2197           parser->is_quote_enclosed = 1;
2198         }
2199     }
2200
2201   parser->lexer.saved_arg = arg;
2202   parser->lexer.stream = arg;
2203
2204   /* Initialize the default symtab and line offset.  */
2205   initialize_defaults (&PARSER_STATE (parser)->default_symtab,
2206                        &PARSER_STATE (parser)->default_line);
2207
2208   /* Objective-C shortcut.  */
2209   values = decode_objc (PARSER_STATE (parser), PARSER_RESULT (parser), arg);
2210   if (values.sals != NULL)
2211     return values;
2212
2213   /* Start parsing.  */
2214
2215   /* Get the first token.  */
2216   token = linespec_lexer_lex_one (parser);
2217
2218   /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER.  */
2219   if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
2220     {
2221       char *var;
2222
2223       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2224       VEC_safe_push (symtab_ptr, PARSER_RESULT (parser)->file_symtabs, NULL);
2225
2226       /* User specified a convenience variable or history value.  */
2227       var = copy_token_string (token);
2228       cleanup = make_cleanup (xfree, var);
2229       PARSER_EXPLICIT (parser)->line_offset
2230         = linespec_parse_variable (PARSER_STATE (parser), var);
2231       do_cleanups (cleanup);
2232
2233       /* If a line_offset wasn't found (VAR is the name of a user
2234          variable/function), then skip to normal symbol processing.  */
2235       if (PARSER_EXPLICIT (parser)->line_offset.sign != LINE_OFFSET_UNKNOWN)
2236         {
2237           /* Consume this token.  */
2238           linespec_lexer_consume_token (parser);
2239
2240           goto convert_to_sals;
2241         }
2242     }
2243   else if (token.type != LSTOKEN_STRING && token.type != LSTOKEN_NUMBER)
2244     unexpected_linespec_error (parser);
2245
2246   /* Shortcut: If the next token is not LSTOKEN_COLON, we know that
2247      this token cannot represent a filename.  */
2248   token = linespec_lexer_peek_token (parser);
2249
2250   if (token.type == LSTOKEN_COLON)
2251     {
2252       char *user_filename;
2253
2254       /* Get the current token again and extract the filename.  */
2255       token = linespec_lexer_lex_one (parser);
2256       user_filename = copy_token_string (token);
2257
2258       /* Check if the input is a filename.  */
2259       TRY
2260         {
2261           PARSER_RESULT (parser)->file_symtabs
2262             = symtabs_from_filename (user_filename,
2263                                      PARSER_STATE (parser)->search_pspace);
2264         }
2265       CATCH (ex, RETURN_MASK_ERROR)
2266         {
2267           file_exception = ex;
2268         }
2269       END_CATCH
2270
2271       if (file_exception.reason >= 0)
2272         {
2273           /* Symtabs were found for the file.  Record the filename.  */
2274           PARSER_EXPLICIT (parser)->source_filename = user_filename;
2275
2276           /* Get the next token.  */
2277           token = linespec_lexer_consume_token (parser);
2278
2279           /* This is LSTOKEN_COLON; consume it.  */
2280           linespec_lexer_consume_token (parser);
2281         }
2282       else
2283         {
2284           /* No symtabs found -- discard user_filename.  */
2285           xfree (user_filename);
2286
2287           /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2288           VEC_safe_push (symtab_ptr, PARSER_RESULT (parser)->file_symtabs, NULL);
2289         }
2290     }
2291   /* If the next token is not EOI, KEYWORD, or COMMA, issue an error.  */
2292   else if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD
2293            && token.type != LSTOKEN_COMMA)
2294     {
2295       /* TOKEN is the _next_ token, not the one currently in the parser.
2296          Consuming the token will give the correct error message.  */
2297       linespec_lexer_consume_token (parser);
2298       unexpected_linespec_error (parser);
2299     }
2300   else
2301     {
2302       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2303       VEC_safe_push (symtab_ptr, PARSER_RESULT (parser)->file_symtabs, NULL);
2304     }
2305
2306   /* Parse the rest of the linespec.  */
2307   linespec_parse_basic (parser);
2308
2309   if (PARSER_RESULT (parser)->function_symbols == NULL
2310       && PARSER_RESULT (parser)->labels.label_symbols == NULL
2311       && PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN
2312       && PARSER_RESULT (parser)->minimal_symbols == NULL)
2313     {
2314       /* The linespec didn't parse.  Re-throw the file exception if
2315          there was one.  */
2316       if (file_exception.reason < 0)
2317         throw_exception (file_exception);
2318
2319       /* Otherwise, the symbol is not found.  */
2320       symbol_not_found_error (PARSER_EXPLICIT (parser)->function_name,
2321                               PARSER_EXPLICIT (parser)->source_filename);
2322     }
2323
2324  convert_to_sals:
2325
2326   /* Get the last token and record how much of the input was parsed,
2327      if necessary.  */
2328   token = linespec_lexer_lex_one (parser);
2329   if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD)
2330     PARSER_STREAM (parser) = LS_TOKEN_STOKEN (token).ptr;
2331
2332   /* Convert the data in PARSER_RESULT to SALs.  */
2333   values = convert_linespec_to_sals (PARSER_STATE (parser),
2334                                      PARSER_RESULT (parser));
2335
2336   return values;
2337 }
2338
2339
2340 /* A constructor for linespec_state.  */
2341
2342 static void
2343 linespec_state_constructor (struct linespec_state *self,
2344                             int flags, const struct language_defn *language,
2345                             struct program_space *search_pspace,
2346                             struct symtab *default_symtab,
2347                             int default_line,
2348                             struct linespec_result *canonical)
2349 {
2350   memset (self, 0, sizeof (*self));
2351   self->language = language;
2352   self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
2353   self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
2354   self->search_pspace = search_pspace;
2355   self->default_symtab = default_symtab;
2356   self->default_line = default_line;
2357   self->canonical = canonical;
2358   self->program_space = current_program_space;
2359   self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
2360                                       xfree, xcalloc, xfree);
2361   self->is_linespec = 0;
2362 }
2363
2364 /* Initialize a new linespec parser.  */
2365
2366 static void
2367 linespec_parser_new (linespec_parser *parser,
2368                      int flags, const struct language_defn *language,
2369                      struct program_space *search_pspace,
2370                      struct symtab *default_symtab,
2371                      int default_line,
2372                      struct linespec_result *canonical)
2373 {
2374   memset (parser, 0, sizeof (linespec_parser));
2375   parser->lexer.current.type = LSTOKEN_CONSUMED;
2376   memset (PARSER_RESULT (parser), 0, sizeof (struct linespec));
2377   PARSER_EXPLICIT (parser)->line_offset.sign = LINE_OFFSET_UNKNOWN;
2378   linespec_state_constructor (PARSER_STATE (parser), flags, language,
2379                               search_pspace,
2380                               default_symtab, default_line, canonical);
2381 }
2382
2383 /* A destructor for linespec_state.  */
2384
2385 static void
2386 linespec_state_destructor (struct linespec_state *self)
2387 {
2388   htab_delete (self->addr_set);
2389 }
2390
2391 /* Delete a linespec parser.  */
2392
2393 static void
2394 linespec_parser_delete (void *arg)
2395 {
2396   linespec_parser *parser = (linespec_parser *) arg;
2397
2398   xfree (PARSER_EXPLICIT (parser)->source_filename);
2399   xfree (PARSER_EXPLICIT (parser)->label_name);
2400   xfree (PARSER_EXPLICIT (parser)->function_name);
2401
2402   if (PARSER_RESULT (parser)->file_symtabs != NULL)
2403     VEC_free (symtab_ptr, PARSER_RESULT (parser)->file_symtabs);
2404
2405   if (PARSER_RESULT (parser)->function_symbols != NULL)
2406     VEC_free (symbolp, PARSER_RESULT (parser)->function_symbols);
2407
2408   if (PARSER_RESULT (parser)->minimal_symbols != NULL)
2409     VEC_free (bound_minimal_symbol_d, PARSER_RESULT (parser)->minimal_symbols);
2410
2411   if (PARSER_RESULT (parser)->labels.label_symbols != NULL)
2412     VEC_free (symbolp, PARSER_RESULT (parser)->labels.label_symbols);
2413
2414   if (PARSER_RESULT (parser)->labels.function_symbols != NULL)
2415     VEC_free (symbolp, PARSER_RESULT (parser)->labels.function_symbols);
2416
2417   linespec_state_destructor (PARSER_STATE (parser));
2418 }
2419
2420 /* See description in linespec.h.  */
2421
2422 void
2423 linespec_lex_to_end (char **stringp)
2424 {
2425   linespec_parser parser;
2426   struct cleanup *cleanup;
2427   linespec_token token;
2428   const char *orig;
2429
2430   if (stringp == NULL || *stringp == NULL)
2431     return;
2432
2433   linespec_parser_new (&parser, 0, current_language, NULL, NULL, 0, NULL);
2434   cleanup = make_cleanup (linespec_parser_delete, &parser);
2435   parser.lexer.saved_arg = *stringp;
2436   PARSER_STREAM (&parser) = orig = *stringp;
2437
2438   do
2439     {
2440       /* Stop before any comma tokens;  we need it to keep it
2441          as the next token in the string.  */
2442       token = linespec_lexer_peek_token (&parser);
2443       if (token.type == LSTOKEN_COMMA)
2444         break;
2445       token = linespec_lexer_consume_token (&parser);
2446     }
2447   while (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD);
2448
2449   *stringp += PARSER_STREAM (&parser) - orig;
2450   do_cleanups (cleanup);
2451 }
2452
2453 /* A helper function for decode_line_full and decode_line_1 to
2454    turn LOCATION into symtabs_and_lines.  */
2455
2456 static struct symtabs_and_lines
2457 event_location_to_sals (linespec_parser *parser,
2458                         const struct event_location *location)
2459 {
2460   struct symtabs_and_lines result = {NULL, 0};
2461
2462   switch (event_location_type (location))
2463     {
2464     case LINESPEC_LOCATION:
2465       {
2466         PARSER_STATE (parser)->is_linespec = 1;
2467         TRY
2468           {
2469             result = parse_linespec (parser, get_linespec_location (location));
2470           }
2471         CATCH (except, RETURN_MASK_ERROR)
2472           {
2473             throw_exception (except);
2474           }
2475         END_CATCH
2476       }
2477       break;
2478
2479     case ADDRESS_LOCATION:
2480       {
2481         const char *addr_string = get_address_string_location (location);
2482         CORE_ADDR addr = get_address_location (location);
2483
2484         if (addr_string != NULL)
2485           {
2486             char *expr = xstrdup (addr_string);
2487             const char *const_expr = expr;
2488             struct cleanup *cleanup = make_cleanup (xfree, expr);
2489
2490             addr = linespec_expression_to_pc (&const_expr);
2491             if (PARSER_STATE (parser)->canonical != NULL)
2492               PARSER_STATE (parser)->canonical->location
2493                 = copy_event_location (location);
2494
2495             do_cleanups (cleanup);
2496           }
2497
2498         result = convert_address_location_to_sals (PARSER_STATE (parser),
2499                                                    addr);
2500       }
2501       break;
2502
2503     case EXPLICIT_LOCATION:
2504       {
2505         const struct explicit_location *explicit_loc;
2506
2507         explicit_loc = get_explicit_location_const (location);
2508         result = convert_explicit_location_to_sals (PARSER_STATE (parser),
2509                                                     PARSER_RESULT (parser),
2510                                                     explicit_loc);
2511       }
2512       break;
2513
2514     case PROBE_LOCATION:
2515       /* Probes are handled by their own decoders.  */
2516       gdb_assert_not_reached ("attempt to decode probe location");
2517       break;
2518
2519     default:
2520       gdb_assert_not_reached ("unhandled event location type");
2521     }
2522
2523   return result;
2524 }
2525
2526 /* See linespec.h.  */
2527
2528 void
2529 decode_line_full (const struct event_location *location, int flags,
2530                   struct program_space *search_pspace,
2531                   struct symtab *default_symtab,
2532                   int default_line, struct linespec_result *canonical,
2533                   const char *select_mode,
2534                   const char *filter)
2535 {
2536   struct symtabs_and_lines result;
2537   struct cleanup *cleanups;
2538   VEC (const_char_ptr) *filters = NULL;
2539   linespec_parser parser;
2540   struct linespec_state *state;
2541
2542   gdb_assert (canonical != NULL);
2543   /* The filter only makes sense for 'all'.  */
2544   gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
2545   gdb_assert (select_mode == NULL
2546               || select_mode == multiple_symbols_all
2547               || select_mode == multiple_symbols_ask
2548               || select_mode == multiple_symbols_cancel);
2549   gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
2550
2551   linespec_parser_new (&parser, flags, current_language,
2552                        search_pspace, default_symtab,
2553                        default_line, canonical);
2554   cleanups = make_cleanup (linespec_parser_delete, &parser);
2555   save_current_program_space ();
2556
2557   result = event_location_to_sals (&parser, location);
2558   state = PARSER_STATE (&parser);
2559
2560   gdb_assert (result.nelts == 1 || canonical->pre_expanded);
2561   canonical->pre_expanded = 1;
2562
2563   /* Arrange for allocated canonical names to be freed.  */
2564   if (result.nelts > 0)
2565     {
2566       int i;
2567
2568       make_cleanup (xfree, state->canonical_names);
2569       for (i = 0; i < result.nelts; ++i)
2570         {
2571           gdb_assert (state->canonical_names[i].suffix != NULL);
2572           make_cleanup (xfree, state->canonical_names[i].suffix);
2573         }
2574     }
2575
2576   if (select_mode == NULL)
2577     {
2578       if (interp_ui_out (top_level_interpreter ())->is_mi_like_p ())
2579         select_mode = multiple_symbols_all;
2580       else
2581         select_mode = multiple_symbols_select_mode ();
2582     }
2583
2584   if (select_mode == multiple_symbols_all)
2585     {
2586       if (filter != NULL)
2587         {
2588           make_cleanup (VEC_cleanup (const_char_ptr), &filters);
2589           VEC_safe_push (const_char_ptr, filters, filter);
2590           filter_results (state, &result, filters);
2591         }
2592       else
2593         convert_results_to_lsals (state, &result);
2594     }
2595   else
2596     decode_line_2 (state, &result, select_mode);
2597
2598   do_cleanups (cleanups);
2599 }
2600
2601 /* See linespec.h.  */
2602
2603 struct symtabs_and_lines
2604 decode_line_1 (const struct event_location *location, int flags,
2605                struct program_space *search_pspace,
2606                struct symtab *default_symtab,
2607                int default_line)
2608 {
2609   struct symtabs_and_lines result;
2610   linespec_parser parser;
2611   struct cleanup *cleanups;
2612
2613   linespec_parser_new (&parser, flags, current_language,
2614                        search_pspace, default_symtab,
2615                        default_line, NULL);
2616   cleanups = make_cleanup (linespec_parser_delete, &parser);
2617   save_current_program_space ();
2618
2619   result = event_location_to_sals (&parser, location);
2620
2621   do_cleanups (cleanups);
2622   return result;
2623 }
2624
2625 /* See linespec.h.  */
2626
2627 struct symtabs_and_lines
2628 decode_line_with_current_source (char *string, int flags)
2629 {
2630   struct symtabs_and_lines sals;
2631   struct symtab_and_line cursal;
2632   struct event_location *location;
2633   struct cleanup *cleanup;
2634
2635   if (string == 0)
2636     error (_("Empty line specification."));
2637
2638   /* We use whatever is set as the current source line.  We do not try
2639      and get a default source symtab+line or it will recursively call us!  */
2640   cursal = get_current_source_symtab_and_line ();
2641
2642   location = string_to_event_location (&string, current_language);
2643   cleanup = make_cleanup_delete_event_location (location);
2644   sals = decode_line_1 (location, flags, NULL,
2645                         cursal.symtab, cursal.line);
2646
2647   if (*string)
2648     error (_("Junk at end of line specification: %s"), string);
2649
2650   do_cleanups (cleanup);
2651   return sals;
2652 }
2653
2654 /* See linespec.h.  */
2655
2656 struct symtabs_and_lines
2657 decode_line_with_last_displayed (char *string, int flags)
2658 {
2659   struct symtabs_and_lines sals;
2660   struct event_location *location;
2661   struct cleanup *cleanup;
2662
2663   if (string == 0)
2664     error (_("Empty line specification."));
2665
2666   location = string_to_event_location (&string, current_language);
2667   cleanup = make_cleanup_delete_event_location (location);
2668   if (last_displayed_sal_is_valid ())
2669     sals = decode_line_1 (location, flags, NULL,
2670                           get_last_displayed_symtab (),
2671                           get_last_displayed_line ());
2672   else
2673     sals = decode_line_1 (location, flags, NULL, (struct symtab *) NULL, 0);
2674
2675   if (*string)
2676     error (_("Junk at end of line specification: %s"), string);
2677
2678   do_cleanups (cleanup);
2679   return sals;
2680 }
2681
2682 \f
2683
2684 /* First, some functions to initialize stuff at the beggining of the
2685    function.  */
2686
2687 static void
2688 initialize_defaults (struct symtab **default_symtab, int *default_line)
2689 {
2690   if (*default_symtab == 0)
2691     {
2692       /* Use whatever we have for the default source line.  We don't use
2693          get_current_or_default_symtab_and_line as it can recurse and call
2694          us back!  */
2695       struct symtab_and_line cursal = 
2696         get_current_source_symtab_and_line ();
2697       
2698       *default_symtab = cursal.symtab;
2699       *default_line = cursal.line;
2700     }
2701 }
2702
2703 \f
2704
2705 /* Evaluate the expression pointed to by EXP_PTR into a CORE_ADDR,
2706    advancing EXP_PTR past any parsed text.  */
2707
2708 CORE_ADDR
2709 linespec_expression_to_pc (const char **exp_ptr)
2710 {
2711   if (current_program_space->executing_startup)
2712     /* The error message doesn't really matter, because this case
2713        should only hit during breakpoint reset.  */
2714     throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
2715                                     "program space is in startup"));
2716
2717   (*exp_ptr)++;
2718   return value_as_address (parse_to_comma_and_eval (exp_ptr));
2719 }
2720
2721 \f
2722
2723 /* Here's where we recognise an Objective-C Selector.  An Objective C
2724    selector may be implemented by more than one class, therefore it
2725    may represent more than one method/function.  This gives us a
2726    situation somewhat analogous to C++ overloading.  If there's more
2727    than one method that could represent the selector, then use some of
2728    the existing C++ code to let the user choose one.  */
2729
2730 static struct symtabs_and_lines
2731 decode_objc (struct linespec_state *self, linespec_p ls, const char *arg)
2732 {
2733   struct collect_info info;
2734   VEC (const_char_ptr) *symbol_names = NULL;
2735   struct symtabs_and_lines values;
2736   const char *new_argptr;
2737   struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
2738                                           &symbol_names);
2739
2740   info.state = self;
2741   info.file_symtabs = NULL;
2742   VEC_safe_push (symtab_ptr, info.file_symtabs, NULL);
2743   make_cleanup (VEC_cleanup (symtab_ptr), &info.file_symtabs);
2744   info.result.symbols = NULL;
2745   info.result.minimal_symbols = NULL;
2746   values.nelts = 0;
2747   values.sals = NULL;
2748
2749   new_argptr = find_imps (arg, &symbol_names);
2750   if (VEC_empty (const_char_ptr, symbol_names))
2751     {
2752       do_cleanups (cleanup);
2753       return values;
2754     }
2755
2756   add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
2757
2758   if (!VEC_empty (symbolp, info.result.symbols)
2759       || !VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
2760     {
2761       char *saved_arg;
2762
2763       saved_arg = (char *) alloca (new_argptr - arg + 1);
2764       memcpy (saved_arg, arg, new_argptr - arg);
2765       saved_arg[new_argptr - arg] = '\0';
2766
2767       ls->explicit_loc.function_name = xstrdup (saved_arg);
2768       ls->function_symbols = info.result.symbols;
2769       ls->minimal_symbols = info.result.minimal_symbols;
2770       values = convert_linespec_to_sals (self, ls);
2771
2772       if (self->canonical)
2773         {
2774           char *str;
2775
2776           self->canonical->pre_expanded = 1;
2777
2778           if (ls->explicit_loc.source_filename)
2779             {
2780               str = xstrprintf ("%s:%s",
2781                                 ls->explicit_loc.source_filename, saved_arg);
2782             }
2783           else
2784             str = xstrdup (saved_arg);
2785
2786           make_cleanup (xfree, str);
2787           self->canonical->location = new_linespec_location (&str);
2788         }
2789     }
2790
2791   do_cleanups (cleanup);
2792
2793   return values;
2794 }
2795
2796 /* A function object that serves as symbol_found_callback_ftype
2797    callback for iterate_over_symbols.  This is used by
2798    lookup_prefix_sym to collect type symbols.  */
2799 class decode_compound_collector
2800 {
2801 public:
2802   decode_compound_collector ()
2803     : m_symbols (NULL)
2804   {
2805     m_unique_syms = htab_create_alloc (1, htab_hash_pointer,
2806                                        htab_eq_pointer, NULL,
2807                                        xcalloc, xfree);
2808   }
2809
2810   ~decode_compound_collector ()
2811   {
2812     if (m_unique_syms != NULL)
2813       htab_delete (m_unique_syms);
2814   }
2815
2816   /* Releases ownership of the collected symbols and returns them.  */
2817   VEC (symbolp) *release_symbols ()
2818   {
2819     VEC (symbolp) *res = m_symbols;
2820     m_symbols = NULL;
2821     return res;
2822   }
2823
2824   /* Callable as a symbol_found_callback_ftype callback.  */
2825   bool operator () (symbol *sym);
2826
2827 private:
2828   /* A hash table of all symbols we found.  We use this to avoid
2829      adding any symbol more than once.  */
2830   htab_t m_unique_syms;
2831
2832   /* The result vector.  */
2833   VEC (symbolp) *m_symbols;
2834 };
2835
2836 bool
2837 decode_compound_collector::operator () (symbol *sym)
2838 {
2839   void **slot;
2840   struct type *t;
2841
2842   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
2843     return true; /* Continue iterating.  */
2844
2845   t = SYMBOL_TYPE (sym);
2846   t = check_typedef (t);
2847   if (TYPE_CODE (t) != TYPE_CODE_STRUCT
2848       && TYPE_CODE (t) != TYPE_CODE_UNION
2849       && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
2850     return true; /* Continue iterating.  */
2851
2852   slot = htab_find_slot (m_unique_syms, sym, INSERT);
2853   if (!*slot)
2854     {
2855       *slot = sym;
2856       VEC_safe_push (symbolp, m_symbols, sym);
2857     }
2858
2859   return true; /* Continue iterating.  */
2860 }
2861
2862 /* Return any symbols corresponding to CLASS_NAME in FILE_SYMTABS.  */
2863
2864 static VEC (symbolp) *
2865 lookup_prefix_sym (struct linespec_state *state, VEC (symtab_ptr) *file_symtabs,
2866                    const char *class_name)
2867 {
2868   int ix;
2869   struct symtab *elt;
2870   decode_compound_collector collector;
2871
2872   for (ix = 0; VEC_iterate (symtab_ptr, file_symtabs, ix, elt); ++ix)
2873     {
2874       if (elt == NULL)
2875         {
2876           iterate_over_all_matching_symtabs (state, class_name, STRUCT_DOMAIN,
2877                                              NULL, false, collector);
2878           iterate_over_all_matching_symtabs (state, class_name, VAR_DOMAIN,
2879                                              NULL, false, collector);
2880         }
2881       else
2882         {
2883           /* Program spaces that are executing startup should have
2884              been filtered out earlier.  */
2885           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
2886           set_current_program_space (SYMTAB_PSPACE (elt));
2887           iterate_over_file_blocks (elt, class_name, STRUCT_DOMAIN, collector);
2888           iterate_over_file_blocks (elt, class_name, VAR_DOMAIN, collector);
2889         }
2890     }
2891
2892   return collector.release_symbols ();
2893 }
2894
2895 /* A qsort comparison function for symbols.  The resulting order does
2896    not actually matter; we just need to be able to sort them so that
2897    symbols with the same program space end up next to each other.  */
2898
2899 static int
2900 compare_symbols (const void *a, const void *b)
2901 {
2902   struct symbol * const *sa = (struct symbol * const*) a;
2903   struct symbol * const *sb = (struct symbol * const*) b;
2904   uintptr_t uia, uib;
2905
2906   uia = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (*sa));
2907   uib = (uintptr_t) SYMTAB_PSPACE (symbol_symtab (*sb));
2908
2909   if (uia < uib)
2910     return -1;
2911   if (uia > uib)
2912     return 1;
2913
2914   uia = (uintptr_t) *sa;
2915   uib = (uintptr_t) *sb;
2916
2917   if (uia < uib)
2918     return -1;
2919   if (uia > uib)
2920     return 1;
2921
2922   return 0;
2923 }
2924
2925 /* Like compare_symbols but for minimal symbols.  */
2926
2927 static int
2928 compare_msymbols (const void *a, const void *b)
2929 {
2930   const struct bound_minimal_symbol *sa
2931     = (const struct bound_minimal_symbol *) a;
2932   const struct bound_minimal_symbol *sb
2933     = (const struct bound_minimal_symbol *) b;
2934   uintptr_t uia, uib;
2935
2936   uia = (uintptr_t) sa->objfile->pspace;
2937   uib = (uintptr_t) sa->objfile->pspace;
2938
2939   if (uia < uib)
2940     return -1;
2941   if (uia > uib)
2942     return 1;
2943
2944   uia = (uintptr_t) sa->minsym;
2945   uib = (uintptr_t) sb->minsym;
2946
2947   if (uia < uib)
2948     return -1;
2949   if (uia > uib)
2950     return 1;
2951
2952   return 0;
2953 }
2954
2955 /* Look for all the matching instances of each symbol in NAMES.  Only
2956    instances from PSPACE are considered; other program spaces are
2957    handled by our caller.  If PSPACE is NULL, then all program spaces
2958    are considered.  Results are stored into INFO.  */
2959
2960 static void
2961 add_all_symbol_names_from_pspace (struct collect_info *info,
2962                                   struct program_space *pspace,
2963                                   VEC (const_char_ptr) *names)
2964 {
2965   int ix;
2966   const char *iter;
2967
2968   for (ix = 0; VEC_iterate (const_char_ptr, names, ix, iter); ++ix)
2969     add_matching_symbols_to_info (iter, info, pspace);
2970 }
2971
2972 static void
2973 find_superclass_methods (VEC (typep) *superclasses,
2974                          const char *name,
2975                          VEC (const_char_ptr) **result_names)
2976 {
2977   int old_len = VEC_length (const_char_ptr, *result_names);
2978   VEC (typep) *iter_classes;
2979   struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
2980
2981   iter_classes = superclasses;
2982   while (1)
2983     {
2984       VEC (typep) *new_supers = NULL;
2985       int ix;
2986       struct type *t;
2987
2988       make_cleanup (VEC_cleanup (typep), &new_supers);
2989       for (ix = 0; VEC_iterate (typep, iter_classes, ix, t); ++ix)
2990         find_methods (t, name, result_names, &new_supers);
2991
2992       if (VEC_length (const_char_ptr, *result_names) != old_len
2993           || VEC_empty (typep, new_supers))
2994         break;
2995
2996       iter_classes = new_supers;
2997     }
2998
2999   do_cleanups (cleanup);
3000 }
3001
3002 /* This finds the method METHOD_NAME in the class CLASS_NAME whose type is
3003    given by one of the symbols in SYM_CLASSES.  Matches are returned
3004    in SYMBOLS (for debug symbols) and MINSYMS (for minimal symbols).  */
3005
3006 static void
3007 find_method (struct linespec_state *self, VEC (symtab_ptr) *file_symtabs,
3008              const char *class_name, const char *method_name,
3009              VEC (symbolp) *sym_classes, VEC (symbolp) **symbols,
3010              VEC (bound_minimal_symbol_d) **minsyms)
3011 {
3012   struct symbol *sym;
3013   struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
3014   int ix;
3015   int last_result_len;
3016   VEC (typep) *superclass_vec;
3017   VEC (const_char_ptr) *result_names;
3018   struct collect_info info;
3019
3020   /* Sort symbols so that symbols with the same program space are next
3021      to each other.  */
3022   qsort (VEC_address (symbolp, sym_classes),
3023          VEC_length (symbolp, sym_classes),
3024          sizeof (symbolp),
3025          compare_symbols);
3026
3027   info.state = self;
3028   info.file_symtabs = file_symtabs;
3029   info.result.symbols = NULL;
3030   info.result.minimal_symbols = NULL;
3031
3032   /* Iterate over all the types, looking for the names of existing
3033      methods matching METHOD_NAME.  If we cannot find a direct method in a
3034      given program space, then we consider inherited methods; this is
3035      not ideal (ideal would be to respect C++ hiding rules), but it
3036      seems good enough and is what GDB has historically done.  We only
3037      need to collect the names because later we find all symbols with
3038      those names.  This loop is written in a somewhat funny way
3039      because we collect data across the program space before deciding
3040      what to do.  */
3041   superclass_vec = NULL;
3042   make_cleanup (VEC_cleanup (typep), &superclass_vec);
3043   result_names = NULL;
3044   make_cleanup (VEC_cleanup (const_char_ptr), &result_names);
3045   last_result_len = 0;
3046   for (ix = 0; VEC_iterate (symbolp, sym_classes, ix, sym); ++ix)
3047     {
3048       struct type *t;
3049       struct program_space *pspace;
3050
3051       /* Program spaces that are executing startup should have
3052          been filtered out earlier.  */
3053       pspace = SYMTAB_PSPACE (symbol_symtab (sym));
3054       gdb_assert (!pspace->executing_startup);
3055       set_current_program_space (pspace);
3056       t = check_typedef (SYMBOL_TYPE (sym));
3057       find_methods (t, method_name, &result_names, &superclass_vec);
3058
3059       /* Handle all items from a single program space at once; and be
3060          sure not to miss the last batch.  */
3061       if (ix == VEC_length (symbolp, sym_classes) - 1
3062           || (pspace
3063               != SYMTAB_PSPACE (symbol_symtab (VEC_index (symbolp, sym_classes,
3064                                                           ix + 1)))))
3065         {
3066           /* If we did not find a direct implementation anywhere in
3067              this program space, consider superclasses.  */
3068           if (VEC_length (const_char_ptr, result_names) == last_result_len)
3069             find_superclass_methods (superclass_vec, method_name,
3070                                      &result_names);
3071
3072           /* We have a list of candidate symbol names, so now we
3073              iterate over the symbol tables looking for all
3074              matches in this pspace.  */
3075           add_all_symbol_names_from_pspace (&info, pspace, result_names);
3076
3077           VEC_truncate (typep, superclass_vec, 0);
3078           last_result_len = VEC_length (const_char_ptr, result_names);
3079         }
3080     }
3081
3082   if (!VEC_empty (symbolp, info.result.symbols)
3083       || !VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
3084     {
3085       *symbols = info.result.symbols;
3086       *minsyms = info.result.minimal_symbols;
3087       do_cleanups (cleanup);
3088       return;
3089     }
3090
3091   /* Throw an NOT_FOUND_ERROR.  This will be caught by the caller
3092      and other attempts to locate the symbol will be made.  */
3093   throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
3094 }
3095
3096 \f
3097
3098 /* This function object is a callback for iterate_over_symtabs, used
3099    when collecting all matching symtabs.  */
3100
3101 class symtab_collector
3102 {
3103 public:
3104   symtab_collector ()
3105   {
3106     m_symtabs = NULL;
3107     m_symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
3108                                   NULL);
3109   }
3110
3111   ~symtab_collector ()
3112   {
3113     if (m_symtab_table != NULL)
3114       htab_delete (m_symtab_table);
3115   }
3116
3117   /* Callable as a symbol_found_callback_ftype callback.  */
3118   bool operator () (symtab *sym);
3119
3120   /* Releases ownership of the collected symtabs and returns them.  */
3121   VEC (symtab_ptr) *release_symtabs ()
3122   {
3123     VEC (symtab_ptr) *res = m_symtabs;
3124     m_symtabs = NULL;
3125     return res;
3126   }
3127
3128 private:
3129   /* The result vector of symtabs.  */
3130   VEC (symtab_ptr) *m_symtabs;
3131
3132   /* This is used to ensure the symtabs are unique.  */
3133   htab_t m_symtab_table;
3134 };
3135
3136 bool
3137 symtab_collector::operator () (struct symtab *symtab)
3138 {
3139   void **slot;
3140
3141   slot = htab_find_slot (m_symtab_table, symtab, INSERT);
3142   if (!*slot)
3143     {
3144       *slot = symtab;
3145       VEC_safe_push (symtab_ptr, m_symtabs, symtab);
3146     }
3147
3148   return false;
3149 }
3150
3151 /* Given a file name, return a VEC of all matching symtabs.  If
3152    SEARCH_PSPACE is not NULL, the search is restricted to just that
3153    program space.  */
3154
3155 static VEC (symtab_ptr) *
3156 collect_symtabs_from_filename (const char *file,
3157                                struct program_space *search_pspace)
3158 {
3159   symtab_collector collector;
3160
3161   /* Find that file's data.  */
3162   if (search_pspace == NULL)
3163     {
3164       struct program_space *pspace;
3165
3166       ALL_PSPACES (pspace)
3167         {
3168           if (pspace->executing_startup)
3169             continue;
3170
3171           set_current_program_space (pspace);
3172           iterate_over_symtabs (file, collector);
3173         }
3174     }
3175   else
3176     {
3177       set_current_program_space (search_pspace);
3178       iterate_over_symtabs (file, collector);
3179     }
3180
3181   return collector.release_symtabs ();
3182 }
3183
3184 /* Return all the symtabs associated to the FILENAME.  If SEARCH_PSPACE is
3185    not NULL, the search is restricted to just that program space.  */
3186
3187 static VEC (symtab_ptr) *
3188 symtabs_from_filename (const char *filename,
3189                        struct program_space *search_pspace)
3190 {
3191   VEC (symtab_ptr) *result;
3192   
3193   result = collect_symtabs_from_filename (filename, search_pspace);
3194
3195   if (VEC_empty (symtab_ptr, result))
3196     {
3197       if (!have_full_symbols () && !have_partial_symbols ())
3198         throw_error (NOT_FOUND_ERROR,
3199                      _("No symbol table is loaded.  "
3200                        "Use the \"file\" command."));
3201       source_file_not_found_error (filename);
3202     }
3203
3204   return result;
3205 }
3206
3207 /* Look up a function symbol named NAME in symtabs FILE_SYMTABS.  Matching
3208    debug symbols are returned in SYMBOLS.  Matching minimal symbols are
3209    returned in MINSYMS.  */
3210
3211 static void
3212 find_function_symbols (struct linespec_state *state,
3213                        VEC (symtab_ptr) *file_symtabs, const char *name,
3214                        VEC (symbolp) **symbols,
3215                        VEC (bound_minimal_symbol_d) **minsyms)
3216 {
3217   struct collect_info info;
3218   VEC (const_char_ptr) *symbol_names = NULL;
3219   struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
3220                                           &symbol_names);
3221
3222   info.state = state;
3223   info.result.symbols = NULL;
3224   info.result.minimal_symbols = NULL;
3225   info.file_symtabs = file_symtabs;
3226
3227   /* Try NAME as an Objective-C selector.  */
3228   find_imps (name, &symbol_names);
3229   if (!VEC_empty (const_char_ptr, symbol_names))
3230     add_all_symbol_names_from_pspace (&info, state->search_pspace,
3231                                       symbol_names);
3232   else
3233     add_matching_symbols_to_info (name, &info, state->search_pspace);
3234
3235   do_cleanups (cleanup);
3236
3237   if (VEC_empty (symbolp, info.result.symbols))
3238     {
3239       VEC_free (symbolp, info.result.symbols);
3240       *symbols = NULL;
3241     }
3242   else
3243     *symbols = info.result.symbols;
3244
3245   if (VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
3246     {
3247       VEC_free (bound_minimal_symbol_d, info.result.minimal_symbols);
3248       *minsyms = NULL;
3249     }
3250   else
3251     *minsyms = info.result.minimal_symbols;
3252 }
3253
3254 /* Find all symbols named NAME in FILE_SYMTABS, returning debug symbols
3255    in SYMBOLS and minimal symbols in MINSYMS.  */
3256
3257 static void
3258 find_linespec_symbols (struct linespec_state *state,
3259                        VEC (symtab_ptr) *file_symtabs,
3260                        const char *name,
3261                        VEC (symbolp) **symbols,
3262                        VEC (bound_minimal_symbol_d) **minsyms)
3263 {
3264   demangle_result_storage demangle_storage;
3265   std::string ada_lookup_storage;
3266   const char *lookup_name;
3267
3268   if (state->language->la_language == language_ada)
3269     {
3270       /* In Ada, the symbol lookups are performed using the encoded
3271          name rather than the demangled name.  */
3272       ada_lookup_storage = ada_name_for_lookup (name);
3273       lookup_name = ada_lookup_storage.c_str ();
3274     }
3275   else
3276     {
3277       lookup_name = demangle_for_lookup (name,
3278                                          state->language->la_language,
3279                                          demangle_storage);
3280     }
3281
3282   std::string canon = cp_canonicalize_string_no_typedefs (lookup_name);
3283   if (!canon.empty ())
3284     lookup_name = canon.c_str ();
3285
3286   /* It's important to not call expand_symtabs_matching unnecessarily
3287      as it can really slow things down (by unnecessarily expanding
3288      potentially 1000s of symtabs, which when debugging some apps can
3289      cost 100s of seconds).  Avoid this to some extent by *first* calling
3290      find_function_symbols, and only if that doesn't find anything
3291      *then* call find_method.  This handles two important cases:
3292      1) break (anonymous namespace)::foo
3293      2) break class::method where method is in class (and not a baseclass)  */
3294
3295   find_function_symbols (state, file_symtabs, lookup_name,
3296                          symbols, minsyms);
3297
3298   /* If we were unable to locate a symbol of the same name, try dividing
3299      the name into class and method names and searching the class and its
3300      baseclasses.  */
3301   if (VEC_empty (symbolp, *symbols)
3302       && VEC_empty (bound_minimal_symbol_d, *minsyms))
3303     {
3304       std::string klass, method;
3305       const char *last, *p, *scope_op;
3306       VEC (symbolp) *classes;
3307
3308       /* See if we can find a scope operator and break this symbol
3309          name into namespaces${SCOPE_OPERATOR}class_name and method_name.  */
3310       scope_op = "::";
3311       p = find_toplevel_string (lookup_name, scope_op);
3312
3313       last = NULL;
3314       while (p != NULL)
3315         {
3316           last = p;
3317           p = find_toplevel_string (p + strlen (scope_op), scope_op);
3318         }
3319
3320       /* If no scope operator was found, there is nothing more we can do;
3321          we already attempted to lookup the entire name as a symbol
3322          and failed.  */
3323       if (last == NULL)
3324         return;
3325
3326       /* LOOKUP_NAME points to the class name.
3327          LAST points to the method name.  */
3328       klass = std::string (lookup_name, last - lookup_name);
3329
3330       /* Skip past the scope operator.  */
3331       last += strlen (scope_op);
3332       method = last;
3333
3334       /* Find a list of classes named KLASS.  */
3335       classes = lookup_prefix_sym (state, file_symtabs, klass.c_str ());
3336       struct cleanup *old_chain
3337         = make_cleanup (VEC_cleanup (symbolp), &classes);
3338
3339       if (!VEC_empty (symbolp, classes))
3340         {
3341           /* Now locate a list of suitable methods named METHOD.  */
3342           TRY
3343             {
3344               find_method (state, file_symtabs,
3345                            klass.c_str (), method.c_str (),
3346                            classes, symbols, minsyms);
3347             }
3348
3349           /* If successful, we're done.  If NOT_FOUND_ERROR
3350              was not thrown, rethrow the exception that we did get.  */
3351           CATCH (except, RETURN_MASK_ERROR)
3352             {
3353               if (except.error != NOT_FOUND_ERROR)
3354                 throw_exception (except);
3355             }
3356           END_CATCH
3357         }
3358
3359       do_cleanups (old_chain);
3360     }
3361 }
3362
3363 /* Return all labels named NAME in FUNCTION_SYMBOLS.  Return the
3364    actual function symbol in which the label was found in LABEL_FUNC_RET.  */
3365
3366 static VEC (symbolp) *
3367 find_label_symbols (struct linespec_state *self,
3368                     VEC (symbolp) *function_symbols,
3369                     VEC (symbolp) **label_funcs_ret, const char *name)
3370 {
3371   int ix;
3372   const struct block *block;
3373   struct symbol *sym;
3374   struct symbol *fn_sym;
3375   VEC (symbolp) *result = NULL;
3376
3377   if (function_symbols == NULL)
3378     {
3379       set_current_program_space (self->program_space);
3380       block = get_current_search_block ();
3381
3382       for (;
3383            block && !BLOCK_FUNCTION (block);
3384            block = BLOCK_SUPERBLOCK (block))
3385         ;
3386       if (!block)
3387         return NULL;
3388       fn_sym = BLOCK_FUNCTION (block);
3389
3390       sym = lookup_symbol (name, block, LABEL_DOMAIN, 0).symbol;
3391
3392       if (sym != NULL)
3393         {
3394           VEC_safe_push (symbolp, result, sym);
3395           VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
3396         }
3397     }
3398   else
3399     {
3400       for (ix = 0;
3401            VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
3402         {
3403           set_current_program_space (SYMTAB_PSPACE (symbol_symtab (fn_sym)));
3404           block = SYMBOL_BLOCK_VALUE (fn_sym);
3405           sym = lookup_symbol (name, block, LABEL_DOMAIN, 0).symbol;
3406
3407           if (sym != NULL)
3408             {
3409               VEC_safe_push (symbolp, result, sym);
3410               VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
3411             }
3412         }
3413     }
3414
3415   return result;
3416 }
3417
3418 \f
3419
3420 /* A helper for create_sals_line_offset that handles the 'list_mode' case.  */
3421
3422 static void
3423 decode_digits_list_mode (struct linespec_state *self,
3424                          linespec_p ls,
3425                          struct symtabs_and_lines *values,
3426                          struct symtab_and_line val)
3427 {
3428   int ix;
3429   struct symtab *elt;
3430
3431   gdb_assert (self->list_mode);
3432
3433   for (ix = 0; VEC_iterate (symtab_ptr, ls->file_symtabs, ix, elt);
3434        ++ix)
3435     {
3436       /* The logic above should ensure this.  */
3437       gdb_assert (elt != NULL);
3438
3439       set_current_program_space (SYMTAB_PSPACE (elt));
3440
3441       /* Simplistic search just for the list command.  */
3442       val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
3443       if (val.symtab == NULL)
3444         val.symtab = elt;
3445       val.pspace = SYMTAB_PSPACE (elt);
3446       val.pc = 0;
3447       val.explicit_line = 1;
3448
3449       add_sal_to_sals (self, values, &val, NULL, 0);
3450     }
3451 }
3452
3453 /* A helper for create_sals_line_offset that iterates over the symtabs,
3454    adding lines to the VEC.  */
3455
3456 static void
3457 decode_digits_ordinary (struct linespec_state *self,
3458                         linespec_p ls,
3459                         int line,
3460                         struct symtabs_and_lines *sals,
3461                         struct linetable_entry **best_entry)
3462 {
3463   int ix;
3464   struct symtab *elt;
3465
3466   for (ix = 0; VEC_iterate (symtab_ptr, ls->file_symtabs, ix, elt); ++ix)
3467     {
3468       int i;
3469       VEC (CORE_ADDR) *pcs;
3470       CORE_ADDR pc;
3471
3472       /* The logic above should ensure this.  */
3473       gdb_assert (elt != NULL);
3474
3475       set_current_program_space (SYMTAB_PSPACE (elt));
3476
3477       pcs = find_pcs_for_symtab_line (elt, line, best_entry);
3478       for (i = 0; VEC_iterate (CORE_ADDR, pcs, i, pc); ++i)
3479         {
3480           struct symtab_and_line sal;
3481
3482           init_sal (&sal);
3483           sal.pspace = SYMTAB_PSPACE (elt);
3484           sal.symtab = elt;
3485           sal.line = line;
3486           sal.pc = pc;
3487           add_sal_to_sals_basic (sals, &sal);
3488         }
3489
3490       VEC_free (CORE_ADDR, pcs);
3491     }
3492 }
3493
3494 \f
3495
3496 /* Return the line offset represented by VARIABLE.  */
3497
3498 static struct line_offset
3499 linespec_parse_variable (struct linespec_state *self, const char *variable)
3500 {
3501   int index = 0;
3502   const char *p;
3503   struct line_offset offset = {0, LINE_OFFSET_NONE};
3504
3505   p = (variable[1] == '$') ? variable + 2 : variable + 1;
3506   if (*p == '$')
3507     ++p;
3508   while (*p >= '0' && *p <= '9')
3509     ++p;
3510   if (!*p)              /* Reached end of token without hitting non-digit.  */
3511     {
3512       /* We have a value history reference.  */
3513       struct value *val_history;
3514
3515       sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index);
3516       val_history
3517         = access_value_history ((variable[1] == '$') ? -index : index);
3518       if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
3519         error (_("History values used in line "
3520                  "specs must have integer values."));
3521       offset.offset = value_as_long (val_history);
3522     }
3523   else
3524     {
3525       /* Not all digits -- may be user variable/function or a
3526          convenience variable.  */
3527       LONGEST valx;
3528       struct internalvar *ivar;
3529
3530       /* Try it as a convenience variable.  If it is not a convenience
3531          variable, return and allow normal symbol lookup to occur.  */
3532       ivar = lookup_only_internalvar (variable + 1);
3533       if (ivar == NULL)
3534         /* No internal variable with that name.  Mark the offset
3535            as unknown to allow the name to be looked up as a symbol.  */
3536         offset.sign = LINE_OFFSET_UNKNOWN;
3537       else
3538         {
3539           /* We found a valid variable name.  If it is not an integer,
3540              throw an error.  */
3541           if (!get_internalvar_integer (ivar, &valx))
3542             error (_("Convenience variables used in line "
3543                      "specs must have integer values."));
3544           else
3545             offset.offset = valx;
3546         }
3547     }
3548
3549   return offset;
3550 }
3551 \f
3552
3553 /* We've found a minimal symbol MSYMBOL in OBJFILE to associate with our
3554    linespec; return the SAL in RESULT.  This function should return SALs
3555    matching those from find_function_start_sal, otherwise false
3556    multiple-locations breakpoints could be placed.  */
3557
3558 static void
3559 minsym_found (struct linespec_state *self, struct objfile *objfile,
3560               struct minimal_symbol *msymbol,
3561               struct symtabs_and_lines *result)
3562 {
3563   struct gdbarch *gdbarch = get_objfile_arch (objfile);
3564   CORE_ADDR pc;
3565   struct symtab_and_line sal;
3566
3567   sal = find_pc_sect_line (MSYMBOL_VALUE_ADDRESS (objfile, msymbol),
3568                            (struct obj_section *) 0, 0);
3569   sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
3570
3571   /* The minimal symbol might point to a function descriptor;
3572      resolve it to the actual code address instead.  */
3573   pc = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc, &current_target);
3574   if (pc != sal.pc)
3575     sal = find_pc_sect_line (pc, NULL, 0);
3576
3577   if (self->funfirstline)
3578     {
3579       if (sal.symtab != NULL
3580           && (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab))
3581               || SYMTAB_LANGUAGE (sal.symtab) == language_asm))
3582         {
3583           /* If gdbarch_convert_from_func_ptr_addr does not apply then
3584              sal.SECTION, sal.LINE&co. will stay correct from above.
3585              If gdbarch_convert_from_func_ptr_addr applies then
3586              sal.SECTION is cleared from above and sal.LINE&co. will
3587              stay correct from the last find_pc_sect_line above.  */
3588           sal.pc = MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
3589           sal.pc = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc,
3590                                                        &current_target);
3591           if (gdbarch_skip_entrypoint_p (gdbarch))
3592             sal.pc = gdbarch_skip_entrypoint (gdbarch, sal.pc);
3593         }
3594       else
3595         skip_prologue_sal (&sal);
3596     }
3597
3598   if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
3599     add_sal_to_sals (self, result, &sal, MSYMBOL_NATURAL_NAME (msymbol), 0);
3600 }
3601
3602 /* A helper struct to pass some data through
3603    iterate_over_minimal_symbols.  */
3604
3605 struct collect_minsyms
3606 {
3607   /* The objfile we're examining.  */
3608   struct objfile *objfile;
3609
3610   /* Only search the given symtab, or NULL to search for all symbols.  */
3611   struct symtab *symtab;
3612
3613   /* The funfirstline setting from the initial call.  */
3614   int funfirstline;
3615
3616   /* The list_mode setting from the initial call.  */
3617   int list_mode;
3618
3619   /* The resulting symbols.  */
3620   VEC (bound_minimal_symbol_d) *msyms;
3621 };
3622
3623 /* A helper function to classify a minimal_symbol_type according to
3624    priority.  */
3625
3626 static int
3627 classify_mtype (enum minimal_symbol_type t)
3628 {
3629   switch (t)
3630     {
3631     case mst_file_text:
3632     case mst_file_data:
3633     case mst_file_bss:
3634       /* Intermediate priority.  */
3635       return 1;
3636
3637     case mst_solib_trampoline:
3638       /* Lowest priority.  */
3639       return 2;
3640
3641     default:
3642       /* Highest priority.  */
3643       return 0;
3644     }
3645 }
3646
3647 /* Callback for qsort that sorts symbols by priority.  */
3648
3649 static int
3650 compare_msyms (const void *a, const void *b)
3651 {
3652   const bound_minimal_symbol_d *moa = (const bound_minimal_symbol_d *) a;
3653   const bound_minimal_symbol_d *mob = (const bound_minimal_symbol_d *) b;
3654   enum minimal_symbol_type ta = MSYMBOL_TYPE (moa->minsym);
3655   enum minimal_symbol_type tb = MSYMBOL_TYPE (mob->minsym);
3656
3657   return classify_mtype (ta) - classify_mtype (tb);
3658 }
3659
3660 /* Callback for iterate_over_minimal_symbols that adds the symbol to
3661    the result.  */
3662
3663 static void
3664 add_minsym (struct minimal_symbol *minsym, void *d)
3665 {
3666   struct collect_minsyms *info = (struct collect_minsyms *) d;
3667   bound_minimal_symbol_d mo;
3668
3669   mo.minsym = minsym;
3670   mo.objfile = info->objfile;
3671
3672   if (info->symtab != NULL)
3673     {
3674       CORE_ADDR pc;
3675       struct symtab_and_line sal;
3676       struct gdbarch *gdbarch = get_objfile_arch (info->objfile);
3677
3678       sal = find_pc_sect_line (MSYMBOL_VALUE_ADDRESS (info->objfile, minsym),
3679                                NULL, 0);
3680       sal.section = MSYMBOL_OBJ_SECTION (info->objfile, minsym);
3681       pc
3682         = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc, &current_target);
3683       if (pc != sal.pc)
3684         sal = find_pc_sect_line (pc, NULL, 0);
3685
3686       if (info->symtab != sal.symtab)
3687         return;
3688     }
3689
3690   /* Exclude data symbols when looking for breakpoint locations.   */
3691   if (!info->list_mode)
3692     switch (minsym->type)
3693       {
3694         case mst_slot_got_plt:
3695         case mst_data:
3696         case mst_bss:
3697         case mst_abs:
3698         case mst_file_data:
3699         case mst_file_bss:
3700           {
3701             /* Make sure this minsym is not a function descriptor
3702                before we decide to discard it.  */
3703             struct gdbarch *gdbarch = get_objfile_arch (info->objfile);
3704             CORE_ADDR addr = gdbarch_convert_from_func_ptr_addr
3705                                (gdbarch, BMSYMBOL_VALUE_ADDRESS (mo),
3706                                 &current_target);
3707
3708             if (addr == BMSYMBOL_VALUE_ADDRESS (mo))
3709               return;
3710           }
3711       }
3712
3713   VEC_safe_push (bound_minimal_symbol_d, info->msyms, &mo);
3714 }
3715
3716 /* Search for minimal symbols called NAME.  If SEARCH_PSPACE
3717    is not NULL, the search is restricted to just that program
3718    space.
3719
3720    If SYMTAB is NULL, search all objfiles, otherwise
3721    restrict results to the given SYMTAB.  */
3722
3723 static void
3724 search_minsyms_for_name (struct collect_info *info, const char *name,
3725                          struct program_space *search_pspace,
3726                          struct symtab *symtab)
3727 {
3728   struct collect_minsyms local;
3729   struct cleanup *cleanup;
3730
3731   memset (&local, 0, sizeof (local));
3732   local.funfirstline = info->state->funfirstline;
3733   local.list_mode = info->state->list_mode;
3734   local.symtab = symtab;
3735
3736   cleanup = make_cleanup (VEC_cleanup (bound_minimal_symbol_d), &local.msyms);
3737
3738   if (symtab == NULL)
3739     {
3740       struct program_space *pspace;
3741
3742       ALL_PSPACES (pspace)
3743       {
3744         struct objfile *objfile;
3745
3746         if (search_pspace != NULL && search_pspace != pspace)
3747           continue;
3748         if (pspace->executing_startup)
3749           continue;
3750
3751         set_current_program_space (pspace);
3752
3753         ALL_OBJFILES (objfile)
3754         {
3755           local.objfile = objfile;
3756           iterate_over_minimal_symbols (objfile, name, add_minsym, &local);
3757         }
3758       }
3759     }
3760   else
3761     {
3762       if (search_pspace == NULL || SYMTAB_PSPACE (symtab) == search_pspace)
3763         {
3764           set_current_program_space (SYMTAB_PSPACE (symtab));
3765           local.objfile = SYMTAB_OBJFILE(symtab);
3766           iterate_over_minimal_symbols (local.objfile, name, add_minsym,
3767                                         &local);
3768         }
3769     }
3770
3771     if (!VEC_empty (bound_minimal_symbol_d, local.msyms))
3772       {
3773         int classification;
3774         int ix;
3775         bound_minimal_symbol_d *item;
3776
3777         qsort (VEC_address (bound_minimal_symbol_d, local.msyms),
3778                VEC_length (bound_minimal_symbol_d, local.msyms),
3779                sizeof (bound_minimal_symbol_d),
3780                compare_msyms);
3781
3782         /* Now the minsyms are in classification order.  So, we walk
3783            over them and process just the minsyms with the same
3784            classification as the very first minsym in the list.  */
3785         item = VEC_index (bound_minimal_symbol_d, local.msyms, 0);
3786         classification = classify_mtype (MSYMBOL_TYPE (item->minsym));
3787
3788         for (ix = 0;
3789              VEC_iterate (bound_minimal_symbol_d, local.msyms, ix, item);
3790              ++ix)
3791           {
3792             if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
3793               break;
3794
3795             VEC_safe_push (bound_minimal_symbol_d,
3796                            info->result.minimal_symbols, item);
3797           }
3798       }
3799
3800     do_cleanups (cleanup);
3801 }
3802
3803 /* A helper function to add all symbols matching NAME to INFO.  If
3804    PSPACE is not NULL, the search is restricted to just that program
3805    space.  */
3806
3807 static void
3808 add_matching_symbols_to_info (const char *name,
3809                               struct collect_info *info,
3810                               struct program_space *pspace)
3811 {
3812   int ix;
3813   struct symtab *elt;
3814
3815   for (ix = 0; VEC_iterate (symtab_ptr, info->file_symtabs, ix, elt); ++ix)
3816     {
3817       if (elt == NULL)
3818         {
3819           iterate_over_all_matching_symtabs (info->state, name, VAR_DOMAIN,
3820                                              pspace, true, [&] (symbol *sym)
3821             { return info->add_symbol (sym); });
3822           search_minsyms_for_name (info, name, pspace, NULL);
3823         }
3824       else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
3825         {
3826           int prev_len = VEC_length (symbolp, info->result.symbols);
3827
3828           /* Program spaces that are executing startup should have
3829              been filtered out earlier.  */
3830           gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
3831           set_current_program_space (SYMTAB_PSPACE (elt));
3832           iterate_over_file_blocks (elt, name, VAR_DOMAIN, [&] (symbol *sym)
3833             { return info->add_symbol (sym); });
3834
3835           /* If no new symbols were found in this iteration and this symtab
3836              is in assembler, we might actually be looking for a label for
3837              which we don't have debug info.  Check for a minimal symbol in
3838              this case.  */
3839           if (prev_len == VEC_length (symbolp, info->result.symbols)
3840               && elt->language == language_asm)
3841             search_minsyms_for_name (info, name, pspace, elt);
3842         }
3843     }
3844 }
3845
3846 \f
3847
3848 /* Now come some functions that are called from multiple places within
3849    decode_line_1.  */
3850
3851 static int
3852 symbol_to_sal (struct symtab_and_line *result,
3853                int funfirstline, struct symbol *sym)
3854 {
3855   if (SYMBOL_CLASS (sym) == LOC_BLOCK)
3856     {
3857       *result = find_function_start_sal (sym, funfirstline);
3858       return 1;
3859     }
3860   else
3861     {
3862       if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
3863         {
3864           init_sal (result);
3865           result->symtab = symbol_symtab (sym);
3866           result->line = SYMBOL_LINE (sym);
3867           result->pc = SYMBOL_VALUE_ADDRESS (sym);
3868           result->pspace = SYMTAB_PSPACE (result->symtab);
3869           result->explicit_pc = 1;
3870           return 1;
3871         }
3872       else if (funfirstline)
3873         {
3874           /* Nothing.  */
3875         }
3876       else if (SYMBOL_LINE (sym) != 0)
3877         {
3878           /* We know its line number.  */
3879           init_sal (result);
3880           result->symtab = symbol_symtab (sym);
3881           result->line = SYMBOL_LINE (sym);
3882           result->pspace = SYMTAB_PSPACE (result->symtab);
3883           return 1;
3884         }
3885     }
3886
3887   return 0;
3888 }
3889
3890 /* See the comment in linespec.h.  */
3891
3892 void
3893 init_linespec_result (struct linespec_result *lr)
3894 {
3895   memset (lr, 0, sizeof (*lr));
3896 }
3897
3898 /* See the comment in linespec.h.  */
3899
3900 void
3901 destroy_linespec_result (struct linespec_result *ls)
3902 {
3903   int i;
3904   struct linespec_sals *lsal;
3905
3906   delete_event_location (ls->location);
3907   for (i = 0; VEC_iterate (linespec_sals, ls->sals, i, lsal); ++i)
3908     {
3909       xfree (lsal->canonical);
3910       xfree (lsal->sals.sals);
3911     }
3912   VEC_free (linespec_sals, ls->sals);
3913 }
3914
3915 /* Cleanup function for a linespec_result.  */
3916
3917 static void
3918 cleanup_linespec_result (void *a)
3919 {
3920   destroy_linespec_result ((struct linespec_result *) a);
3921 }
3922
3923 /* See the comment in linespec.h.  */
3924
3925 struct cleanup *
3926 make_cleanup_destroy_linespec_result (struct linespec_result *ls)
3927 {
3928   return make_cleanup (cleanup_linespec_result, ls);
3929 }
3930
3931 /* Return the quote characters permitted by the linespec parser.  */
3932
3933 const char *
3934 get_gdb_linespec_parser_quote_characters (void)
3935 {
3936   return linespec_quote_characters;
3937 }