2012-03-01 Pedro Alves <palves@redhat.com>
[deliverable/binutils-gdb.git] / gdb / linespec.c
CommitLineData
50641945 1/* Parser for linespec for the GNU debugger, GDB.
05ff989b 2
0b302171 3 Copyright (C) 1986-2005, 2007-2012 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
TT
45#include "ada-lang.h"
46
47typedef struct symtab *symtab_p;
48DEF_VEC_P (symtab_p);
49
50typedef struct symbol *symbolp;
51DEF_VEC_P (symbolp);
52
53typedef struct type *typep;
54DEF_VEC_P (typep);
55
56/* An address entry is used to ensure that any given location is only
57 added to the result a single time. It holds an address and the
58 program space from which the address came. */
59
60struct address_entry
61{
62 struct program_space *pspace;
63 CORE_ADDR addr;
64};
65
66/* An instance of this is used to keep all state while linespec
67 operates. This instance is passed around as a 'this' pointer to
68 the various implementation methods. */
69
70struct linespec_state
71{
72 /* The program space as seen when the module was entered. */
73 struct program_space *program_space;
74
75 /* The default symtab to use, if no other symtab is specified. */
76 struct symtab *default_symtab;
77
78 /* The default line to use. */
79 int default_line;
80
81 /* If the linespec started with "FILE:", this holds all the matching
82 symtabs. Otherwise, it will hold a single NULL entry, meaning
83 that the default symtab should be used. */
84 VEC (symtab_p) *file_symtabs;
85
86 /* If the linespec started with "FILE:", this holds an xmalloc'd
87 copy of "FILE". */
88 char *user_filename;
89
90 /* If the linespec is "FUNCTION:LABEL", this holds an xmalloc'd copy
91 of "FUNCTION". */
92 char *user_function;
93
94 /* The 'funfirstline' value that was passed in to decode_line_1 or
95 decode_line_full. */
96 int funfirstline;
97
98 /* Nonzero if we are running in 'list' mode; see decode_line_list. */
99 int list_mode;
100
101 /* The 'canonical' value passed to decode_line_full, or NULL. */
102 struct linespec_result *canonical;
103
104 /* Canonical strings that mirror the symtabs_and_lines result. */
105 char **canonical_names;
106
107 /* This is a set of address_entry objects which is used to prevent
108 duplicate symbols from being entered into the result. */
109 htab_t addr_set;
110};
111
112/* This is a helper object that is used when collecting symbols into a
113 result. */
114
115struct collect_info
116{
117 /* The linespec object in use. */
118 struct linespec_state *state;
119
120 /* The result being accumulated. */
121 struct symtabs_and_lines result;
f8eba3c6 122};
50641945 123
1777feb0 124/* Prototypes for local functions. */
50641945 125
44fe14ab
DC
126static void initialize_defaults (struct symtab **default_symtab,
127 int *default_line);
128
f8eba3c6
TT
129static struct symtabs_and_lines decode_indirect (struct linespec_state *self,
130 char **argptr);
44fe14ab 131
0960f083
DC
132static char *locate_first_half (char **argptr, int *is_quote_enclosed);
133
f8eba3c6
TT
134static struct symtabs_and_lines decode_objc (struct linespec_state *self,
135 char **argptr);
d2630e69 136
f8eba3c6
TT
137static struct symtabs_and_lines decode_compound (struct linespec_state *self,
138 char **argptr,
614b3b14 139 char *saved_arg,
58438ac1 140 char *p);
614b3b14 141
f8eba3c6
TT
142static VEC (symbolp) *lookup_prefix_sym (char **argptr, char *p,
143 VEC (symtab_p) *,
144 char **);
93d91629 145
f8eba3c6 146static struct symtabs_and_lines find_method (struct linespec_state *self,
4224873a
DC
147 char *saved_arg,
148 char *copy,
f8eba3c6
TT
149 const char *class_name,
150 VEC (symbolp) *sym_classes);
4224873a 151
c25c4a8b
JK
152static void cplusplus_error (const char *name, const char *fmt, ...)
153 ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3);
50641945 154
f8eba3c6 155static char *find_toplevel_char (char *s, char c);
50641945 156
f8eba3c6 157static int is_objc_method_format (const char *s);
50641945 158
f8eba3c6
TT
159static VEC (symtab_p) *symtabs_from_filename (char **argptr,
160 char *p, int is_quote_enclosed,
161 char **user_filename);
aee8d8ba 162
f8eba3c6
TT
163static VEC (symbolp) *find_function_symbols (char **argptr, char *p,
164 int is_quote_enclosed,
165 char **user_function);
aee8d8ba 166
f8eba3c6
TT
167static struct symtabs_and_lines decode_all_digits (struct linespec_state *self,
168 char **argptr,
169 char *q);
50641945 170
f8eba3c6
TT
171static struct symtabs_and_lines decode_dollar (struct linespec_state *self,
172 char *copy);
50641945 173
f8eba3c6
TT
174static int decode_label (struct linespec_state *self,
175 VEC (symbolp) *function_symbols,
176 char *copy,
177 struct symtabs_and_lines *result);
178
179static struct symtabs_and_lines decode_variable (struct linespec_state *self,
180 char *copy);
889f28e2 181
f8eba3c6
TT
182static int symbol_to_sal (struct symtab_and_line *result,
183 int funfirstline, struct symbol *sym);
50641945 184
f8eba3c6
TT
185static void add_matching_symbols_to_info (const char *name,
186 struct collect_info *info,
187 struct program_space *pspace);
f3c39e76 188
f8eba3c6
TT
189static void add_all_symbol_names_from_pspace (struct collect_info *info,
190 struct program_space *pspace,
191 VEC (const_char_ptr) *names);
9ef07c8c 192
f8eba3c6 193/* Helper functions. */
84fba31b 194
f8eba3c6 195/* Add SAL to SALS. */
14e91ac5 196
f8eba3c6
TT
197static void
198add_sal_to_sals_basic (struct symtabs_and_lines *sals,
199 struct symtab_and_line *sal)
200{
201 ++sals->nelts;
202 sals->sals = xrealloc (sals->sals, sals->nelts * sizeof (sals->sals[0]));
203 sals->sals[sals->nelts - 1] = *sal;
204}
0f5238ed 205
f8eba3c6
TT
206/* Add SAL to SALS, and also update SELF->CANONICAL_NAMES to reflect
207 the new sal, if needed. If not NULL, SYMNAME is the name of the
208 symbol to use when constructing the new canonical name. */
bca02a8a 209
f8eba3c6
TT
210static void
211add_sal_to_sals (struct linespec_state *self,
212 struct symtabs_and_lines *sals,
213 struct symtab_and_line *sal,
214 const char *symname)
215{
216 add_sal_to_sals_basic (sals, sal);
413dad4d 217
f8eba3c6
TT
218 if (self->canonical)
219 {
220 char *canonical_name = NULL;
413dad4d 221
f8eba3c6
TT
222 self->canonical_names = xrealloc (self->canonical_names,
223 sals->nelts * sizeof (char *));
224 if (sal->symtab && sal->symtab->filename)
225 {
226 char *filename = sal->symtab->filename;
227
228 /* Note that the filter doesn't have to be a valid linespec
229 input. We only apply the ":LINE" treatment to Ada for
230 the time being. */
231 if (symname != NULL && sal->line != 0
232 && current_language->la_language == language_ada)
233 canonical_name = xstrprintf ("%s:%s:%d", filename, symname,
234 sal->line);
235 else if (symname != NULL)
236 canonical_name = xstrprintf ("%s:%s", filename, symname);
237 else
238 canonical_name = xstrprintf ("%s:%d", filename, sal->line);
239 }
240
241 self->canonical_names[sals->nelts - 1] = canonical_name;
242 }
243}
244
245/* A hash function for address_entry. */
246
247static hashval_t
248hash_address_entry (const void *p)
249{
250 const struct address_entry *aep = p;
04ca3c22 251 hashval_t hash;
f8eba3c6 252
04ca3c22
AP
253 hash = iterative_hash_object (aep->pspace, 0);
254 return iterative_hash_object (aep->addr, hash);
f8eba3c6
TT
255}
256
257/* An equality function for address_entry. */
258
259static int
260eq_address_entry (const void *a, const void *b)
261{
262 const struct address_entry *aea = a;
263 const struct address_entry *aeb = b;
264
265 return aea->pspace == aeb->pspace && aea->addr == aeb->addr;
266}
267
268/* Check whether the address, represented by PSPACE and ADDR, is
269 already in the set. If so, return 0. Otherwise, add it and return
270 1. */
271
272static int
273maybe_add_address (htab_t set, struct program_space *pspace, CORE_ADDR addr)
274{
275 struct address_entry e, *p;
276 void **slot;
277
278 e.pspace = pspace;
279 e.addr = addr;
280 slot = htab_find_slot (set, &e, INSERT);
281 if (*slot)
282 return 0;
283
284 p = XNEW (struct address_entry);
285 memcpy (p, &e, sizeof (struct address_entry));
286 *slot = p;
287
288 return 1;
289}
50641945 290
255e7dbf
AC
291/* Issue a helpful hint on using the command completion feature on
292 single quoted demangled C++ symbols as part of the completion
293 error. */
50641945 294
c25c4a8b 295static void
255e7dbf 296cplusplus_error (const char *name, const char *fmt, ...)
50641945 297{
255e7dbf 298 struct ui_file *tmp_stream;
f3a5f1de 299 char *message;
e0881a8e 300
255e7dbf
AC
301 tmp_stream = mem_fileopen ();
302 make_cleanup_ui_file_delete (tmp_stream);
303
304 {
305 va_list args;
e0881a8e 306
255e7dbf
AC
307 va_start (args, fmt);
308 vfprintf_unfiltered (tmp_stream, fmt, args);
309 va_end (args);
310 }
311
50641945
FN
312 while (*name == '\'')
313 name++;
255e7dbf
AC
314 fprintf_unfiltered (tmp_stream,
315 ("Hint: try '%s<TAB> or '%s<ESC-?>\n"
316 "(Note leading single quote.)"),
317 name, name);
f3a5f1de 318
759ef836
PA
319 message = ui_file_xstrdup (tmp_stream, NULL);
320 make_cleanup (xfree, message);
321 throw_error (NOT_FOUND_ERROR, "%s", message);
50641945
FN
322}
323
74ccd7f5
JB
324/* Some data for the expand_symtabs_matching callback. */
325
326struct symbol_matcher_data
327{
328 /* The lookup name against which symbol name should be compared. */
329 const char *lookup_name;
330
331 /* The routine to be used for comparison. */
1a119f36 332 symbol_name_cmp_ftype symbol_name_cmp;
74ccd7f5
JB
333};
334
f8eba3c6
TT
335/* A helper for iterate_over_all_matching_symtabs that is passed as a
336 callback to the expand_symtabs_matching method. */
50641945
FN
337
338static int
e078317b 339iterate_name_matcher (const char *name, void *d)
50641945 340{
74ccd7f5 341 const struct symbol_matcher_data *data = d;
50641945 342
1a119f36 343 if (data->symbol_name_cmp (name, data->lookup_name) == 0)
8e704927
GB
344 return 1; /* Expand this symbol's symbol table. */
345 return 0; /* Skip this symbol. */
f8eba3c6
TT
346}
347
348/* A helper that walks over all matching symtabs in all objfiles and
349 calls CALLBACK for each symbol matching NAME. If SEARCH_PSPACE is
350 not NULL, then the search is restricted to just that program
351 space. */
352
353static void
354iterate_over_all_matching_symtabs (const char *name,
355 const domain_enum domain,
8e704927 356 symbol_found_callback_ftype *callback,
f8eba3c6
TT
357 void *data,
358 struct program_space *search_pspace)
359{
360 struct objfile *objfile;
361 struct program_space *pspace;
74ccd7f5
JB
362 struct symbol_matcher_data matcher_data;
363
364 matcher_data.lookup_name = name;
1a119f36
JB
365 matcher_data.symbol_name_cmp =
366 current_language->la_get_symbol_name_cmp != NULL
367 ? current_language->la_get_symbol_name_cmp (name)
74ccd7f5 368 : strcmp_iw;
f8eba3c6
TT
369
370 ALL_PSPACES (pspace)
371 {
372 if (search_pspace != NULL && search_pspace != pspace)
373 continue;
374 if (pspace->executing_startup)
375 continue;
376
377 set_current_program_space (pspace);
50641945 378
f8eba3c6
TT
379 ALL_OBJFILES (objfile)
380 {
381 struct symtab *symtab;
382
383 if (objfile->sf)
384 objfile->sf->qf->expand_symtabs_matching (objfile, NULL,
385 iterate_name_matcher,
386 ALL_DOMAIN,
74ccd7f5 387 &matcher_data);
f8eba3c6
TT
388
389 ALL_OBJFILE_SYMTABS (objfile, symtab)
390 {
391 if (symtab->primary)
392 {
393 struct block *block;
50641945 394
f8eba3c6
TT
395 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
396 LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback, data);
397 }
398 }
399 }
400 }
50641945
FN
401}
402
e8eb7bc5
KS
403/* Returns the block to be used for symbol searches for the given SYMTAB,
404 which may be NULL. */
405
406static struct block *
407get_search_block (struct symtab *symtab)
408{
409 struct block *block;
410
411 if (symtab != NULL)
412 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
413 else
414 {
415 enum language save_language;
416
417 /* get_selected_block can change the current language when there is
418 no selected frame yet. */
419 save_language = current_language->la_language;
420 block = get_selected_block (0);
421 set_language (save_language);
422 }
423
424 return block;
425}
426
f8eba3c6
TT
427/* A helper for find_method. This finds all methods in type T which
428 match NAME. It adds resulting symbol names to RESULT_NAMES, and
429 adds T's direct superclasses to SUPERCLASSES. */
50641945 430
f8eba3c6
TT
431static void
432find_methods (struct type *t, const char *name,
433 VEC (const_char_ptr) **result_names,
434 VEC (typep) **superclasses)
50641945
FN
435{
436 int i1 = 0;
437 int ibase;
0d5cff50 438 const char *class_name = type_name_no_tag (t);
c00f8484 439
50641945
FN
440 /* Ignore this class if it doesn't have a name. This is ugly, but
441 unless we figure out how to get the physname without the name of
442 the class, then the loop can't do any good. */
f8eba3c6 443 if (class_name)
50641945
FN
444 {
445 int method_counter;
5c717440 446 int name_len = strlen (name);
50641945 447
8bd1f2c6 448 CHECK_TYPEDEF (t);
50641945
FN
449
450 /* Loop over each method name. At this level, all overloads of a name
451 are counted as a single name. There is an inner loop which loops over
452 each overload. */
453
454 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
455 method_counter >= 0;
456 --method_counter)
457 {
0d5cff50 458 const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
50641945
FN
459 char dem_opname[64];
460
461 if (strncmp (method_name, "__", 2) == 0 ||
462 strncmp (method_name, "op", 2) == 0 ||
463 strncmp (method_name, "type", 4) == 0)
464 {
465 if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
466 method_name = dem_opname;
467 else if (cplus_demangle_opname (method_name, dem_opname, 0))
468 method_name = dem_opname;
469 }
470
f8eba3c6
TT
471 if (strcmp_iw (method_name, name) == 0)
472 {
473 int field_counter;
aee8d8ba 474
f8eba3c6
TT
475 for (field_counter = (TYPE_FN_FIELDLIST_LENGTH (t, method_counter)
476 - 1);
477 field_counter >= 0;
478 --field_counter)
479 {
480 struct fn_field *f;
481 const char *phys_name;
482
483 f = TYPE_FN_FIELDLIST1 (t, method_counter);
484 if (TYPE_FN_FIELD_STUB (f, field_counter))
485 continue;
486 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
487 VEC_safe_push (const_char_ptr, *result_names, phys_name);
488 }
489 }
aee8d8ba
DC
490 }
491 }
492
f8eba3c6
TT
493 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
494 VEC_safe_push (typep, *superclasses, TYPE_BASECLASS (t, ibase));
50641945
FN
495}
496
50641945
FN
497/* Find an instance of the character C in the string S that is outside
498 of all parenthesis pairs, single-quoted strings, and double-quoted
8120c9d5
EZ
499 strings. Also, ignore the char within a template name, like a ','
500 within foo<int, int>. */
501
50641945
FN
502static char *
503find_toplevel_char (char *s, char c)
504{
505 int quoted = 0; /* zero if we're not in quotes;
506 '"' if we're in a double-quoted string;
507 '\'' if we're in a single-quoted string. */
a04257e6 508 int depth = 0; /* Number of unclosed parens we've seen. */
50641945
FN
509 char *scan;
510
511 for (scan = s; *scan; scan++)
512 {
513 if (quoted)
514 {
515 if (*scan == quoted)
516 quoted = 0;
517 else if (*scan == '\\' && *(scan + 1))
518 scan++;
519 }
520 else if (*scan == c && ! quoted && depth == 0)
521 return scan;
522 else if (*scan == '"' || *scan == '\'')
523 quoted = *scan;
8120c9d5 524 else if (*scan == '(' || *scan == '<')
50641945 525 depth++;
8120c9d5 526 else if ((*scan == ')' || *scan == '>') && depth > 0)
50641945
FN
527 depth--;
528 }
529
530 return 0;
531}
532
889f28e2 533/* Determines if the gives string corresponds to an Objective-C method
1777feb0 534 representation, such as -[Foo bar:] or +[Foo bar]. Objective-C symbols
889f28e2
AF
535 are allowed to have spaces and parentheses in them. */
536
537static int
538is_objc_method_format (const char *s)
539{
540 if (s == NULL || *s == '\0')
541 return 0;
542 /* Handle arguments with the format FILENAME:SYMBOL. */
543 if ((s[0] == ':') && (strchr ("+-", s[1]) != NULL)
544 && (s[2] == '[') && strchr(s, ']'))
545 return 1;
546 /* Handle arguments that are just SYMBOL. */
547 else if ((strchr ("+-", s[0]) != NULL) && (s[1] == '[') && strchr(s, ']'))
548 return 1;
549 return 0;
550}
551
f8eba3c6
TT
552/* Given FILTERS, a list of canonical names, filter the sals in RESULT
553 and store the result in SELF->CANONICAL. */
50641945 554
f8eba3c6
TT
555static void
556filter_results (struct linespec_state *self,
557 struct symtabs_and_lines *result,
558 VEC (const_char_ptr) *filters)
559{
560 int i;
561 const char *name;
562
563 for (i = 0; VEC_iterate (const_char_ptr, filters, i, name); ++i)
564 {
565 struct linespec_sals lsal;
566 int j;
567
568 memset (&lsal, 0, sizeof (lsal));
569
570 for (j = 0; j < result->nelts; ++j)
571 {
572 if (strcmp (name, self->canonical_names[j]) == 0)
573 add_sal_to_sals_basic (&lsal.sals, &result->sals[j]);
574 }
575
576 if (lsal.sals.nelts > 0)
577 {
578 lsal.canonical = xstrdup (name);
579 VEC_safe_push (linespec_sals, self->canonical->sals, &lsal);
580 }
581 }
582
583 self->canonical->pre_expanded = 0;
584}
585
586/* Store RESULT into SELF->CANONICAL. */
587
588static void
589convert_results_to_lsals (struct linespec_state *self,
590 struct symtabs_and_lines *result)
50641945 591{
f8eba3c6
TT
592 struct linespec_sals lsal;
593
594 lsal.canonical = NULL;
595 lsal.sals = *result;
596 VEC_safe_push (linespec_sals, self->canonical->sals, &lsal);
597}
598
599/* Handle multiple results in RESULT depending on SELECT_MODE. This
600 will either return normally, throw an exception on multiple
601 results, or present a menu to the user. On return, the SALS vector
602 in SELF->CANONICAL is set up properly. */
603
604static void
605decode_line_2 (struct linespec_state *self,
606 struct symtabs_and_lines *result,
607 const char *select_mode)
608{
609 const char *iter;
610 char *args, *prompt;
50641945 611 int i;
50641945 612 struct cleanup *old_chain;
f8eba3c6
TT
613 VEC (const_char_ptr) *item_names = NULL, *filters = NULL;
614 struct get_number_or_range_state state;
50641945 615
f8eba3c6
TT
616 gdb_assert (select_mode != multiple_symbols_all);
617 gdb_assert (self->canonical != NULL);
50641945 618
f8eba3c6
TT
619 old_chain = make_cleanup (VEC_cleanup (const_char_ptr), &item_names);
620 make_cleanup (VEC_cleanup (const_char_ptr), &filters);
621 for (i = 0; i < result->nelts; ++i)
50641945 622 {
f8eba3c6
TT
623 int j, found = 0;
624 const char *iter;
625
626 gdb_assert (self->canonical_names[i] != NULL);
627 for (j = 0; VEC_iterate (const_char_ptr, item_names, j, iter); ++j)
628 {
629 if (strcmp (iter, self->canonical_names[i]) == 0)
630 {
631 found = 1;
632 break;
633 }
634 }
635
636 if (!found)
637 VEC_safe_push (const_char_ptr, item_names, self->canonical_names[i]);
50641945
FN
638 }
639
f8eba3c6
TT
640 if (select_mode == multiple_symbols_cancel
641 && VEC_length (const_char_ptr, item_names) > 1)
642 error (_("canceled because the command is ambiguous\n"
643 "See set/show multiple-symbol."));
644
645 if (select_mode == multiple_symbols_all
646 || VEC_length (const_char_ptr, item_names) == 1)
50641945 647 {
f8eba3c6
TT
648 do_cleanups (old_chain);
649 convert_results_to_lsals (self, result);
650 return;
50641945
FN
651 }
652
e0a4d108
KS
653 /* Sort the list of method names alphabetically. */
654 qsort (VEC_address (const_char_ptr, item_names),
655 VEC_length (const_char_ptr, item_names),
656 sizeof (const_char_ptr), compare_strings);
657
f8eba3c6
TT
658 printf_unfiltered (_("[0] cancel\n[1] all\n"));
659 for (i = 0; VEC_iterate (const_char_ptr, item_names, i, iter); ++i)
660 printf_unfiltered ("[%d] %s\n", i + 2, iter);
661
662 prompt = getenv ("PS2");
663 if (prompt == NULL)
50641945 664 {
f8eba3c6 665 prompt = "> ";
50641945 666 }
f8eba3c6 667 args = command_line_input (prompt, 0, "overload-choice");
50641945
FN
668
669 if (args == 0 || *args == 0)
e2e0b3e5 670 error_no_arg (_("one or more choice numbers"));
50641945 671
f8eba3c6
TT
672 init_number_or_range (&state, args);
673 while (!state.finished)
50641945
FN
674 {
675 int num;
676
f8eba3c6 677 num = get_number_or_range (&state);
50641945
FN
678
679 if (num == 0)
8a3fe4f8 680 error (_("canceled"));
50641945
FN
681 else if (num == 1)
682 {
f8eba3c6
TT
683 /* We intentionally make this result in a single breakpoint,
684 contrary to what older versions of gdb did. The
685 rationale is that this lets a user get the
686 multiple_symbols_all behavior even with the 'ask'
687 setting; and he can get separate breakpoints by entering
688 "2-57" at the query. */
689 do_cleanups (old_chain);
690 convert_results_to_lsals (self, result);
691 return;
50641945
FN
692 }
693
f8eba3c6
TT
694 num -= 2;
695 if (num >= VEC_length (const_char_ptr, item_names))
696 printf_unfiltered (_("No choice number %d.\n"), num);
50641945
FN
697 else
698 {
f8eba3c6
TT
699 const char *elt = VEC_index (const_char_ptr, item_names, num);
700
701 if (elt != NULL)
50641945 702 {
f8eba3c6
TT
703 VEC_safe_push (const_char_ptr, filters, elt);
704 VEC_replace (const_char_ptr, item_names, num, NULL);
50641945
FN
705 }
706 else
707 {
3e43a32a
MS
708 printf_unfiltered (_("duplicate request for %d ignored.\n"),
709 num);
50641945
FN
710 }
711 }
50641945 712 }
f8eba3c6
TT
713
714 filter_results (self, result, filters);
715 do_cleanups (old_chain);
50641945 716}
94af9270 717
3d50dd94
JK
718/* Valid delimiters for linespec keywords "if", "thread" or "task". */
719
720static int
721is_linespec_boundary (char c)
722{
723 return c == ' ' || c == '\t' || c == '\0' || c == ',';
724}
725
94af9270
KS
726/* A helper function for decode_line_1 and friends which skips P
727 past any method overload information at the beginning of P, e.g.,
728 "(const struct foo *)".
729
730 This function assumes that P has already been validated to contain
731 overload information, and it will assert if *P != '('. */
732static char *
733find_method_overload_end (char *p)
734{
735 int depth = 0;
736
737 gdb_assert (*p == '(');
738
739 while (*p)
740 {
741 if (*p == '(')
742 ++depth;
743 else if (*p == ')')
744 {
745 if (--depth == 0)
746 {
747 ++p;
748 break;
749 }
750 }
751 ++p;
752 }
753
754 return p;
755}
c00f8484 756
c00f8484 757/* Keep important information used when looking up a name. This includes
3d50dd94
JK
758 template parameters, overload information, and important keywords, including
759 the possible Java trailing type. */
c00f8484
KS
760
761static char *
3d50dd94 762keep_name_info (char *p, int on_boundary)
c00f8484 763{
3d50dd94
JK
764 const char *quotes = get_gdb_completer_quote_characters ();
765 char *saved_p = p;
766 int nest = 0;
c00f8484 767
3d50dd94
JK
768 while (*p)
769 {
770 if (strchr (quotes, *p))
771 break;
c00f8484 772
3d50dd94
JK
773 if (*p == ',' && !nest)
774 break;
c00f8484 775
3d50dd94
JK
776 if (on_boundary && !nest)
777 {
778 const char *const words[] = { "if", "thread", "task" };
779 int wordi;
c00f8484 780
3d50dd94
JK
781 for (wordi = 0; wordi < ARRAY_SIZE (words); wordi++)
782 if (strncmp (p, words[wordi], strlen (words[wordi])) == 0
783 && is_linespec_boundary (p[strlen (words[wordi])]))
784 break;
785 if (wordi < ARRAY_SIZE (words))
786 break;
787 }
c00f8484 788
3d50dd94
JK
789 if (*p == '(' || *p == '<' || *p == '[')
790 nest++;
791 else if ((*p == ')' || *p == '>' || *p == ']') && nest > 0)
792 nest--;
c00f8484 793
3d50dd94
JK
794 p++;
795
796 /* The ',' check could fail on "operator ,". */
797 p += cp_validate_operator (p);
798
799 on_boundary = is_linespec_boundary (p[-1]);
f17170e5 800 }
c00f8484 801
3d50dd94
JK
802 while (p > saved_p && is_linespec_boundary (p[-1]))
803 p--;
804
805 return p;
c00f8484
KS
806}
807
50641945 808\f
1777feb0 809/* The parser of linespec itself. */
50641945
FN
810
811/* Parse a string that specifies a line number.
812 Pass the address of a char * variable; that variable will be
813 advanced over the characters actually parsed.
814
815 The string can be:
816
817 LINENUM -- that line number in current file. PC returned is 0.
818 FILE:LINENUM -- that line in that file. PC returned is 0.
819 FUNCTION -- line number of openbrace of that function.
820 PC returned is the start of the function.
0f5238ed 821 LABEL -- a label in the current scope
50641945
FN
822 VARIABLE -- line number of definition of that variable.
823 PC returned is 0.
824 FILE:FUNCTION -- likewise, but prefer functions in that file.
825 *EXPR -- line in which address EXPR appears.
826
827 This may all be followed by an "if EXPR", which we ignore.
828
829 FUNCTION may be an undebuggable function found in minimal symbol table.
830
831 If the argument FUNFIRSTLINE is nonzero, we want the first line
832 of real code inside a function when a function is specified, and it is
833 not OK to specify a variable or type to get its line number.
834
835 DEFAULT_SYMTAB specifies the file to use if none is specified.
836 It defaults to current_source_symtab.
837 DEFAULT_LINE specifies the line number to use for relative
838 line numbers (that start with signs). Defaults to current_source_line.
839 If CANONICAL is non-NULL, store an array of strings containing the canonical
1777feb0 840 line specs there if necessary. Currently overloaded member functions and
50641945 841 line numbers or static functions without a filename yield a canonical
1777feb0 842 line spec. The array and the line spec strings are allocated on the heap,
50641945
FN
843 it is the callers responsibility to free them.
844
845 Note that it is possible to return zero for the symtab
846 if no file is validly specified. Callers must check that.
58438ac1 847 Also, the line number returned may be invalid. */
50641945
FN
848
849/* We allow single quotes in various places. This is a hideous
850 kludge, which exists because the completer can't yet deal with the
851 lack of single quotes. FIXME: write a linespec_completer which we
852 can use as appropriate instead of make_symbol_completion_list. */
853
ad32032e 854static struct symtabs_and_lines
f8eba3c6 855decode_line_internal (struct linespec_state *self, char **argptr)
50641945 856{
f3c39e76 857 char *p;
614b3b14 858 char *q;
50641945 859
50641945 860 char *copy;
636b1a6d
DC
861 /* This says whether or not something in *ARGPTR is quoted with
862 completer_quotes (i.e. with single quotes). */
e325fb69 863 int is_quoted;
e5dd4106 864 /* Is *ARGPTR enclosed in double quotes? */
50641945 865 int is_quote_enclosed;
d2630e69 866 int is_objc_method = 0;
50641945 867 char *saved_arg = *argptr;
791dfb64
DJ
868 /* If IS_QUOTED, the end of the quoted bit. */
869 char *end_quote = NULL;
e8eb7bc5
KS
870 /* Is *ARGPTR enclosed in single quotes? */
871 int is_squote_enclosed = 0;
0e0b460e
KS
872 /* The "first half" of the linespec. */
873 char *first_half;
50641945 874
f8eba3c6
TT
875 /* If we are parsing `function:label', this holds the symbols
876 matching the function name. */
877 VEC (symbolp) *function_symbols = NULL;
878 /* If FUNCTION_SYMBOLS is not NULL, then this is the exception that
9ef07c8c
TT
879 was thrown when trying to parse a filename. */
880 volatile struct gdb_exception file_exception;
881
f8eba3c6
TT
882 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
883
50641945
FN
884 /* Defaults have defaults. */
885
f8eba3c6 886 initialize_defaults (&self->default_symtab, &self->default_line);
44fe14ab 887
a04257e6 888 /* See if arg is *PC. */
50641945 889
e325fb69 890 if (**argptr == '*')
f8eba3c6
TT
891 {
892 do_cleanups (cleanup);
893 return decode_indirect (self, argptr);
894 }
5f01dbc0 895
e325fb69
MS
896 is_quoted = (strchr (get_gdb_completer_quote_characters (),
897 **argptr) != NULL);
50641945 898
791dfb64 899 if (is_quoted)
e8eb7bc5
KS
900 {
901 end_quote = skip_quoted (*argptr);
902 if (*end_quote == '\0')
903 is_squote_enclosed = 1;
904 }
50641945 905
0960f083
DC
906 /* Check to see if it's a multipart linespec (with colons or
907 periods). */
50641945 908
17763fd9
EZ
909 /* Locate the end of the first half of the linespec.
910 After the call, for instance, if the argptr string is "foo.c:123"
e871429d 911 p will point at ":123". If there is only one part, like "foo", p
1777feb0
MS
912 will point to "". If this is a C++ name, like "A::B::foo", p will
913 point to "::B::foo". Argptr is not changed by this call. */
50641945 914
0e0b460e 915 first_half = p = locate_first_half (argptr, &is_quote_enclosed);
50641945 916
e8eb7bc5 917 /* First things first: if ARGPTR starts with a filename, get its
136e1c30
DE
918 symtab and strip the filename from ARGPTR.
919 Avoid calling symtab_from_filename if we know can,
ff3c9849
TT
920 it can be expensive. We know we can avoid the call if we see a
921 single word (e.g., "break NAME") or if we see a qualified C++
922 name ("break QUAL::NAME"). */
136e1c30 923
ff3c9849 924 if (*p != '\0' && !(p[0] == ':' && p[1] == ':'))
e8eb7bc5 925 {
136e1c30
DE
926 TRY_CATCH (file_exception, RETURN_MASK_ERROR)
927 {
928 self->file_symtabs = symtabs_from_filename (argptr, p,
929 is_quote_enclosed,
930 &self->user_filename);
931 }
932
933 if (file_exception.reason >= 0)
934 {
935 /* Check for single quotes on the non-filename part. */
936 is_quoted = (**argptr
937 && strchr (get_gdb_completer_quote_characters (),
938 **argptr) != NULL);
939 if (is_quoted)
940 end_quote = skip_quoted (*argptr);
941
942 /* Locate the next "half" of the linespec. */
943 first_half = p = locate_first_half (argptr, &is_quote_enclosed);
944 }
f8eba3c6 945
136e1c30
DE
946 if (VEC_empty (symtab_p, self->file_symtabs))
947 {
948 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
949 VEC_safe_push (symtab_p, self->file_symtabs, NULL);
950 }
951 }
952 else
f8eba3c6
TT
953 {
954 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
955 VEC_safe_push (symtab_p, self->file_symtabs, NULL);
e8eb7bc5
KS
956 }
957
d2630e69
AF
958 /* Check if this is an Objective-C method (anything that starts with
959 a '+' or '-' and a '['). */
889f28e2 960 if (is_objc_method_format (p))
94af9270 961 is_objc_method = 1;
d2630e69
AF
962
963 /* Check if the symbol could be an Objective-C selector. */
964
965 {
966 struct symtabs_and_lines values;
e0881a8e 967
f8eba3c6 968 values = decode_objc (self, argptr);
d2630e69 969 if (values.sals != NULL)
f8eba3c6
TT
970 {
971 do_cleanups (cleanup);
972 return values;
973 }
d2630e69
AF
974 }
975
0960f083 976 /* Does it look like there actually were two parts? */
50641945 977
791dfb64 978 if (p[0] == ':' || p[0] == '.')
50641945 979 {
17763fd9
EZ
980 /* Is it a C++ or Java compound data structure?
981 The check on p[1] == ':' is capturing the case of "::",
1777feb0 982 since p[0]==':' was checked above.
17763fd9
EZ
983 Note that the call to decode_compound does everything
984 for us, including the lookup on the symbol table, so we
1777feb0 985 can return now. */
17763fd9 986
50641945 987 if (p[0] == '.' || p[1] == ':')
791dfb64 988 {
1dabb4c4
JB
989 /* We only perform this check for the languages where it might
990 make sense. For instance, Ada does not use this type of
991 syntax, and trying to apply this logic on an Ada linespec
992 may trigger a spurious error (for instance, decode_compound
993 does not like expressions such as `ops."<"', which is a
994 valid function name in Ada). */
995 if (current_language->la_language == language_c
996 || current_language->la_language == language_cplus
997 || current_language->la_language == language_java)
998 {
999 struct symtabs_and_lines values;
1000 volatile struct gdb_exception ex;
1001 char *saved_argptr = *argptr;
94af9270 1002
1dabb4c4
JB
1003 if (is_quote_enclosed)
1004 ++saved_arg;
dcf9f4ab 1005
1dabb4c4
JB
1006 /* Initialize it just to avoid a GCC false warning. */
1007 memset (&values, 0, sizeof (values));
2f741504 1008
1dabb4c4
JB
1009 TRY_CATCH (ex, RETURN_MASK_ERROR)
1010 {
1011 values = decode_compound (self, argptr, saved_arg, p);
1012 }
1013 if ((is_quoted || is_squote_enclosed) && **argptr == '\'')
1014 *argptr = *argptr + 1;
50641945 1015
1dabb4c4
JB
1016 if (ex.reason >= 0)
1017 {
1018 do_cleanups (cleanup);
1019 return values;
1020 }
50641945 1021
1dabb4c4
JB
1022 if (ex.error != NOT_FOUND_ERROR)
1023 throw_exception (ex);
dcf9f4ab 1024
1dabb4c4
JB
1025 *argptr = saved_argptr;
1026 }
dcf9f4ab
JK
1027 }
1028 else
50641945 1029 {
dcf9f4ab
JK
1030 /* If there was an exception looking up a specified filename earlier,
1031 then check whether we were really given `function:label'. */
1032 if (file_exception.reason < 0)
1033 {
f8eba3c6
TT
1034 function_symbols = find_function_symbols (argptr, p,
1035 is_quote_enclosed,
1036 &self->user_function);
1037
dcf9f4ab
JK
1038 /* If we did not find a function, re-throw the original
1039 exception. */
f8eba3c6 1040 if (!function_symbols)
dcf9f4ab 1041 throw_exception (file_exception);
f8eba3c6
TT
1042
1043 make_cleanup (VEC_cleanup (symbolp), &function_symbols);
dcf9f4ab
JK
1044 }
1045
1046 /* Check for single quotes on the non-filename part. */
1047 if (!is_quoted)
1048 {
1049 is_quoted = (**argptr
1050 && strchr (get_gdb_completer_quote_characters (),
1051 **argptr) != NULL);
1052 if (is_quoted)
1053 end_quote = skip_quoted (*argptr);
1054 }
50641945 1055 }
50641945 1056 }
50641945 1057
f8eba3c6
TT
1058 /* self->file_symtabs holds the specified file symtabs, or 0 if no file
1059 specified.
1060 If we are parsing `function:symbol', then FUNCTION_SYMBOLS holds the
1061 functions before the `:'.
50641945
FN
1062 arg no longer contains the file name. */
1063
0e0b460e
KS
1064 /* If the filename was quoted, we must re-check the quotation. */
1065
1066 if (end_quote == first_half && *end_quote!= '\0')
1067 {
1068 is_quoted = (**argptr
1069 && strchr (get_gdb_completer_quote_characters (),
1070 **argptr) != NULL);
1071 if (is_quoted)
1072 end_quote = skip_quoted (*argptr);
1073 }
1074
a04257e6 1075 /* Check whether arg is all digits (and sign). */
50641945
FN
1076
1077 q = *argptr;
1078 if (*q == '-' || *q == '+')
1079 q++;
1080 while (*q >= '0' && *q <= '9')
1081 q++;
1082
9ef07c8c 1083 if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ',')
f8eba3c6
TT
1084 && function_symbols == NULL)
1085 {
1086 struct symtabs_and_lines values;
1087
1088 /* We found a token consisting of all digits -- at least one digit. */
1089 values = decode_all_digits (self, argptr, q);
1090 do_cleanups (cleanup);
1091 return values;
1092 }
50641945
FN
1093
1094 /* Arg token is not digits => try it as a variable name
1095 Find the next token (everything up to end or next whitespace). */
1096
a04257e6
DC
1097 if (**argptr == '$') /* May be a convenience variable. */
1098 /* One or two $ chars possible. */
1099 p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));
e8eb7bc5 1100 else if (is_quoted || is_squote_enclosed)
50641945 1101 {
791dfb64 1102 p = end_quote;
50641945 1103 if (p[-1] != '\'')
8a3fe4f8 1104 error (_("Unmatched single quote."));
50641945 1105 }
d2630e69
AF
1106 else if (is_objc_method)
1107 {
1777feb0 1108 /* allow word separators in method names for Obj-C. */
d2630e69
AF
1109 p = skip_quoted_chars (*argptr, NULL, "");
1110 }
50641945
FN
1111 else
1112 {
1113 p = skip_quoted (*argptr);
1114 }
1115
c00f8484 1116 /* Keep any important naming information. */
3d50dd94 1117 p = keep_name_info (p, p == saved_arg || is_linespec_boundary (p[-1]));
94af9270 1118
50641945
FN
1119 copy = (char *) alloca (p - *argptr + 1);
1120 memcpy (copy, *argptr, p - *argptr);
1121 copy[p - *argptr] = '\0';
1122 if (p != *argptr
1123 && copy[0]
1124 && copy[0] == copy[p - *argptr - 1]
c5f0f3d0 1125 && strchr (get_gdb_completer_quote_characters (), copy[0]) != NULL)
50641945
FN
1126 {
1127 copy[p - *argptr - 1] = '\0';
1128 copy++;
1129 }
e8eb7bc5 1130 else if (is_quoted || is_squote_enclosed)
791dfb64 1131 copy[p - *argptr - 1] = '\0';
f8eba3c6
TT
1132
1133 *argptr = skip_spaces (p);
50641945
FN
1134
1135 /* If it starts with $: may be a legitimate variable or routine name
1136 (e.g. HP-UX millicode routines such as $$dyncall), or it may
a04257e6 1137 be history value, or it may be a convenience variable. */
50641945 1138
f8eba3c6
TT
1139 if (*copy == '$' && function_symbols == NULL)
1140 {
1141 struct symtabs_and_lines values;
1142
1143 values = decode_dollar (self, copy);
1144 do_cleanups (cleanup);
1145 return values;
1146 }
50641945 1147
0f5238ed
TT
1148 /* Try the token as a label, but only if no file was specified,
1149 because we can only really find labels in the current scope. */
1150
f8eba3c6
TT
1151 if (VEC_length (symtab_p, self->file_symtabs) == 1
1152 && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
0f5238ed
TT
1153 {
1154 struct symtabs_and_lines label_result;
f8eba3c6
TT
1155 if (decode_label (self, function_symbols, copy, &label_result))
1156 {
1157 do_cleanups (cleanup);
1158 return label_result;
1159 }
0f5238ed
TT
1160 }
1161
f8eba3c6 1162 if (function_symbols)
58438ac1 1163 throw_exception (file_exception);
9ef07c8c 1164
50641945
FN
1165 /* Look up that token as a variable.
1166 If file specified, use that file's per-file block to start with. */
1167
f8eba3c6
TT
1168 {
1169 struct symtabs_and_lines values;
1170
1171 values = decode_variable (self, copy);
1172 do_cleanups (cleanup);
1173 return values;
1174 }
413dad4d 1175}
50641945 1176
f8eba3c6 1177/* A constructor for linespec_state. */
44fe14ab 1178
f8eba3c6
TT
1179static void
1180linespec_state_constructor (struct linespec_state *self,
1181 int flags,
1182 struct symtab *default_symtab,
1183 int default_line,
1184 struct linespec_result *canonical)
1185{
1186 memset (self, 0, sizeof (*self));
1187 self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
1188 self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
1189 self->default_symtab = default_symtab;
1190 self->default_line = default_line;
1191 self->canonical = canonical;
1192 self->program_space = current_program_space;
1193 self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
1194 xfree, xcalloc, xfree);
1195}
44fe14ab 1196
f8eba3c6 1197/* A destructor for linespec_state. */
44fe14ab
DC
1198
1199static void
f8eba3c6 1200linespec_state_destructor (void *arg)
44fe14ab 1201{
f8eba3c6 1202 struct linespec_state *self = arg;
44fe14ab 1203
f8eba3c6
TT
1204 xfree (self->user_filename);
1205 xfree (self->user_function);
1206 VEC_free (symtab_p, self->file_symtabs);
1207 htab_delete (self->addr_set);
1208}
44fe14ab 1209
f8eba3c6 1210/* See linespec.h. */
44fe14ab 1211
f8eba3c6
TT
1212void
1213decode_line_full (char **argptr, int flags,
1214 struct symtab *default_symtab,
1215 int default_line, struct linespec_result *canonical,
1216 const char *select_mode,
1217 const char *filter)
44fe14ab 1218{
f8eba3c6
TT
1219 struct symtabs_and_lines result;
1220 struct linespec_state state;
1221 struct cleanup *cleanups;
1222 char *arg_start = *argptr;
1223 VEC (const_char_ptr) *filters = NULL;
1224
1225 gdb_assert (canonical != NULL);
1226 /* The filter only makes sense for 'all'. */
1227 gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
1228 gdb_assert (select_mode == NULL
1229 || select_mode == multiple_symbols_all
1230 || select_mode == multiple_symbols_ask
1231 || select_mode == multiple_symbols_cancel);
1232 gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
1233
1234 linespec_state_constructor (&state, flags,
1235 default_symtab, default_line, canonical);
1236 cleanups = make_cleanup (linespec_state_destructor, &state);
1237 save_current_program_space ();
1238
1239 result = decode_line_internal (&state, argptr);
1240
1241 gdb_assert (result.nelts == 1 || canonical->pre_expanded);
1242 gdb_assert (canonical->addr_string != NULL);
1243 canonical->pre_expanded = 1;
1244
1245 /* Fill in the missing canonical names. */
1246 if (result.nelts > 0)
1247 {
1248 int i;
1249
1250 if (state.canonical_names == NULL)
1251 state.canonical_names = xcalloc (result.nelts, sizeof (char *));
1252 make_cleanup (xfree, state.canonical_names);
1253 for (i = 0; i < result.nelts; ++i)
1254 {
1255 if (state.canonical_names[i] == NULL)
1256 state.canonical_names[i] = savestring (arg_start,
1257 *argptr - arg_start);
1258 make_cleanup (xfree, state.canonical_names[i]);
1259 }
1260 }
1261
1262 if (select_mode == NULL)
1263 {
1264 if (ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
1265 select_mode = multiple_symbols_all;
1266 else
1267 select_mode = multiple_symbols_select_mode ();
1268 }
1269
1270 if (select_mode == multiple_symbols_all)
1271 {
1272 if (filter != NULL)
1273 {
1274 make_cleanup (VEC_cleanup (const_char_ptr), &filters);
1275 VEC_safe_push (const_char_ptr, filters, filter);
1276 filter_results (&state, &result, filters);
1277 }
1278 else
1279 convert_results_to_lsals (&state, &result);
1280 }
1281 else
1282 decode_line_2 (&state, &result, select_mode);
1283
1284 do_cleanups (cleanups);
1285}
1286
1287struct symtabs_and_lines
1288decode_line_1 (char **argptr, int flags,
1289 struct symtab *default_symtab,
1290 int default_line)
1291{
1292 struct symtabs_and_lines result;
1293 struct linespec_state state;
1294 struct cleanup *cleanups;
1295
1296 linespec_state_constructor (&state, flags,
1297 default_symtab, default_line, NULL);
1298 cleanups = make_cleanup (linespec_state_destructor, &state);
1299 save_current_program_space ();
1300
1301 result = decode_line_internal (&state, argptr);
1302 do_cleanups (cleanups);
1303 return result;
1304}
1305
1306\f
1307
1308/* First, some functions to initialize stuff at the beggining of the
1309 function. */
1310
1311static void
1312initialize_defaults (struct symtab **default_symtab, int *default_line)
1313{
1314 if (*default_symtab == 0)
1315 {
1316 /* Use whatever we have for the default source line. We don't use
1317 get_current_or_default_symtab_and_line as it can recurse and call
1318 us back! */
1319 struct symtab_and_line cursal =
1320 get_current_source_symtab_and_line ();
1321
1322 *default_symtab = cursal.symtab;
1323 *default_line = cursal.line;
1324 }
1325}
1326
1327\f
1328
1329/* Decode arg of the form *PC. */
1330
1331static struct symtabs_and_lines
1332decode_indirect (struct linespec_state *self, char **argptr)
1333{
1334 struct symtabs_and_lines values;
1335 CORE_ADDR pc;
1336 char *initial = *argptr;
1337
1338 if (current_program_space->executing_startup)
1339 /* The error message doesn't really matter, because this case
1340 should only hit during breakpoint reset. */
1341 throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
1342 "program space is in startup"));
1343
44fe14ab 1344 (*argptr)++;
63ffa6ee 1345 pc = value_as_address (parse_to_comma_and_eval (argptr));
44fe14ab
DC
1346
1347 values.sals = (struct symtab_and_line *)
1348 xmalloc (sizeof (struct symtab_and_line));
1349
1350 values.nelts = 1;
1351 values.sals[0] = find_pc_line (pc, 0);
1352 values.sals[0].pc = pc;
1353 values.sals[0].section = find_pc_overlay (pc);
ed0616c6 1354 values.sals[0].explicit_pc = 1;
44fe14ab 1355
f8eba3c6
TT
1356 if (self->canonical)
1357 self->canonical->addr_string = savestring (initial, *argptr - initial);
1358
44fe14ab
DC
1359 return values;
1360}
413dad4d
DC
1361
1362\f
1363
0960f083
DC
1364/* Locate the first half of the linespec, ending in a colon, period,
1365 or whitespace. (More or less.) Also, check to see if *ARGPTR is
1366 enclosed in double quotes; if so, set is_quote_enclosed, advance
17763fd9
EZ
1367 ARGPTR past that and zero out the trailing double quote.
1368 If ARGPTR is just a simple name like "main", p will point to ""
1369 at the end. */
0960f083
DC
1370
1371static char *
1372locate_first_half (char **argptr, int *is_quote_enclosed)
1373{
1374 char *ii;
1375 char *p, *p1;
1376 int has_comma;
1377
53907c91
JB
1378 /* Check if the linespec starts with an Ada operator (such as "+",
1379 or ">", for instance). */
1380 p = *argptr;
1381 if (p[0] == '"'
1382 && current_language->la_language == language_ada)
1383 {
1384 const struct ada_opname_map *op;
1385
1386 for (op = ada_opname_table; op->encoded != NULL; op++)
1387 if (strncmp (op->decoded, p, strlen (op->decoded)) == 0)
1388 break;
1389 if (op->encoded != NULL)
1390 {
1391 *is_quote_enclosed = 0;
1392 return p + strlen (op->decoded);
1393 }
1394 }
1395
0960f083
DC
1396 /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
1397 and we must isolate the first half. Outer layers will call again later
1398 for the second half.
1399
1400 Don't count commas that appear in argument lists of overloaded
1401 functions, or in quoted strings. It's stupid to go to this much
1402 trouble when the rest of the function is such an obvious roach hotel. */
1403 ii = find_toplevel_char (*argptr, ',');
1404 has_comma = (ii != 0);
1405
a04257e6 1406 /* Temporarily zap out second half to not confuse the code below.
1777feb0 1407 This is undone below. Do not change ii!! */
0960f083
DC
1408 if (has_comma)
1409 {
1410 *ii = '\0';
1411 }
1412
a04257e6
DC
1413 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION. May also be
1414 CLASS::MEMBER, or NAMESPACE::NAME. Look for ':', but ignore
1415 inside of <>. */
0960f083
DC
1416
1417 p = *argptr;
1418 if (p[0] == '"')
1419 {
1420 *is_quote_enclosed = 1;
1421 (*argptr)++;
1422 p++;
1423 }
1424 else
0e0b460e
KS
1425 {
1426 *is_quote_enclosed = 0;
1427 if (strchr (get_gdb_completer_quote_characters (), *p))
1428 {
1429 ++(*argptr);
1430 ++p;
1431 }
1432 }
731971ed
KS
1433
1434
1435 /* Check for a drive letter in the filename. This is done on all hosts
1436 to capture cross-compilation environments. On Unixen, directory
1437 separators are illegal in filenames, so if the user enters "e:/foo.c",
1438 he is referring to a directory named "e:" and a source file named
1439 "foo.c", and we still want to keep these two pieces together. */
1440 if (isalpha (p[0]) && p[1] == ':' && IS_DIR_SEPARATOR (p[2]))
1441 p += 3;
1442
0960f083
DC
1443 for (; *p; p++)
1444 {
1445 if (p[0] == '<')
1446 {
1447 char *temp_end = find_template_name_end (p);
e0881a8e 1448
0960f083 1449 if (!temp_end)
8a3fe4f8 1450 error (_("malformed template specification in command"));
0960f083
DC
1451 p = temp_end;
1452 }
c00f8484
KS
1453
1454 if (p[0] == '(')
1455 p = find_method_overload_end (p);
1456
d2630e69 1457 /* Check for a colon and a plus or minus and a [ (which
1777feb0 1458 indicates an Objective-C method). */
889f28e2 1459 if (is_objc_method_format (p))
d2630e69
AF
1460 {
1461 break;
1462 }
a04257e6 1463 /* Check for the end of the first half of the linespec. End of
e8eb7bc5
KS
1464 line, a tab, a colon or a space. But if enclosed in double
1465 quotes we do not break on enclosed spaces. */
0960f083
DC
1466 if (!*p
1467 || p[0] == '\t'
e8eb7bc5 1468 || (p[0] == ':')
0960f083
DC
1469 || ((p[0] == ' ') && !*is_quote_enclosed))
1470 break;
a04257e6 1471 if (p[0] == '.' && strchr (p, ':') == NULL)
0960f083 1472 {
a04257e6 1473 /* Java qualified method. Find the *last* '.', since the
94af9270
KS
1474 others are package qualifiers. Stop at any open parenthesis
1475 which might provide overload information. */
1476 for (p1 = p; *p1 && *p1 != '('; p1++)
0960f083
DC
1477 {
1478 if (*p1 == '.')
1479 p = p1;
1480 }
1481 break;
1482 }
1483 }
f8eba3c6 1484 p = skip_spaces (p);
0960f083 1485
a04257e6 1486 /* If the closing double quote was left at the end, remove it. */
0960f083
DC
1487 if (*is_quote_enclosed)
1488 {
1489 char *closing_quote = strchr (p - 1, '"');
e0881a8e 1490
0960f083
DC
1491 if (closing_quote && closing_quote[1] == '\0')
1492 *closing_quote = '\0';
1493 }
1494
a04257e6
DC
1495 /* Now that we've safely parsed the first half, put back ',' so
1496 outer layers can see it. */
0960f083
DC
1497 if (has_comma)
1498 *ii = ',';
1499
1500 return p;
1501}
1502
1503\f
1504
d2630e69
AF
1505/* Here's where we recognise an Objective-C Selector. An Objective C
1506 selector may be implemented by more than one class, therefore it
1507 may represent more than one method/function. This gives us a
1508 situation somewhat analogous to C++ overloading. If there's more
1509 than one method that could represent the selector, then use some of
1510 the existing C++ code to let the user choose one. */
1511
f8eba3c6
TT
1512static struct symtabs_and_lines
1513decode_objc (struct linespec_state *self, char **argptr)
d2630e69 1514{
f8eba3c6
TT
1515 struct collect_info info;
1516 VEC (const_char_ptr) *symbol_names = NULL;
1517 char *new_argptr;
1518 struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
1519 &symbol_names);
1520
1521 info.state = self;
1522 info.result.sals = NULL;
1523 info.result.nelts = 0;
f8eba3c6
TT
1524
1525 new_argptr = find_imps (*argptr, &symbol_names);
1526 if (VEC_empty (const_char_ptr, symbol_names))
1527 {
1528 do_cleanups (cleanup);
1529 return info.result;
1530 }
d2630e69 1531
f8eba3c6 1532 add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
d2630e69 1533
f8eba3c6 1534 if (info.result.nelts > 0)
d2630e69 1535 {
f8eba3c6 1536 char *saved_arg;
d2630e69 1537
f8eba3c6
TT
1538 saved_arg = alloca (new_argptr - *argptr + 1);
1539 memcpy (saved_arg, *argptr, new_argptr - *argptr);
1540 saved_arg[new_argptr - *argptr] = '\0';
d2630e69 1541
f8eba3c6 1542 if (self->canonical)
d2630e69 1543 {
f8eba3c6
TT
1544 self->canonical->pre_expanded = 1;
1545 if (self->user_filename)
1546 self->canonical->addr_string
1547 = xstrprintf ("%s:%s", self->user_filename, saved_arg);
1548 else
1549 self->canonical->addr_string = xstrdup (saved_arg);
d2630e69 1550 }
d2630e69
AF
1551 }
1552
f8eba3c6 1553 *argptr = new_argptr;
d2630e69 1554
f8eba3c6
TT
1555 do_cleanups (cleanup);
1556 return info.result;
d2630e69
AF
1557}
1558
614b3b14 1559/* This handles C++ and Java compound data structures. P should point
17763fd9
EZ
1560 at the first component separator, i.e. double-colon or period. As
1561 an example, on entrance to this function we could have ARGPTR
1562 pointing to "AAA::inA::fun" and P pointing to "::inA::fun". */
614b3b14
DC
1563
1564static struct symtabs_and_lines
f8eba3c6
TT
1565decode_compound (struct linespec_state *self,
1566 char **argptr, char *the_real_saved_arg, char *p)
614b3b14
DC
1567{
1568 struct symtabs_and_lines values;
f8eba3c6 1569 char *p2;
614b3b14
DC
1570 char *saved_arg2 = *argptr;
1571 char *temp_end;
1572 struct symbol *sym;
614b3b14 1573 char *copy;
f8eba3c6
TT
1574 VEC (symbolp) *sym_classes;
1575 char *saved_arg, *class_name;
1576 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
c00f8484
KS
1577
1578 /* If the user specified any completer quote characters in the input,
1579 strip them. They are superfluous. */
1580 saved_arg = alloca (strlen (the_real_saved_arg) + 1);
1581 {
1582 char *dst = saved_arg;
1583 char *src = the_real_saved_arg;
1584 char *quotes = get_gdb_completer_quote_characters ();
1585 while (*src != '\0')
1586 {
1587 if (strchr (quotes, *src) == NULL)
1588 *dst++ = *src;
1589 ++src;
1590 }
1591 *dst = '\0';
1592 }
614b3b14 1593
17763fd9
EZ
1594 /* First check for "global" namespace specification, of the form
1595 "::foo". If found, skip over the colons and jump to normal
1596 symbol processing. I.e. the whole line specification starts with
1777feb0 1597 "::" (note the condition that *argptr == p). */
614b3b14
DC
1598 if (p[0] == ':'
1599 && ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
1600 saved_arg2 += 2;
1601
87b3ede8
DC
1602 /* Given our example "AAA::inA::fun", we have two cases to consider:
1603
1604 1) AAA::inA is the name of a class. In that case, presumably it
1605 has a method called "fun"; we then look up that method using
1606 find_method.
1607
1608 2) AAA::inA isn't the name of a class. In that case, either the
c00f8484
KS
1609 user made a typo, AAA::inA is the name of a namespace, or it is
1610 the name of a minimal symbol.
f8eba3c6 1611 In this case we just delegate to decode_variable.
87b3ede8
DC
1612
1613 Thus, our first task is to find everything before the last set of
1614 double-colons and figure out if it's the name of a class. So we
1615 first loop through all of the double-colons. */
614b3b14 1616
a04257e6 1617 p2 = p; /* Save for restart. */
17763fd9 1618
1777feb0 1619 /* This is very messy. Following the example above we have now the
17763fd9
EZ
1620 following pointers:
1621 p -> "::inA::fun"
1622 argptr -> "AAA::inA::fun
1623 saved_arg -> "AAA::inA::fun
1624 saved_arg2 -> "AAA::inA::fun
1777feb0 1625 p2 -> "::inA::fun". */
17763fd9
EZ
1626
1627 /* In the loop below, with these strings, we'll make 2 passes, each
1777feb0 1628 is marked in comments. */
17763fd9 1629
614b3b14
DC
1630 while (1)
1631 {
c00f8484
KS
1632 static char *break_characters = " \t(";
1633
a04257e6 1634 /* Move pointer up to next possible class/namespace token. */
17763fd9 1635
a04257e6 1636 p = p2 + 1; /* Restart with old value +1. */
17763fd9
EZ
1637
1638 /* PASS1: at this point p2->"::inA::fun", so p->":inA::fun",
1639 i.e. if there is a double-colon, p will now point to the
1777feb0 1640 second colon. */
87b3ede8 1641 /* PASS2: p2->"::fun", p->":fun" */
17763fd9 1642
a04257e6 1643 /* Move pointer ahead to next double-colon. */
c00f8484
KS
1644 while (*p
1645 && strchr (break_characters, *p) == NULL
1646 && strchr (get_gdb_completer_quote_characters (), *p) == NULL)
614b3b14 1647 {
12907978
KS
1648 if (current_language->la_language == language_cplus)
1649 p += cp_validate_operator (p);
1650
614b3b14
DC
1651 if (p[0] == '<')
1652 {
1653 temp_end = find_template_name_end (p);
1654 if (!temp_end)
8a3fe4f8 1655 error (_("malformed template specification in command"));
614b3b14
DC
1656 p = temp_end;
1657 }
17763fd9
EZ
1658 /* Note that, since, at the start of this loop, p would be
1659 pointing to the second colon in a double-colon, we only
1660 satisfy the condition below if there is another
1777feb0
MS
1661 double-colon to the right (after). I.e. there is another
1662 component that can be a class or a namespace. I.e, if at
17763fd9
EZ
1663 the beginning of this loop (PASS1), we had
1664 p->":inA::fun", we'll trigger this when p has been
1665 advanced to point to "::fun". */
1777feb0 1666 /* PASS2: we will not trigger this. */
614b3b14 1667 else if ((p[0] == ':') && (p[1] == ':'))
a04257e6 1668 break; /* Found double-colon. */
614b3b14 1669 else
c00f8484
KS
1670 {
1671 /* PASS2: We'll keep getting here, until P points to one of the
1672 break characters, at which point we exit this loop. */
2b1dbab0
KS
1673 if (*p)
1674 {
1675 if (p[1] == '('
1676 && strncmp (&p[1], CP_ANONYMOUS_NAMESPACE_STR,
1677 CP_ANONYMOUS_NAMESPACE_LEN) == 0)
1678 p += CP_ANONYMOUS_NAMESPACE_LEN;
1679 else if (strchr (break_characters, *p) == NULL)
1680 ++p;
1681 }
c00f8484 1682 }
614b3b14
DC
1683 }
1684
1685 if (*p != ':')
17763fd9
EZ
1686 break; /* Out of the while (1). This would happen
1687 for instance if we have looked up
1688 unsuccessfully all the components of the
1777feb0 1689 string, and p->""(PASS2). */
17763fd9 1690
c00f8484 1691 /* We get here if p points to one of the break characters or "" (i.e.,
1777feb0 1692 string ended). */
17763fd9
EZ
1693 /* Save restart for next time around. */
1694 p2 = p;
1695 /* Restore argptr as it was on entry to this function. */
1696 *argptr = saved_arg2;
87b3ede8
DC
1697 /* PASS1: at this point p->"::fun" argptr->"AAA::inA::fun",
1698 p2->"::fun". */
17763fd9
EZ
1699
1700 /* All ready for next pass through the loop. */
614b3b14
DC
1701 } /* while (1) */
1702
87b3ede8 1703
1777feb0 1704 /* Start of lookup in the symbol tables. */
87b3ede8
DC
1705
1706 /* Lookup in the symbol table the substring between argptr and
1777feb0 1707 p. Note, this call changes the value of argptr. */
87b3ede8
DC
1708 /* Before the call, argptr->"AAA::inA::fun",
1709 p->"", p2->"::fun". After the call: argptr->"fun", p, p2
1710 unchanged. */
f8eba3c6
TT
1711 sym_classes = lookup_prefix_sym (argptr, p2, self->file_symtabs,
1712 &class_name);
1713 make_cleanup (VEC_cleanup (symbolp), &sym_classes);
1714 make_cleanup (xfree, class_name);
1715
1716 /* If a class has been found, then we're in case 1 above. So we
1717 look up "fun" as a method of those classes. */
1718 if (!VEC_empty (symbolp, sym_classes))
87b3ede8
DC
1719 {
1720 /* Arg token is not digits => try it as a function name.
1721 Find the next token (everything up to end or next
1722 blank). */
1723 if (**argptr
1724 && strchr (get_gdb_completer_quote_characters (),
1725 **argptr) != NULL)
1726 {
1727 p = skip_quoted (*argptr);
1728 *argptr = *argptr + 1;
1729 }
1730 else
1731 {
1732 /* At this point argptr->"fun". */
94af9270 1733 char *a;
e0881a8e 1734
87b3ede8 1735 p = *argptr;
94af9270
KS
1736 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':'
1737 && *p != '(')
87b3ede8
DC
1738 p++;
1739 /* At this point p->"". String ended. */
12907978
KS
1740 /* Nope, C++ operators could have spaces in them
1741 ("foo::operator <" or "foo::operator delete []").
1742 I apologize, this is a bit hacky... */
1743 if (current_language->la_language == language_cplus
1744 && *p == ' ' && p - 8 - *argptr + 1 > 0)
1745 {
1746 /* The above loop has already swallowed "operator". */
1747 p += cp_validate_operator (p - 8) - 8;
1748 }
94af9270 1749
c00f8484 1750 /* Keep any important naming information. */
3d50dd94 1751 p = keep_name_info (p, 1);
87b3ede8
DC
1752 }
1753
1754 /* Allocate our own copy of the substring between argptr and
1777feb0 1755 p. */
87b3ede8
DC
1756 copy = (char *) alloca (p - *argptr + 1);
1757 memcpy (copy, *argptr, p - *argptr);
1758 copy[p - *argptr] = '\0';
1759 if (p != *argptr
1760 && copy[p - *argptr - 1]
1761 && strchr (get_gdb_completer_quote_characters (),
1762 copy[p - *argptr - 1]) != NULL)
1763 copy[p - *argptr - 1] = '\0';
1764
1777feb0 1765 /* At this point copy->"fun", p->"". */
87b3ede8
DC
1766
1767 /* No line number may be specified. */
f8eba3c6 1768 *argptr = skip_spaces (p);
87b3ede8
DC
1769 /* At this point arptr->"". */
1770
1777feb0 1771 /* Look for copy as a method of sym_class. */
87b3ede8
DC
1772 /* At this point copy->"fun", sym_class is "AAA:inA",
1773 saved_arg->"AAA::inA::fun". This concludes the scanning of
1774 the string for possible components matches. If we find it
1777feb0 1775 here, we return. If not, and we are at the and of the string,
87b3ede8
DC
1776 we'll lookup the whole string in the symbol tables. */
1777
f8eba3c6
TT
1778 values = find_method (self, saved_arg, copy, class_name, sym_classes);
1779
1780 do_cleanups (cleanup);
1781 return values;
1777feb0 1782 } /* End if symbol found. */
87b3ede8
DC
1783
1784
1785 /* We couldn't find a class, so we're in case 2 above. We check the
f8eba3c6
TT
1786 entire name as a symbol instead. The simplest way to do this is
1787 to just throw an exception and let our caller fall through to
1788 decode_variable. */
87b3ede8 1789
f8eba3c6
TT
1790 throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
1791}
c00f8484 1792
f8eba3c6
TT
1793/* An instance of this type is used when collecting prefix symbols for
1794 decode_compound. */
17763fd9 1795
f8eba3c6
TT
1796struct decode_compound_collector
1797{
1798 /* The result vector. */
1799 VEC (symbolp) *symbols;
3a93a0c2 1800
f8eba3c6
TT
1801 /* A hash table of all symbols we found. We use this to avoid
1802 adding any symbol more than once. */
1803 htab_t unique_syms;
1804};
3a93a0c2 1805
f8eba3c6
TT
1806/* A callback for iterate_over_symbols that is used by
1807 lookup_prefix_sym to collect type symbols. */
c00f8484 1808
f8eba3c6
TT
1809static int
1810collect_one_symbol (struct symbol *sym, void *d)
1811{
1812 struct decode_compound_collector *collector = d;
1813 void **slot;
1814 struct type *t;
614b3b14 1815
f8eba3c6 1816 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
8e704927 1817 return 1; /* Continue iterating. */
f8eba3c6
TT
1818
1819 t = SYMBOL_TYPE (sym);
1820 CHECK_TYPEDEF (t);
1821 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
1822 && TYPE_CODE (t) != TYPE_CODE_UNION
1823 && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
8e704927 1824 return 1; /* Continue iterating. */
614b3b14 1825
f8eba3c6
TT
1826 slot = htab_find_slot (collector->unique_syms, sym, INSERT);
1827 if (!*slot)
1828 {
1829 *slot = sym;
1830 VEC_safe_push (symbolp, collector->symbols, sym);
1831 }
1832
8e704927 1833 return 1; /* Continue iterating. */
f8eba3c6 1834}
93d91629
DC
1835
1836/* Return the symbol corresponding to the substring of *ARGPTR ending
1837 at P, allowing whitespace. Also, advance *ARGPTR past the symbol
1838 name in question, the compound object separator ("::" or "."), and
17763fd9 1839 whitespace. Note that *ARGPTR is changed whether or not the
f8eba3c6 1840 this call finds anything (i.e we return NULL). As an
17763fd9 1841 example, say ARGPTR is "AAA::inA::fun" and P is "::inA::fun". */
93d91629 1842
f8eba3c6
TT
1843static VEC (symbolp) *
1844lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
1845 char **class_name)
93d91629
DC
1846{
1847 char *p1;
1848 char *copy;
f8eba3c6
TT
1849 int ix;
1850 struct symtab *elt;
1851 struct decode_compound_collector collector;
1852 struct cleanup *outer;
1853 struct cleanup *cleanup;
1854 struct block *search_block;
93d91629
DC
1855
1856 /* Extract the class name. */
1857 p1 = p;
1858 while (p != *argptr && p[-1] == ' ')
1859 --p;
f8eba3c6 1860 copy = (char *) xmalloc (p - *argptr + 1);
93d91629
DC
1861 memcpy (copy, *argptr, p - *argptr);
1862 copy[p - *argptr] = 0;
f8eba3c6
TT
1863 *class_name = copy;
1864 outer = make_cleanup (xfree, copy);
93d91629 1865
17763fd9 1866 /* Discard the class name from the argptr. */
93d91629 1867 p = p1 + (p1[0] == ':' ? 2 : 1);
f8eba3c6 1868 p = skip_spaces (p);
93d91629
DC
1869 *argptr = p;
1870
17763fd9 1871 /* At this point p1->"::inA::fun", p->"inA::fun" copy->"AAA",
1777feb0 1872 argptr->"inA::fun". */
17763fd9 1873
f8eba3c6
TT
1874 collector.symbols = NULL;
1875 make_cleanup (VEC_cleanup (symbolp), &collector.symbols);
e0881a8e 1876
f8eba3c6
TT
1877 collector.unique_syms = htab_create_alloc (1, htab_hash_pointer,
1878 htab_eq_pointer, NULL,
1879 xcalloc, xfree);
1880 cleanup = make_cleanup_htab_delete (collector.unique_syms);
e0881a8e 1881
f8eba3c6
TT
1882 for (ix = 0; VEC_iterate (symtab_p, file_symtabs, ix, elt); ++ix)
1883 {
1884 if (elt == NULL)
1885 {
1886 iterate_over_all_matching_symtabs (copy, STRUCT_DOMAIN,
1887 collect_one_symbol, &collector,
1888 NULL);
1889 iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
1890 collect_one_symbol, &collector,
1891 NULL);
1892 }
1893 else
1894 {
1895 struct block *search_block;
1896
1897 /* Program spaces that are executing startup should have
1898 been filtered out earlier. */
1899 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
1900 set_current_program_space (SYMTAB_PSPACE (elt));
1901 search_block = get_search_block (elt);
1902 LA_ITERATE_OVER_SYMBOLS (search_block, copy, STRUCT_DOMAIN,
1903 collect_one_symbol, &collector);
1904 LA_ITERATE_OVER_SYMBOLS (search_block, copy, VAR_DOMAIN,
1905 collect_one_symbol, &collector);
1e5a1abc
KS
1906 }
1907 }
1908
f8eba3c6
TT
1909 do_cleanups (cleanup);
1910 discard_cleanups (outer);
1911 return collector.symbols;
93d91629
DC
1912}
1913
f8eba3c6
TT
1914/* A qsort comparison function for symbols. The resulting order does
1915 not actually matter; we just need to be able to sort them so that
1916 symbols with the same program space end up next to each other. */
4224873a 1917
f8eba3c6
TT
1918static int
1919compare_symbols (const void *a, const void *b)
4224873a 1920{
f8eba3c6
TT
1921 struct symbol * const *sa = a;
1922 struct symbol * const *sb = b;
1923 uintptr_t uia, uib;
1924
1925 uia = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sa));
1926 uib = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sb));
1927
1928 if (uia < uib)
1929 return -1;
1930 if (uia > uib)
1931 return 1;
1932
1933 uia = (uintptr_t) *sa;
1934 uib = (uintptr_t) *sb;
1935
1936 if (uia < uib)
1937 return -1;
1938 if (uia > uib)
1939 return 1;
1940
1941 return 0;
1942}
1943
1944/* Look for all the matching instances of each symbol in NAMES. Only
1945 instances from PSPACE are considered; other program spaces are
1946 handled by our caller. If PSPACE is NULL, then all program spaces
1947 are considered. Results are stored into INFO. */
1948
1949static void
1950add_all_symbol_names_from_pspace (struct collect_info *info,
1951 struct program_space *pspace,
1952 VEC (const_char_ptr) *names)
1953{
1954 int ix;
1955 const char *iter;
1956
1957 for (ix = 0; VEC_iterate (const_char_ptr, names, ix, iter); ++ix)
1958 add_matching_symbols_to_info (iter, info, pspace);
1959}
1960
1961static void
1962find_superclass_methods (VEC (typep) *superclasses,
1963 const char *name,
1964 VEC (const_char_ptr) **result_names)
1965{
1966 int old_len = VEC_length (const_char_ptr, *result_names);
1967 VEC (typep) *iter_classes;
1968 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
1969
1970 iter_classes = superclasses;
1971 while (1)
1972 {
1973 VEC (typep) *new_supers = NULL;
1974 int ix;
1975 struct type *t;
1976
1977 make_cleanup (VEC_cleanup (typep), &new_supers);
1978 for (ix = 0; VEC_iterate (typep, iter_classes, ix, t); ++ix)
1979 find_methods (t, name, result_names, &new_supers);
1980
1981 if (VEC_length (const_char_ptr, *result_names) != old_len
1982 || VEC_empty (typep, new_supers))
1983 break;
4224873a 1984
f8eba3c6
TT
1985 iter_classes = new_supers;
1986 }
4224873a 1987
f8eba3c6
TT
1988 do_cleanups (cleanup);
1989}
1990
1991/* This finds the method COPY in the class whose type is given by one
1992 of the symbols in SYM_CLASSES. */
1993
1994static struct symtabs_and_lines
1995find_method (struct linespec_state *self, char *saved_arg,
1996 char *copy, const char *class_name, VEC (symbolp) *sym_classes)
1997{
1998 char *canon;
1999 struct symbol *sym;
2000 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
2001 int ix;
2002 int last_result_len;
2003 VEC (typep) *superclass_vec;
2004 VEC (const_char_ptr) *result_names;
2005 struct collect_info info;
2006 char *name_iter;
4224873a 2007
f8eba3c6
TT
2008 /* NAME is typed by the user: it needs to be canonicalized before
2009 searching the symbol tables. */
2010 canon = cp_canonicalize_string_no_typedefs (copy);
2011 if (canon != NULL)
4224873a 2012 {
f8eba3c6
TT
2013 copy = canon;
2014 make_cleanup (xfree, copy);
2015 }
4224873a 2016
f8eba3c6
TT
2017 /* Sort symbols so that symbols with the same program space are next
2018 to each other. */
2019 qsort (VEC_address (symbolp, sym_classes),
2020 VEC_length (symbolp, sym_classes),
2021 sizeof (symbolp),
2022 compare_symbols);
2023
2024 info.state = self;
2025 info.result.sals = NULL;
2026 info.result.nelts = 0;
f8eba3c6
TT
2027
2028 /* Iterate over all the types, looking for the names of existing
2029 methods matching COPY. If we cannot find a direct method in a
2030 given program space, then we consider inherited methods; this is
2031 not ideal (ideal would be to respect C++ hiding rules), but it
2032 seems good enough and is what GDB has historically done. We only
2033 need to collect the names because later we find all symbols with
2034 those names. This loop is written in a somewhat funny way
2035 because we collect data across the program space before deciding
2036 what to do. */
2037 superclass_vec = NULL;
2038 make_cleanup (VEC_cleanup (typep), &superclass_vec);
2039 result_names = NULL;
2040 make_cleanup (VEC_cleanup (const_char_ptr), &result_names);
2041 last_result_len = 0;
2042 for (ix = 0; VEC_iterate (symbolp, sym_classes, ix, sym); ++ix)
2043 {
2044 struct type *t;
2045 struct program_space *pspace;
2046
2047 /* Program spaces that are executing startup should have
2048 been filtered out earlier. */
2049 gdb_assert (!SYMTAB_PSPACE (SYMBOL_SYMTAB (sym))->executing_startup);
2050 pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
2051 set_current_program_space (pspace);
2052 t = check_typedef (SYMBOL_TYPE (sym));
2053 find_methods (t, copy, &result_names, &superclass_vec);
2054
2055 /* Handle all items from a single program space at once; and be
2056 sure not to miss the last batch. */
2057 if (ix == VEC_length (symbolp, sym_classes) - 1
2058 || (pspace
2059 != SYMTAB_PSPACE (SYMBOL_SYMTAB (VEC_index (symbolp, sym_classes,
2060 ix + 1)))))
4224873a 2061 {
f8eba3c6
TT
2062 /* If we did not find a direct implementation anywhere in
2063 this program space, consider superclasses. */
2064 if (VEC_length (const_char_ptr, result_names) == last_result_len)
2065 find_superclass_methods (superclass_vec, copy, &result_names);
2066
2067 /* We have a list of candidate symbol names, so now we
2068 iterate over the symbol tables looking for all
2069 matches in this pspace. */
2070 add_all_symbol_names_from_pspace (&info, pspace, result_names);
2071
2072 VEC_truncate (typep, superclass_vec, 0);
2073 last_result_len = VEC_length (const_char_ptr, result_names);
4224873a 2074 }
4224873a 2075 }
f8eba3c6
TT
2076
2077 if (info.result.nelts > 0)
4224873a 2078 {
f8eba3c6 2079 if (self->canonical)
94af9270 2080 {
f8eba3c6
TT
2081 self->canonical->pre_expanded = 1;
2082 if (self->user_filename)
2083 self->canonical->addr_string
2084 = xstrprintf ("%s:%s", self->user_filename, saved_arg);
2085 else
2086 self->canonical->addr_string = xstrdup (saved_arg);
94af9270
KS
2087 }
2088
f8eba3c6
TT
2089 do_cleanups (cleanup);
2090
2091 return info.result;
4224873a 2092 }
f8eba3c6
TT
2093
2094 if (copy[0] == '~')
2095 cplusplus_error (saved_arg,
2096 "the class `%s' does not have destructor defined\n",
2097 class_name);
4224873a 2098 else
f8eba3c6
TT
2099 cplusplus_error (saved_arg,
2100 "the class %s does not have any method named %s\n",
2101 class_name, copy);
2102}
2103
2104\f
2105
2106/* This object is used when collecting all matching symtabs. */
2107
2108struct symtab_collector
2109{
2110 /* The result vector of symtabs. */
2111 VEC (symtab_p) *symtabs;
2112
2113 /* This is used to ensure the symtabs are unique. */
2114 htab_t symtab_table;
2115};
2116
2117/* Callback for iterate_over_symtabs. */
2118
2119static int
2120add_symtabs_to_list (struct symtab *symtab, void *d)
2121{
2122 struct symtab_collector *data = d;
2123 void **slot;
2124
2125 slot = htab_find_slot (data->symtab_table, symtab, INSERT);
2126 if (!*slot)
4224873a 2127 {
f8eba3c6
TT
2128 *slot = symtab;
2129 VEC_safe_push (symtab_p, data->symtabs, symtab);
4224873a 2130 }
f8eba3c6
TT
2131
2132 return 0;
4224873a
DC
2133}
2134
f8eba3c6
TT
2135/* Given a file name, return a VEC of all matching symtabs. */
2136
2137static VEC (symtab_p) *
2138collect_symtabs_from_filename (const char *file)
2139{
2140 struct symtab_collector collector;
2141 struct cleanup *cleanups;
2142 struct program_space *pspace;
2143
2144 collector.symtabs = NULL;
2145 collector.symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
2146 NULL);
2147 cleanups = make_cleanup_htab_delete (collector.symtab_table);
2148
2149 /* Find that file's data. */
2150 ALL_PSPACES (pspace)
2151 {
2152 if (pspace->executing_startup)
2153 continue;
2154
2155 set_current_program_space (pspace);
2156 iterate_over_symtabs (file, add_symtabs_to_list, &collector);
2157 }
f3c39e76 2158
f8eba3c6
TT
2159 do_cleanups (cleanups);
2160 return collector.symtabs;
2161}
2162
2163/* Return all the symtabs associated to the filename given by the
2164 substring of *ARGPTR ending at P, and advance ARGPTR past that
2165 filename. */
f3c39e76 2166
f8eba3c6
TT
2167static VEC (symtab_p) *
2168symtabs_from_filename (char **argptr, char *p, int is_quote_enclosed,
2169 char **user_filename)
f3c39e76
DC
2170{
2171 char *p1;
2172 char *copy;
f8eba3c6
TT
2173 struct cleanup *outer;
2174 VEC (symtab_p) *result;
f3c39e76
DC
2175
2176 p1 = p;
2177 while (p != *argptr && p[-1] == ' ')
2178 --p;
2179 if ((*p == '"') && is_quote_enclosed)
2180 --p;
f8eba3c6
TT
2181 copy = xmalloc (p - *argptr + 1);
2182 outer = make_cleanup (xfree, copy);
f3c39e76 2183 memcpy (copy, *argptr, p - *argptr);
a04257e6 2184 /* It may have the ending quote right after the file name. */
0e0b460e
KS
2185 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
2186 || copy[p - *argptr - 1] == '\'')
f3c39e76
DC
2187 copy[p - *argptr - 1] = 0;
2188 else
2189 copy[p - *argptr] = 0;
2190
f8eba3c6
TT
2191 result = collect_symtabs_from_filename (copy);
2192
2193 if (VEC_empty (symtab_p, result))
f3c39e76 2194 {
b96e2927
PA
2195 if (!have_full_symbols () && !have_partial_symbols ())
2196 throw_error (NOT_FOUND_ERROR,
3e43a32a
MS
2197 _("No symbol table is loaded. "
2198 "Use the \"file\" command."));
109c3e39 2199 throw_error (NOT_FOUND_ERROR, _("No source file named %s."), copy);
f3c39e76
DC
2200 }
2201
2202 /* Discard the file name from the arg. */
edb2aadf 2203 if (*p1 == '\0')
f8eba3c6
TT
2204 *argptr = p1;
2205 else
2206 *argptr = skip_spaces (p1 + 1);
2207
2208 discard_cleanups (outer);
2209 *user_filename = copy;
2210 return result;
2211}
2212
2213/* A callback used by iterate_over_all_matching_symtabs that collects
2214 symbols for find_function_symbols. */
2215
2216static int
2217collect_function_symbols (struct symbol *sym, void *arg)
2218{
2219 VEC (symbolp) **syms = arg;
f3c39e76 2220
f8eba3c6
TT
2221 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
2222 VEC_safe_push (symbolp, *syms, sym);
2223
8e704927 2224 return 1; /* Continue iterating. */
f3c39e76
DC
2225}
2226
9ef07c8c
TT
2227/* Look up a function symbol in *ARGPTR. If found, advance *ARGPTR
2228 and return the symbol. If not found, return NULL. */
2229
f8eba3c6
TT
2230static VEC (symbolp) *
2231find_function_symbols (char **argptr, char *p, int is_quote_enclosed,
2232 char **user_function)
9ef07c8c
TT
2233{
2234 char *p1;
2235 char *copy;
f8eba3c6 2236 VEC (symbolp) *result = NULL;
9ef07c8c
TT
2237
2238 p1 = p;
2239 while (p != *argptr && p[-1] == ' ')
2240 --p;
2241 if ((*p == '"') && is_quote_enclosed)
2242 --p;
f8eba3c6
TT
2243 copy = (char *) xmalloc (p - *argptr + 1);
2244 *user_function = copy;
9ef07c8c
TT
2245 memcpy (copy, *argptr, p - *argptr);
2246 /* It may have the ending quote right after the file name. */
2247 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
2248 || copy[p - *argptr - 1] == '\'')
2249 copy[p - *argptr - 1] = 0;
2250 else
2251 copy[p - *argptr] = 0;
2252
f8eba3c6
TT
2253 iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
2254 collect_function_symbols, &result, NULL);
9ef07c8c 2255
f8eba3c6
TT
2256 if (VEC_empty (symbolp, result))
2257 VEC_free (symbolp, result);
2258 else
2259 {
2260 /* Discard the file name from the arg. */
2261 *argptr = skip_spaces (p1 + 1);
2262 }
9ef07c8c 2263
f8eba3c6 2264 return result;
9ef07c8c
TT
2265}
2266
84fba31b
DC
2267\f
2268
f8eba3c6
TT
2269/* A helper for decode_all_digits that handles the 'list_mode' case. */
2270
2271static void
2272decode_digits_list_mode (struct linespec_state *self,
2273 struct symtabs_and_lines *values,
2274 struct symtab_and_line val)
2275{
2276 int ix;
2277 struct symtab *elt;
2278
2279 gdb_assert (self->list_mode);
2280
2281 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2282 {
2283 /* The logic above should ensure this. */
2284 gdb_assert (elt != NULL);
2285
2286 set_current_program_space (SYMTAB_PSPACE (elt));
2287
2288 /* Simplistic search just for the list command. */
2289 val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
2290 if (val.symtab == NULL)
2291 val.symtab = elt;
2292 val.pspace = SYMTAB_PSPACE (elt);
2293 val.pc = 0;
2294 val.explicit_line = 1;
2295
2296 add_sal_to_sals (self, values, &val, NULL);
2297 }
2298}
2299
2300/* A helper for decode_all_digits that iterates over the symtabs,
2301 adding lines to the VEC. */
2302
2303static void
2304decode_digits_ordinary (struct linespec_state *self,
2305 int line,
2306 struct symtabs_and_lines *sals,
2307 struct linetable_entry **best_entry)
2308{
2309 int ix;
2310 struct symtab *elt;
2311
2312 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2313 {
2314 int i;
2315 VEC (CORE_ADDR) *pcs;
2316 CORE_ADDR pc;
2317
2318 /* The logic above should ensure this. */
2319 gdb_assert (elt != NULL);
2320
2321 set_current_program_space (SYMTAB_PSPACE (elt));
2322
2323 pcs = find_pcs_for_symtab_line (elt, line, best_entry);
2324 for (i = 0; VEC_iterate (CORE_ADDR, pcs, i, pc); ++i)
2325 {
2326 struct symtab_and_line sal;
2327
2328 init_sal (&sal);
2329 sal.pspace = SYMTAB_PSPACE (elt);
2330 sal.symtab = elt;
2331 sal.line = line;
2332 sal.pc = pc;
2333 add_sal_to_sals_basic (sals, &sal);
2334 }
2335
2336 VEC_free (CORE_ADDR, pcs);
2337 }
2338}
2339
84fba31b
DC
2340/* This decodes a line where the argument is all digits (possibly
2341 preceded by a sign). Q should point to the end of those digits;
2342 the other arguments are as usual. */
2343
2344static struct symtabs_and_lines
f8eba3c6
TT
2345decode_all_digits (struct linespec_state *self,
2346 char **argptr,
2347 char *q)
84fba31b
DC
2348{
2349 struct symtabs_and_lines values;
2350 struct symtab_and_line val;
f8eba3c6
TT
2351 int use_default = 0;
2352 char *saved_arg = *argptr;
84fba31b
DC
2353
2354 enum sign
2355 {
2356 none, plus, minus
2357 }
2358 sign = none;
2359
84fba31b 2360 init_sal (&val);
f8eba3c6
TT
2361 values.sals = NULL;
2362 values.nelts = 0;
6c95b8df 2363
84fba31b
DC
2364 /* This is where we need to make sure that we have good defaults.
2365 We must guarantee that this section of code is never executed
2366 when we are called with just a function name, since
2367 set_default_source_symtab_and_line uses
a04257e6 2368 select_source_symtab that calls us with such an argument. */
84fba31b 2369
f8eba3c6
TT
2370 if (VEC_length (symtab_p, self->file_symtabs) == 1
2371 && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
84fba31b 2372 {
f8eba3c6
TT
2373 set_current_program_space (self->program_space);
2374
a04257e6 2375 /* Make sure we have at least a default source file. */
84fba31b 2376 set_default_source_symtab_and_line ();
f8eba3c6
TT
2377 initialize_defaults (&self->default_symtab, &self->default_line);
2378 VEC_pop (symtab_p, self->file_symtabs);
2379 VEC_free (symtab_p, self->file_symtabs);
2380 self->file_symtabs
2381 = collect_symtabs_from_filename (self->default_symtab->filename);
2382 use_default = 1;
84fba31b
DC
2383 }
2384
2385 if (**argptr == '+')
2386 sign = plus, (*argptr)++;
2387 else if (**argptr == '-')
2388 sign = minus, (*argptr)++;
2389 val.line = atoi (*argptr);
2390 switch (sign)
2391 {
2392 case plus:
2393 if (q == *argptr)
2394 val.line = 5;
f8eba3c6
TT
2395 if (use_default)
2396 val.line = self->default_line + val.line;
84fba31b
DC
2397 break;
2398 case minus:
2399 if (q == *argptr)
2400 val.line = 15;
f8eba3c6
TT
2401 if (use_default)
2402 val.line = self->default_line - val.line;
84fba31b
DC
2403 else
2404 val.line = 1;
2405 break;
2406 case none:
2407 break; /* No need to adjust val.line. */
2408 }
2409
f8eba3c6
TT
2410 *argptr = skip_spaces (q);
2411
2412 if (self->list_mode)
2413 decode_digits_list_mode (self, &values, val);
2414 else
2415 {
2416 struct linetable_entry *best_entry = NULL;
2417 int *filter;
2418 struct block **blocks;
2419 struct cleanup *cleanup;
2420 struct symtabs_and_lines intermediate_results;
2421 int i, j;
2422
2423 intermediate_results.sals = NULL;
2424 intermediate_results.nelts = 0;
2425
2426 decode_digits_ordinary (self, val.line, &intermediate_results,
2427 &best_entry);
2428 if (intermediate_results.nelts == 0 && best_entry != NULL)
2429 decode_digits_ordinary (self, best_entry->line, &intermediate_results,
2430 &best_entry);
2431
2432 cleanup = make_cleanup (xfree, intermediate_results.sals);
2433
2434 /* For optimized code, compiler can scatter one source line
2435 accross disjoint ranges of PC values, even when no duplicate
2436 functions or inline functions are involved. For example,
2437 'for (;;)' inside non-template non-inline non-ctor-or-dtor
2438 function can result in two PC ranges. In this case, we don't
2439 want to set breakpoint on first PC of each range. To filter
2440 such cases, we use containing blocks -- for each PC found
2441 above we see if there are other PCs that are in the same
2442 block. If yes, the other PCs are filtered out. */
2443
2444 filter = xmalloc (intermediate_results.nelts * sizeof (int));
2445 make_cleanup (xfree, filter);
2446 blocks = xmalloc (intermediate_results.nelts * sizeof (struct block *));
2447 make_cleanup (xfree, blocks);
2448
2449 for (i = 0; i < intermediate_results.nelts; ++i)
2450 {
2451 set_current_program_space (intermediate_results.sals[i].pspace);
2452
2453 filter[i] = 1;
2454 blocks[i] = block_for_pc_sect (intermediate_results.sals[i].pc,
2455 intermediate_results.sals[i].section);
2456 }
2457
2458 for (i = 0; i < intermediate_results.nelts; ++i)
2459 {
2460 if (blocks[i] != NULL)
2461 for (j = i + 1; j < intermediate_results.nelts; ++j)
2462 {
2463 if (blocks[j] == blocks[i])
2464 {
2465 filter[j] = 0;
2466 break;
2467 }
2468 }
2469 }
2470
2471 for (i = 0; i < intermediate_results.nelts; ++i)
2472 if (filter[i])
2473 {
2474 struct symbol *sym = (blocks[i]
2475 ? block_containing_function (blocks[i])
2476 : NULL);
2477
2478 if (self->funfirstline)
2479 skip_prologue_sal (&intermediate_results.sals[i]);
2480 /* Make sure the line matches the request, not what was
2481 found. */
2482 intermediate_results.sals[i].line = val.line;
2483 add_sal_to_sals (self, &values, &intermediate_results.sals[i],
2484 sym ? SYMBOL_NATURAL_NAME (sym) : NULL);
2485 }
2486
2487 do_cleanups (cleanup);
2488 }
2489
2490 if (values.nelts == 0)
2491 {
2492 if (self->user_filename)
2493 throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
2494 val.line, self->user_filename);
2495 else
2496 throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
2497 val.line);
2498 }
2499
2500 if (self->canonical)
2501 {
2502 char *copy = savestring (saved_arg, q - saved_arg);
2503
2504 self->canonical->pre_expanded = 1;
2505 gdb_assert (self->user_filename || use_default);
2506 self->canonical->addr_string
2507 = xstrprintf ("%s:%s", (self->user_filename
2508 ? self->user_filename
2509 : self->default_symtab->filename),
2510 copy);
2511 xfree (copy);
2512 }
2513
84fba31b
DC
2514 return values;
2515}
f3c39e76 2516
614b3b14
DC
2517\f
2518
14e91ac5
DC
2519/* Decode a linespec starting with a dollar sign. */
2520
2521static struct symtabs_and_lines
f8eba3c6 2522decode_dollar (struct linespec_state *self, char *copy)
14e91ac5 2523{
4fa62494 2524 LONGEST valx;
14e91ac5 2525 int index = 0;
14e91ac5
DC
2526 struct symtabs_and_lines values;
2527 struct symtab_and_line val;
2528 char *p;
2529 struct symbol *sym;
14e91ac5 2530 struct minimal_symbol *msymbol;
f8eba3c6
TT
2531 int ix;
2532 struct symtab *elt;
14e91ac5
DC
2533
2534 p = (copy[1] == '$') ? copy + 2 : copy + 1;
2535 while (*p >= '0' && *p <= '9')
2536 p++;
a04257e6 2537 if (!*p) /* Reached end of token without hitting non-digit. */
14e91ac5 2538 {
a04257e6 2539 /* We have a value history reference. */
4fa62494 2540 struct value *val_history;
e0881a8e 2541
14e91ac5 2542 sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
4fa62494
UW
2543 val_history = access_value_history ((copy[1] == '$') ? -index : index);
2544 if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
3e43a32a
MS
2545 error (_("History values used in line "
2546 "specs must have integer values."));
4fa62494 2547 valx = value_as_long (val_history);
14e91ac5
DC
2548 }
2549 else
2550 {
2551 /* Not all digits -- may be user variable/function or a
a04257e6 2552 convenience variable. */
14e91ac5 2553
f8eba3c6
TT
2554 volatile struct gdb_exception exc;
2555
31aba06f
DE
2556 /* Avoid "may be used uninitialized" warning. */
2557 values.sals = NULL;
2558 values.nelts = 0;
2559
f8eba3c6
TT
2560 TRY_CATCH (exc, RETURN_MASK_ERROR)
2561 {
2562 values = decode_variable (self, copy);
2563 }
2564
2565 if (exc.reason == 0)
2566 return values;
14e91ac5 2567
f8eba3c6
TT
2568 if (exc.error != NOT_FOUND_ERROR)
2569 throw_exception (exc);
14e91ac5 2570
a04257e6 2571 /* Not a user variable or function -- must be convenience variable. */
4fa62494 2572 if (!get_internalvar_integer (lookup_internalvar (copy + 1), &valx))
3e43a32a
MS
2573 error (_("Convenience variables used in line "
2574 "specs must have integer values."));
14e91ac5
DC
2575 }
2576
2577 init_sal (&val);
2578
f8eba3c6
TT
2579 values.sals = NULL;
2580 values.nelts = 0;
14e91ac5 2581
f8eba3c6
TT
2582 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2583 {
2584 if (elt == NULL)
2585 {
2586 elt = self->default_symtab;
2587 set_current_program_space (self->program_space);
2588 }
2589 else
2590 set_current_program_space (SYMTAB_PSPACE (elt));
2591
2592 /* Either history value or convenience value from above, in valx. */
2593 val.symtab = elt;
2594 val.line = valx;
2595 val.pc = 0;
2596 val.pspace = elt ? SYMTAB_PSPACE (elt) : current_program_space;
2597
2598 add_sal_to_sals (self, &values, &val, NULL);
2599 }
14e91ac5 2600
f8eba3c6
TT
2601 if (self->canonical)
2602 {
2603 self->canonical->pre_expanded = 1;
2604 if (self->user_filename)
2605 self->canonical->addr_string = xstrprintf ("%s:%s",
2606 self->user_filename, copy);
2607 else
2608 self->canonical->addr_string = xstrdup (copy);
2609 }
14e91ac5
DC
2610
2611 return values;
2612}
2613
bca02a8a
DC
2614\f
2615
0f5238ed
TT
2616/* A helper for decode_line_1 that tries to find a label. The label
2617 is searched for in the current block.
f8eba3c6 2618 FUNCTION_SYMBOLS is a list of the enclosing functions; or NULL if none
9ef07c8c 2619 specified.
0f5238ed
TT
2620 COPY is the name of the label to find.
2621 CANONICAL is the same as the "canonical" argument to decode_line_1.
2622 RESULT is a pointer to a symtabs_and_lines structure which will be
2623 filled in on success.
2624 This function returns 1 if a label was found, 0 otherwise. */
2625
2626static int
f8eba3c6
TT
2627decode_label (struct linespec_state *self,
2628 VEC (symbolp) *function_symbols, char *copy,
7efd8fc2 2629 struct symtabs_and_lines *result)
0f5238ed 2630{
f8eba3c6
TT
2631 struct symbol *fn_sym;
2632 int ix;
9ef07c8c 2633
f8eba3c6 2634 if (function_symbols == NULL)
9ef07c8c 2635 {
f8eba3c6
TT
2636 struct block *block;
2637 struct symbol *sym;
2638 struct symtab_and_line sal;
2639 struct symtabs_and_lines values;
2640
2641 values.nelts = 0;
2642 values.sals = NULL;
2643
2644 set_current_program_space (self->program_space);
2645 block = get_search_block (NULL);
2646
9ef07c8c
TT
2647 for (;
2648 block && !BLOCK_FUNCTION (block);
2649 block = BLOCK_SUPERBLOCK (block))
2650 ;
2651 if (!block)
2652 return 0;
f8eba3c6
TT
2653 fn_sym = BLOCK_FUNCTION (block);
2654
2655 sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
2656
2657 if (sym == NULL)
2658 return 0;
2659
2660 symbol_to_sal (&sal, self->funfirstline, sym);
2661 add_sal_to_sals (self, &values, &sal,
2662 SYMBOL_NATURAL_NAME (fn_sym));
2663
2664 if (self->canonical)
2665 {
2666 self->canonical->special_display = 1;
2667 self->canonical->addr_string
2668 = xstrprintf ("%s:%s", SYMBOL_NATURAL_NAME (fn_sym),
2669 copy);
2670 }
2671
2672 *result = values;
2673
2674 return 1;
2675 }
2676
2677 result->sals = NULL;
2678 result->nelts = 0;
2679
2680 for (ix = 0; VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
2681 {
2682 struct block *block;
2683 struct symbol *sym;
2684
2685 set_current_program_space (SYMTAB_PSPACE (SYMBOL_SYMTAB (fn_sym)));
2686 block = SYMBOL_BLOCK_VALUE (fn_sym);
2687 sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
2688
2689 if (sym != NULL)
2690 {
2691 struct symtab_and_line sal;
2692 char *symname;
2693
2694 symbol_to_sal (&sal, self->funfirstline, sym);
2695 symname = xstrprintf ("%s:%s",
2696 SYMBOL_NATURAL_NAME (fn_sym),
2697 SYMBOL_NATURAL_NAME (sym));
2698 add_sal_to_sals (self, result, &sal, symname);
2699 xfree (symname);
2700 }
2701 }
2702
2703 if (self->canonical && result->nelts > 0)
2704 {
2705 self->canonical->pre_expanded = 1;
2706 self->canonical->special_display = 1;
2707
2708 gdb_assert (self->user_function);
2709 self->canonical->addr_string
2710 = xstrprintf ("%s:%s", self->user_function, copy);
2711 }
2712
2713 return result->nelts > 0;
2714}
2715
2716/* A callback used to possibly add a symbol to the results. */
2717
2718static int
2719collect_symbols (struct symbol *sym, void *data)
2720{
2721 struct collect_info *info = data;
2722 struct symtab_and_line sal;
2723
07fea4b4
TT
2724 if (symbol_to_sal (&sal, info->state->funfirstline, sym)
2725 && maybe_add_address (info->state->addr_set,
2726 SYMTAB_PSPACE (SYMBOL_SYMTAB (sym)),
2727 sal.pc))
f8eba3c6
TT
2728 add_sal_to_sals (info->state, &info->result, &sal,
2729 SYMBOL_NATURAL_NAME (sym));
2730
8e704927 2731 return 1; /* Continue iterating. */
f8eba3c6
TT
2732}
2733
2734/* We've found a minimal symbol MSYMBOL to associate with our
2735 linespec; add it to the result symtabs_and_lines. */
2736
2737static void
2738minsym_found (struct linespec_state *self, struct objfile *objfile,
2739 struct minimal_symbol *msymbol,
2740 struct symtabs_and_lines *result)
2741{
2742 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2743 CORE_ADDR pc;
2744 struct symtab_and_line sal;
2745
2746 sal = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
2747 (struct obj_section *) 0, 0);
2748 sal.section = SYMBOL_OBJ_SECTION (msymbol);
2749
2750 /* The minimal symbol might point to a function descriptor;
2751 resolve it to the actual code address instead. */
2752 pc = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc, &current_target);
2753 if (pc != sal.pc)
2754 sal = find_pc_sect_line (pc, NULL, 0);
2755
2756 if (self->funfirstline)
2757 skip_prologue_sal (&sal);
2758
07fea4b4
TT
2759 if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
2760 add_sal_to_sals (self, result, &sal, SYMBOL_NATURAL_NAME (msymbol));
f8eba3c6
TT
2761}
2762
39b856a4
TT
2763/* A helper struct which just holds a minimal symbol and the object
2764 file from which it came. */
f8eba3c6 2765
39b856a4 2766typedef struct minsym_and_objfile
f8eba3c6 2767{
39b856a4
TT
2768 struct minimal_symbol *minsym;
2769 struct objfile *objfile;
2770} minsym_and_objfile_d;
f8eba3c6 2771
39b856a4
TT
2772DEF_VEC_O (minsym_and_objfile_d);
2773
2774/* A helper struct to pass some data through
2775 iterate_over_minimal_symbols. */
2776
2777struct collect_minsyms
2778{
2779 /* The objfile we're examining. */
2780 struct objfile *objfile;
2781
2782 /* The funfirstline setting from the initial call. */
2783 int funfirstline;
2784
095bcf5e
JB
2785 /* The list_mode setting from the initial call. */
2786 int list_mode;
2787
39b856a4
TT
2788 /* The resulting symbols. */
2789 VEC (minsym_and_objfile_d) *msyms;
2790};
2791
2792/* A helper function to classify a minimal_symbol_type according to
2793 priority. */
2794
2795static int
2796classify_mtype (enum minimal_symbol_type t)
2797{
2798 switch (t)
f8eba3c6 2799 {
39b856a4
TT
2800 case mst_file_text:
2801 case mst_file_data:
2802 case mst_file_bss:
2803 /* Intermediate priority. */
2804 return 1;
2805
2806 case mst_solib_trampoline:
2807 /* Lowest priority. */
2808 return 2;
2809
2810 default:
2811 /* Highest priority. */
2812 return 0;
f8eba3c6 2813 }
39b856a4
TT
2814}
2815
2816/* Callback for qsort that sorts symbols by priority. */
2817
2818static int
2819compare_msyms (const void *a, const void *b)
2820{
2821 const minsym_and_objfile_d *moa = a;
2822 const minsym_and_objfile_d *mob = b;
2823 enum minimal_symbol_type ta = MSYMBOL_TYPE (moa->minsym);
2824 enum minimal_symbol_type tb = MSYMBOL_TYPE (mob->minsym);
2825
2826 return classify_mtype (ta) - classify_mtype (tb);
2827}
2828
2829/* Callback for iterate_over_minimal_symbols that adds the symbol to
2830 the result. */
2831
2832static void
2833add_minsym (struct minimal_symbol *minsym, void *d)
2834{
2835 struct collect_minsyms *info = d;
2836 minsym_and_objfile_d mo;
2837
095bcf5e
JB
2838 /* Exclude data symbols when looking for breakpoint locations. */
2839 if (!info->list_mode)
2840 switch (minsym->type)
2841 {
2842 case mst_slot_got_plt:
2843 case mst_data:
2844 case mst_bss:
2845 case mst_abs:
2846 case mst_file_data:
2847 case mst_file_bss:
1a2da5ee
JB
2848 {
2849 /* Make sure this minsym is not a function descriptor
2850 before we decide to discard it. */
2851 struct gdbarch *gdbarch = info->objfile->gdbarch;
2852 CORE_ADDR addr = gdbarch_convert_from_func_ptr_addr
2853 (gdbarch, SYMBOL_VALUE_ADDRESS (minsym),
2854 &current_target);
2855
2856 if (addr == SYMBOL_VALUE_ADDRESS (minsym))
2857 return;
2858 }
095bcf5e
JB
2859 }
2860
39b856a4
TT
2861 mo.minsym = minsym;
2862 mo.objfile = info->objfile;
2863 VEC_safe_push (minsym_and_objfile_d, info->msyms, &mo);
f8eba3c6
TT
2864}
2865
2866/* Search minimal symbols in all objfiles for NAME. If SEARCH_PSPACE
2867 is not NULL, the search is restricted to just that program
2868 space. */
2869
2870static void
2871search_minsyms_for_name (struct collect_info *info, const char *name,
2872 struct program_space *search_pspace)
2873{
2874 struct objfile *objfile;
2875 struct program_space *pspace;
2876
2877 ALL_PSPACES (pspace)
2878 {
39b856a4
TT
2879 struct collect_minsyms local;
2880 struct cleanup *cleanup;
2881
f8eba3c6
TT
2882 if (search_pspace != NULL && search_pspace != pspace)
2883 continue;
2884 if (pspace->executing_startup)
2885 continue;
2886
2887 set_current_program_space (pspace);
2888
39b856a4
TT
2889 memset (&local, 0, sizeof (local));
2890 local.funfirstline = info->state->funfirstline;
095bcf5e 2891 local.list_mode = info->state->list_mode;
39b856a4
TT
2892
2893 cleanup = make_cleanup (VEC_cleanup (minsym_and_objfile_d),
2894 &local.msyms);
2895
f8eba3c6
TT
2896 ALL_OBJFILES (objfile)
2897 {
39b856a4
TT
2898 local.objfile = objfile;
2899 iterate_over_minimal_symbols (objfile, name, add_minsym, &local);
9ef07c8c 2900 }
39b856a4
TT
2901
2902 if (!VEC_empty (minsym_and_objfile_d, local.msyms))
2903 {
2904 int classification;
2905 int ix;
2906 minsym_and_objfile_d *item;
2907
2908 qsort (VEC_address (minsym_and_objfile_d, local.msyms),
2909 VEC_length (minsym_and_objfile_d, local.msyms),
2910 sizeof (minsym_and_objfile_d),
2911 compare_msyms);
2912
2913 /* Now the minsyms are in classification order. So, we walk
2914 over them and process just the minsyms with the same
2915 classification as the very first minsym in the list. */
2916 item = VEC_index (minsym_and_objfile_d, local.msyms, 0);
2917 classification = classify_mtype (MSYMBOL_TYPE (item->minsym));
2918
2919 for (ix = 0;
2920 VEC_iterate (minsym_and_objfile_d, local.msyms, ix, item);
2921 ++ix)
2922 {
2923 if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
2924 break;
2925
07fea4b4
TT
2926 minsym_found (info->state, item->objfile, item->minsym,
2927 &info->result);
39b856a4
TT
2928 }
2929 }
2930
2931 do_cleanups (cleanup);
f8eba3c6
TT
2932 }
2933}
2934
2935/* A helper function to add all symbols matching NAME to INFO. If
2936 PSPACE is not NULL, the search is restricted to just that program
2937 space. */
0f5238ed 2938
f8eba3c6
TT
2939static void
2940add_matching_symbols_to_info (const char *name,
2941 struct collect_info *info,
2942 struct program_space *pspace)
2943{
2944 int ix;
2945 struct symtab *elt;
0f5238ed 2946
f8eba3c6
TT
2947 for (ix = 0; VEC_iterate (symtab_p, info->state->file_symtabs, ix, elt); ++ix)
2948 {
2949 struct symbol *sym;
0f5238ed 2950
f8eba3c6
TT
2951 if (elt == NULL)
2952 {
2953 iterate_over_all_matching_symtabs (name, VAR_DOMAIN,
2954 collect_symbols, info,
2955 pspace);
2956 search_minsyms_for_name (info, name, pspace);
2957 }
2958 else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
2959 {
2960 /* Program spaces that are executing startup should have
2961 been filtered out earlier. */
2962 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
2963 set_current_program_space (SYMTAB_PSPACE (elt));
2964 LA_ITERATE_OVER_SYMBOLS (get_search_block (elt), name,
2965 VAR_DOMAIN, collect_symbols,
2966 info);
2967 }
2968 }
0f5238ed
TT
2969}
2970
88d262ca 2971/* Decode a linespec that's a variable. If FILE_SYMTAB is non-NULL,
58438ac1 2972 look in that symtab's static variables first. */
bca02a8a
DC
2973
2974static struct symtabs_and_lines
f8eba3c6 2975decode_variable (struct linespec_state *self, char *copy)
bca02a8a 2976{
f8eba3c6
TT
2977 struct collect_info info;
2978 const char *lookup_name;
2979 char *canon;
3a93a0c2 2980 struct cleanup *cleanup;
bca02a8a 2981
f8eba3c6
TT
2982 info.state = self;
2983 info.result.sals = NULL;
2984 info.result.nelts = 0;
f8eba3c6
TT
2985
2986 cleanup = demangle_for_lookup (copy, current_language->la_language,
2987 &lookup_name);
2988 if (current_language->la_language == language_ada)
3a93a0c2 2989 {
f8eba3c6
TT
2990 /* In Ada, the symbol lookups are performed using the encoded
2991 name rather than the demangled name. */
2992 lookup_name = ada_name_for_lookup (copy);
2993 make_cleanup (xfree, (void *) lookup_name);
3a93a0c2
KS
2994 }
2995
f8eba3c6
TT
2996 canon = cp_canonicalize_string_no_typedefs (lookup_name);
2997 if (canon != NULL)
3a93a0c2 2998 {
f8eba3c6
TT
2999 make_cleanup (xfree, canon);
3000 lookup_name = canon;
3a93a0c2 3001 }
bca02a8a 3002
f8eba3c6 3003 add_matching_symbols_to_info (lookup_name, &info, NULL);
bca02a8a 3004
f8eba3c6
TT
3005 if (info.result.nelts > 0)
3006 {
3007 if (self->canonical)
3008 {
3009 self->canonical->pre_expanded = 1;
3010 if (self->user_filename)
3011 self->canonical->addr_string
3012 = xstrprintf ("%s:%s", self->user_filename, copy);
3013 else
3014 self->canonical->addr_string = xstrdup (copy);
3015 }
3016 return info.result;
3017 }
bca02a8a 3018
b96e2927
PA
3019 if (!have_full_symbols ()
3020 && !have_partial_symbols ()
3021 && !have_minimal_symbols ())
3022 throw_error (NOT_FOUND_ERROR,
3023 _("No symbol table is loaded. Use the \"file\" command."));
f8eba3c6
TT
3024 if (self->user_filename)
3025 throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined in \"%s\"."),
3026 copy, self->user_filename);
3027 else
3028 throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
bca02a8a
DC
3029}
3030
3031
14e91ac5
DC
3032\f
3033
413dad4d
DC
3034/* Now come some functions that are called from multiple places within
3035 decode_line_1. */
3036
f8eba3c6
TT
3037static int
3038symbol_to_sal (struct symtab_and_line *result,
3039 int funfirstline, struct symbol *sym)
413dad4d 3040{
413dad4d 3041 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
50641945 3042 {
f8eba3c6
TT
3043 *result = find_function_start_sal (sym, funfirstline);
3044 return 1;
50641945 3045 }
413dad4d
DC
3046 else
3047 {
62853458 3048 if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
413dad4d 3049 {
f8eba3c6
TT
3050 init_sal (result);
3051 result->symtab = SYMBOL_SYMTAB (sym);
3052 result->line = SYMBOL_LINE (sym);
3053 result->pc = SYMBOL_VALUE_ADDRESS (sym);
3054 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3055 result->explicit_pc = 1;
3056 return 1;
413dad4d 3057 }
62853458 3058 else if (funfirstline)
dcf9f4ab 3059 {
f8eba3c6 3060 /* Nothing. */
dcf9f4ab 3061 }
62853458
TT
3062 else if (SYMBOL_LINE (sym) != 0)
3063 {
3064 /* We know its line number. */
f8eba3c6
TT
3065 init_sal (result);
3066 result->symtab = SYMBOL_SYMTAB (sym);
3067 result->line = SYMBOL_LINE (sym);
3068 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3069 return 1;
62853458 3070 }
413dad4d 3071 }
f8eba3c6
TT
3072
3073 return 0;
413dad4d 3074}
50641945 3075
f8eba3c6 3076/* See the comment in linespec.h. */
50641945 3077
f8eba3c6
TT
3078void
3079init_linespec_result (struct linespec_result *lr)
413dad4d 3080{
f8eba3c6
TT
3081 memset (lr, 0, sizeof (*lr));
3082}
413dad4d 3083
f8eba3c6 3084/* See the comment in linespec.h. */
bccdca4a 3085
f8eba3c6
TT
3086void
3087destroy_linespec_result (struct linespec_result *ls)
3088{
3089 int i;
3090 struct linespec_sals *lsal;
bccdca4a 3091
f8eba3c6
TT
3092 xfree (ls->addr_string);
3093 for (i = 0; VEC_iterate (linespec_sals, ls->sals, i, lsal); ++i)
3094 {
3095 xfree (lsal->canonical);
3096 xfree (lsal->sals.sals);
3097 }
3098 VEC_free (linespec_sals, ls->sals);
3099}
e48883f7 3100
f8eba3c6
TT
3101/* Cleanup function for a linespec_result. */
3102
3103static void
3104cleanup_linespec_result (void *a)
3105{
3106 destroy_linespec_result (a);
50641945 3107}
7efd8fc2 3108
f8eba3c6
TT
3109/* See the comment in linespec.h. */
3110
3111struct cleanup *
3112make_cleanup_destroy_linespec_result (struct linespec_result *ls)
7efd8fc2 3113{
f8eba3c6 3114 return make_cleanup (cleanup_linespec_result, ls);
7efd8fc2 3115}
This page took 1.116863 seconds and 4 git commands to generate.