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