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