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