1 /* Parser for linespec for the GNU debugger, GDB.
3 Copyright (C) 1986-2005, 2007-2012 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
29 #include "completer.h"
31 #include "cp-support.h"
32 #include "parser-defs.h"
34 #include "objc-lang.h"
36 #include "exceptions.h"
39 #include "mi/mi-cmds.h"
41 #include "arch-utils.h"
43 #include "cli/cli-utils.h"
44 #include "filenames.h"
47 typedef struct symtab *symtab_p;
50 typedef struct symbol *symbolp;
53 typedef struct type *typep;
56 /* An address entry is used to ensure that any given location is only
57 added to the result a single time. It holds an address and the
58 program space from which the address came. */
62 struct program_space *pspace;
66 /* An instance of this is used to keep all state while linespec
67 operates. This instance is passed around as a 'this' pointer to
68 the various implementation methods. */
72 /* The program space as seen when the module was entered. */
73 struct program_space *program_space;
75 /* The default symtab to use, if no other symtab is specified. */
76 struct symtab *default_symtab;
78 /* The default line to use. */
81 /* If the linespec started with "FILE:", this holds all the matching
82 symtabs. Otherwise, it will hold a single NULL entry, meaning
83 that the default symtab should be used. */
84 VEC (symtab_p) *file_symtabs;
86 /* If the linespec started with "FILE:", this holds an xmalloc'd
90 /* If the linespec is "FUNCTION:LABEL", this holds an xmalloc'd copy
94 /* The 'funfirstline' value that was passed in to decode_line_1 or
98 /* Nonzero if we are running in 'list' mode; see decode_line_list. */
101 /* The 'canonical' value passed to decode_line_full, or NULL. */
102 struct linespec_result *canonical;
104 /* Canonical strings that mirror the symtabs_and_lines result. */
105 char **canonical_names;
107 /* This is a set of address_entry objects which is used to prevent
108 duplicate symbols from being entered into the result. */
112 /* This is a helper object that is used when collecting symbols into a
117 /* The linespec object in use. */
118 struct linespec_state *state;
120 /* The result being accumulated. */
121 struct symtabs_and_lines result;
124 /* Prototypes for local functions. */
126 static void initialize_defaults (struct symtab **default_symtab,
129 static struct symtabs_and_lines decode_indirect (struct linespec_state *self,
132 static char *locate_first_half (char **argptr, int *is_quote_enclosed);
134 static struct symtabs_and_lines decode_objc (struct linespec_state *self,
137 static struct symtabs_and_lines decode_compound (struct linespec_state *self,
142 static VEC (symbolp) *lookup_prefix_sym (char **argptr, char *p,
146 static struct symtabs_and_lines find_method (struct linespec_state *self,
149 const char *class_name,
150 VEC (symbolp) *sym_classes);
152 static void cplusplus_error (const char *name, const char *fmt, ...)
153 ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3);
155 static char *find_toplevel_char (char *s, char c);
157 static int is_objc_method_format (const char *s);
159 static VEC (symtab_p) *symtabs_from_filename (char **argptr,
160 char *p, int is_quote_enclosed,
161 char **user_filename);
163 static VEC (symbolp) *find_function_symbols (char **argptr, char *p,
164 int is_quote_enclosed,
165 char **user_function);
167 static struct symtabs_and_lines decode_all_digits (struct linespec_state *self,
171 static struct symtabs_and_lines decode_dollar (struct linespec_state *self,
174 static int decode_label (struct linespec_state *self,
175 VEC (symbolp) *function_symbols,
177 struct symtabs_and_lines *result);
179 static struct symtabs_and_lines decode_variable (struct linespec_state *self,
182 static int symbol_to_sal (struct symtab_and_line *result,
183 int funfirstline, struct symbol *sym);
185 static void add_matching_symbols_to_info (const char *name,
186 struct collect_info *info,
187 struct program_space *pspace);
189 static void add_all_symbol_names_from_pspace (struct collect_info *info,
190 struct program_space *pspace,
191 VEC (const_char_ptr) *names);
193 /* Helper functions. */
195 /* Add SAL to SALS. */
198 add_sal_to_sals_basic (struct symtabs_and_lines *sals,
199 struct symtab_and_line *sal)
202 sals->sals = xrealloc (sals->sals, sals->nelts * sizeof (sals->sals[0]));
203 sals->sals[sals->nelts - 1] = *sal;
206 /* Add SAL to SALS, and also update SELF->CANONICAL_NAMES to reflect
207 the new sal, if needed. If not NULL, SYMNAME is the name of the
208 symbol to use when constructing the new canonical name. */
211 add_sal_to_sals (struct linespec_state *self,
212 struct symtabs_and_lines *sals,
213 struct symtab_and_line *sal,
216 add_sal_to_sals_basic (sals, sal);
220 char *canonical_name = NULL;
222 self->canonical_names = xrealloc (self->canonical_names,
223 sals->nelts * sizeof (char *));
224 if (sal->symtab && sal->symtab->filename)
226 char *filename = sal->symtab->filename;
228 /* Note that the filter doesn't have to be a valid linespec
229 input. We only apply the ":LINE" treatment to Ada for
231 if (symname != NULL && sal->line != 0
232 && current_language->la_language == language_ada)
233 canonical_name = xstrprintf ("%s:%s:%d", filename, symname,
235 else if (symname != NULL)
236 canonical_name = xstrprintf ("%s:%s", filename, symname);
238 canonical_name = xstrprintf ("%s:%d", filename, sal->line);
241 self->canonical_names[sals->nelts - 1] = canonical_name;
245 /* A hash function for address_entry. */
248 hash_address_entry (const void *p)
250 const struct address_entry *aep = p;
253 hash = iterative_hash_object (aep->pspace, 0);
254 return iterative_hash_object (aep->addr, hash);
257 /* An equality function for address_entry. */
260 eq_address_entry (const void *a, const void *b)
262 const struct address_entry *aea = a;
263 const struct address_entry *aeb = b;
265 return aea->pspace == aeb->pspace && aea->addr == aeb->addr;
268 /* Check whether the address, represented by PSPACE and ADDR, is
269 already in the set. If so, return 0. Otherwise, add it and return
273 maybe_add_address (htab_t set, struct program_space *pspace, CORE_ADDR addr)
275 struct address_entry e, *p;
280 slot = htab_find_slot (set, &e, INSERT);
284 p = XNEW (struct address_entry);
285 memcpy (p, &e, sizeof (struct address_entry));
291 /* Issue a helpful hint on using the command completion feature on
292 single quoted demangled C++ symbols as part of the completion
296 cplusplus_error (const char *name, const char *fmt, ...)
298 struct ui_file *tmp_stream;
301 tmp_stream = mem_fileopen ();
302 make_cleanup_ui_file_delete (tmp_stream);
307 va_start (args, fmt);
308 vfprintf_unfiltered (tmp_stream, fmt, args);
312 while (*name == '\'')
314 fprintf_unfiltered (tmp_stream,
315 ("Hint: try '%s<TAB> or '%s<ESC-?>\n"
316 "(Note leading single quote.)"),
319 message = ui_file_xstrdup (tmp_stream, NULL);
320 make_cleanup (xfree, message);
321 throw_error (NOT_FOUND_ERROR, "%s", message);
324 /* Some data for the expand_symtabs_matching callback. */
326 struct symbol_matcher_data
328 /* The lookup name against which symbol name should be compared. */
329 const char *lookup_name;
331 /* The routine to be used for comparison. */
332 symbol_name_cmp_ftype symbol_name_cmp;
335 /* A helper for iterate_over_all_matching_symtabs that is passed as a
336 callback to the expand_symtabs_matching method. */
339 iterate_name_matcher (const char *name, void *d)
341 const struct symbol_matcher_data *data = d;
343 if (data->symbol_name_cmp (name, data->lookup_name) == 0)
344 return 1; /* Expand this symbol's symbol table. */
345 return 0; /* Skip this symbol. */
348 /* A helper that walks over all matching symtabs in all objfiles and
349 calls CALLBACK for each symbol matching NAME. If SEARCH_PSPACE is
350 not NULL, then the search is restricted to just that program
354 iterate_over_all_matching_symtabs (const char *name,
355 const domain_enum domain,
356 symbol_found_callback_ftype *callback,
358 struct program_space *search_pspace)
360 struct objfile *objfile;
361 struct program_space *pspace;
362 struct symbol_matcher_data matcher_data;
364 matcher_data.lookup_name = name;
365 matcher_data.symbol_name_cmp =
366 current_language->la_get_symbol_name_cmp != NULL
367 ? current_language->la_get_symbol_name_cmp (name)
372 if (search_pspace != NULL && search_pspace != pspace)
374 if (pspace->executing_startup)
377 set_current_program_space (pspace);
379 ALL_OBJFILES (objfile)
381 struct symtab *symtab;
384 objfile->sf->qf->expand_symtabs_matching (objfile, NULL,
385 iterate_name_matcher,
389 ALL_OBJFILE_SYMTABS (objfile, symtab)
395 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
396 LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback, data);
403 /* Returns the block to be used for symbol searches for the given SYMTAB,
404 which may be NULL. */
406 static struct block *
407 get_search_block (struct symtab *symtab)
412 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
415 enum language save_language;
417 /* get_selected_block can change the current language when there is
418 no selected frame yet. */
419 save_language = current_language->la_language;
420 block = get_selected_block (0);
421 set_language (save_language);
427 /* A helper for find_method. This finds all methods in type T which
428 match NAME. It adds resulting symbol names to RESULT_NAMES, and
429 adds T's direct superclasses to SUPERCLASSES. */
432 find_methods (struct type *t, const char *name,
433 VEC (const_char_ptr) **result_names,
434 VEC (typep) **superclasses)
438 const char *class_name = type_name_no_tag (t);
440 /* Ignore this class if it doesn't have a name. This is ugly, but
441 unless we figure out how to get the physname without the name of
442 the class, then the loop can't do any good. */
446 int name_len = strlen (name);
450 /* Loop over each method name. At this level, all overloads of a name
451 are counted as a single name. There is an inner loop which loops over
454 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
458 const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
461 if (strncmp (method_name, "__", 2) == 0 ||
462 strncmp (method_name, "op", 2) == 0 ||
463 strncmp (method_name, "type", 4) == 0)
465 if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
466 method_name = dem_opname;
467 else if (cplus_demangle_opname (method_name, dem_opname, 0))
468 method_name = dem_opname;
471 if (strcmp_iw (method_name, name) == 0)
475 for (field_counter = (TYPE_FN_FIELDLIST_LENGTH (t, method_counter)
481 const char *phys_name;
483 f = TYPE_FN_FIELDLIST1 (t, method_counter);
484 if (TYPE_FN_FIELD_STUB (f, field_counter))
486 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
487 VEC_safe_push (const_char_ptr, *result_names, phys_name);
493 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
494 VEC_safe_push (typep, *superclasses, TYPE_BASECLASS (t, ibase));
497 /* Find an instance of the character C in the string S that is outside
498 of all parenthesis pairs, single-quoted strings, and double-quoted
499 strings. Also, ignore the char within a template name, like a ','
500 within foo<int, int>. */
503 find_toplevel_char (char *s, char c)
505 int quoted = 0; /* zero if we're not in quotes;
506 '"' if we're in a double-quoted string;
507 '\'' if we're in a single-quoted string. */
508 int depth = 0; /* Number of unclosed parens we've seen. */
511 for (scan = s; *scan; scan++)
517 else if (*scan == '\\' && *(scan + 1))
520 else if (*scan == c && ! quoted && depth == 0)
522 else if (*scan == '"' || *scan == '\'')
524 else if (*scan == '(' || *scan == '<')
526 else if ((*scan == ')' || *scan == '>') && depth > 0)
533 /* Determines if the gives string corresponds to an Objective-C method
534 representation, such as -[Foo bar:] or +[Foo bar]. Objective-C symbols
535 are allowed to have spaces and parentheses in them. */
538 is_objc_method_format (const char *s)
540 if (s == NULL || *s == '\0')
542 /* Handle arguments with the format FILENAME:SYMBOL. */
543 if ((s[0] == ':') && (strchr ("+-", s[1]) != NULL)
544 && (s[2] == '[') && strchr(s, ']'))
546 /* Handle arguments that are just SYMBOL. */
547 else if ((strchr ("+-", s[0]) != NULL) && (s[1] == '[') && strchr(s, ']'))
552 /* Given FILTERS, a list of canonical names, filter the sals in RESULT
553 and store the result in SELF->CANONICAL. */
556 filter_results (struct linespec_state *self,
557 struct symtabs_and_lines *result,
558 VEC (const_char_ptr) *filters)
563 for (i = 0; VEC_iterate (const_char_ptr, filters, i, name); ++i)
565 struct linespec_sals lsal;
568 memset (&lsal, 0, sizeof (lsal));
570 for (j = 0; j < result->nelts; ++j)
572 if (strcmp (name, self->canonical_names[j]) == 0)
573 add_sal_to_sals_basic (&lsal.sals, &result->sals[j]);
576 if (lsal.sals.nelts > 0)
578 lsal.canonical = xstrdup (name);
579 VEC_safe_push (linespec_sals, self->canonical->sals, &lsal);
583 self->canonical->pre_expanded = 0;
586 /* Store RESULT into SELF->CANONICAL. */
589 convert_results_to_lsals (struct linespec_state *self,
590 struct symtabs_and_lines *result)
592 struct linespec_sals lsal;
594 lsal.canonical = NULL;
596 VEC_safe_push (linespec_sals, self->canonical->sals, &lsal);
599 /* Handle multiple results in RESULT depending on SELECT_MODE. This
600 will either return normally, throw an exception on multiple
601 results, or present a menu to the user. On return, the SALS vector
602 in SELF->CANONICAL is set up properly. */
605 decode_line_2 (struct linespec_state *self,
606 struct symtabs_and_lines *result,
607 const char *select_mode)
612 struct cleanup *old_chain;
613 VEC (const_char_ptr) *item_names = NULL, *filters = NULL;
614 struct get_number_or_range_state state;
616 gdb_assert (select_mode != multiple_symbols_all);
617 gdb_assert (self->canonical != NULL);
619 old_chain = make_cleanup (VEC_cleanup (const_char_ptr), &item_names);
620 make_cleanup (VEC_cleanup (const_char_ptr), &filters);
621 for (i = 0; i < result->nelts; ++i)
626 gdb_assert (self->canonical_names[i] != NULL);
627 for (j = 0; VEC_iterate (const_char_ptr, item_names, j, iter); ++j)
629 if (strcmp (iter, self->canonical_names[i]) == 0)
637 VEC_safe_push (const_char_ptr, item_names, self->canonical_names[i]);
640 if (select_mode == multiple_symbols_cancel
641 && VEC_length (const_char_ptr, item_names) > 1)
642 error (_("canceled because the command is ambiguous\n"
643 "See set/show multiple-symbol."));
645 if (select_mode == multiple_symbols_all
646 || VEC_length (const_char_ptr, item_names) == 1)
648 do_cleanups (old_chain);
649 convert_results_to_lsals (self, result);
653 /* Sort the list of method names alphabetically. */
654 qsort (VEC_address (const_char_ptr, item_names),
655 VEC_length (const_char_ptr, item_names),
656 sizeof (const_char_ptr), compare_strings);
658 printf_unfiltered (_("[0] cancel\n[1] all\n"));
659 for (i = 0; VEC_iterate (const_char_ptr, item_names, i, iter); ++i)
660 printf_unfiltered ("[%d] %s\n", i + 2, iter);
662 prompt = getenv ("PS2");
667 args = command_line_input (prompt, 0, "overload-choice");
669 if (args == 0 || *args == 0)
670 error_no_arg (_("one or more choice numbers"));
672 init_number_or_range (&state, args);
673 while (!state.finished)
677 num = get_number_or_range (&state);
680 error (_("canceled"));
683 /* We intentionally make this result in a single breakpoint,
684 contrary to what older versions of gdb did. The
685 rationale is that this lets a user get the
686 multiple_symbols_all behavior even with the 'ask'
687 setting; and he can get separate breakpoints by entering
688 "2-57" at the query. */
689 do_cleanups (old_chain);
690 convert_results_to_lsals (self, result);
695 if (num >= VEC_length (const_char_ptr, item_names))
696 printf_unfiltered (_("No choice number %d.\n"), num);
699 const char *elt = VEC_index (const_char_ptr, item_names, num);
703 VEC_safe_push (const_char_ptr, filters, elt);
704 VEC_replace (const_char_ptr, item_names, num, NULL);
708 printf_unfiltered (_("duplicate request for %d ignored.\n"),
714 filter_results (self, result, filters);
715 do_cleanups (old_chain);
718 /* Valid delimiters for linespec keywords "if", "thread" or "task". */
721 is_linespec_boundary (char c)
723 return c == ' ' || c == '\t' || c == '\0' || c == ',';
726 /* A helper function for decode_line_1 and friends which skips P
727 past any method overload information at the beginning of P, e.g.,
728 "(const struct foo *)".
730 This function assumes that P has already been validated to contain
731 overload information, and it will assert if *P != '('. */
733 find_method_overload_end (char *p)
737 gdb_assert (*p == '(');
757 /* Keep important information used when looking up a name. This includes
758 template parameters, overload information, and important keywords, including
759 the possible Java trailing type. */
762 keep_name_info (char *p, int on_boundary)
764 const char *quotes = get_gdb_completer_quote_characters ();
770 if (strchr (quotes, *p))
773 if (*p == ',' && !nest)
776 if (on_boundary && !nest)
778 const char *const words[] = { "if", "thread", "task" };
781 for (wordi = 0; wordi < ARRAY_SIZE (words); wordi++)
782 if (strncmp (p, words[wordi], strlen (words[wordi])) == 0
783 && is_linespec_boundary (p[strlen (words[wordi])]))
785 if (wordi < ARRAY_SIZE (words))
789 if (*p == '(' || *p == '<' || *p == '[')
791 else if ((*p == ')' || *p == '>' || *p == ']') && nest > 0)
796 /* The ',' check could fail on "operator ,". */
797 p += cp_validate_operator (p);
799 on_boundary = is_linespec_boundary (p[-1]);
802 while (p > saved_p && is_linespec_boundary (p[-1]))
809 /* The parser of linespec itself. */
811 /* Parse a string that specifies a line number.
812 Pass the address of a char * variable; that variable will be
813 advanced over the characters actually parsed.
817 LINENUM -- that line number in current file. PC returned is 0.
818 FILE:LINENUM -- that line in that file. PC returned is 0.
819 FUNCTION -- line number of openbrace of that function.
820 PC returned is the start of the function.
821 LABEL -- a label in the current scope
822 VARIABLE -- line number of definition of that variable.
824 FILE:FUNCTION -- likewise, but prefer functions in that file.
825 *EXPR -- line in which address EXPR appears.
827 This may all be followed by an "if EXPR", which we ignore.
829 FUNCTION may be an undebuggable function found in minimal symbol table.
831 If the argument FUNFIRSTLINE is nonzero, we want the first line
832 of real code inside a function when a function is specified, and it is
833 not OK to specify a variable or type to get its line number.
835 DEFAULT_SYMTAB specifies the file to use if none is specified.
836 It defaults to current_source_symtab.
837 DEFAULT_LINE specifies the line number to use for relative
838 line numbers (that start with signs). Defaults to current_source_line.
839 If CANONICAL is non-NULL, store an array of strings containing the canonical
840 line specs there if necessary. Currently overloaded member functions and
841 line numbers or static functions without a filename yield a canonical
842 line spec. The array and the line spec strings are allocated on the heap,
843 it is the callers responsibility to free them.
845 Note that it is possible to return zero for the symtab
846 if no file is validly specified. Callers must check that.
847 Also, the line number returned may be invalid. */
849 /* We allow single quotes in various places. This is a hideous
850 kludge, which exists because the completer can't yet deal with the
851 lack of single quotes. FIXME: write a linespec_completer which we
852 can use as appropriate instead of make_symbol_completion_list. */
854 static struct symtabs_and_lines
855 decode_line_internal (struct linespec_state *self, char **argptr)
861 /* This says whether or not something in *ARGPTR is quoted with
862 completer_quotes (i.e. with single quotes). */
864 /* Is *ARGPTR enclosed in double quotes? */
865 int is_quote_enclosed;
866 int is_objc_method = 0;
867 char *saved_arg = *argptr;
868 /* If IS_QUOTED, the end of the quoted bit. */
869 char *end_quote = NULL;
870 /* Is *ARGPTR enclosed in single quotes? */
871 int is_squote_enclosed = 0;
872 /* The "first half" of the linespec. */
875 /* If we are parsing `function:label', this holds the symbols
876 matching the function name. */
877 VEC (symbolp) *function_symbols = NULL;
878 /* If FUNCTION_SYMBOLS is not NULL, then this is the exception that
879 was thrown when trying to parse a filename. */
880 volatile struct gdb_exception file_exception;
882 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
884 /* Defaults have defaults. */
886 initialize_defaults (&self->default_symtab, &self->default_line);
888 /* See if arg is *PC. */
892 do_cleanups (cleanup);
893 return decode_indirect (self, argptr);
896 is_quoted = (strchr (get_gdb_completer_quote_characters (),
901 end_quote = skip_quoted (*argptr);
902 if (*end_quote == '\0')
903 is_squote_enclosed = 1;
906 /* Check to see if it's a multipart linespec (with colons or
909 /* Locate the end of the first half of the linespec.
910 After the call, for instance, if the argptr string is "foo.c:123"
911 p will point at ":123". If there is only one part, like "foo", p
912 will point to "". If this is a C++ name, like "A::B::foo", p will
913 point to "::B::foo". Argptr is not changed by this call. */
915 first_half = p = locate_first_half (argptr, &is_quote_enclosed);
917 /* First things first: if ARGPTR starts with a filename, get its
918 symtab and strip the filename from ARGPTR.
919 Avoid calling symtab_from_filename if we know can,
920 it can be expensive. We know we can avoid the call if we see a
921 single word (e.g., "break NAME") or if we see a qualified C++
922 name ("break QUAL::NAME"). */
924 if (*p != '\0' && !(p[0] == ':' && p[1] == ':'))
926 TRY_CATCH (file_exception, RETURN_MASK_ERROR)
928 self->file_symtabs = symtabs_from_filename (argptr, p,
930 &self->user_filename);
933 if (file_exception.reason >= 0)
935 /* Check for single quotes on the non-filename part. */
936 is_quoted = (**argptr
937 && strchr (get_gdb_completer_quote_characters (),
940 end_quote = skip_quoted (*argptr);
942 /* Locate the next "half" of the linespec. */
943 first_half = p = locate_first_half (argptr, &is_quote_enclosed);
946 if (VEC_empty (symtab_p, self->file_symtabs))
948 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
949 VEC_safe_push (symtab_p, self->file_symtabs, NULL);
954 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
955 VEC_safe_push (symtab_p, self->file_symtabs, NULL);
958 /* Check if this is an Objective-C method (anything that starts with
959 a '+' or '-' and a '['). */
960 if (is_objc_method_format (p))
963 /* Check if the symbol could be an Objective-C selector. */
966 struct symtabs_and_lines values;
968 values = decode_objc (self, argptr);
969 if (values.sals != NULL)
971 do_cleanups (cleanup);
976 /* Does it look like there actually were two parts? */
978 if (p[0] == ':' || p[0] == '.')
980 /* Is it a C++ or Java compound data structure?
981 The check on p[1] == ':' is capturing the case of "::",
982 since p[0]==':' was checked above.
983 Note that the call to decode_compound does everything
984 for us, including the lookup on the symbol table, so we
987 if (p[0] == '.' || p[1] == ':')
989 /* We only perform this check for the languages where it might
990 make sense. For instance, Ada does not use this type of
991 syntax, and trying to apply this logic on an Ada linespec
992 may trigger a spurious error (for instance, decode_compound
993 does not like expressions such as `ops."<"', which is a
994 valid function name in Ada). */
995 if (current_language->la_language == language_c
996 || current_language->la_language == language_cplus
997 || current_language->la_language == language_java)
999 struct symtabs_and_lines values;
1000 volatile struct gdb_exception ex;
1001 char *saved_argptr = *argptr;
1003 if (is_quote_enclosed)
1006 /* Initialize it just to avoid a GCC false warning. */
1007 memset (&values, 0, sizeof (values));
1009 TRY_CATCH (ex, RETURN_MASK_ERROR)
1011 values = decode_compound (self, argptr, saved_arg, p);
1013 if ((is_quoted || is_squote_enclosed) && **argptr == '\'')
1014 *argptr = *argptr + 1;
1018 do_cleanups (cleanup);
1022 if (ex.error != NOT_FOUND_ERROR)
1023 throw_exception (ex);
1025 *argptr = saved_argptr;
1030 /* If there was an exception looking up a specified filename earlier,
1031 then check whether we were really given `function:label'. */
1032 if (file_exception.reason < 0)
1034 function_symbols = find_function_symbols (argptr, p,
1036 &self->user_function);
1038 /* If we did not find a function, re-throw the original
1040 if (!function_symbols)
1041 throw_exception (file_exception);
1043 make_cleanup (VEC_cleanup (symbolp), &function_symbols);
1046 /* Check for single quotes on the non-filename part. */
1049 is_quoted = (**argptr
1050 && strchr (get_gdb_completer_quote_characters (),
1053 end_quote = skip_quoted (*argptr);
1058 /* self->file_symtabs holds the specified file symtabs, or 0 if no file
1060 If we are parsing `function:symbol', then FUNCTION_SYMBOLS holds the
1061 functions before the `:'.
1062 arg no longer contains the file name. */
1064 /* If the filename was quoted, we must re-check the quotation. */
1066 if (end_quote == first_half && *end_quote!= '\0')
1068 is_quoted = (**argptr
1069 && strchr (get_gdb_completer_quote_characters (),
1072 end_quote = skip_quoted (*argptr);
1075 /* Check whether arg is all digits (and sign). */
1078 if (*q == '-' || *q == '+')
1080 while (*q >= '0' && *q <= '9')
1083 if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ',')
1084 && function_symbols == NULL)
1086 struct symtabs_and_lines values;
1088 /* We found a token consisting of all digits -- at least one digit. */
1089 values = decode_all_digits (self, argptr, q);
1090 do_cleanups (cleanup);
1094 /* Arg token is not digits => try it as a variable name
1095 Find the next token (everything up to end or next whitespace). */
1097 if (**argptr == '$') /* May be a convenience variable. */
1098 /* One or two $ chars possible. */
1099 p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));
1100 else if (is_quoted || is_squote_enclosed)
1104 error (_("Unmatched single quote."));
1106 else if (is_objc_method)
1108 /* allow word separators in method names for Obj-C. */
1109 p = skip_quoted_chars (*argptr, NULL, "");
1113 p = skip_quoted (*argptr);
1116 /* Keep any important naming information. */
1117 p = keep_name_info (p, p == saved_arg || is_linespec_boundary (p[-1]));
1119 copy = (char *) alloca (p - *argptr + 1);
1120 memcpy (copy, *argptr, p - *argptr);
1121 copy[p - *argptr] = '\0';
1124 && copy[0] == copy[p - *argptr - 1]
1125 && strchr (get_gdb_completer_quote_characters (), copy[0]) != NULL)
1127 copy[p - *argptr - 1] = '\0';
1130 else if (is_quoted || is_squote_enclosed)
1131 copy[p - *argptr - 1] = '\0';
1133 *argptr = skip_spaces (p);
1135 /* If it starts with $: may be a legitimate variable or routine name
1136 (e.g. HP-UX millicode routines such as $$dyncall), or it may
1137 be history value, or it may be a convenience variable. */
1139 if (*copy == '$' && function_symbols == NULL)
1141 struct symtabs_and_lines values;
1143 values = decode_dollar (self, copy);
1144 do_cleanups (cleanup);
1148 /* Try the token as a label, but only if no file was specified,
1149 because we can only really find labels in the current scope. */
1151 if (VEC_length (symtab_p, self->file_symtabs) == 1
1152 && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
1154 struct symtabs_and_lines label_result;
1155 if (decode_label (self, function_symbols, copy, &label_result))
1157 do_cleanups (cleanup);
1158 return label_result;
1162 if (function_symbols)
1163 throw_exception (file_exception);
1165 /* Look up that token as a variable.
1166 If file specified, use that file's per-file block to start with. */
1169 struct symtabs_and_lines values;
1171 values = decode_variable (self, copy);
1172 do_cleanups (cleanup);
1177 /* A constructor for linespec_state. */
1180 linespec_state_constructor (struct linespec_state *self,
1182 struct symtab *default_symtab,
1184 struct linespec_result *canonical)
1186 memset (self, 0, sizeof (*self));
1187 self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
1188 self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
1189 self->default_symtab = default_symtab;
1190 self->default_line = default_line;
1191 self->canonical = canonical;
1192 self->program_space = current_program_space;
1193 self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
1194 xfree, xcalloc, xfree);
1197 /* A destructor for linespec_state. */
1200 linespec_state_destructor (void *arg)
1202 struct linespec_state *self = arg;
1204 xfree (self->user_filename);
1205 xfree (self->user_function);
1206 VEC_free (symtab_p, self->file_symtabs);
1207 htab_delete (self->addr_set);
1210 /* See linespec.h. */
1213 decode_line_full (char **argptr, int flags,
1214 struct symtab *default_symtab,
1215 int default_line, struct linespec_result *canonical,
1216 const char *select_mode,
1219 struct symtabs_and_lines result;
1220 struct linespec_state state;
1221 struct cleanup *cleanups;
1222 char *arg_start = *argptr;
1223 VEC (const_char_ptr) *filters = NULL;
1225 gdb_assert (canonical != NULL);
1226 /* The filter only makes sense for 'all'. */
1227 gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
1228 gdb_assert (select_mode == NULL
1229 || select_mode == multiple_symbols_all
1230 || select_mode == multiple_symbols_ask
1231 || select_mode == multiple_symbols_cancel);
1232 gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
1234 linespec_state_constructor (&state, flags,
1235 default_symtab, default_line, canonical);
1236 cleanups = make_cleanup (linespec_state_destructor, &state);
1237 save_current_program_space ();
1239 result = decode_line_internal (&state, argptr);
1241 gdb_assert (result.nelts == 1 || canonical->pre_expanded);
1242 gdb_assert (canonical->addr_string != NULL);
1243 canonical->pre_expanded = 1;
1245 /* Fill in the missing canonical names. */
1246 if (result.nelts > 0)
1250 if (state.canonical_names == NULL)
1251 state.canonical_names = xcalloc (result.nelts, sizeof (char *));
1252 make_cleanup (xfree, state.canonical_names);
1253 for (i = 0; i < result.nelts; ++i)
1255 if (state.canonical_names[i] == NULL)
1256 state.canonical_names[i] = savestring (arg_start,
1257 *argptr - arg_start);
1258 make_cleanup (xfree, state.canonical_names[i]);
1262 if (select_mode == NULL)
1264 if (ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
1265 select_mode = multiple_symbols_all;
1267 select_mode = multiple_symbols_select_mode ();
1270 if (select_mode == multiple_symbols_all)
1274 make_cleanup (VEC_cleanup (const_char_ptr), &filters);
1275 VEC_safe_push (const_char_ptr, filters, filter);
1276 filter_results (&state, &result, filters);
1279 convert_results_to_lsals (&state, &result);
1282 decode_line_2 (&state, &result, select_mode);
1284 do_cleanups (cleanups);
1287 struct symtabs_and_lines
1288 decode_line_1 (char **argptr, int flags,
1289 struct symtab *default_symtab,
1292 struct symtabs_and_lines result;
1293 struct linespec_state state;
1294 struct cleanup *cleanups;
1296 linespec_state_constructor (&state, flags,
1297 default_symtab, default_line, NULL);
1298 cleanups = make_cleanup (linespec_state_destructor, &state);
1299 save_current_program_space ();
1301 result = decode_line_internal (&state, argptr);
1302 do_cleanups (cleanups);
1308 /* First, some functions to initialize stuff at the beggining of the
1312 initialize_defaults (struct symtab **default_symtab, int *default_line)
1314 if (*default_symtab == 0)
1316 /* Use whatever we have for the default source line. We don't use
1317 get_current_or_default_symtab_and_line as it can recurse and call
1319 struct symtab_and_line cursal =
1320 get_current_source_symtab_and_line ();
1322 *default_symtab = cursal.symtab;
1323 *default_line = cursal.line;
1329 /* Decode arg of the form *PC. */
1331 static struct symtabs_and_lines
1332 decode_indirect (struct linespec_state *self, char **argptr)
1334 struct symtabs_and_lines values;
1336 char *initial = *argptr;
1338 if (current_program_space->executing_startup)
1339 /* The error message doesn't really matter, because this case
1340 should only hit during breakpoint reset. */
1341 throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
1342 "program space is in startup"));
1345 pc = value_as_address (parse_to_comma_and_eval (argptr));
1347 values.sals = (struct symtab_and_line *)
1348 xmalloc (sizeof (struct symtab_and_line));
1351 values.sals[0] = find_pc_line (pc, 0);
1352 values.sals[0].pc = pc;
1353 values.sals[0].section = find_pc_overlay (pc);
1354 values.sals[0].explicit_pc = 1;
1356 if (self->canonical)
1357 self->canonical->addr_string = savestring (initial, *argptr - initial);
1364 /* Locate the first half of the linespec, ending in a colon, period,
1365 or whitespace. (More or less.) Also, check to see if *ARGPTR is
1366 enclosed in double quotes; if so, set is_quote_enclosed, advance
1367 ARGPTR past that and zero out the trailing double quote.
1368 If ARGPTR is just a simple name like "main", p will point to ""
1372 locate_first_half (char **argptr, int *is_quote_enclosed)
1378 /* Check if the linespec starts with an Ada operator (such as "+",
1379 or ">", for instance). */
1382 && current_language->la_language == language_ada)
1384 const struct ada_opname_map *op;
1386 for (op = ada_opname_table; op->encoded != NULL; op++)
1387 if (strncmp (op->decoded, p, strlen (op->decoded)) == 0)
1389 if (op->encoded != NULL)
1391 *is_quote_enclosed = 0;
1392 return p + strlen (op->decoded);
1396 /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
1397 and we must isolate the first half. Outer layers will call again later
1398 for the second half.
1400 Don't count commas that appear in argument lists of overloaded
1401 functions, or in quoted strings. It's stupid to go to this much
1402 trouble when the rest of the function is such an obvious roach hotel. */
1403 ii = find_toplevel_char (*argptr, ',');
1404 has_comma = (ii != 0);
1406 /* Temporarily zap out second half to not confuse the code below.
1407 This is undone below. Do not change ii!! */
1413 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION. May also be
1414 CLASS::MEMBER, or NAMESPACE::NAME. Look for ':', but ignore
1420 *is_quote_enclosed = 1;
1426 *is_quote_enclosed = 0;
1427 if (strchr (get_gdb_completer_quote_characters (), *p))
1435 /* Check for a drive letter in the filename. This is done on all hosts
1436 to capture cross-compilation environments. On Unixen, directory
1437 separators are illegal in filenames, so if the user enters "e:/foo.c",
1438 he is referring to a directory named "e:" and a source file named
1439 "foo.c", and we still want to keep these two pieces together. */
1440 if (isalpha (p[0]) && p[1] == ':' && IS_DIR_SEPARATOR (p[2]))
1447 char *temp_end = find_template_name_end (p);
1450 error (_("malformed template specification in command"));
1455 p = find_method_overload_end (p);
1457 /* Check for a colon and a plus or minus and a [ (which
1458 indicates an Objective-C method). */
1459 if (is_objc_method_format (p))
1463 /* Check for the end of the first half of the linespec. End of
1464 line, a tab, a colon or a space. But if enclosed in double
1465 quotes we do not break on enclosed spaces. */
1469 || ((p[0] == ' ') && !*is_quote_enclosed))
1471 if (p[0] == '.' && strchr (p, ':') == NULL)
1473 /* Java qualified method. Find the *last* '.', since the
1474 others are package qualifiers. Stop at any open parenthesis
1475 which might provide overload information. */
1476 for (p1 = p; *p1 && *p1 != '('; p1++)
1484 p = skip_spaces (p);
1486 /* If the closing double quote was left at the end, remove it. */
1487 if (*is_quote_enclosed)
1489 char *closing_quote = strchr (p - 1, '"');
1491 if (closing_quote && closing_quote[1] == '\0')
1492 *closing_quote = '\0';
1495 /* Now that we've safely parsed the first half, put back ',' so
1496 outer layers can see it. */
1505 /* Here's where we recognise an Objective-C Selector. An Objective C
1506 selector may be implemented by more than one class, therefore it
1507 may represent more than one method/function. This gives us a
1508 situation somewhat analogous to C++ overloading. If there's more
1509 than one method that could represent the selector, then use some of
1510 the existing C++ code to let the user choose one. */
1512 static struct symtabs_and_lines
1513 decode_objc (struct linespec_state *self, char **argptr)
1515 struct collect_info info;
1516 VEC (const_char_ptr) *symbol_names = NULL;
1518 struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
1522 info.result.sals = NULL;
1523 info.result.nelts = 0;
1525 new_argptr = find_imps (*argptr, &symbol_names);
1526 if (VEC_empty (const_char_ptr, symbol_names))
1528 do_cleanups (cleanup);
1532 add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
1534 if (info.result.nelts > 0)
1538 saved_arg = alloca (new_argptr - *argptr + 1);
1539 memcpy (saved_arg, *argptr, new_argptr - *argptr);
1540 saved_arg[new_argptr - *argptr] = '\0';
1542 if (self->canonical)
1544 self->canonical->pre_expanded = 1;
1545 if (self->user_filename)
1546 self->canonical->addr_string
1547 = xstrprintf ("%s:%s", self->user_filename, saved_arg);
1549 self->canonical->addr_string = xstrdup (saved_arg);
1553 *argptr = new_argptr;
1555 do_cleanups (cleanup);
1559 /* This handles C++ and Java compound data structures. P should point
1560 at the first component separator, i.e. double-colon or period. As
1561 an example, on entrance to this function we could have ARGPTR
1562 pointing to "AAA::inA::fun" and P pointing to "::inA::fun". */
1564 static struct symtabs_and_lines
1565 decode_compound (struct linespec_state *self,
1566 char **argptr, char *the_real_saved_arg, char *p)
1568 struct symtabs_and_lines values;
1570 char *saved_arg2 = *argptr;
1574 VEC (symbolp) *sym_classes;
1575 char *saved_arg, *class_name;
1576 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
1578 /* If the user specified any completer quote characters in the input,
1579 strip them. They are superfluous. */
1580 saved_arg = alloca (strlen (the_real_saved_arg) + 1);
1582 char *dst = saved_arg;
1583 char *src = the_real_saved_arg;
1584 char *quotes = get_gdb_completer_quote_characters ();
1585 while (*src != '\0')
1587 if (strchr (quotes, *src) == NULL)
1594 /* First check for "global" namespace specification, of the form
1595 "::foo". If found, skip over the colons and jump to normal
1596 symbol processing. I.e. the whole line specification starts with
1597 "::" (note the condition that *argptr == p). */
1599 && ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
1602 /* Given our example "AAA::inA::fun", we have two cases to consider:
1604 1) AAA::inA is the name of a class. In that case, presumably it
1605 has a method called "fun"; we then look up that method using
1608 2) AAA::inA isn't the name of a class. In that case, either the
1609 user made a typo, AAA::inA is the name of a namespace, or it is
1610 the name of a minimal symbol.
1611 In this case we just delegate to decode_variable.
1613 Thus, our first task is to find everything before the last set of
1614 double-colons and figure out if it's the name of a class. So we
1615 first loop through all of the double-colons. */
1617 p2 = p; /* Save for restart. */
1619 /* This is very messy. Following the example above we have now the
1622 argptr -> "AAA::inA::fun
1623 saved_arg -> "AAA::inA::fun
1624 saved_arg2 -> "AAA::inA::fun
1625 p2 -> "::inA::fun". */
1627 /* In the loop below, with these strings, we'll make 2 passes, each
1628 is marked in comments. */
1632 static char *break_characters = " \t(";
1634 /* Move pointer up to next possible class/namespace token. */
1636 p = p2 + 1; /* Restart with old value +1. */
1638 /* PASS1: at this point p2->"::inA::fun", so p->":inA::fun",
1639 i.e. if there is a double-colon, p will now point to the
1641 /* PASS2: p2->"::fun", p->":fun" */
1643 /* Move pointer ahead to next double-colon. */
1645 && strchr (break_characters, *p) == NULL
1646 && strchr (get_gdb_completer_quote_characters (), *p) == NULL)
1648 if (current_language->la_language == language_cplus)
1649 p += cp_validate_operator (p);
1653 temp_end = find_template_name_end (p);
1655 error (_("malformed template specification in command"));
1658 /* Note that, since, at the start of this loop, p would be
1659 pointing to the second colon in a double-colon, we only
1660 satisfy the condition below if there is another
1661 double-colon to the right (after). I.e. there is another
1662 component that can be a class or a namespace. I.e, if at
1663 the beginning of this loop (PASS1), we had
1664 p->":inA::fun", we'll trigger this when p has been
1665 advanced to point to "::fun". */
1666 /* PASS2: we will not trigger this. */
1667 else if ((p[0] == ':') && (p[1] == ':'))
1668 break; /* Found double-colon. */
1671 /* PASS2: We'll keep getting here, until P points to one of the
1672 break characters, at which point we exit this loop. */
1676 && strncmp (&p[1], CP_ANONYMOUS_NAMESPACE_STR,
1677 CP_ANONYMOUS_NAMESPACE_LEN) == 0)
1678 p += CP_ANONYMOUS_NAMESPACE_LEN;
1679 else if (strchr (break_characters, *p) == NULL)
1686 break; /* Out of the while (1). This would happen
1687 for instance if we have looked up
1688 unsuccessfully all the components of the
1689 string, and p->""(PASS2). */
1691 /* We get here if p points to one of the break characters or "" (i.e.,
1693 /* Save restart for next time around. */
1695 /* Restore argptr as it was on entry to this function. */
1696 *argptr = saved_arg2;
1697 /* PASS1: at this point p->"::fun" argptr->"AAA::inA::fun",
1700 /* All ready for next pass through the loop. */
1704 /* Start of lookup in the symbol tables. */
1706 /* Lookup in the symbol table the substring between argptr and
1707 p. Note, this call changes the value of argptr. */
1708 /* Before the call, argptr->"AAA::inA::fun",
1709 p->"", p2->"::fun". After the call: argptr->"fun", p, p2
1711 sym_classes = lookup_prefix_sym (argptr, p2, self->file_symtabs,
1713 make_cleanup (VEC_cleanup (symbolp), &sym_classes);
1714 make_cleanup (xfree, class_name);
1716 /* If a class has been found, then we're in case 1 above. So we
1717 look up "fun" as a method of those classes. */
1718 if (!VEC_empty (symbolp, sym_classes))
1720 /* Arg token is not digits => try it as a function name.
1721 Find the next token (everything up to end or next
1724 && strchr (get_gdb_completer_quote_characters (),
1727 p = skip_quoted (*argptr);
1728 *argptr = *argptr + 1;
1732 /* At this point argptr->"fun". */
1736 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':'
1739 /* At this point p->"". String ended. */
1740 /* Nope, C++ operators could have spaces in them
1741 ("foo::operator <" or "foo::operator delete []").
1742 I apologize, this is a bit hacky... */
1743 if (current_language->la_language == language_cplus
1744 && *p == ' ' && p - 8 - *argptr + 1 > 0)
1746 /* The above loop has already swallowed "operator". */
1747 p += cp_validate_operator (p - 8) - 8;
1750 /* Keep any important naming information. */
1751 p = keep_name_info (p, 1);
1754 /* Allocate our own copy of the substring between argptr and
1756 copy = (char *) alloca (p - *argptr + 1);
1757 memcpy (copy, *argptr, p - *argptr);
1758 copy[p - *argptr] = '\0';
1760 && copy[p - *argptr - 1]
1761 && strchr (get_gdb_completer_quote_characters (),
1762 copy[p - *argptr - 1]) != NULL)
1763 copy[p - *argptr - 1] = '\0';
1765 /* At this point copy->"fun", p->"". */
1767 /* No line number may be specified. */
1768 *argptr = skip_spaces (p);
1769 /* At this point arptr->"". */
1771 /* Look for copy as a method of sym_class. */
1772 /* At this point copy->"fun", sym_class is "AAA:inA",
1773 saved_arg->"AAA::inA::fun". This concludes the scanning of
1774 the string for possible components matches. If we find it
1775 here, we return. If not, and we are at the and of the string,
1776 we'll lookup the whole string in the symbol tables. */
1778 values = find_method (self, saved_arg, copy, class_name, sym_classes);
1780 do_cleanups (cleanup);
1782 } /* End if symbol found. */
1785 /* We couldn't find a class, so we're in case 2 above. We check the
1786 entire name as a symbol instead. The simplest way to do this is
1787 to just throw an exception and let our caller fall through to
1790 throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
1793 /* An instance of this type is used when collecting prefix symbols for
1796 struct decode_compound_collector
1798 /* The result vector. */
1799 VEC (symbolp) *symbols;
1801 /* A hash table of all symbols we found. We use this to avoid
1802 adding any symbol more than once. */
1806 /* A callback for iterate_over_symbols that is used by
1807 lookup_prefix_sym to collect type symbols. */
1810 collect_one_symbol (struct symbol *sym, void *d)
1812 struct decode_compound_collector *collector = d;
1816 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
1817 return 1; /* Continue iterating. */
1819 t = SYMBOL_TYPE (sym);
1821 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
1822 && TYPE_CODE (t) != TYPE_CODE_UNION
1823 && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
1824 return 1; /* Continue iterating. */
1826 slot = htab_find_slot (collector->unique_syms, sym, INSERT);
1830 VEC_safe_push (symbolp, collector->symbols, sym);
1833 return 1; /* Continue iterating. */
1836 /* Return the symbol corresponding to the substring of *ARGPTR ending
1837 at P, allowing whitespace. Also, advance *ARGPTR past the symbol
1838 name in question, the compound object separator ("::" or "."), and
1839 whitespace. Note that *ARGPTR is changed whether or not the
1840 this call finds anything (i.e we return NULL). As an
1841 example, say ARGPTR is "AAA::inA::fun" and P is "::inA::fun". */
1843 static VEC (symbolp) *
1844 lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
1851 struct decode_compound_collector collector;
1852 struct cleanup *outer;
1853 struct cleanup *cleanup;
1854 struct block *search_block;
1856 /* Extract the class name. */
1858 while (p != *argptr && p[-1] == ' ')
1860 copy = (char *) xmalloc (p - *argptr + 1);
1861 memcpy (copy, *argptr, p - *argptr);
1862 copy[p - *argptr] = 0;
1864 outer = make_cleanup (xfree, copy);
1866 /* Discard the class name from the argptr. */
1867 p = p1 + (p1[0] == ':' ? 2 : 1);
1868 p = skip_spaces (p);
1871 /* At this point p1->"::inA::fun", p->"inA::fun" copy->"AAA",
1872 argptr->"inA::fun". */
1874 collector.symbols = NULL;
1875 make_cleanup (VEC_cleanup (symbolp), &collector.symbols);
1877 collector.unique_syms = htab_create_alloc (1, htab_hash_pointer,
1878 htab_eq_pointer, NULL,
1880 cleanup = make_cleanup_htab_delete (collector.unique_syms);
1882 for (ix = 0; VEC_iterate (symtab_p, file_symtabs, ix, elt); ++ix)
1886 iterate_over_all_matching_symtabs (copy, STRUCT_DOMAIN,
1887 collect_one_symbol, &collector,
1889 iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
1890 collect_one_symbol, &collector,
1895 struct block *search_block;
1897 /* Program spaces that are executing startup should have
1898 been filtered out earlier. */
1899 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
1900 set_current_program_space (SYMTAB_PSPACE (elt));
1901 search_block = get_search_block (elt);
1902 LA_ITERATE_OVER_SYMBOLS (search_block, copy, STRUCT_DOMAIN,
1903 collect_one_symbol, &collector);
1904 LA_ITERATE_OVER_SYMBOLS (search_block, copy, VAR_DOMAIN,
1905 collect_one_symbol, &collector);
1909 do_cleanups (cleanup);
1910 discard_cleanups (outer);
1911 return collector.symbols;
1914 /* A qsort comparison function for symbols. The resulting order does
1915 not actually matter; we just need to be able to sort them so that
1916 symbols with the same program space end up next to each other. */
1919 compare_symbols (const void *a, const void *b)
1921 struct symbol * const *sa = a;
1922 struct symbol * const *sb = b;
1925 uia = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sa));
1926 uib = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sb));
1933 uia = (uintptr_t) *sa;
1934 uib = (uintptr_t) *sb;
1944 /* Look for all the matching instances of each symbol in NAMES. Only
1945 instances from PSPACE are considered; other program spaces are
1946 handled by our caller. If PSPACE is NULL, then all program spaces
1947 are considered. Results are stored into INFO. */
1950 add_all_symbol_names_from_pspace (struct collect_info *info,
1951 struct program_space *pspace,
1952 VEC (const_char_ptr) *names)
1957 for (ix = 0; VEC_iterate (const_char_ptr, names, ix, iter); ++ix)
1958 add_matching_symbols_to_info (iter, info, pspace);
1962 find_superclass_methods (VEC (typep) *superclasses,
1964 VEC (const_char_ptr) **result_names)
1966 int old_len = VEC_length (const_char_ptr, *result_names);
1967 VEC (typep) *iter_classes;
1968 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
1970 iter_classes = superclasses;
1973 VEC (typep) *new_supers = NULL;
1977 make_cleanup (VEC_cleanup (typep), &new_supers);
1978 for (ix = 0; VEC_iterate (typep, iter_classes, ix, t); ++ix)
1979 find_methods (t, name, result_names, &new_supers);
1981 if (VEC_length (const_char_ptr, *result_names) != old_len
1982 || VEC_empty (typep, new_supers))
1985 iter_classes = new_supers;
1988 do_cleanups (cleanup);
1991 /* This finds the method COPY in the class whose type is given by one
1992 of the symbols in SYM_CLASSES. */
1994 static struct symtabs_and_lines
1995 find_method (struct linespec_state *self, char *saved_arg,
1996 char *copy, const char *class_name, VEC (symbolp) *sym_classes)
2000 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
2002 int last_result_len;
2003 VEC (typep) *superclass_vec;
2004 VEC (const_char_ptr) *result_names;
2005 struct collect_info info;
2008 /* NAME is typed by the user: it needs to be canonicalized before
2009 searching the symbol tables. */
2010 canon = cp_canonicalize_string_no_typedefs (copy);
2014 make_cleanup (xfree, copy);
2017 /* Sort symbols so that symbols with the same program space are next
2019 qsort (VEC_address (symbolp, sym_classes),
2020 VEC_length (symbolp, sym_classes),
2025 info.result.sals = NULL;
2026 info.result.nelts = 0;
2028 /* Iterate over all the types, looking for the names of existing
2029 methods matching COPY. If we cannot find a direct method in a
2030 given program space, then we consider inherited methods; this is
2031 not ideal (ideal would be to respect C++ hiding rules), but it
2032 seems good enough and is what GDB has historically done. We only
2033 need to collect the names because later we find all symbols with
2034 those names. This loop is written in a somewhat funny way
2035 because we collect data across the program space before deciding
2037 superclass_vec = NULL;
2038 make_cleanup (VEC_cleanup (typep), &superclass_vec);
2039 result_names = NULL;
2040 make_cleanup (VEC_cleanup (const_char_ptr), &result_names);
2041 last_result_len = 0;
2042 for (ix = 0; VEC_iterate (symbolp, sym_classes, ix, sym); ++ix)
2045 struct program_space *pspace;
2047 /* Program spaces that are executing startup should have
2048 been filtered out earlier. */
2049 gdb_assert (!SYMTAB_PSPACE (SYMBOL_SYMTAB (sym))->executing_startup);
2050 pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
2051 set_current_program_space (pspace);
2052 t = check_typedef (SYMBOL_TYPE (sym));
2053 find_methods (t, copy, &result_names, &superclass_vec);
2055 /* Handle all items from a single program space at once; and be
2056 sure not to miss the last batch. */
2057 if (ix == VEC_length (symbolp, sym_classes) - 1
2059 != SYMTAB_PSPACE (SYMBOL_SYMTAB (VEC_index (symbolp, sym_classes,
2062 /* If we did not find a direct implementation anywhere in
2063 this program space, consider superclasses. */
2064 if (VEC_length (const_char_ptr, result_names) == last_result_len)
2065 find_superclass_methods (superclass_vec, copy, &result_names);
2067 /* We have a list of candidate symbol names, so now we
2068 iterate over the symbol tables looking for all
2069 matches in this pspace. */
2070 add_all_symbol_names_from_pspace (&info, pspace, result_names);
2072 VEC_truncate (typep, superclass_vec, 0);
2073 last_result_len = VEC_length (const_char_ptr, result_names);
2077 if (info.result.nelts > 0)
2079 if (self->canonical)
2081 self->canonical->pre_expanded = 1;
2082 if (self->user_filename)
2083 self->canonical->addr_string
2084 = xstrprintf ("%s:%s", self->user_filename, saved_arg);
2086 self->canonical->addr_string = xstrdup (saved_arg);
2089 do_cleanups (cleanup);
2095 cplusplus_error (saved_arg,
2096 "the class `%s' does not have destructor defined\n",
2099 cplusplus_error (saved_arg,
2100 "the class %s does not have any method named %s\n",
2106 /* This object is used when collecting all matching symtabs. */
2108 struct symtab_collector
2110 /* The result vector of symtabs. */
2111 VEC (symtab_p) *symtabs;
2113 /* This is used to ensure the symtabs are unique. */
2114 htab_t symtab_table;
2117 /* Callback for iterate_over_symtabs. */
2120 add_symtabs_to_list (struct symtab *symtab, void *d)
2122 struct symtab_collector *data = d;
2125 slot = htab_find_slot (data->symtab_table, symtab, INSERT);
2129 VEC_safe_push (symtab_p, data->symtabs, symtab);
2135 /* Given a file name, return a VEC of all matching symtabs. */
2137 static VEC (symtab_p) *
2138 collect_symtabs_from_filename (const char *file)
2140 struct symtab_collector collector;
2141 struct cleanup *cleanups;
2142 struct program_space *pspace;
2144 collector.symtabs = NULL;
2145 collector.symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
2147 cleanups = make_cleanup_htab_delete (collector.symtab_table);
2149 /* Find that file's data. */
2150 ALL_PSPACES (pspace)
2152 if (pspace->executing_startup)
2155 set_current_program_space (pspace);
2156 iterate_over_symtabs (file, add_symtabs_to_list, &collector);
2159 do_cleanups (cleanups);
2160 return collector.symtabs;
2163 /* Return all the symtabs associated to the filename given by the
2164 substring of *ARGPTR ending at P, and advance ARGPTR past that
2167 static VEC (symtab_p) *
2168 symtabs_from_filename (char **argptr, char *p, int is_quote_enclosed,
2169 char **user_filename)
2173 struct cleanup *outer;
2174 VEC (symtab_p) *result;
2177 while (p != *argptr && p[-1] == ' ')
2179 if ((*p == '"') && is_quote_enclosed)
2181 copy = xmalloc (p - *argptr + 1);
2182 outer = make_cleanup (xfree, copy);
2183 memcpy (copy, *argptr, p - *argptr);
2184 /* It may have the ending quote right after the file name. */
2185 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
2186 || copy[p - *argptr - 1] == '\'')
2187 copy[p - *argptr - 1] = 0;
2189 copy[p - *argptr] = 0;
2191 result = collect_symtabs_from_filename (copy);
2193 if (VEC_empty (symtab_p, result))
2195 if (!have_full_symbols () && !have_partial_symbols ())
2196 throw_error (NOT_FOUND_ERROR,
2197 _("No symbol table is loaded. "
2198 "Use the \"file\" command."));
2199 throw_error (NOT_FOUND_ERROR, _("No source file named %s."), copy);
2202 /* Discard the file name from the arg. */
2206 *argptr = skip_spaces (p1 + 1);
2208 discard_cleanups (outer);
2209 *user_filename = copy;
2213 /* A callback used by iterate_over_all_matching_symtabs that collects
2214 symbols for find_function_symbols. */
2217 collect_function_symbols (struct symbol *sym, void *arg)
2219 VEC (symbolp) **syms = arg;
2221 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
2222 VEC_safe_push (symbolp, *syms, sym);
2224 return 1; /* Continue iterating. */
2227 /* Look up a function symbol in *ARGPTR. If found, advance *ARGPTR
2228 and return the symbol. If not found, return NULL. */
2230 static VEC (symbolp) *
2231 find_function_symbols (char **argptr, char *p, int is_quote_enclosed,
2232 char **user_function)
2236 VEC (symbolp) *result = NULL;
2239 while (p != *argptr && p[-1] == ' ')
2241 if ((*p == '"') && is_quote_enclosed)
2243 copy = (char *) xmalloc (p - *argptr + 1);
2244 *user_function = copy;
2245 memcpy (copy, *argptr, p - *argptr);
2246 /* It may have the ending quote right after the file name. */
2247 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
2248 || copy[p - *argptr - 1] == '\'')
2249 copy[p - *argptr - 1] = 0;
2251 copy[p - *argptr] = 0;
2253 iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
2254 collect_function_symbols, &result, NULL);
2256 if (VEC_empty (symbolp, result))
2257 VEC_free (symbolp, result);
2260 /* Discard the file name from the arg. */
2261 *argptr = skip_spaces (p1 + 1);
2269 /* A helper for decode_all_digits that handles the 'list_mode' case. */
2272 decode_digits_list_mode (struct linespec_state *self,
2273 struct symtabs_and_lines *values,
2274 struct symtab_and_line val)
2279 gdb_assert (self->list_mode);
2281 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2283 /* The logic above should ensure this. */
2284 gdb_assert (elt != NULL);
2286 set_current_program_space (SYMTAB_PSPACE (elt));
2288 /* Simplistic search just for the list command. */
2289 val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
2290 if (val.symtab == NULL)
2292 val.pspace = SYMTAB_PSPACE (elt);
2294 val.explicit_line = 1;
2296 add_sal_to_sals (self, values, &val, NULL);
2300 /* A helper for decode_all_digits that iterates over the symtabs,
2301 adding lines to the VEC. */
2304 decode_digits_ordinary (struct linespec_state *self,
2306 struct symtabs_and_lines *sals,
2307 struct linetable_entry **best_entry)
2312 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2315 VEC (CORE_ADDR) *pcs;
2318 /* The logic above should ensure this. */
2319 gdb_assert (elt != NULL);
2321 set_current_program_space (SYMTAB_PSPACE (elt));
2323 pcs = find_pcs_for_symtab_line (elt, line, best_entry);
2324 for (i = 0; VEC_iterate (CORE_ADDR, pcs, i, pc); ++i)
2326 struct symtab_and_line sal;
2329 sal.pspace = SYMTAB_PSPACE (elt);
2333 add_sal_to_sals_basic (sals, &sal);
2336 VEC_free (CORE_ADDR, pcs);
2340 /* This decodes a line where the argument is all digits (possibly
2341 preceded by a sign). Q should point to the end of those digits;
2342 the other arguments are as usual. */
2344 static struct symtabs_and_lines
2345 decode_all_digits (struct linespec_state *self,
2349 struct symtabs_and_lines values;
2350 struct symtab_and_line val;
2351 int use_default = 0;
2352 char *saved_arg = *argptr;
2364 /* This is where we need to make sure that we have good defaults.
2365 We must guarantee that this section of code is never executed
2366 when we are called with just a function name, since
2367 set_default_source_symtab_and_line uses
2368 select_source_symtab that calls us with such an argument. */
2370 if (VEC_length (symtab_p, self->file_symtabs) == 1
2371 && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
2373 set_current_program_space (self->program_space);
2375 /* Make sure we have at least a default source file. */
2376 set_default_source_symtab_and_line ();
2377 initialize_defaults (&self->default_symtab, &self->default_line);
2378 VEC_pop (symtab_p, self->file_symtabs);
2379 VEC_free (symtab_p, self->file_symtabs);
2381 = collect_symtabs_from_filename (self->default_symtab->filename);
2385 if (**argptr == '+')
2386 sign = plus, (*argptr)++;
2387 else if (**argptr == '-')
2388 sign = minus, (*argptr)++;
2389 val.line = atoi (*argptr);
2396 val.line = self->default_line + val.line;
2402 val.line = self->default_line - val.line;
2407 break; /* No need to adjust val.line. */
2410 *argptr = skip_spaces (q);
2412 if (self->list_mode)
2413 decode_digits_list_mode (self, &values, val);
2416 struct linetable_entry *best_entry = NULL;
2418 struct block **blocks;
2419 struct cleanup *cleanup;
2420 struct symtabs_and_lines intermediate_results;
2423 intermediate_results.sals = NULL;
2424 intermediate_results.nelts = 0;
2426 decode_digits_ordinary (self, val.line, &intermediate_results,
2428 if (intermediate_results.nelts == 0 && best_entry != NULL)
2429 decode_digits_ordinary (self, best_entry->line, &intermediate_results,
2432 cleanup = make_cleanup (xfree, intermediate_results.sals);
2434 /* For optimized code, compiler can scatter one source line
2435 accross disjoint ranges of PC values, even when no duplicate
2436 functions or inline functions are involved. For example,
2437 'for (;;)' inside non-template non-inline non-ctor-or-dtor
2438 function can result in two PC ranges. In this case, we don't
2439 want to set breakpoint on first PC of each range. To filter
2440 such cases, we use containing blocks -- for each PC found
2441 above we see if there are other PCs that are in the same
2442 block. If yes, the other PCs are filtered out. */
2444 filter = xmalloc (intermediate_results.nelts * sizeof (int));
2445 make_cleanup (xfree, filter);
2446 blocks = xmalloc (intermediate_results.nelts * sizeof (struct block *));
2447 make_cleanup (xfree, blocks);
2449 for (i = 0; i < intermediate_results.nelts; ++i)
2451 set_current_program_space (intermediate_results.sals[i].pspace);
2454 blocks[i] = block_for_pc_sect (intermediate_results.sals[i].pc,
2455 intermediate_results.sals[i].section);
2458 for (i = 0; i < intermediate_results.nelts; ++i)
2460 if (blocks[i] != NULL)
2461 for (j = i + 1; j < intermediate_results.nelts; ++j)
2463 if (blocks[j] == blocks[i])
2471 for (i = 0; i < intermediate_results.nelts; ++i)
2474 struct symbol *sym = (blocks[i]
2475 ? block_containing_function (blocks[i])
2478 if (self->funfirstline)
2479 skip_prologue_sal (&intermediate_results.sals[i]);
2480 /* Make sure the line matches the request, not what was
2482 intermediate_results.sals[i].line = val.line;
2483 add_sal_to_sals (self, &values, &intermediate_results.sals[i],
2484 sym ? SYMBOL_NATURAL_NAME (sym) : NULL);
2487 do_cleanups (cleanup);
2490 if (values.nelts == 0)
2492 if (self->user_filename)
2493 throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
2494 val.line, self->user_filename);
2496 throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
2500 if (self->canonical)
2502 char *copy = savestring (saved_arg, q - saved_arg);
2504 self->canonical->pre_expanded = 1;
2505 gdb_assert (self->user_filename || use_default);
2506 self->canonical->addr_string
2507 = xstrprintf ("%s:%s", (self->user_filename
2508 ? self->user_filename
2509 : self->default_symtab->filename),
2519 /* Decode a linespec starting with a dollar sign. */
2521 static struct symtabs_and_lines
2522 decode_dollar (struct linespec_state *self, char *copy)
2526 struct symtabs_and_lines values;
2527 struct symtab_and_line val;
2530 struct minimal_symbol *msymbol;
2534 p = (copy[1] == '$') ? copy + 2 : copy + 1;
2535 while (*p >= '0' && *p <= '9')
2537 if (!*p) /* Reached end of token without hitting non-digit. */
2539 /* We have a value history reference. */
2540 struct value *val_history;
2542 sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
2543 val_history = access_value_history ((copy[1] == '$') ? -index : index);
2544 if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
2545 error (_("History values used in line "
2546 "specs must have integer values."));
2547 valx = value_as_long (val_history);
2551 /* Not all digits -- may be user variable/function or a
2552 convenience variable. */
2554 volatile struct gdb_exception exc;
2556 /* Avoid "may be used uninitialized" warning. */
2560 TRY_CATCH (exc, RETURN_MASK_ERROR)
2562 values = decode_variable (self, copy);
2565 if (exc.reason == 0)
2568 if (exc.error != NOT_FOUND_ERROR)
2569 throw_exception (exc);
2571 /* Not a user variable or function -- must be convenience variable. */
2572 if (!get_internalvar_integer (lookup_internalvar (copy + 1), &valx))
2573 error (_("Convenience variables used in line "
2574 "specs must have integer values."));
2582 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2586 elt = self->default_symtab;
2587 set_current_program_space (self->program_space);
2590 set_current_program_space (SYMTAB_PSPACE (elt));
2592 /* Either history value or convenience value from above, in valx. */
2596 val.pspace = elt ? SYMTAB_PSPACE (elt) : current_program_space;
2598 add_sal_to_sals (self, &values, &val, NULL);
2601 if (self->canonical)
2603 self->canonical->pre_expanded = 1;
2604 if (self->user_filename)
2605 self->canonical->addr_string = xstrprintf ("%s:%s",
2606 self->user_filename, copy);
2608 self->canonical->addr_string = xstrdup (copy);
2616 /* A helper for decode_line_1 that tries to find a label. The label
2617 is searched for in the current block.
2618 FUNCTION_SYMBOLS is a list of the enclosing functions; or NULL if none
2620 COPY is the name of the label to find.
2621 CANONICAL is the same as the "canonical" argument to decode_line_1.
2622 RESULT is a pointer to a symtabs_and_lines structure which will be
2623 filled in on success.
2624 This function returns 1 if a label was found, 0 otherwise. */
2627 decode_label (struct linespec_state *self,
2628 VEC (symbolp) *function_symbols, char *copy,
2629 struct symtabs_and_lines *result)
2631 struct symbol *fn_sym;
2634 if (function_symbols == NULL)
2636 struct block *block;
2638 struct symtab_and_line sal;
2639 struct symtabs_and_lines values;
2644 set_current_program_space (self->program_space);
2645 block = get_search_block (NULL);
2648 block && !BLOCK_FUNCTION (block);
2649 block = BLOCK_SUPERBLOCK (block))
2653 fn_sym = BLOCK_FUNCTION (block);
2655 sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
2660 symbol_to_sal (&sal, self->funfirstline, sym);
2661 add_sal_to_sals (self, &values, &sal,
2662 SYMBOL_NATURAL_NAME (fn_sym));
2664 if (self->canonical)
2666 self->canonical->special_display = 1;
2667 self->canonical->addr_string
2668 = xstrprintf ("%s:%s", SYMBOL_NATURAL_NAME (fn_sym),
2677 result->sals = NULL;
2680 for (ix = 0; VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
2682 struct block *block;
2685 set_current_program_space (SYMTAB_PSPACE (SYMBOL_SYMTAB (fn_sym)));
2686 block = SYMBOL_BLOCK_VALUE (fn_sym);
2687 sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
2691 struct symtab_and_line sal;
2694 symbol_to_sal (&sal, self->funfirstline, sym);
2695 symname = xstrprintf ("%s:%s",
2696 SYMBOL_NATURAL_NAME (fn_sym),
2697 SYMBOL_NATURAL_NAME (sym));
2698 add_sal_to_sals (self, result, &sal, symname);
2703 if (self->canonical && result->nelts > 0)
2705 self->canonical->pre_expanded = 1;
2706 self->canonical->special_display = 1;
2708 gdb_assert (self->user_function);
2709 self->canonical->addr_string
2710 = xstrprintf ("%s:%s", self->user_function, copy);
2713 return result->nelts > 0;
2716 /* A callback used to possibly add a symbol to the results. */
2719 collect_symbols (struct symbol *sym, void *data)
2721 struct collect_info *info = data;
2722 struct symtab_and_line sal;
2724 if (symbol_to_sal (&sal, info->state->funfirstline, sym)
2725 && maybe_add_address (info->state->addr_set,
2726 SYMTAB_PSPACE (SYMBOL_SYMTAB (sym)),
2728 add_sal_to_sals (info->state, &info->result, &sal,
2729 SYMBOL_NATURAL_NAME (sym));
2731 return 1; /* Continue iterating. */
2734 /* We've found a minimal symbol MSYMBOL to associate with our
2735 linespec; add it to the result symtabs_and_lines. */
2738 minsym_found (struct linespec_state *self, struct objfile *objfile,
2739 struct minimal_symbol *msymbol,
2740 struct symtabs_and_lines *result)
2742 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2744 struct symtab_and_line sal;
2746 sal = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
2747 (struct obj_section *) 0, 0);
2748 sal.section = SYMBOL_OBJ_SECTION (msymbol);
2750 /* The minimal symbol might point to a function descriptor;
2751 resolve it to the actual code address instead. */
2752 pc = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc, ¤t_target);
2754 sal = find_pc_sect_line (pc, NULL, 0);
2756 if (self->funfirstline)
2757 skip_prologue_sal (&sal);
2759 if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
2760 add_sal_to_sals (self, result, &sal, SYMBOL_NATURAL_NAME (msymbol));
2763 /* A helper struct which just holds a minimal symbol and the object
2764 file from which it came. */
2766 typedef struct minsym_and_objfile
2768 struct minimal_symbol *minsym;
2769 struct objfile *objfile;
2770 } minsym_and_objfile_d;
2772 DEF_VEC_O (minsym_and_objfile_d);
2774 /* A helper struct to pass some data through
2775 iterate_over_minimal_symbols. */
2777 struct collect_minsyms
2779 /* The objfile we're examining. */
2780 struct objfile *objfile;
2782 /* The funfirstline setting from the initial call. */
2785 /* The list_mode setting from the initial call. */
2788 /* The resulting symbols. */
2789 VEC (minsym_and_objfile_d) *msyms;
2792 /* A helper function to classify a minimal_symbol_type according to
2796 classify_mtype (enum minimal_symbol_type t)
2803 /* Intermediate priority. */
2806 case mst_solib_trampoline:
2807 /* Lowest priority. */
2811 /* Highest priority. */
2816 /* Callback for qsort that sorts symbols by priority. */
2819 compare_msyms (const void *a, const void *b)
2821 const minsym_and_objfile_d *moa = a;
2822 const minsym_and_objfile_d *mob = b;
2823 enum minimal_symbol_type ta = MSYMBOL_TYPE (moa->minsym);
2824 enum minimal_symbol_type tb = MSYMBOL_TYPE (mob->minsym);
2826 return classify_mtype (ta) - classify_mtype (tb);
2829 /* Callback for iterate_over_minimal_symbols that adds the symbol to
2833 add_minsym (struct minimal_symbol *minsym, void *d)
2835 struct collect_minsyms *info = d;
2836 minsym_and_objfile_d mo;
2838 /* Exclude data symbols when looking for breakpoint locations. */
2839 if (!info->list_mode)
2840 switch (minsym->type)
2842 case mst_slot_got_plt:
2849 /* Make sure this minsym is not a function descriptor
2850 before we decide to discard it. */
2851 struct gdbarch *gdbarch = info->objfile->gdbarch;
2852 CORE_ADDR addr = gdbarch_convert_from_func_ptr_addr
2853 (gdbarch, SYMBOL_VALUE_ADDRESS (minsym),
2856 if (addr == SYMBOL_VALUE_ADDRESS (minsym))
2862 mo.objfile = info->objfile;
2863 VEC_safe_push (minsym_and_objfile_d, info->msyms, &mo);
2866 /* Search minimal symbols in all objfiles for NAME. If SEARCH_PSPACE
2867 is not NULL, the search is restricted to just that program
2871 search_minsyms_for_name (struct collect_info *info, const char *name,
2872 struct program_space *search_pspace)
2874 struct objfile *objfile;
2875 struct program_space *pspace;
2877 ALL_PSPACES (pspace)
2879 struct collect_minsyms local;
2880 struct cleanup *cleanup;
2882 if (search_pspace != NULL && search_pspace != pspace)
2884 if (pspace->executing_startup)
2887 set_current_program_space (pspace);
2889 memset (&local, 0, sizeof (local));
2890 local.funfirstline = info->state->funfirstline;
2891 local.list_mode = info->state->list_mode;
2893 cleanup = make_cleanup (VEC_cleanup (minsym_and_objfile_d),
2896 ALL_OBJFILES (objfile)
2898 local.objfile = objfile;
2899 iterate_over_minimal_symbols (objfile, name, add_minsym, &local);
2902 if (!VEC_empty (minsym_and_objfile_d, local.msyms))
2906 minsym_and_objfile_d *item;
2908 qsort (VEC_address (minsym_and_objfile_d, local.msyms),
2909 VEC_length (minsym_and_objfile_d, local.msyms),
2910 sizeof (minsym_and_objfile_d),
2913 /* Now the minsyms are in classification order. So, we walk
2914 over them and process just the minsyms with the same
2915 classification as the very first minsym in the list. */
2916 item = VEC_index (minsym_and_objfile_d, local.msyms, 0);
2917 classification = classify_mtype (MSYMBOL_TYPE (item->minsym));
2920 VEC_iterate (minsym_and_objfile_d, local.msyms, ix, item);
2923 if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
2926 minsym_found (info->state, item->objfile, item->minsym,
2931 do_cleanups (cleanup);
2935 /* A helper function to add all symbols matching NAME to INFO. If
2936 PSPACE is not NULL, the search is restricted to just that program
2940 add_matching_symbols_to_info (const char *name,
2941 struct collect_info *info,
2942 struct program_space *pspace)
2947 for (ix = 0; VEC_iterate (symtab_p, info->state->file_symtabs, ix, elt); ++ix)
2953 iterate_over_all_matching_symtabs (name, VAR_DOMAIN,
2954 collect_symbols, info,
2956 search_minsyms_for_name (info, name, pspace);
2958 else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
2960 /* Program spaces that are executing startup should have
2961 been filtered out earlier. */
2962 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
2963 set_current_program_space (SYMTAB_PSPACE (elt));
2964 LA_ITERATE_OVER_SYMBOLS (get_search_block (elt), name,
2965 VAR_DOMAIN, collect_symbols,
2971 /* Decode a linespec that's a variable. If FILE_SYMTAB is non-NULL,
2972 look in that symtab's static variables first. */
2974 static struct symtabs_and_lines
2975 decode_variable (struct linespec_state *self, char *copy)
2977 struct collect_info info;
2978 const char *lookup_name;
2980 struct cleanup *cleanup;
2983 info.result.sals = NULL;
2984 info.result.nelts = 0;
2986 cleanup = demangle_for_lookup (copy, current_language->la_language,
2988 if (current_language->la_language == language_ada)
2990 /* In Ada, the symbol lookups are performed using the encoded
2991 name rather than the demangled name. */
2992 lookup_name = ada_name_for_lookup (copy);
2993 make_cleanup (xfree, (void *) lookup_name);
2996 canon = cp_canonicalize_string_no_typedefs (lookup_name);
2999 make_cleanup (xfree, canon);
3000 lookup_name = canon;
3003 add_matching_symbols_to_info (lookup_name, &info, NULL);
3005 if (info.result.nelts > 0)
3007 if (self->canonical)
3009 self->canonical->pre_expanded = 1;
3010 if (self->user_filename)
3011 self->canonical->addr_string
3012 = xstrprintf ("%s:%s", self->user_filename, copy);
3014 self->canonical->addr_string = xstrdup (copy);
3019 if (!have_full_symbols ()
3020 && !have_partial_symbols ()
3021 && !have_minimal_symbols ())
3022 throw_error (NOT_FOUND_ERROR,
3023 _("No symbol table is loaded. Use the \"file\" command."));
3024 if (self->user_filename)
3025 throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined in \"%s\"."),
3026 copy, self->user_filename);
3028 throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
3034 /* Now come some functions that are called from multiple places within
3038 symbol_to_sal (struct symtab_and_line *result,
3039 int funfirstline, struct symbol *sym)
3041 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
3043 *result = find_function_start_sal (sym, funfirstline);
3048 if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
3051 result->symtab = SYMBOL_SYMTAB (sym);
3052 result->line = SYMBOL_LINE (sym);
3053 result->pc = SYMBOL_VALUE_ADDRESS (sym);
3054 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3055 result->explicit_pc = 1;
3058 else if (funfirstline)
3062 else if (SYMBOL_LINE (sym) != 0)
3064 /* We know its line number. */
3066 result->symtab = SYMBOL_SYMTAB (sym);
3067 result->line = SYMBOL_LINE (sym);
3068 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3076 /* See the comment in linespec.h. */
3079 init_linespec_result (struct linespec_result *lr)
3081 memset (lr, 0, sizeof (*lr));
3084 /* See the comment in linespec.h. */
3087 destroy_linespec_result (struct linespec_result *ls)
3090 struct linespec_sals *lsal;
3092 xfree (ls->addr_string);
3093 for (i = 0; VEC_iterate (linespec_sals, ls->sals, i, lsal); ++i)
3095 xfree (lsal->canonical);
3096 xfree (lsal->sals.sals);
3098 VEC_free (linespec_sals, ls->sals);
3101 /* Cleanup function for a linespec_result. */
3104 cleanup_linespec_result (void *a)
3106 destroy_linespec_result (a);
3109 /* See the comment in linespec.h. */
3112 make_cleanup_destroy_linespec_result (struct linespec_result *ls)
3114 return make_cleanup (cleanup_linespec_result, ls);