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