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