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