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