Add a new method 'disassemble' to gdb.Architecture class.
[deliverable/binutils-gdb.git] / gdb / linespec.c
CommitLineData
50641945 1/* Parser for linespec for the GNU debugger, GDB.
05ff989b 2
28e7fd62 3 Copyright (C) 1986-2013 Free Software Foundation, Inc.
50641945
FN
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
50641945
FN
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
50641945
FN
19
20#include "defs.h"
21#include "symtab.h"
c5f0f3d0
FN
22#include "frame.h"
23#include "command.h"
50641945
FN
24#include "symfile.h"
25#include "objfiles.h"
0378c332 26#include "source.h"
50641945 27#include "demangle.h"
c5f0f3d0
FN
28#include "value.h"
29#include "completer.h"
015a42b4 30#include "cp-abi.h"
12907978 31#include "cp-support.h"
c38da1af 32#include "parser-defs.h"
fe898f56 33#include "block.h"
d2630e69 34#include "objc-lang.h"
b9362cc7 35#include "linespec.h"
05ff989b 36#include "exceptions.h"
53c5240f 37#include "language.h"
dc67126b
NR
38#include "interps.h"
39#include "mi/mi-cmds.h"
bccdca4a 40#include "target.h"
94af9270 41#include "arch-utils.h"
c00f8484
KS
42#include <ctype.h>
43#include "cli/cli-utils.h"
731971ed 44#include "filenames.h"
f8eba3c6 45#include "ada-lang.h"
39cf75f7 46#include "stack.h"
f8eba3c6
TT
47
48typedef struct symtab *symtab_p;
49DEF_VEC_P (symtab_p);
50
51typedef struct symbol *symbolp;
52DEF_VEC_P (symbolp);
53
54typedef struct type *typep;
55DEF_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
61struct address_entry
62{
63 struct program_space *pspace;
64 CORE_ADDR addr;
65};
66
40e084e1
KS
67/* A helper struct which just holds a minimal symbol and the object
68 file from which it came. */
69
70typedef struct minsym_and_objfile
71{
72 struct minimal_symbol *minsym;
73 struct objfile *objfile;
74} minsym_and_objfile_d;
75
76DEF_VEC_O (minsym_and_objfile_d);
77
78/* An enumeration of possible signs for a line offset. */
79enum 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
96struct 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
107struct 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. */
5d94e27b 113 const char *expression;
40e084e1
KS
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. */
5d94e27b 121 const char *source_filename;
40e084e1
KS
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. */
5d94e27b 133 const char *function_name;
40e084e1
KS
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. */
5d94e27b 143 const char *label_name;
40e084e1
KS
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};
158typedef struct linespec *linespec_p;
159
f8eba3c6
TT
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
164struct linespec_state
165{
40e084e1
KS
166 /* The language in use during linespec processing. */
167 const struct language_defn *language;
168
f8eba3c6
TT
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
f8eba3c6
TT
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
199struct collect_info
200{
201 /* The linespec object in use. */
202 struct linespec_state *state;
203
40e084e1
KS
204 /* A list of symtabs to which to restrict matches. */
205 VEC (symtab_p) *file_symtabs;
206
f8eba3c6 207 /* The result being accumulated. */
40e084e1
KS
208 struct
209 {
210 VEC (symbolp) *symbols;
211 VEC (minsym_and_objfile_d) *minimal_symbols;
212 } result;
f8eba3c6 213};
50641945 214
40e084e1 215/* Token types */
50641945 216
40e084e1
KS
217enum ls_token_type
218{
219 /* A keyword */
220 LSTOKEN_KEYWORD = 0,
44fe14ab 221
40e084e1
KS
222 /* A colon "separator" */
223 LSTOKEN_COLON,
44fe14ab 224
40e084e1
KS
225 /* A string */
226 LSTOKEN_STRING,
0960f083 227
40e084e1
KS
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};
240typedef enum ls_token_type linespec_token_type;
241
242/* List of keywords */
243
244static const char * const linespec_keywords[] = { "if", "thread", "task" };
245
246/* A token of the linespec lexer */
247
248struct 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};
263typedef 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
270struct ls_parser
271{
272 /* Lexer internal data */
273 struct
274 {
275 /* Save head of input stream. */
276 char *saved_arg;
d2630e69 277
40e084e1
KS
278 /* Head of the input stream. */
279 char **stream;
280#define PARSER_STREAM(P) (*(P)->lexer.stream)
614b3b14 281
40e084e1
KS
282 /* The current token. */
283 linespec_token current;
284 } lexer;
93d91629 285
40e084e1
KS
286 /* Is the entire linespec quote-enclosed? */
287 int is_quote_enclosed;
288
7c09e5a0
DE
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
40e084e1
KS
294 /* The state of the parse. */
295 struct linespec_state state;
296#define PARSER_STATE(PPTR) (&(PPTR)->state)
4224873a 297
40e084e1
KS
298 /* The result of the parse. */
299 struct linespec result;
300#define PARSER_RESULT(PPTR) (&(PPTR)->result)
301};
302typedef struct ls_parser linespec_parser;
50641945 303
40e084e1 304/* Prototypes for local functions. */
50641945 305
40e084e1
KS
306static void initialize_defaults (struct symtab **default_symtab,
307 int *default_line);
50641945 308
40e084e1 309static CORE_ADDR linespec_expression_to_pc (char **exp_ptr);
aee8d8ba 310
40e084e1
KS
311static struct symtabs_and_lines decode_objc (struct linespec_state *self,
312 linespec_p ls,
313 char **argptr);
aee8d8ba 314
40e084e1 315static VEC (symtab_p) *symtabs_from_filename (const char *);
50641945 316
40e084e1
KS
317static VEC (symbolp) *find_label_symbols (struct linespec_state *self,
318 VEC (symbolp) *function_symbols,
319 VEC (symbolp) **label_funcs_ret,
320 const char *name);
50641945 321
b1ae631a
DE
322static 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);
f8eba3c6 327
40e084e1
KS
328static struct line_offset
329 linespec_parse_variable (struct linespec_state *self,
330 const char *variable);
889f28e2 331
f8eba3c6
TT
332static int symbol_to_sal (struct symtab_and_line *result,
333 int funfirstline, struct symbol *sym);
50641945 334
f8eba3c6
TT
335static void add_matching_symbols_to_info (const char *name,
336 struct collect_info *info,
337 struct program_space *pspace);
f3c39e76 338
f8eba3c6
TT
339static void add_all_symbol_names_from_pspace (struct collect_info *info,
340 struct program_space *pspace,
341 VEC (const_char_ptr) *names);
9ef07c8c 342
40e084e1 343static VEC (symtab_p) *collect_symtabs_from_filename (const char *file);
84fba31b 344
40e084e1
KS
345static 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);
14e91ac5 350
40e084e1
KS
351static 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);
0f5238ed 355
40e084e1
KS
356static void minsym_found (struct linespec_state *self, struct objfile *objfile,
357 struct minimal_symbol *msymbol,
358 struct symtabs_and_lines *result);
bca02a8a 359
40e084e1 360static int compare_symbols (const void *a, const void *b);
413dad4d 361
40e084e1 362static int compare_msymbols (const void *a, const void *b);
413dad4d 363
40e084e1 364static const char *find_toplevel_char (const char *s, char c);
f8eba3c6 365
40e084e1
KS
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. */
369static const char *const linespec_quote_characters = "\"\'";
f8eba3c6 370
40e084e1
KS
371/* Lexer functions. */
372
373/* Lex a number from the input in PARSER. This only supports
dd3818c8
KS
374 decimal numbers.
375
d7cbec71 376 Return true if input is decimal numbers. Return false if not. */
40e084e1 377
d7cbec71
HZ
378static int
379linespec_lexer_lex_number (linespec_parser *parser, linespec_token *tokenp)
40e084e1 380{
d7cbec71
HZ
381 tokenp->type = LSTOKEN_NUMBER;
382 LS_TOKEN_STOKEN (*tokenp).length = 0;
383 LS_TOKEN_STOKEN (*tokenp).ptr = PARSER_STREAM (parser);
40e084e1
KS
384
385 /* Keep any sign at the start of the stream. */
386 if (*PARSER_STREAM (parser) == '+' || *PARSER_STREAM (parser) == '-')
387 {
d7cbec71 388 ++LS_TOKEN_STOKEN (*tokenp).length;
40e084e1
KS
389 ++(PARSER_STREAM (parser));
390 }
391
392 while (isdigit (*PARSER_STREAM (parser)))
393 {
d7cbec71 394 ++LS_TOKEN_STOKEN (*tokenp).length;
40e084e1 395 ++(PARSER_STREAM (parser));
f8eba3c6 396 }
40e084e1 397
dd3818c8 398 /* If the next character in the input buffer is not a space, comma,
eff9c3e6 399 quote, or colon, this input does not represent a number. */
dd3818c8
KS
400 if (*PARSER_STREAM (parser) != '\0'
401 && !isspace (*PARSER_STREAM (parser)) && *PARSER_STREAM (parser) != ','
eff9c3e6
KS
402 && *PARSER_STREAM (parser) != ':'
403 && !strchr (linespec_quote_characters, *PARSER_STREAM (parser)))
d7cbec71
HZ
404 {
405 PARSER_STREAM (parser) = LS_TOKEN_STOKEN (*tokenp).ptr;
406 return 0;
407 }
408
409 return 1;
f8eba3c6
TT
410}
411
40e084e1
KS
412/* Does P represent one of the keywords? If so, return
413 the keyword. If not, return NULL. */
f8eba3c6 414
40e084e1
KS
415static const char *
416linespec_lexer_lex_keyword (const char *p)
f8eba3c6 417{
40e084e1 418 int i;
f8eba3c6 419
40e084e1
KS
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;
f8eba3c6
TT
436}
437
40e084e1
KS
438/* Does STRING represent an Ada operator? If so, return the length
439 of the decoded operator name. If not, return 0. */
f8eba3c6
TT
440
441static int
40e084e1 442is_ada_operator (const char *string)
f8eba3c6 443{
40e084e1 444 const struct ada_opname_map *mapping;
f8eba3c6 445
40e084e1
KS
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);
f8eba3c6
TT
453}
454
40e084e1
KS
455/* Find QUOTE_CHAR in STRING, accounting for the ':' terminal. Return
456 the location of QUOTE_CHAR, or NULL if not found. */
f8eba3c6 457
40e084e1
KS
458static const char *
459skip_quote_char (const char *string, char quote_char)
f8eba3c6 460{
40e084e1 461 const char *p, *last;
f8eba3c6 462
40e084e1
KS
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 }
f8eba3c6 470
40e084e1 471 return last;
f8eba3c6 472}
50641945 473
40e084e1
KS
474/* Make a writable copy of the string given in TOKEN, trimming
475 any trailing whitespace. */
50641945 476
40e084e1
KS
477static char *
478copy_token_string (linespec_token token)
50641945 479{
40e084e1 480 char *str, *s;
e0881a8e 481
40e084e1
KS
482 if (token.type == LSTOKEN_KEYWORD)
483 return xstrdup (LS_TOKEN_KEYWORD (token));
255e7dbf 484
40e084e1
KS
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';
e0881a8e 489
40e084e1
KS
490 return str;
491}
255e7dbf 492
40e084e1 493/* Does P represent the end of a quote-enclosed linespec? */
f3a5f1de 494
40e084e1
KS
495static int
496is_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));
50641945
FN
502}
503
40e084e1
KS
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. */
481860b3 507
40e084e1
KS
508static char *
509find_parameter_list_end (char *input)
481860b3 510{
40e084e1
KS
511 char end_char, start_char;
512 int depth;
513 char *p;
481860b3 514
40e084e1
KS
515 start_char = *input;
516 if (start_char == '(')
517 end_char = ')';
518 else if (start_char == '<')
519 end_char = '>';
520 else
521 return NULL;
481860b3 522
40e084e1
KS
523 p = input;
524 depth = 0;
525 while (*p)
481860b3 526 {
40e084e1
KS
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;
481860b3 538 }
40e084e1
KS
539
540 return p;
481860b3
GB
541}
542
74ccd7f5 543
40e084e1
KS
544/* Lex a string from the input in PARSER. */
545
546static linespec_token
547linespec_lexer_lex_string (linespec_parser *parser)
74ccd7f5 548{
40e084e1
KS
549 linespec_token token;
550 char *start = PARSER_STREAM (parser);
74ccd7f5 551
40e084e1 552 token.type = LSTOKEN_STRING;
74ccd7f5 553
40e084e1
KS
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);
50641945 560
40e084e1
KS
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));
50641945 566
40e084e1
KS
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 }
f8eba3c6 576
40e084e1
KS
577 /* The input does not represent an Ada operator -- fall through
578 to normal quoted string handling. */
579 }
f8eba3c6 580
40e084e1
KS
581 /* Skip past the beginning quote. */
582 ++(PARSER_STREAM (parser));
74ccd7f5 583
40e084e1
KS
584 /* Mark the start of the string. */
585 LS_TOKEN_STOKEN (token).ptr = PARSER_STREAM (parser);
f8eba3c6 586
40e084e1
KS
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));
7c09e5a0
DE
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. */
40e084e1
KS
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
718static linespec_token
719linespec_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
7c09e5a0
DE
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));
40e084e1
KS
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':
d7cbec71
HZ
749 if (!linespec_lexer_lex_number (parser, &(parser->lexer.current)))
750 parser->lexer.current = linespec_lexer_lex_string (parser);
40e084e1
KS
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
799static linespec_token
800linespec_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
808static linespec_token
809linespec_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
825static void
826add_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
66f1999b
KS
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. */
40e084e1
KS
840
841static void
842add_sal_to_sals (struct linespec_state *self,
843 struct symtabs_and_lines *sals,
844 struct symtab_and_line *sal,
66f1999b 845 const char *symname, int literal_canonical)
40e084e1
KS
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 *));
4e04028d 855 if (!literal_canonical && sal->symtab)
40e084e1 856 {
05cba821 857 const char *fullname = symtab_to_fullname (sal->symtab);
40e084e1
KS
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)
05cba821 864 canonical_name = xstrprintf ("%s:%s:%d", fullname, symname,
40e084e1
KS
865 sal->line);
866 else if (symname != NULL)
05cba821 867 canonical_name = xstrprintf ("%s:%s", fullname, symname);
40e084e1 868 else
05cba821 869 canonical_name = xstrprintf ("%s:%d", fullname, sal->line);
40e084e1 870 }
66f1999b
KS
871 else if (symname != NULL)
872 canonical_name = xstrdup (symname);
40e084e1
KS
873
874 self->canonical_names[sals->nelts - 1] = canonical_name;
875 }
876}
877
878/* A hash function for address_entry. */
879
880static hashval_t
881hash_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
892static int
893eq_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
905static int
906maybe_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
926struct 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
939static int
940iterate_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
953struct 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
965static int
966iterate_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
981static void
982iterate_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)
f8eba3c6
TT
1005 continue;
1006
1007 set_current_program_space (pspace);
50641945 1008
f8eba3c6
TT
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,
74ccd7f5 1017 &matcher_data);
f8eba3c6 1018
d790cf0a 1019 ALL_OBJFILE_PRIMARY_SYMTABS (objfile, symtab)
f8eba3c6 1020 {
d790cf0a 1021 struct block *block;
50641945 1022
d790cf0a 1023 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
4ae24af0
JB
1024 state->language->la_iterate_over_symbols (block, name, domain,
1025 callback, data);
481860b3 1026
d790cf0a
DE
1027 if (include_inline)
1028 {
1029 struct symbol_and_data_callback cad = { callback, data };
1030 int i;
481860b3 1031
d790cf0a
DE
1032 for (i = FIRST_LOCAL_BLOCK;
1033 i < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (symtab)); i++)
1034 {
1035 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), i);
4ae24af0
JB
1036 state->language->la_iterate_over_symbols
1037 (block, name, domain, iterate_inline_only, &cad);
481860b3 1038 }
f8eba3c6
TT
1039 }
1040 }
1041 }
1042 }
50641945
FN
1043}
1044
e8eb7bc5
KS
1045/* Returns the block to be used for symbol searches for the given SYMTAB,
1046 which may be NULL. */
1047
1048static struct block *
1049get_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
f8eba3c6 1069/* A helper for find_method. This finds all methods in type T which
40e084e1 1070 match NAME. It adds matching symbol names to RESULT_NAMES, and
f8eba3c6 1071 adds T's direct superclasses to SUPERCLASSES. */
50641945 1072
f8eba3c6
TT
1073static void
1074find_methods (struct type *t, const char *name,
1075 VEC (const_char_ptr) **result_names,
1076 VEC (typep) **superclasses)
50641945 1077{
50641945 1078 int ibase;
0d5cff50 1079 const char *class_name = type_name_no_tag (t);
c00f8484 1080
50641945
FN
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. */
f8eba3c6 1084 if (class_name)
50641945
FN
1085 {
1086 int method_counter;
1087
8bd1f2c6 1088 CHECK_TYPEDEF (t);
50641945
FN
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 {
0d5cff50 1098 const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
50641945
FN
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
f8eba3c6
TT
1111 if (strcmp_iw (method_name, name) == 0)
1112 {
1113 int field_counter;
aee8d8ba 1114
f8eba3c6
TT
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 }
aee8d8ba
DC
1130 }
1131 }
1132
f8eba3c6
TT
1133 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1134 VEC_safe_push (typep, *superclasses, TYPE_BASECLASS (t, ibase));
50641945
FN
1135}
1136
50641945
FN
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
8120c9d5
EZ
1139 strings. Also, ignore the char within a template name, like a ','
1140 within foo<int, int>. */
1141
40e084e1
KS
1142static const char *
1143find_toplevel_char (const char *s, char c)
50641945
FN
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. */
a04257e6 1148 int depth = 0; /* Number of unclosed parens we've seen. */
40e084e1 1149 const char *scan;
50641945
FN
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;
8120c9d5 1164 else if (*scan == '(' || *scan == '<')
50641945 1165 depth++;
8120c9d5 1166 else if ((*scan == ')' || *scan == '>') && depth > 0)
50641945
FN
1167 depth--;
1168 }
1169
1170 return 0;
1171}
1172
40e084e1
KS
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. */
889f28e2 1176
40e084e1
KS
1177static const char *
1178find_toplevel_string (const char *haystack, const char *needle)
889f28e2 1179{
40e084e1
KS
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;
889f28e2
AF
1201}
1202
f8eba3c6
TT
1203/* Given FILTERS, a list of canonical names, filter the sals in RESULT
1204 and store the result in SELF->CANONICAL. */
50641945 1205
f8eba3c6
TT
1206static void
1207filter_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
1239static void
1240convert_results_to_lsals (struct linespec_state *self,
1241 struct symtabs_and_lines *result)
50641945 1242{
f8eba3c6
TT
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
1255static void
1256decode_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;
50641945 1262 int i;
50641945 1263 struct cleanup *old_chain;
f8eba3c6
TT
1264 VEC (const_char_ptr) *item_names = NULL, *filters = NULL;
1265 struct get_number_or_range_state state;
50641945 1266
f8eba3c6
TT
1267 gdb_assert (select_mode != multiple_symbols_all);
1268 gdb_assert (self->canonical != NULL);
50641945 1269
f8eba3c6
TT
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)
50641945 1273 {
f8eba3c6
TT
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]);
50641945
FN
1289 }
1290
f8eba3c6
TT
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)
50641945 1298 {
f8eba3c6
TT
1299 do_cleanups (old_chain);
1300 convert_results_to_lsals (self, result);
1301 return;
50641945
FN
1302 }
1303
e0a4d108
KS
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
f8eba3c6
TT
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)
50641945 1315 {
f8eba3c6 1316 prompt = "> ";
50641945 1317 }
f8eba3c6 1318 args = command_line_input (prompt, 0, "overload-choice");
50641945
FN
1319
1320 if (args == 0 || *args == 0)
e2e0b3e5 1321 error_no_arg (_("one or more choice numbers"));
50641945 1322
f8eba3c6
TT
1323 init_number_or_range (&state, args);
1324 while (!state.finished)
50641945
FN
1325 {
1326 int num;
1327
f8eba3c6 1328 num = get_number_or_range (&state);
50641945
FN
1329
1330 if (num == 0)
8a3fe4f8 1331 error (_("canceled"));
50641945
FN
1332 else if (num == 1)
1333 {
f8eba3c6
TT
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;
50641945
FN
1343 }
1344
f8eba3c6
TT
1345 num -= 2;
1346 if (num >= VEC_length (const_char_ptr, item_names))
1347 printf_unfiltered (_("No choice number %d.\n"), num);
50641945
FN
1348 else
1349 {
f8eba3c6
TT
1350 const char *elt = VEC_index (const_char_ptr, item_names, num);
1351
1352 if (elt != NULL)
50641945 1353 {
f8eba3c6
TT
1354 VEC_safe_push (const_char_ptr, filters, elt);
1355 VEC_replace (const_char_ptr, item_names, num, NULL);
50641945
FN
1356 }
1357 else
1358 {
3e43a32a
MS
1359 printf_unfiltered (_("duplicate request for %d ignored.\n"),
1360 num);
50641945
FN
1361 }
1362 }
50641945 1363 }
f8eba3c6
TT
1364
1365 filter_results (self, result, filters);
1366 do_cleanups (old_chain);
50641945 1367}
94af9270 1368
40e084e1 1369\f
3d50dd94 1370
40e084e1
KS
1371/* The parser of linespec itself. */
1372
1373/* Throw an appropriate error when SYMBOL is not found (optionally in
1374 FILENAME). */
1375
1376static void ATTRIBUTE_NORETURN
5d94e27b 1377symbol_not_found_error (const char *symbol, const char *filename)
3d50dd94 1378{
40e084e1
KS
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 }
3d50dd94
JK
1413}
1414
40e084e1
KS
1415/* Throw an appropriate error when an unexpected token is encountered
1416 in the input. */
94af9270 1417
40e084e1
KS
1418static void ATTRIBUTE_NORETURN
1419unexpected_linespec_error (linespec_parser *parser)
94af9270 1420{
40e084e1
KS
1421 linespec_token token;
1422 static const char * token_type_strings[]
1423 = {"keyword", "colon", "string", "number", "comma", "end of input"};
94af9270 1424
40e084e1
KS
1425 /* Get the token that generated the error. */
1426 token = linespec_lexer_lex_one (parser);
94af9270 1427
40e084e1
KS
1428 /* Finally, throw the error. */
1429 if (token.type == LSTOKEN_STRING || token.type == LSTOKEN_NUMBER
1430 || token.type == LSTOKEN_KEYWORD)
94af9270 1431 {
40e084e1
KS
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
1449static struct line_offset
09cf2b22 1450linespec_parse_line_offset (const char *string)
40e084e1
KS
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
1472static void
1473linespec_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)
94af9270 1541 {
40e084e1
KS
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)
94af9270 1591 {
40e084e1
KS
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);
94af9270
KS
1627 }
1628 }
40e084e1
KS
1629 else
1630 {
1631 /* Trailing ':' in the input. Issue an error. */
1632 unexpected_linespec_error (parser);
1633 }
94af9270 1634 }
40e084e1 1635}
94af9270 1636
40e084e1
KS
1637/* Canonicalize the linespec contained in LS. The result is saved into
1638 STATE->canonical. */
1639
1640static void
1641canonicalize_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 }
94af9270 1707}
c00f8484 1708
40e084e1 1709/* Given a line offset in LS, construct the relevant SALs. */
c00f8484 1710
40e084e1
KS
1711static struct symtabs_and_lines
1712create_sals_line_offset (struct linespec_state *self,
1713 linespec_p ls)
c00f8484 1714{
40e084e1
KS
1715 struct symtabs_and_lines values;
1716 struct symtab_and_line val;
1717 int use_default = 0;
c00f8484 1718
40e084e1
KS
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
2e47c6ca 1725 when we are called with just a function name, since
40e084e1
KS
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)
3d50dd94 1731 {
05cba821
JK
1732 const char *fullname;
1733
40e084e1 1734 set_current_program_space (self->program_space);
c00f8484 1735
40e084e1
KS
1736 /* Make sure we have at least a default source line. */
1737 set_default_source_symtab_and_line ();
1738 initialize_defaults (&self->default_symtab, &self->default_line);
05cba821 1739 fullname = symtab_to_fullname (self->default_symtab);
40e084e1
KS
1740 VEC_pop (symtab_p, ls->file_symtabs);
1741 VEC_free (symtab_p, ls->file_symtabs);
05cba821 1742 ls->file_symtabs = collect_symtabs_from_filename (fullname);
40e084e1
KS
1743 use_default = 1;
1744 }
c00f8484 1745
40e084e1
KS
1746 val.line = ls->line_offset.offset;
1747 switch (ls->line_offset.sign)
1748 {
1749 case LINE_OFFSET_PLUS:
1750 if (ls->line_offset.offset == 0)
1751 val.line = 5;
1752 if (use_default)
1753 val.line = self->default_line + val.line;
1754 break;
1755
1756 case LINE_OFFSET_MINUS:
1757 if (ls->line_offset.offset == 0)
1758 val.line = 15;
1759 if (use_default)
1760 val.line = self->default_line - val.line;
1761 else
1762 val.line = -val.line;
1763 break;
1764
1765 case LINE_OFFSET_NONE:
1766 break; /* No need to adjust val.line. */
1767 }
1768
1769 if (self->list_mode)
1770 decode_digits_list_mode (self, ls, &values, val);
1771 else
1772 {
1773 struct linetable_entry *best_entry = NULL;
1774 int *filter;
1775 struct block **blocks;
1776 struct cleanup *cleanup;
1777 struct symtabs_and_lines intermediate_results;
1778 int i, j;
1779
1780 intermediate_results.sals = NULL;
1781 intermediate_results.nelts = 0;
1782
1783 decode_digits_ordinary (self, ls, val.line, &intermediate_results,
1784 &best_entry);
1785 if (intermediate_results.nelts == 0 && best_entry != NULL)
1786 decode_digits_ordinary (self, ls, best_entry->line,
1787 &intermediate_results, &best_entry);
1788
1789 cleanup = make_cleanup (xfree, intermediate_results.sals);
1790
1791 /* For optimized code, the compiler can scatter one source line
1792 across disjoint ranges of PC values, even when no duplicate
1793 functions or inline functions are involved. For example,
1794 'for (;;)' inside a non-template, non-inline, and non-ctor-or-dtor
1795 function can result in two PC ranges. In this case, we don't
1796 want to set a breakpoint on the first PC of each range. To filter
1797 such cases, we use containing blocks -- for each PC found
1798 above, we see if there are other PCs that are in the same
1799 block. If yes, the other PCs are filtered out. */
1800
1801 filter = XNEWVEC (int, intermediate_results.nelts);
1802 make_cleanup (xfree, filter);
1803 blocks = XNEWVEC (struct block *, intermediate_results.nelts);
1804 make_cleanup (xfree, blocks);
1805
1806 for (i = 0; i < intermediate_results.nelts; ++i)
3d50dd94 1807 {
40e084e1 1808 set_current_program_space (intermediate_results.sals[i].pspace);
c00f8484 1809
40e084e1
KS
1810 filter[i] = 1;
1811 blocks[i] = block_for_pc_sect (intermediate_results.sals[i].pc,
1812 intermediate_results.sals[i].section);
3d50dd94 1813 }
c00f8484 1814
40e084e1
KS
1815 for (i = 0; i < intermediate_results.nelts; ++i)
1816 {
1817 if (blocks[i] != NULL)
1818 for (j = i + 1; j < intermediate_results.nelts; ++j)
1819 {
1820 if (blocks[j] == blocks[i])
1821 {
1822 filter[j] = 0;
1823 break;
1824 }
1825 }
1826 }
c00f8484 1827
40e084e1
KS
1828 for (i = 0; i < intermediate_results.nelts; ++i)
1829 if (filter[i])
1830 {
1831 struct symbol *sym = (blocks[i]
1832 ? block_containing_function (blocks[i])
1833 : NULL);
3d50dd94 1834
40e084e1
KS
1835 if (self->funfirstline)
1836 skip_prologue_sal (&intermediate_results.sals[i]);
1837 /* Make sure the line matches the request, not what was
1838 found. */
1839 intermediate_results.sals[i].line = val.line;
1840 add_sal_to_sals (self, &values, &intermediate_results.sals[i],
66f1999b 1841 sym ? SYMBOL_NATURAL_NAME (sym) : NULL, 0);
40e084e1 1842 }
3d50dd94 1843
40e084e1 1844 do_cleanups (cleanup);
f17170e5 1845 }
c00f8484 1846
40e084e1
KS
1847 if (values.nelts == 0)
1848 {
1849 if (ls->source_filename)
1850 throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
1851 val.line, ls->source_filename);
1852 else
1853 throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
1854 val.line);
1855 }
3d50dd94 1856
40e084e1 1857 return values;
c00f8484
KS
1858}
1859
40e084e1
KS
1860/* Create and return SALs from the linespec LS. */
1861
1862static struct symtabs_and_lines
1863convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
1864{
1865 struct symtabs_and_lines sals = {NULL, 0};
1866
1867 if (ls->expression != NULL)
1868 {
66f1999b
KS
1869 struct symtab_and_line sal;
1870
40e084e1 1871 /* We have an expression. No other attribute is allowed. */
66f1999b
KS
1872 sal = find_pc_line (ls->expr_pc, 0);
1873 sal.pc = ls->expr_pc;
1874 sal.section = find_pc_overlay (ls->expr_pc);
1875 sal.explicit_pc = 1;
1876 add_sal_to_sals (state, &sals, &sal, ls->expression, 1);
40e084e1
KS
1877 }
1878 else if (ls->labels.label_symbols != NULL)
1879 {
1880 /* We have just a bunch of functions/methods or labels. */
1881 int i;
1882 struct symtab_and_line sal;
1883 struct symbol *sym;
1884
1885 for (i = 0; VEC_iterate (symbolp, ls->labels.label_symbols, i, sym); ++i)
1886 {
64b92e45
KS
1887 if (symbol_to_sal (&sal, state->funfirstline, sym))
1888 add_sal_to_sals (state, &sals, &sal,
1889 SYMBOL_NATURAL_NAME (sym), 0);
40e084e1
KS
1890 }
1891 }
1892 else if (ls->function_symbols != NULL || ls->minimal_symbols != NULL)
1893 {
1894 /* We have just a bunch of functions and/or methods. */
1895 int i;
1896 struct symtab_and_line sal;
1897 struct symbol *sym;
1898 minsym_and_objfile_d *elem;
1899 struct program_space *pspace;
1900
1901 if (ls->function_symbols != NULL)
1902 {
1903 /* Sort symbols so that symbols with the same program space are next
1904 to each other. */
1905 qsort (VEC_address (symbolp, ls->function_symbols),
1906 VEC_length (symbolp, ls->function_symbols),
1907 sizeof (symbolp), compare_symbols);
1908
1909 for (i = 0; VEC_iterate (symbolp, ls->function_symbols, i, sym); ++i)
1910 {
1911 pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
1912 set_current_program_space (pspace);
64b92e45
KS
1913 if (symbol_to_sal (&sal, state->funfirstline, sym)
1914 && maybe_add_address (state->addr_set, pspace, sal.pc))
66f1999b
KS
1915 add_sal_to_sals (state, &sals, &sal,
1916 SYMBOL_NATURAL_NAME (sym), 0);
40e084e1
KS
1917 }
1918 }
1919
1920 if (ls->minimal_symbols != NULL)
1921 {
1922 /* Sort minimal symbols by program space, too. */
1923 qsort (VEC_address (minsym_and_objfile_d, ls->minimal_symbols),
1924 VEC_length (minsym_and_objfile_d, ls->minimal_symbols),
1925 sizeof (minsym_and_objfile_d), compare_msymbols);
1926
1927 for (i = 0;
1928 VEC_iterate (minsym_and_objfile_d, ls->minimal_symbols, i, elem);
1929 ++i)
1930 {
001822aa 1931 pspace = elem->objfile->pspace;
40e084e1
KS
1932 set_current_program_space (pspace);
1933 minsym_found (state, elem->objfile, elem->minsym, &sals);
1934 }
1935 }
1936 }
1937 else if (ls->line_offset.sign != LINE_OFFSET_UNKNOWN)
1938 {
1939 /* Only an offset was specified. */
1940 sals = create_sals_line_offset (state, ls);
1941
1942 /* Make sure we have a filename for canonicalization. */
1943 if (ls->source_filename == NULL)
05cba821
JK
1944 {
1945 const char *fullname = symtab_to_fullname (state->default_symtab);
1946
1947 ls->source_filename = xstrdup (fullname);
1948 }
40e084e1
KS
1949 }
1950 else
1951 {
1952 /* We haven't found any results... */
1953 return sals;
1954 }
1955
1956 canonicalize_linespec (state, ls);
1957
1958 if (sals.nelts > 0 && state->canonical != NULL)
1959 state->canonical->pre_expanded = 1;
1960
1961 return sals;
1962}
50641945 1963
40e084e1 1964/* Parse a string that specifies a linespec.
50641945
FN
1965 Pass the address of a char * variable; that variable will be
1966 advanced over the characters actually parsed.
1967
40e084e1 1968 The basic grammar of linespecs:
50641945 1969
40e084e1
KS
1970 linespec -> expr_spec | var_spec | basic_spec
1971 expr_spec -> '*' STRING
1972 var_spec -> '$' (STRING | NUMBER)
50641945 1973
40e084e1
KS
1974 basic_spec -> file_offset_spec | function_spec | label_spec
1975 file_offset_spec -> opt_file_spec offset_spec
1976 function_spec -> opt_file_spec function_name_spec opt_label_spec
1977 label_spec -> label_name_spec
50641945 1978
40e084e1
KS
1979 opt_file_spec -> "" | file_name_spec ':'
1980 opt_label_spec -> "" | ':' label_name_spec
1981
1982 file_name_spec -> STRING
1983 function_name_spec -> STRING
1984 label_name_spec -> STRING
1985 function_name_spec -> STRING
1986 offset_spec -> NUMBER
1987 -> '+' NUMBER
1988 -> '-' NUMBER
1989
1990 This may all be followed by several keywords such as "if EXPR",
1991 which we ignore.
1992
1993 A comma will terminate parsing.
1994
1995 The function may be an undebuggable function found in minimal symbol table.
50641945
FN
1996
1997 If the argument FUNFIRSTLINE is nonzero, we want the first line
1998 of real code inside a function when a function is specified, and it is
1999 not OK to specify a variable or type to get its line number.
2000
2001 DEFAULT_SYMTAB specifies the file to use if none is specified.
2002 It defaults to current_source_symtab.
2003 DEFAULT_LINE specifies the line number to use for relative
2004 line numbers (that start with signs). Defaults to current_source_line.
2005 If CANONICAL is non-NULL, store an array of strings containing the canonical
1777feb0 2006 line specs there if necessary. Currently overloaded member functions and
50641945 2007 line numbers or static functions without a filename yield a canonical
1777feb0 2008 line spec. The array and the line spec strings are allocated on the heap,
50641945
FN
2009 it is the callers responsibility to free them.
2010
2011 Note that it is possible to return zero for the symtab
2012 if no file is validly specified. Callers must check that.
58438ac1 2013 Also, the line number returned may be invalid. */
50641945 2014
40e084e1 2015/* Parse the linespec in ARGPTR. */
50641945 2016
ad32032e 2017static struct symtabs_and_lines
40e084e1 2018parse_linespec (linespec_parser *parser, char **argptr)
50641945 2019{
40e084e1
KS
2020 linespec_token token;
2021 struct symtabs_and_lines values;
9ef07c8c 2022 volatile struct gdb_exception file_exception;
40e084e1
KS
2023 struct cleanup *cleanup;
2024
2025 /* A special case to start. It has become quite popular for
2026 IDEs to work around bugs in the previous parser by quoting
2027 the entire linespec, so we attempt to deal with this nicely. */
2028 parser->is_quote_enclosed = 0;
2029 if (!is_ada_operator (*argptr)
2030 && strchr (linespec_quote_characters, **argptr) != NULL)
2031 {
2032 const char *end;
9ef07c8c 2033
40e084e1
KS
2034 end = skip_quote_char (*argptr + 1, **argptr);
2035 if (end != NULL && is_closing_quote_enclosed (end))
136e1c30 2036 {
40e084e1
KS
2037 /* Here's the special case. Skip ARGPTR past the initial
2038 quote. */
2039 ++(*argptr);
2040 parser->is_quote_enclosed = 1;
136e1c30
DE
2041 }
2042 }
e8eb7bc5 2043
7c09e5a0
DE
2044 /* A keyword at the start cannot be interpreted as such.
2045 Consider "b thread thread 42". */
2046 parser->keyword_ok = 0;
2047
40e084e1
KS
2048 parser->lexer.saved_arg = *argptr;
2049 parser->lexer.stream = argptr;
2050 file_exception.reason = 0;
d2630e69 2051
40e084e1
KS
2052 /* Initialize the default symtab and line offset. */
2053 initialize_defaults (&PARSER_STATE (parser)->default_symtab,
2054 &PARSER_STATE (parser)->default_line);
d2630e69 2055
40e084e1
KS
2056 /* Objective-C shortcut. */
2057 values = decode_objc (PARSER_STATE (parser), PARSER_RESULT (parser), argptr);
2058 if (values.sals != NULL)
2059 return values;
e0881a8e 2060
40e084e1 2061 /* Start parsing. */
d2630e69 2062
40e084e1
KS
2063 /* Get the first token. */
2064 token = linespec_lexer_lex_one (parser);
50641945 2065
40e084e1
KS
2066 /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER. */
2067 if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '*')
50641945 2068 {
40e084e1 2069 char *expr, *copy;
94af9270 2070
40e084e1
KS
2071 /* User specified an expression, *EXPR. */
2072 copy = expr = copy_token_string (token);
2073 cleanup = make_cleanup (xfree, expr);
2074 PARSER_RESULT (parser)->expr_pc = linespec_expression_to_pc (&copy);
2075 discard_cleanups (cleanup);
2076 PARSER_RESULT (parser)->expression = expr;
dcf9f4ab 2077
40e084e1
KS
2078 /* This is a little hacky/tricky. If linespec_expression_to_pc
2079 did not evaluate the entire token, then we must find the
2080 string COPY inside the original token buffer. */
2081 if (*copy != '\0')
2082 {
2083 PARSER_STREAM (parser) = strstr (parser->lexer.saved_arg, copy);
2084 gdb_assert (PARSER_STREAM (parser) != NULL);
2085 }
2f741504 2086
40e084e1
KS
2087 /* Consume the token. */
2088 linespec_lexer_consume_token (parser);
50641945 2089
40e084e1
KS
2090 goto convert_to_sals;
2091 }
2092 else if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
2093 {
2094 char *var;
50641945 2095
40e084e1
KS
2096 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
2097 VEC_safe_push (symtab_p, PARSER_RESULT (parser)->file_symtabs, NULL);
dcf9f4ab 2098
40e084e1
KS
2099 /* User specified a convenience variable or history value. */
2100 var = copy_token_string (token);
2101 cleanup = make_cleanup (xfree, var);
2102 PARSER_RESULT (parser)->line_offset
2103 = linespec_parse_variable (PARSER_STATE (parser), var);
cf4ded82 2104 do_cleanups (cleanup);
f8eba3c6 2105
40e084e1
KS
2106 /* If a line_offset wasn't found (VAR is the name of a user
2107 variable/function), then skip to normal symbol processing. */
2108 if (PARSER_RESULT (parser)->line_offset.sign != LINE_OFFSET_UNKNOWN)
2109 {
40e084e1
KS
2110 /* Consume this token. */
2111 linespec_lexer_consume_token (parser);
dcf9f4ab 2112
40e084e1 2113 goto convert_to_sals;
50641945 2114 }
40e084e1
KS
2115 }
2116 else if (token.type != LSTOKEN_STRING && token.type != LSTOKEN_NUMBER)
2117 unexpected_linespec_error (parser);
50641945 2118
7c09e5a0
DE
2119 /* Now we can recognize keywords. */
2120 parser->keyword_ok = 1;
2121
40e084e1
KS
2122 /* Shortcut: If the next token is not LSTOKEN_COLON, we know that
2123 this token cannot represent a filename. */
2124 token = linespec_lexer_peek_token (parser);
0e0b460e 2125
40e084e1 2126 if (token.type == LSTOKEN_COLON)
0e0b460e 2127 {
40e084e1 2128 char *user_filename;
0e0b460e 2129
40e084e1
KS
2130 /* Get the current token again and extract the filename. */
2131 token = linespec_lexer_lex_one (parser);
2132 user_filename = copy_token_string (token);
50641945 2133
40e084e1
KS
2134 /* Check if the input is a filename. */
2135 TRY_CATCH (file_exception, RETURN_MASK_ERROR)
2136 {
2137 PARSER_RESULT (parser)->file_symtabs
2138 = symtabs_from_filename (user_filename);
2139 }
50641945 2140
40e084e1
KS
2141 if (file_exception.reason >= 0)
2142 {
2143 /* Symtabs were found for the file. Record the filename. */
2144 PARSER_RESULT (parser)->source_filename = user_filename;
f8eba3c6 2145
40e084e1
KS
2146 /* Get the next token. */
2147 token = linespec_lexer_consume_token (parser);
50641945 2148
40e084e1
KS
2149 /* This is LSTOKEN_COLON; consume it. */
2150 linespec_lexer_consume_token (parser);
2151 }
2152 else
2153 {
2154 /* No symtabs found -- discard user_filename. */
2155 xfree (user_filename);
50641945 2156
40e084e1
KS
2157 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
2158 VEC_safe_push (symtab_p, PARSER_RESULT (parser)->file_symtabs, NULL);
2159 }
50641945 2160 }
40e084e1
KS
2161 /* If the next token is not EOI, KEYWORD, or COMMA, issue an error. */
2162 else if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD
2163 && token.type != LSTOKEN_COMMA)
d2630e69 2164 {
40e084e1
KS
2165 /* TOKEN is the _next_ token, not the one currently in the parser.
2166 Consuming the token will give the correct error message. */
2167 linespec_lexer_consume_token (parser);
2168 unexpected_linespec_error (parser);
d2630e69 2169 }
50641945
FN
2170 else
2171 {
40e084e1
KS
2172 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
2173 VEC_safe_push (symtab_p, PARSER_RESULT (parser)->file_symtabs, NULL);
50641945 2174 }
50641945 2175
40e084e1
KS
2176 /* Parse the rest of the linespec. */
2177 linespec_parse_basic (parser);
50641945 2178
40e084e1
KS
2179 if (PARSER_RESULT (parser)->function_symbols == NULL
2180 && PARSER_RESULT (parser)->labels.label_symbols == NULL
2181 && PARSER_RESULT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN
2182 && PARSER_RESULT (parser)->minimal_symbols == NULL)
f8eba3c6 2183 {
40e084e1
KS
2184 /* The linespec didn't parse. Re-throw the file exception if
2185 there was one. */
2186 if (file_exception.reason < 0)
2187 throw_exception (file_exception);
0f5238ed 2188
40e084e1
KS
2189 /* Otherwise, the symbol is not found. */
2190 symbol_not_found_error (PARSER_RESULT (parser)->function_name,
2191 PARSER_RESULT (parser)->source_filename);
0f5238ed
TT
2192 }
2193
40e084e1 2194 convert_to_sals:
9ef07c8c 2195
40e084e1
KS
2196 /* Get the last token and record how much of the input was parsed,
2197 if necessary. */
2198 token = linespec_lexer_lex_one (parser);
2199 if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD)
2200 PARSER_STREAM (parser) = LS_TOKEN_STOKEN (token).ptr;
50641945 2201
40e084e1
KS
2202 /* Convert the data in PARSER_RESULT to SALs. */
2203 values = convert_linespec_to_sals (PARSER_STATE (parser),
2204 PARSER_RESULT (parser));
f8eba3c6 2205
40e084e1 2206 return values;
413dad4d 2207}
50641945 2208
40e084e1 2209
f8eba3c6 2210/* A constructor for linespec_state. */
44fe14ab 2211
f8eba3c6
TT
2212static void
2213linespec_state_constructor (struct linespec_state *self,
40e084e1 2214 int flags, const struct language_defn *language,
f8eba3c6
TT
2215 struct symtab *default_symtab,
2216 int default_line,
2217 struct linespec_result *canonical)
2218{
2219 memset (self, 0, sizeof (*self));
40e084e1 2220 self->language = language;
f8eba3c6
TT
2221 self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
2222 self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
2223 self->default_symtab = default_symtab;
2224 self->default_line = default_line;
2225 self->canonical = canonical;
2226 self->program_space = current_program_space;
2227 self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
2228 xfree, xcalloc, xfree);
2229}
44fe14ab 2230
40e084e1 2231/* Initialize a new linespec parser. */
44fe14ab
DC
2232
2233static void
40e084e1
KS
2234linespec_parser_new (linespec_parser *parser,
2235 int flags, const struct language_defn *language,
2236 struct symtab *default_symtab,
2237 int default_line,
2238 struct linespec_result *canonical)
44fe14ab 2239{
40e084e1
KS
2240 parser->lexer.current.type = LSTOKEN_CONSUMED;
2241 memset (PARSER_RESULT (parser), 0, sizeof (struct linespec));
2242 PARSER_RESULT (parser)->line_offset.sign = LINE_OFFSET_UNKNOWN;
2243 linespec_state_constructor (PARSER_STATE (parser), flags, language,
2244 default_symtab, default_line, canonical);
2245}
2246
2247/* A destructor for linespec_state. */
44fe14ab 2248
40e084e1
KS
2249static void
2250linespec_state_destructor (struct linespec_state *self)
2251{
f8eba3c6
TT
2252 htab_delete (self->addr_set);
2253}
44fe14ab 2254
40e084e1
KS
2255/* Delete a linespec parser. */
2256
2257static void
2258linespec_parser_delete (void *arg)
2259{
2260 linespec_parser *parser = (linespec_parser *) arg;
2261
5d94e27b
KS
2262 xfree ((char *) PARSER_RESULT (parser)->expression);
2263 xfree ((char *) PARSER_RESULT (parser)->source_filename);
2264 xfree ((char *) PARSER_RESULT (parser)->label_name);
2265 xfree ((char *) PARSER_RESULT (parser)->function_name);
40e084e1
KS
2266
2267 if (PARSER_RESULT (parser)->file_symtabs != NULL)
2268 VEC_free (symtab_p, PARSER_RESULT (parser)->file_symtabs);
2269
2270 if (PARSER_RESULT (parser)->function_symbols != NULL)
2271 VEC_free (symbolp, PARSER_RESULT (parser)->function_symbols);
2272
2273 if (PARSER_RESULT (parser)->minimal_symbols != NULL)
2274 VEC_free (minsym_and_objfile_d, PARSER_RESULT (parser)->minimal_symbols);
2275
2276 if (PARSER_RESULT (parser)->labels.label_symbols != NULL)
2277 VEC_free (symbolp, PARSER_RESULT (parser)->labels.label_symbols);
2278
2279 if (PARSER_RESULT (parser)->labels.function_symbols != NULL)
2280 VEC_free (symbolp, PARSER_RESULT (parser)->labels.function_symbols);
2281
2282 linespec_state_destructor (PARSER_STATE (parser));
2283}
2284
f8eba3c6 2285/* See linespec.h. */
44fe14ab 2286
f8eba3c6
TT
2287void
2288decode_line_full (char **argptr, int flags,
2289 struct symtab *default_symtab,
2290 int default_line, struct linespec_result *canonical,
2291 const char *select_mode,
2292 const char *filter)
44fe14ab 2293{
f8eba3c6 2294 struct symtabs_and_lines result;
f8eba3c6 2295 struct cleanup *cleanups;
f8eba3c6 2296 VEC (const_char_ptr) *filters = NULL;
40e084e1
KS
2297 linespec_parser parser;
2298 struct linespec_state *state;
f8eba3c6
TT
2299
2300 gdb_assert (canonical != NULL);
2301 /* The filter only makes sense for 'all'. */
2302 gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
2303 gdb_assert (select_mode == NULL
2304 || select_mode == multiple_symbols_all
2305 || select_mode == multiple_symbols_ask
2306 || select_mode == multiple_symbols_cancel);
2307 gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
2308
40e084e1
KS
2309 linespec_parser_new (&parser, flags, current_language, default_symtab,
2310 default_line, canonical);
2311 cleanups = make_cleanup (linespec_parser_delete, &parser);
f8eba3c6
TT
2312 save_current_program_space ();
2313
40e084e1
KS
2314 result = parse_linespec (&parser, argptr);
2315 state = PARSER_STATE (&parser);
f8eba3c6
TT
2316
2317 gdb_assert (result.nelts == 1 || canonical->pre_expanded);
2318 gdb_assert (canonical->addr_string != NULL);
2319 canonical->pre_expanded = 1;
2320
66f1999b 2321 /* Arrange for allocated canonical names to be freed. */
f8eba3c6
TT
2322 if (result.nelts > 0)
2323 {
2324 int i;
2325
40e084e1 2326 make_cleanup (xfree, state->canonical_names);
f8eba3c6
TT
2327 for (i = 0; i < result.nelts; ++i)
2328 {
66f1999b 2329 gdb_assert (state->canonical_names[i] != NULL);
40e084e1 2330 make_cleanup (xfree, state->canonical_names[i]);
f8eba3c6
TT
2331 }
2332 }
2333
2334 if (select_mode == NULL)
2335 {
2336 if (ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
2337 select_mode = multiple_symbols_all;
2338 else
2339 select_mode = multiple_symbols_select_mode ();
2340 }
2341
2342 if (select_mode == multiple_symbols_all)
2343 {
2344 if (filter != NULL)
2345 {
2346 make_cleanup (VEC_cleanup (const_char_ptr), &filters);
2347 VEC_safe_push (const_char_ptr, filters, filter);
40e084e1 2348 filter_results (state, &result, filters);
f8eba3c6
TT
2349 }
2350 else
40e084e1 2351 convert_results_to_lsals (state, &result);
f8eba3c6
TT
2352 }
2353 else
40e084e1 2354 decode_line_2 (state, &result, select_mode);
f8eba3c6
TT
2355
2356 do_cleanups (cleanups);
2357}
2358
39cf75f7
DE
2359/* See linespec.h. */
2360
f8eba3c6
TT
2361struct symtabs_and_lines
2362decode_line_1 (char **argptr, int flags,
2363 struct symtab *default_symtab,
2364 int default_line)
2365{
2366 struct symtabs_and_lines result;
40e084e1 2367 linespec_parser parser;
f8eba3c6
TT
2368 struct cleanup *cleanups;
2369
40e084e1
KS
2370 linespec_parser_new (&parser, flags, current_language, default_symtab,
2371 default_line, NULL);
2372 cleanups = make_cleanup (linespec_parser_delete, &parser);
f8eba3c6
TT
2373 save_current_program_space ();
2374
40e084e1
KS
2375 result = parse_linespec (&parser, argptr);
2376
f8eba3c6
TT
2377 do_cleanups (cleanups);
2378 return result;
2379}
2380
39cf75f7
DE
2381/* See linespec.h. */
2382
2383struct symtabs_and_lines
2384decode_line_with_current_source (char *string, int flags)
2385{
2386 struct symtabs_and_lines sals;
2387 struct symtab_and_line cursal;
2388
2389 if (string == 0)
2390 error (_("Empty line specification."));
2391
2392 /* We use whatever is set as the current source line. We do not try
2393 and get a default source symtab+line or it will recursively call us! */
2394 cursal = get_current_source_symtab_and_line ();
2395
2396 sals = decode_line_1 (&string, flags,
2397 cursal.symtab, cursal.line);
2398
2399 if (*string)
2400 error (_("Junk at end of line specification: %s"), string);
2401 return sals;
2402}
2403
2404/* See linespec.h. */
2405
2406struct symtabs_and_lines
2407decode_line_with_last_displayed (char *string, int flags)
2408{
2409 struct symtabs_and_lines sals;
2410
2411 if (string == 0)
2412 error (_("Empty line specification."));
2413
2414 if (last_displayed_sal_is_valid ())
2415 sals = decode_line_1 (&string, flags,
2416 get_last_displayed_symtab (),
2417 get_last_displayed_line ());
2418 else
2419 sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0);
2420
2421 if (*string)
2422 error (_("Junk at end of line specification: %s"), string);
2423 return sals;
2424}
2425
f8eba3c6
TT
2426\f
2427
2428/* First, some functions to initialize stuff at the beggining of the
2429 function. */
2430
2431static void
2432initialize_defaults (struct symtab **default_symtab, int *default_line)
2433{
2434 if (*default_symtab == 0)
2435 {
2436 /* Use whatever we have for the default source line. We don't use
2437 get_current_or_default_symtab_and_line as it can recurse and call
2438 us back! */
2439 struct symtab_and_line cursal =
2440 get_current_source_symtab_and_line ();
2441
2442 *default_symtab = cursal.symtab;
2443 *default_line = cursal.line;
2444 }
2445}
2446
2447\f
2448
40e084e1
KS
2449/* Evaluate the expression pointed to by EXP_PTR into a CORE_ADDR,
2450 advancing EXP_PTR past any parsed text. */
f8eba3c6 2451
40e084e1
KS
2452static CORE_ADDR
2453linespec_expression_to_pc (char **exp_ptr)
f8eba3c6 2454{
f8eba3c6
TT
2455 if (current_program_space->executing_startup)
2456 /* The error message doesn't really matter, because this case
2457 should only hit during breakpoint reset. */
2458 throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
2459 "program space is in startup"));
2460
40e084e1
KS
2461 (*exp_ptr)++;
2462 return value_as_address (parse_to_comma_and_eval (exp_ptr));
0960f083
DC
2463}
2464
2465\f
2466
d2630e69
AF
2467/* Here's where we recognise an Objective-C Selector. An Objective C
2468 selector may be implemented by more than one class, therefore it
2469 may represent more than one method/function. This gives us a
2470 situation somewhat analogous to C++ overloading. If there's more
2471 than one method that could represent the selector, then use some of
2472 the existing C++ code to let the user choose one. */
2473
f8eba3c6 2474static struct symtabs_and_lines
40e084e1 2475decode_objc (struct linespec_state *self, linespec_p ls, char **argptr)
d2630e69 2476{
f8eba3c6
TT
2477 struct collect_info info;
2478 VEC (const_char_ptr) *symbol_names = NULL;
40e084e1 2479 struct symtabs_and_lines values;
f8eba3c6
TT
2480 char *new_argptr;
2481 struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
2482 &symbol_names);
2483
2484 info.state = self;
40e084e1
KS
2485 info.file_symtabs = NULL;
2486 VEC_safe_push (symtab_p, info.file_symtabs, NULL);
71bdabee 2487 make_cleanup (VEC_cleanup (symtab_p), &info.file_symtabs);
40e084e1
KS
2488 info.result.symbols = NULL;
2489 info.result.minimal_symbols = NULL;
2490 values.nelts = 0;
2491 values.sals = NULL;
f8eba3c6
TT
2492
2493 new_argptr = find_imps (*argptr, &symbol_names);
2494 if (VEC_empty (const_char_ptr, symbol_names))
2495 {
2496 do_cleanups (cleanup);
40e084e1 2497 return values;
f8eba3c6 2498 }
d2630e69 2499
f8eba3c6 2500 add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
d2630e69 2501
40e084e1
KS
2502 if (!VEC_empty (symbolp, info.result.symbols)
2503 || !VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
d2630e69 2504 {
f8eba3c6 2505 char *saved_arg;
d2630e69 2506
f8eba3c6
TT
2507 saved_arg = alloca (new_argptr - *argptr + 1);
2508 memcpy (saved_arg, *argptr, new_argptr - *argptr);
2509 saved_arg[new_argptr - *argptr] = '\0';
d2630e69 2510
0f5f4ffe 2511 ls->function_name = xstrdup (saved_arg);
40e084e1
KS
2512 ls->function_symbols = info.result.symbols;
2513 ls->minimal_symbols = info.result.minimal_symbols;
2514 values = convert_linespec_to_sals (self, ls);
2515
f8eba3c6 2516 if (self->canonical)
d2630e69 2517 {
f8eba3c6 2518 self->canonical->pre_expanded = 1;
40e084e1 2519 if (ls->source_filename)
f8eba3c6 2520 self->canonical->addr_string
40e084e1 2521 = xstrprintf ("%s:%s", ls->source_filename, saved_arg);
f8eba3c6
TT
2522 else
2523 self->canonical->addr_string = xstrdup (saved_arg);
d2630e69 2524 }
d2630e69
AF
2525 }
2526
f8eba3c6 2527 *argptr = new_argptr;
d2630e69 2528
f8eba3c6 2529 do_cleanups (cleanup);
c00f8484 2530
40e084e1 2531 return values;
f8eba3c6 2532}
c00f8484 2533
f8eba3c6
TT
2534/* An instance of this type is used when collecting prefix symbols for
2535 decode_compound. */
17763fd9 2536
f8eba3c6
TT
2537struct decode_compound_collector
2538{
2539 /* The result vector. */
2540 VEC (symbolp) *symbols;
3a93a0c2 2541
f8eba3c6
TT
2542 /* A hash table of all symbols we found. We use this to avoid
2543 adding any symbol more than once. */
2544 htab_t unique_syms;
2545};
3a93a0c2 2546
f8eba3c6
TT
2547/* A callback for iterate_over_symbols that is used by
2548 lookup_prefix_sym to collect type symbols. */
c00f8484 2549
f8eba3c6
TT
2550static int
2551collect_one_symbol (struct symbol *sym, void *d)
2552{
2553 struct decode_compound_collector *collector = d;
2554 void **slot;
2555 struct type *t;
614b3b14 2556
f8eba3c6 2557 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
8e704927 2558 return 1; /* Continue iterating. */
f8eba3c6
TT
2559
2560 t = SYMBOL_TYPE (sym);
2561 CHECK_TYPEDEF (t);
2562 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
2563 && TYPE_CODE (t) != TYPE_CODE_UNION
2564 && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
8e704927 2565 return 1; /* Continue iterating. */
614b3b14 2566
f8eba3c6
TT
2567 slot = htab_find_slot (collector->unique_syms, sym, INSERT);
2568 if (!*slot)
2569 {
2570 *slot = sym;
2571 VEC_safe_push (symbolp, collector->symbols, sym);
2572 }
2573
8e704927 2574 return 1; /* Continue iterating. */
f8eba3c6 2575}
93d91629 2576
40e084e1 2577/* Return any symbols corresponding to CLASS_NAME in FILE_SYMTABS. */
93d91629 2578
f8eba3c6 2579static VEC (symbolp) *
40e084e1
KS
2580lookup_prefix_sym (struct linespec_state *state, VEC (symtab_p) *file_symtabs,
2581 const char *class_name)
93d91629 2582{
f8eba3c6
TT
2583 int ix;
2584 struct symtab *elt;
2585 struct decode_compound_collector collector;
2586 struct cleanup *outer;
2587 struct cleanup *cleanup;
17763fd9 2588
f8eba3c6 2589 collector.symbols = NULL;
40e084e1 2590 outer = make_cleanup (VEC_cleanup (symbolp), &collector.symbols);
e0881a8e 2591
f8eba3c6
TT
2592 collector.unique_syms = htab_create_alloc (1, htab_hash_pointer,
2593 htab_eq_pointer, NULL,
2594 xcalloc, xfree);
2595 cleanup = make_cleanup_htab_delete (collector.unique_syms);
e0881a8e 2596
f8eba3c6
TT
2597 for (ix = 0; VEC_iterate (symtab_p, file_symtabs, ix, elt); ++ix)
2598 {
2599 if (elt == NULL)
2600 {
40e084e1 2601 iterate_over_all_matching_symtabs (state, class_name, STRUCT_DOMAIN,
f8eba3c6 2602 collect_one_symbol, &collector,
481860b3 2603 NULL, 0);
40e084e1 2604 iterate_over_all_matching_symtabs (state, class_name, VAR_DOMAIN,
f8eba3c6 2605 collect_one_symbol, &collector,
481860b3 2606 NULL, 0);
f8eba3c6
TT
2607 }
2608 else
2609 {
2610 struct block *search_block;
2611
2612 /* Program spaces that are executing startup should have
2613 been filtered out earlier. */
2614 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
2615 set_current_program_space (SYMTAB_PSPACE (elt));
2616 search_block = get_search_block (elt);
40e084e1 2617 LA_ITERATE_OVER_SYMBOLS (search_block, class_name, STRUCT_DOMAIN,
f8eba3c6 2618 collect_one_symbol, &collector);
40e084e1 2619 LA_ITERATE_OVER_SYMBOLS (search_block, class_name, VAR_DOMAIN,
f8eba3c6 2620 collect_one_symbol, &collector);
1e5a1abc
KS
2621 }
2622 }
2623
f8eba3c6
TT
2624 do_cleanups (cleanup);
2625 discard_cleanups (outer);
2626 return collector.symbols;
93d91629
DC
2627}
2628
40e084e1
KS
2629/* A qsort comparison function for symbols. The resulting order does
2630 not actually matter; we just need to be able to sort them so that
2631 symbols with the same program space end up next to each other. */
2632
2633static int
2634compare_symbols (const void *a, const void *b)
2635{
2636 struct symbol * const *sa = a;
2637 struct symbol * const *sb = b;
2638 uintptr_t uia, uib;
2639
2640 uia = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sa));
2641 uib = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sb));
2642
2643 if (uia < uib)
2644 return -1;
2645 if (uia > uib)
2646 return 1;
2647
2648 uia = (uintptr_t) *sa;
2649 uib = (uintptr_t) *sb;
2650
2651 if (uia < uib)
2652 return -1;
2653 if (uia > uib)
2654 return 1;
2655
2656 return 0;
2657}
2658
2659/* Like compare_symbols but for minimal symbols. */
4224873a 2660
f8eba3c6 2661static int
40e084e1 2662compare_msymbols (const void *a, const void *b)
4224873a 2663{
001822aa
TT
2664 const struct minsym_and_objfile *sa = a;
2665 const struct minsym_and_objfile *sb = b;
f8eba3c6
TT
2666 uintptr_t uia, uib;
2667
001822aa
TT
2668 uia = (uintptr_t) sa->objfile->pspace;
2669 uib = (uintptr_t) sa->objfile->pspace;
f8eba3c6
TT
2670
2671 if (uia < uib)
2672 return -1;
2673 if (uia > uib)
2674 return 1;
2675
001822aa
TT
2676 uia = (uintptr_t) sa->minsym;
2677 uib = (uintptr_t) sb->minsym;
f8eba3c6
TT
2678
2679 if (uia < uib)
2680 return -1;
2681 if (uia > uib)
2682 return 1;
2683
2684 return 0;
2685}
2686
2687/* Look for all the matching instances of each symbol in NAMES. Only
2688 instances from PSPACE are considered; other program spaces are
2689 handled by our caller. If PSPACE is NULL, then all program spaces
2690 are considered. Results are stored into INFO. */
2691
2692static void
2693add_all_symbol_names_from_pspace (struct collect_info *info,
2694 struct program_space *pspace,
2695 VEC (const_char_ptr) *names)
2696{
2697 int ix;
2698 const char *iter;
2699
2700 for (ix = 0; VEC_iterate (const_char_ptr, names, ix, iter); ++ix)
2701 add_matching_symbols_to_info (iter, info, pspace);
2702}
2703
2704static void
2705find_superclass_methods (VEC (typep) *superclasses,
2706 const char *name,
2707 VEC (const_char_ptr) **result_names)
2708{
2709 int old_len = VEC_length (const_char_ptr, *result_names);
2710 VEC (typep) *iter_classes;
2711 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
2712
2713 iter_classes = superclasses;
2714 while (1)
2715 {
2716 VEC (typep) *new_supers = NULL;
2717 int ix;
2718 struct type *t;
2719
2720 make_cleanup (VEC_cleanup (typep), &new_supers);
2721 for (ix = 0; VEC_iterate (typep, iter_classes, ix, t); ++ix)
2722 find_methods (t, name, result_names, &new_supers);
2723
2724 if (VEC_length (const_char_ptr, *result_names) != old_len
2725 || VEC_empty (typep, new_supers))
2726 break;
4224873a 2727
f8eba3c6
TT
2728 iter_classes = new_supers;
2729 }
4224873a 2730
f8eba3c6
TT
2731 do_cleanups (cleanup);
2732}
2733
40e084e1
KS
2734/* This finds the method METHOD_NAME in the class CLASS_NAME whose type is
2735 given by one of the symbols in SYM_CLASSES. Matches are returned
2736 in SYMBOLS (for debug symbols) and MINSYMS (for minimal symbols). */
f8eba3c6 2737
40e084e1
KS
2738static void
2739find_method (struct linespec_state *self, VEC (symtab_p) *file_symtabs,
2740 const char *class_name, const char *method_name,
2741 VEC (symbolp) *sym_classes, VEC (symbolp) **symbols,
2742 VEC (minsym_and_objfile_d) **minsyms)
f8eba3c6 2743{
f8eba3c6
TT
2744 struct symbol *sym;
2745 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
2746 int ix;
2747 int last_result_len;
2748 VEC (typep) *superclass_vec;
2749 VEC (const_char_ptr) *result_names;
2750 struct collect_info info;
4224873a 2751
f8eba3c6
TT
2752 /* Sort symbols so that symbols with the same program space are next
2753 to each other. */
2754 qsort (VEC_address (symbolp, sym_classes),
2755 VEC_length (symbolp, sym_classes),
2756 sizeof (symbolp),
2757 compare_symbols);
2758
2759 info.state = self;
40e084e1
KS
2760 info.file_symtabs = file_symtabs;
2761 info.result.symbols = NULL;
2762 info.result.minimal_symbols = NULL;
f8eba3c6
TT
2763
2764 /* Iterate over all the types, looking for the names of existing
40e084e1 2765 methods matching METHOD_NAME. If we cannot find a direct method in a
f8eba3c6
TT
2766 given program space, then we consider inherited methods; this is
2767 not ideal (ideal would be to respect C++ hiding rules), but it
2768 seems good enough and is what GDB has historically done. We only
2769 need to collect the names because later we find all symbols with
2770 those names. This loop is written in a somewhat funny way
2771 because we collect data across the program space before deciding
2772 what to do. */
2773 superclass_vec = NULL;
2774 make_cleanup (VEC_cleanup (typep), &superclass_vec);
2775 result_names = NULL;
2776 make_cleanup (VEC_cleanup (const_char_ptr), &result_names);
2777 last_result_len = 0;
2778 for (ix = 0; VEC_iterate (symbolp, sym_classes, ix, sym); ++ix)
2779 {
2780 struct type *t;
2781 struct program_space *pspace;
2782
2783 /* Program spaces that are executing startup should have
2784 been filtered out earlier. */
2785 gdb_assert (!SYMTAB_PSPACE (SYMBOL_SYMTAB (sym))->executing_startup);
2786 pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
2787 set_current_program_space (pspace);
2788 t = check_typedef (SYMBOL_TYPE (sym));
40e084e1 2789 find_methods (t, method_name, &result_names, &superclass_vec);
f8eba3c6
TT
2790
2791 /* Handle all items from a single program space at once; and be
2792 sure not to miss the last batch. */
2793 if (ix == VEC_length (symbolp, sym_classes) - 1
2794 || (pspace
2795 != SYMTAB_PSPACE (SYMBOL_SYMTAB (VEC_index (symbolp, sym_classes,
2796 ix + 1)))))
4224873a 2797 {
f8eba3c6
TT
2798 /* If we did not find a direct implementation anywhere in
2799 this program space, consider superclasses. */
2800 if (VEC_length (const_char_ptr, result_names) == last_result_len)
40e084e1
KS
2801 find_superclass_methods (superclass_vec, method_name,
2802 &result_names);
f8eba3c6
TT
2803
2804 /* We have a list of candidate symbol names, so now we
2805 iterate over the symbol tables looking for all
2806 matches in this pspace. */
2807 add_all_symbol_names_from_pspace (&info, pspace, result_names);
2808
2809 VEC_truncate (typep, superclass_vec, 0);
2810 last_result_len = VEC_length (const_char_ptr, result_names);
4224873a 2811 }
4224873a 2812 }
f8eba3c6 2813
40e084e1
KS
2814 if (!VEC_empty (symbolp, info.result.symbols)
2815 || !VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
4224873a 2816 {
40e084e1
KS
2817 *symbols = info.result.symbols;
2818 *minsyms = info.result.minimal_symbols;
f8eba3c6 2819 do_cleanups (cleanup);
40e084e1 2820 return;
4224873a 2821 }
f8eba3c6 2822
40e084e1
KS
2823 /* Throw an NOT_FOUND_ERROR. This will be caught by the caller
2824 and other attempts to locate the symbol will be made. */
2825 throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
f8eba3c6
TT
2826}
2827
2828\f
2829
2830/* This object is used when collecting all matching symtabs. */
2831
2832struct symtab_collector
2833{
2834 /* The result vector of symtabs. */
2835 VEC (symtab_p) *symtabs;
2836
2837 /* This is used to ensure the symtabs are unique. */
2838 htab_t symtab_table;
2839};
2840
2841/* Callback for iterate_over_symtabs. */
2842
2843static int
2844add_symtabs_to_list (struct symtab *symtab, void *d)
2845{
2846 struct symtab_collector *data = d;
2847 void **slot;
2848
2849 slot = htab_find_slot (data->symtab_table, symtab, INSERT);
2850 if (!*slot)
4224873a 2851 {
f8eba3c6
TT
2852 *slot = symtab;
2853 VEC_safe_push (symtab_p, data->symtabs, symtab);
4224873a 2854 }
f8eba3c6
TT
2855
2856 return 0;
4224873a
DC
2857}
2858
f8eba3c6
TT
2859/* Given a file name, return a VEC of all matching symtabs. */
2860
2861static VEC (symtab_p) *
2862collect_symtabs_from_filename (const char *file)
2863{
2864 struct symtab_collector collector;
2865 struct cleanup *cleanups;
2866 struct program_space *pspace;
2867
2868 collector.symtabs = NULL;
2869 collector.symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
2870 NULL);
2871 cleanups = make_cleanup_htab_delete (collector.symtab_table);
2872
2873 /* Find that file's data. */
2874 ALL_PSPACES (pspace)
2875 {
2876 if (pspace->executing_startup)
2877 continue;
2878
2879 set_current_program_space (pspace);
2880 iterate_over_symtabs (file, add_symtabs_to_list, &collector);
2881 }
f3c39e76 2882
f8eba3c6
TT
2883 do_cleanups (cleanups);
2884 return collector.symtabs;
2885}
2886
40e084e1 2887/* Return all the symtabs associated to the FILENAME. */
f8eba3c6 2888
40e084e1
KS
2889static VEC (symtab_p) *
2890symtabs_from_filename (const char *filename)
2891{
2892 VEC (symtab_p) *result;
2893
2894 result = collect_symtabs_from_filename (filename);
f8eba3c6 2895
40e084e1 2896 if (VEC_empty (symtab_p, result))
f8eba3c6 2897 {
40e084e1
KS
2898 if (!have_full_symbols () && !have_partial_symbols ())
2899 throw_error (NOT_FOUND_ERROR,
2900 _("No symbol table is loaded. "
2901 "Use the \"file\" command."));
2902 throw_error (NOT_FOUND_ERROR, _("No source file named %s."), filename);
f8eba3c6
TT
2903 }
2904
40e084e1 2905 return result;
84fba31b 2906}
f3c39e76 2907
40e084e1
KS
2908/* Look up a function symbol named NAME in symtabs FILE_SYMTABS. Matching
2909 debug symbols are returned in SYMBOLS. Matching minimal symbols are
2910 returned in MINSYMS. */
14e91ac5 2911
40e084e1
KS
2912static void
2913find_function_symbols (struct linespec_state *state,
2914 VEC (symtab_p) *file_symtabs, const char *name,
2915 VEC (symbolp) **symbols,
2916 VEC (minsym_and_objfile_d) **minsyms)
14e91ac5 2917{
40e084e1
KS
2918 struct collect_info info;
2919 VEC (const_char_ptr) *symbol_names = NULL;
2920 struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
2921 &symbol_names);
14e91ac5 2922
40e084e1
KS
2923 info.state = state;
2924 info.result.symbols = NULL;
2925 info.result.minimal_symbols = NULL;
2926 info.file_symtabs = file_symtabs;
e0881a8e 2927
40e084e1
KS
2928 /* Try NAME as an Objective-C selector. */
2929 find_imps ((char *) name, &symbol_names);
2930 if (!VEC_empty (const_char_ptr, symbol_names))
2931 add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
2932 else
2933 add_matching_symbols_to_info (name, &info, NULL);
2934
2935 do_cleanups (cleanup);
2936
2937 if (VEC_empty (symbolp, info.result.symbols))
2938 {
2939 VEC_free (symbolp, info.result.symbols);
2940 *symbols = NULL;
14e91ac5
DC
2941 }
2942 else
40e084e1
KS
2943 *symbols = info.result.symbols;
2944
2945 if (VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
14e91ac5 2946 {
40e084e1
KS
2947 VEC_free (minsym_and_objfile_d, info.result.minimal_symbols);
2948 *minsyms = NULL;
2949 }
2950 else
2951 *minsyms = info.result.minimal_symbols;
2952}
2953
2954/* Find all symbols named NAME in FILE_SYMTABS, returning debug symbols
2955 in SYMBOLS and minimal symbols in MINSYMS. */
14e91ac5 2956
b1ae631a 2957static void
40e084e1
KS
2958find_linespec_symbols (struct linespec_state *state,
2959 VEC (symtab_p) *file_symtabs,
2960 const char *name,
2961 VEC (symbolp) **symbols,
2962 VEC (minsym_and_objfile_d) **minsyms)
2963{
2964 char *klass, *method, *canon;
2965 const char *lookup_name, *last, *p, *scope_op;
2966 struct cleanup *cleanup;
2967 VEC (symbolp) *classes;
2968 volatile struct gdb_exception except;
f8eba3c6 2969
40e084e1
KS
2970 cleanup = demangle_for_lookup (name, state->language->la_language,
2971 &lookup_name);
2972 if (state->language->la_language == language_ada)
2973 {
2974 /* In Ada, the symbol lookups are performed using the encoded
2975 name rather than the demangled name. */
2976 lookup_name = ada_name_for_lookup (name);
2977 make_cleanup (xfree, (void *) lookup_name);
2978 }
31aba06f 2979
40e084e1
KS
2980 canon = cp_canonicalize_string_no_typedefs (lookup_name);
2981 if (canon != NULL)
2982 {
2983 lookup_name = canon;
2984 cleanup = make_cleanup (xfree, canon);
2985 }
f8eba3c6 2986
40e084e1
KS
2987 /* See if we can find a scope operator and break this symbol
2988 name into namespaces${SCOPE_OPERATOR}class_name and method_name. */
2989 scope_op = "::";
2990 p = find_toplevel_string (lookup_name, scope_op);
2991 if (p == NULL)
2992 {
2993 /* No C++ scope operator. Try Java. */
2994 scope_op = ".";
2995 p = find_toplevel_string (lookup_name, scope_op);
2996 }
14e91ac5 2997
40e084e1
KS
2998 last = NULL;
2999 while (p != NULL)
3000 {
3001 last = p;
3002 p = find_toplevel_string (p + strlen (scope_op), scope_op);
3003 }
14e91ac5 3004
40e084e1
KS
3005 /* If no scope operator was found, lookup the name as a symbol. */
3006 if (last == NULL)
3007 {
3008 find_function_symbols (state, file_symtabs, lookup_name,
3009 symbols, minsyms);
3010 do_cleanups (cleanup);
3011 return;
14e91ac5
DC
3012 }
3013
40e084e1
KS
3014 /* NAME points to the class name.
3015 LAST points to the method name. */
3016 klass = xmalloc ((last - lookup_name + 1) * sizeof (char));
3017 make_cleanup (xfree, klass);
3018 strncpy (klass, lookup_name, last - lookup_name);
3019 klass[last - lookup_name] = '\0';
14e91ac5 3020
40e084e1
KS
3021 /* Skip past the scope operator. */
3022 last += strlen (scope_op);
3023 method = xmalloc ((strlen (last) + 1) * sizeof (char));
3024 make_cleanup (xfree, method);
3025 strcpy (method, last);
14e91ac5 3026
40e084e1
KS
3027 /* Find a list of classes named KLASS. */
3028 classes = lookup_prefix_sym (state, file_symtabs, klass);
71bdabee 3029 make_cleanup (VEC_cleanup (symbolp), &classes);
40e084e1 3030 if (!VEC_empty (symbolp, classes))
f8eba3c6 3031 {
40e084e1
KS
3032 /* Now locate a list of suitable methods named METHOD. */
3033 TRY_CATCH (except, RETURN_MASK_ERROR)
f8eba3c6 3034 {
40e084e1
KS
3035 find_method (state, file_symtabs, klass, method, classes,
3036 symbols, minsyms);
f8eba3c6 3037 }
14e91ac5 3038
40e084e1
KS
3039 /* If successful, we're done. If NOT_FOUND_ERROR
3040 was not thrown, rethrow the exception that we did get.
3041 Otherwise, fall back to looking up the entire name as a symbol.
3042 This can happen with namespace::function. */
3043 if (except.reason >= 0)
3044 {
3045 do_cleanups (cleanup);
3046 return;
3047 }
3048 else if (except.error != NOT_FOUND_ERROR)
3049 throw_exception (except);
f8eba3c6 3050 }
14e91ac5 3051
40e084e1
KS
3052 /* We couldn't find a class, so we check the entire name as a symbol
3053 instead. */
3054 find_function_symbols (state, file_symtabs, lookup_name, symbols, minsyms);
3055 do_cleanups (cleanup);
14e91ac5
DC
3056}
3057
40e084e1
KS
3058/* Return all labels named NAME in FUNCTION_SYMBOLS. Return the
3059 actual function symbol in which the label was found in LABEL_FUNC_RET. */
0f5238ed 3060
40e084e1
KS
3061static VEC (symbolp) *
3062find_label_symbols (struct linespec_state *self,
3063 VEC (symbolp) *function_symbols,
3064 VEC (symbolp) **label_funcs_ret, const char *name)
0f5238ed 3065{
f8eba3c6 3066 int ix;
40e084e1
KS
3067 struct block *block;
3068 struct symbol *sym;
3069 struct symbol *fn_sym;
3070 VEC (symbolp) *result = NULL;
9ef07c8c 3071
f8eba3c6 3072 if (function_symbols == NULL)
9ef07c8c 3073 {
f8eba3c6
TT
3074 set_current_program_space (self->program_space);
3075 block = get_search_block (NULL);
3076
9ef07c8c
TT
3077 for (;
3078 block && !BLOCK_FUNCTION (block);
3079 block = BLOCK_SUPERBLOCK (block))
3080 ;
3081 if (!block)
40e084e1 3082 return NULL;
f8eba3c6
TT
3083 fn_sym = BLOCK_FUNCTION (block);
3084
40e084e1 3085 sym = lookup_symbol (name, block, LABEL_DOMAIN, 0);
f8eba3c6 3086
40e084e1
KS
3087 if (sym != NULL)
3088 {
3089 VEC_safe_push (symbolp, result, sym);
3090 VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
3091 }
3092 }
3093 else
3094 {
3095 for (ix = 0;
3096 VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
f8eba3c6 3097 {
40e084e1
KS
3098 set_current_program_space (SYMTAB_PSPACE (SYMBOL_SYMTAB (fn_sym)));
3099 block = SYMBOL_BLOCK_VALUE (fn_sym);
3100 sym = lookup_symbol (name, block, LABEL_DOMAIN, 0);
3101
3102 if (sym != NULL)
3103 {
3104 VEC_safe_push (symbolp, result, sym);
3105 VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
3106 }
f8eba3c6 3107 }
40e084e1 3108 }
f8eba3c6 3109
40e084e1
KS
3110 return result;
3111}
f8eba3c6 3112
40e084e1
KS
3113\f
3114
3115/* A helper for create_sals_line_offset that handles the 'list_mode' case. */
3116
3117static void
3118decode_digits_list_mode (struct linespec_state *self,
3119 linespec_p ls,
3120 struct symtabs_and_lines *values,
3121 struct symtab_and_line val)
3122{
3123 int ix;
3124 struct symtab *elt;
3125
3126 gdb_assert (self->list_mode);
3127
3128 for (ix = 0; VEC_iterate (symtab_p, ls->file_symtabs, ix, elt);
3129 ++ix)
3130 {
3131 /* The logic above should ensure this. */
3132 gdb_assert (elt != NULL);
3133
3134 set_current_program_space (SYMTAB_PSPACE (elt));
3135
3136 /* Simplistic search just for the list command. */
3137 val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
3138 if (val.symtab == NULL)
3139 val.symtab = elt;
3140 val.pspace = SYMTAB_PSPACE (elt);
3141 val.pc = 0;
3142 val.explicit_line = 1;
3143
66f1999b 3144 add_sal_to_sals (self, values, &val, NULL, 0);
f8eba3c6 3145 }
40e084e1 3146}
f8eba3c6 3147
40e084e1
KS
3148/* A helper for create_sals_line_offset that iterates over the symtabs,
3149 adding lines to the VEC. */
3150
3151static void
3152decode_digits_ordinary (struct linespec_state *self,
3153 linespec_p ls,
3154 int line,
3155 struct symtabs_and_lines *sals,
3156 struct linetable_entry **best_entry)
3157{
3158 int ix;
3159 struct symtab *elt;
f8eba3c6 3160
40e084e1 3161 for (ix = 0; VEC_iterate (symtab_p, ls->file_symtabs, ix, elt); ++ix)
f8eba3c6 3162 {
40e084e1
KS
3163 int i;
3164 VEC (CORE_ADDR) *pcs;
3165 CORE_ADDR pc;
3166
3167 /* The logic above should ensure this. */
3168 gdb_assert (elt != NULL);
f8eba3c6 3169
40e084e1 3170 set_current_program_space (SYMTAB_PSPACE (elt));
f8eba3c6 3171
40e084e1
KS
3172 pcs = find_pcs_for_symtab_line (elt, line, best_entry);
3173 for (i = 0; VEC_iterate (CORE_ADDR, pcs, i, pc); ++i)
f8eba3c6
TT
3174 {
3175 struct symtab_and_line sal;
40e084e1
KS
3176
3177 init_sal (&sal);
3178 sal.pspace = SYMTAB_PSPACE (elt);
3179 sal.symtab = elt;
3180 sal.line = line;
3181 sal.pc = pc;
3182 add_sal_to_sals_basic (sals, &sal);
f8eba3c6 3183 }
40e084e1
KS
3184
3185 VEC_free (CORE_ADDR, pcs);
f8eba3c6 3186 }
40e084e1
KS
3187}
3188
3189\f
3190
3191/* Return the line offset represented by VARIABLE. */
3192
3193static struct line_offset
3194linespec_parse_variable (struct linespec_state *self, const char *variable)
3195{
3196 int index = 0;
3197 const char *p;
3198 struct line_offset offset = {0, LINE_OFFSET_NONE};
f8eba3c6 3199
40e084e1
KS
3200 p = (variable[1] == '$') ? variable + 2 : variable + 1;
3201 if (*p == '$')
3202 ++p;
3203 while (*p >= '0' && *p <= '9')
3204 ++p;
3205 if (!*p) /* Reached end of token without hitting non-digit. */
f8eba3c6 3206 {
40e084e1
KS
3207 /* We have a value history reference. */
3208 struct value *val_history;
f8eba3c6 3209
40e084e1
KS
3210 sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index);
3211 val_history
3212 = access_value_history ((variable[1] == '$') ? -index : index);
3213 if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
3214 error (_("History values used in line "
3215 "specs must have integer values."));
3216 offset.offset = value_as_long (val_history);
3217 }
3218 else
3219 {
3220 /* Not all digits -- may be user variable/function or a
3221 convenience variable. */
3222 LONGEST valx;
3223 struct internalvar *ivar;
3224
3225 /* Try it as a convenience variable. If it is not a convenience
3226 variable, return and allow normal symbol lookup to occur. */
3227 ivar = lookup_only_internalvar (variable + 1);
3228 if (ivar == NULL)
3229 /* No internal variable with that name. Mark the offset
3230 as unknown to allow the name to be looked up as a symbol. */
3231 offset.sign = LINE_OFFSET_UNKNOWN;
3232 else
3233 {
3234 /* We found a valid variable name. If it is not an integer,
3235 throw an error. */
3236 if (!get_internalvar_integer (ivar, &valx))
3237 error (_("Convenience variables used in line "
3238 "specs must have integer values."));
3239 else
3240 offset.offset = valx;
3241 }
f8eba3c6
TT
3242 }
3243
40e084e1 3244 return offset;
f8eba3c6 3245}
40e084e1 3246\f
f8eba3c6
TT
3247
3248/* A callback used to possibly add a symbol to the results. */
3249
3250static int
3251collect_symbols (struct symbol *sym, void *data)
3252{
3253 struct collect_info *info = data;
f8eba3c6 3254
40e084e1
KS
3255 /* In list mode, add all matching symbols, regardless of class.
3256 This allows the user to type "list a_global_variable". */
3257 if (SYMBOL_CLASS (sym) == LOC_BLOCK || info->state->list_mode)
3258 VEC_safe_push (symbolp, info->result.symbols, sym);
8e704927 3259 return 1; /* Continue iterating. */
f8eba3c6
TT
3260}
3261
40e084e1
KS
3262/* We've found a minimal symbol MSYMBOL in OBJFILE to associate with our
3263 linespec; return the SAL in RESULT. */
f8eba3c6
TT
3264
3265static void
3266minsym_found (struct linespec_state *self, struct objfile *objfile,
3267 struct minimal_symbol *msymbol,
3268 struct symtabs_and_lines *result)
3269{
3270 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3271 CORE_ADDR pc;
3272 struct symtab_and_line sal;
3273
3274 sal = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
3275 (struct obj_section *) 0, 0);
3276 sal.section = SYMBOL_OBJ_SECTION (msymbol);
3277
3278 /* The minimal symbol might point to a function descriptor;
3279 resolve it to the actual code address instead. */
3280 pc = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc, &current_target);
3281 if (pc != sal.pc)
3282 sal = find_pc_sect_line (pc, NULL, 0);
3283
3284 if (self->funfirstline)
3285 skip_prologue_sal (&sal);
3286
07fea4b4 3287 if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
66f1999b 3288 add_sal_to_sals (self, result, &sal, SYMBOL_NATURAL_NAME (msymbol), 0);
f8eba3c6
TT
3289}
3290
39b856a4
TT
3291/* A helper struct to pass some data through
3292 iterate_over_minimal_symbols. */
3293
3294struct collect_minsyms
3295{
3296 /* The objfile we're examining. */
3297 struct objfile *objfile;
3298
3299 /* The funfirstline setting from the initial call. */
3300 int funfirstline;
3301
095bcf5e
JB
3302 /* The list_mode setting from the initial call. */
3303 int list_mode;
3304
39b856a4
TT
3305 /* The resulting symbols. */
3306 VEC (minsym_and_objfile_d) *msyms;
3307};
3308
3309/* A helper function to classify a minimal_symbol_type according to
3310 priority. */
3311
3312static int
3313classify_mtype (enum minimal_symbol_type t)
3314{
3315 switch (t)
f8eba3c6 3316 {
39b856a4
TT
3317 case mst_file_text:
3318 case mst_file_data:
3319 case mst_file_bss:
3320 /* Intermediate priority. */
3321 return 1;
3322
3323 case mst_solib_trampoline:
3324 /* Lowest priority. */
3325 return 2;
3326
3327 default:
3328 /* Highest priority. */
3329 return 0;
f8eba3c6 3330 }
39b856a4
TT
3331}
3332
3333/* Callback for qsort that sorts symbols by priority. */
3334
3335static int
3336compare_msyms (const void *a, const void *b)
3337{
3338 const minsym_and_objfile_d *moa = a;
3339 const minsym_and_objfile_d *mob = b;
3340 enum minimal_symbol_type ta = MSYMBOL_TYPE (moa->minsym);
3341 enum minimal_symbol_type tb = MSYMBOL_TYPE (mob->minsym);
3342
3343 return classify_mtype (ta) - classify_mtype (tb);
3344}
3345
3346/* Callback for iterate_over_minimal_symbols that adds the symbol to
3347 the result. */
3348
3349static void
3350add_minsym (struct minimal_symbol *minsym, void *d)
3351{
3352 struct collect_minsyms *info = d;
3353 minsym_and_objfile_d mo;
3354
095bcf5e
JB
3355 /* Exclude data symbols when looking for breakpoint locations. */
3356 if (!info->list_mode)
3357 switch (minsym->type)
3358 {
3359 case mst_slot_got_plt:
3360 case mst_data:
3361 case mst_bss:
3362 case mst_abs:
3363 case mst_file_data:
3364 case mst_file_bss:
1a2da5ee
JB
3365 {
3366 /* Make sure this minsym is not a function descriptor
3367 before we decide to discard it. */
3368 struct gdbarch *gdbarch = info->objfile->gdbarch;
3369 CORE_ADDR addr = gdbarch_convert_from_func_ptr_addr
3370 (gdbarch, SYMBOL_VALUE_ADDRESS (minsym),
3371 &current_target);
3372
3373 if (addr == SYMBOL_VALUE_ADDRESS (minsym))
3374 return;
3375 }
095bcf5e
JB
3376 }
3377
39b856a4
TT
3378 mo.minsym = minsym;
3379 mo.objfile = info->objfile;
3380 VEC_safe_push (minsym_and_objfile_d, info->msyms, &mo);
f8eba3c6
TT
3381}
3382
3383/* Search minimal symbols in all objfiles for NAME. If SEARCH_PSPACE
3384 is not NULL, the search is restricted to just that program
3385 space. */
3386
3387static void
3388search_minsyms_for_name (struct collect_info *info, const char *name,
3389 struct program_space *search_pspace)
3390{
3391 struct objfile *objfile;
3392 struct program_space *pspace;
3393
3394 ALL_PSPACES (pspace)
3395 {
39b856a4
TT
3396 struct collect_minsyms local;
3397 struct cleanup *cleanup;
3398
f8eba3c6
TT
3399 if (search_pspace != NULL && search_pspace != pspace)
3400 continue;
3401 if (pspace->executing_startup)
3402 continue;
3403
3404 set_current_program_space (pspace);
3405
39b856a4
TT
3406 memset (&local, 0, sizeof (local));
3407 local.funfirstline = info->state->funfirstline;
095bcf5e 3408 local.list_mode = info->state->list_mode;
39b856a4
TT
3409
3410 cleanup = make_cleanup (VEC_cleanup (minsym_and_objfile_d),
3411 &local.msyms);
3412
f8eba3c6
TT
3413 ALL_OBJFILES (objfile)
3414 {
39b856a4
TT
3415 local.objfile = objfile;
3416 iterate_over_minimal_symbols (objfile, name, add_minsym, &local);
9ef07c8c 3417 }
39b856a4
TT
3418
3419 if (!VEC_empty (minsym_and_objfile_d, local.msyms))
3420 {
3421 int classification;
3422 int ix;
3423 minsym_and_objfile_d *item;
3424
3425 qsort (VEC_address (minsym_and_objfile_d, local.msyms),
3426 VEC_length (minsym_and_objfile_d, local.msyms),
3427 sizeof (minsym_and_objfile_d),
3428 compare_msyms);
3429
3430 /* Now the minsyms are in classification order. So, we walk
3431 over them and process just the minsyms with the same
3432 classification as the very first minsym in the list. */
3433 item = VEC_index (minsym_and_objfile_d, local.msyms, 0);
3434 classification = classify_mtype (MSYMBOL_TYPE (item->minsym));
3435
3436 for (ix = 0;
3437 VEC_iterate (minsym_and_objfile_d, local.msyms, ix, item);
3438 ++ix)
3439 {
3440 if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
3441 break;
3442
40e084e1
KS
3443 VEC_safe_push (minsym_and_objfile_d,
3444 info->result.minimal_symbols, item);
39b856a4
TT
3445 }
3446 }
3447
3448 do_cleanups (cleanup);
f8eba3c6
TT
3449 }
3450}
3451
3452/* A helper function to add all symbols matching NAME to INFO. If
3453 PSPACE is not NULL, the search is restricted to just that program
3454 space. */
0f5238ed 3455
f8eba3c6
TT
3456static void
3457add_matching_symbols_to_info (const char *name,
3458 struct collect_info *info,
3459 struct program_space *pspace)
3460{
3461 int ix;
3462 struct symtab *elt;
0f5238ed 3463
40e084e1 3464 for (ix = 0; VEC_iterate (symtab_p, info->file_symtabs, ix, elt); ++ix)
f8eba3c6 3465 {
f8eba3c6
TT
3466 if (elt == NULL)
3467 {
40e084e1 3468 iterate_over_all_matching_symtabs (info->state, name, VAR_DOMAIN,
f8eba3c6 3469 collect_symbols, info,
481860b3 3470 pspace, 1);
f8eba3c6
TT
3471 search_minsyms_for_name (info, name, pspace);
3472 }
3473 else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
3474 {
3475 /* Program spaces that are executing startup should have
3476 been filtered out earlier. */
3477 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
3478 set_current_program_space (SYMTAB_PSPACE (elt));
3479 LA_ITERATE_OVER_SYMBOLS (get_search_block (elt), name,
3480 VAR_DOMAIN, collect_symbols,
3481 info);
3482 }
3483 }
0f5238ed
TT
3484}
3485
14e91ac5
DC
3486\f
3487
413dad4d
DC
3488/* Now come some functions that are called from multiple places within
3489 decode_line_1. */
3490
f8eba3c6
TT
3491static int
3492symbol_to_sal (struct symtab_and_line *result,
3493 int funfirstline, struct symbol *sym)
413dad4d 3494{
413dad4d 3495 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
50641945 3496 {
f8eba3c6
TT
3497 *result = find_function_start_sal (sym, funfirstline);
3498 return 1;
50641945 3499 }
413dad4d
DC
3500 else
3501 {
62853458 3502 if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
413dad4d 3503 {
f8eba3c6
TT
3504 init_sal (result);
3505 result->symtab = SYMBOL_SYMTAB (sym);
3506 result->line = SYMBOL_LINE (sym);
3507 result->pc = SYMBOL_VALUE_ADDRESS (sym);
3508 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3509 result->explicit_pc = 1;
3510 return 1;
413dad4d 3511 }
62853458 3512 else if (funfirstline)
dcf9f4ab 3513 {
f8eba3c6 3514 /* Nothing. */
dcf9f4ab 3515 }
62853458
TT
3516 else if (SYMBOL_LINE (sym) != 0)
3517 {
3518 /* We know its line number. */
f8eba3c6
TT
3519 init_sal (result);
3520 result->symtab = SYMBOL_SYMTAB (sym);
3521 result->line = SYMBOL_LINE (sym);
3522 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3523 return 1;
62853458 3524 }
413dad4d 3525 }
f8eba3c6
TT
3526
3527 return 0;
413dad4d 3528}
50641945 3529
f8eba3c6 3530/* See the comment in linespec.h. */
50641945 3531
f8eba3c6
TT
3532void
3533init_linespec_result (struct linespec_result *lr)
413dad4d 3534{
f8eba3c6
TT
3535 memset (lr, 0, sizeof (*lr));
3536}
413dad4d 3537
f8eba3c6 3538/* See the comment in linespec.h. */
bccdca4a 3539
f8eba3c6
TT
3540void
3541destroy_linespec_result (struct linespec_result *ls)
3542{
3543 int i;
3544 struct linespec_sals *lsal;
bccdca4a 3545
f8eba3c6
TT
3546 xfree (ls->addr_string);
3547 for (i = 0; VEC_iterate (linespec_sals, ls->sals, i, lsal); ++i)
3548 {
3549 xfree (lsal->canonical);
3550 xfree (lsal->sals.sals);
3551 }
3552 VEC_free (linespec_sals, ls->sals);
3553}
e48883f7 3554
f8eba3c6
TT
3555/* Cleanup function for a linespec_result. */
3556
3557static void
3558cleanup_linespec_result (void *a)
3559{
3560 destroy_linespec_result (a);
50641945 3561}
7efd8fc2 3562
f8eba3c6
TT
3563/* See the comment in linespec.h. */
3564
3565struct cleanup *
3566make_cleanup_destroy_linespec_result (struct linespec_result *ls)
7efd8fc2 3567{
f8eba3c6 3568 return make_cleanup (cleanup_linespec_result, ls);
7efd8fc2 3569}
This page took 1.674093 seconds and 4 git commands to generate.