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 printf_unfiltered (_("[0] cancel\n[1] all\n"));
654 for (i = 0; VEC_iterate (const_char_ptr, item_names, i, iter); ++i)
655 printf_unfiltered ("[%d] %s\n", i + 2, iter);
657 prompt = getenv ("PS2");
662 args = command_line_input (prompt, 0, "overload-choice");
664 if (args == 0 || *args == 0)
665 error_no_arg (_("one or more choice numbers"));
667 init_number_or_range (&state, args);
668 while (!state.finished)
672 num = get_number_or_range (&state);
675 error (_("canceled"));
678 /* We intentionally make this result in a single breakpoint,
679 contrary to what older versions of gdb did. The
680 rationale is that this lets a user get the
681 multiple_symbols_all behavior even with the 'ask'
682 setting; and he can get separate breakpoints by entering
683 "2-57" at the query. */
684 do_cleanups (old_chain);
685 convert_results_to_lsals (self, result);
690 if (num >= VEC_length (const_char_ptr, item_names))
691 printf_unfiltered (_("No choice number %d.\n"), num);
694 const char *elt = VEC_index (const_char_ptr, item_names, num);
698 VEC_safe_push (const_char_ptr, filters, elt);
699 VEC_replace (const_char_ptr, item_names, num, NULL);
703 printf_unfiltered (_("duplicate request for %d ignored.\n"),
709 filter_results (self, result, filters);
710 do_cleanups (old_chain);
713 /* Valid delimiters for linespec keywords "if", "thread" or "task". */
716 is_linespec_boundary (char c)
718 return c == ' ' || c == '\t' || c == '\0' || c == ',';
721 /* A helper function for decode_line_1 and friends which skips P
722 past any method overload information at the beginning of P, e.g.,
723 "(const struct foo *)".
725 This function assumes that P has already been validated to contain
726 overload information, and it will assert if *P != '('. */
728 find_method_overload_end (char *p)
732 gdb_assert (*p == '(');
752 /* Keep important information used when looking up a name. This includes
753 template parameters, overload information, and important keywords, including
754 the possible Java trailing type. */
757 keep_name_info (char *p, int on_boundary)
759 const char *quotes = get_gdb_completer_quote_characters ();
765 if (strchr (quotes, *p))
768 if (*p == ',' && !nest)
771 if (on_boundary && !nest)
773 const char *const words[] = { "if", "thread", "task" };
776 for (wordi = 0; wordi < ARRAY_SIZE (words); wordi++)
777 if (strncmp (p, words[wordi], strlen (words[wordi])) == 0
778 && is_linespec_boundary (p[strlen (words[wordi])]))
780 if (wordi < ARRAY_SIZE (words))
784 if (*p == '(' || *p == '<' || *p == '[')
786 else if ((*p == ')' || *p == '>' || *p == ']') && nest > 0)
791 /* The ',' check could fail on "operator ,". */
792 p += cp_validate_operator (p);
794 on_boundary = is_linespec_boundary (p[-1]);
797 while (p > saved_p && is_linespec_boundary (p[-1]))
804 /* The parser of linespec itself. */
806 /* Parse a string that specifies a line number.
807 Pass the address of a char * variable; that variable will be
808 advanced over the characters actually parsed.
812 LINENUM -- that line number in current file. PC returned is 0.
813 FILE:LINENUM -- that line in that file. PC returned is 0.
814 FUNCTION -- line number of openbrace of that function.
815 PC returned is the start of the function.
816 LABEL -- a label in the current scope
817 VARIABLE -- line number of definition of that variable.
819 FILE:FUNCTION -- likewise, but prefer functions in that file.
820 *EXPR -- line in which address EXPR appears.
822 This may all be followed by an "if EXPR", which we ignore.
824 FUNCTION may be an undebuggable function found in minimal symbol table.
826 If the argument FUNFIRSTLINE is nonzero, we want the first line
827 of real code inside a function when a function is specified, and it is
828 not OK to specify a variable or type to get its line number.
830 DEFAULT_SYMTAB specifies the file to use if none is specified.
831 It defaults to current_source_symtab.
832 DEFAULT_LINE specifies the line number to use for relative
833 line numbers (that start with signs). Defaults to current_source_line.
834 If CANONICAL is non-NULL, store an array of strings containing the canonical
835 line specs there if necessary. Currently overloaded member functions and
836 line numbers or static functions without a filename yield a canonical
837 line spec. The array and the line spec strings are allocated on the heap,
838 it is the callers responsibility to free them.
840 Note that it is possible to return zero for the symtab
841 if no file is validly specified. Callers must check that.
842 Also, the line number returned may be invalid. */
844 /* We allow single quotes in various places. This is a hideous
845 kludge, which exists because the completer can't yet deal with the
846 lack of single quotes. FIXME: write a linespec_completer which we
847 can use as appropriate instead of make_symbol_completion_list. */
849 static struct symtabs_and_lines
850 decode_line_internal (struct linespec_state *self, char **argptr)
856 /* This says whether or not something in *ARGPTR is quoted with
857 completer_quotes (i.e. with single quotes). */
859 /* Is *ARGPTR enclosed in double quotes? */
860 int is_quote_enclosed;
861 int is_objc_method = 0;
862 char *saved_arg = *argptr;
863 /* If IS_QUOTED, the end of the quoted bit. */
864 char *end_quote = NULL;
865 /* Is *ARGPTR enclosed in single quotes? */
866 int is_squote_enclosed = 0;
867 /* The "first half" of the linespec. */
870 /* If we are parsing `function:label', this holds the symbols
871 matching the function name. */
872 VEC (symbolp) *function_symbols = NULL;
873 /* If FUNCTION_SYMBOLS is not NULL, then this is the exception that
874 was thrown when trying to parse a filename. */
875 volatile struct gdb_exception file_exception;
877 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
879 /* Defaults have defaults. */
881 initialize_defaults (&self->default_symtab, &self->default_line);
883 /* See if arg is *PC. */
887 do_cleanups (cleanup);
888 return decode_indirect (self, argptr);
891 is_quoted = (strchr (get_gdb_completer_quote_characters (),
896 end_quote = skip_quoted (*argptr);
897 if (*end_quote == '\0')
898 is_squote_enclosed = 1;
901 /* Check to see if it's a multipart linespec (with colons or
904 /* Locate the end of the first half of the linespec.
905 After the call, for instance, if the argptr string is "foo.c:123"
906 p will point at "123". If there is only one part, like "foo", p
907 will point to "". If this is a C++ name, like "A::B::foo", p will
908 point to "::B::foo". Argptr is not changed by this call. */
910 first_half = p = locate_first_half (argptr, &is_quote_enclosed);
912 /* First things first: if ARGPTR starts with a filename, get its
913 symtab and strip the filename from ARGPTR.
914 Avoid calling symtab_from_filename if we know can,
915 it can be expensive. */
919 TRY_CATCH (file_exception, RETURN_MASK_ERROR)
921 self->file_symtabs = symtabs_from_filename (argptr, p,
923 &self->user_filename);
926 if (file_exception.reason >= 0)
928 /* Check for single quotes on the non-filename part. */
929 is_quoted = (**argptr
930 && strchr (get_gdb_completer_quote_characters (),
933 end_quote = skip_quoted (*argptr);
935 /* Locate the next "half" of the linespec. */
936 first_half = p = locate_first_half (argptr, &is_quote_enclosed);
939 if (VEC_empty (symtab_p, self->file_symtabs))
941 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
942 VEC_safe_push (symtab_p, self->file_symtabs, NULL);
947 /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
948 VEC_safe_push (symtab_p, self->file_symtabs, NULL);
951 /* Check if this is an Objective-C method (anything that starts with
952 a '+' or '-' and a '['). */
953 if (is_objc_method_format (p))
956 /* Check if the symbol could be an Objective-C selector. */
959 struct symtabs_and_lines values;
961 values = decode_objc (self, argptr);
962 if (values.sals != NULL)
964 do_cleanups (cleanup);
969 /* Does it look like there actually were two parts? */
971 if (p[0] == ':' || p[0] == '.')
973 /* Is it a C++ or Java compound data structure?
974 The check on p[1] == ':' is capturing the case of "::",
975 since p[0]==':' was checked above.
976 Note that the call to decode_compound does everything
977 for us, including the lookup on the symbol table, so we
980 if (p[0] == '.' || p[1] == ':')
982 /* We only perform this check for the languages where it might
983 make sense. For instance, Ada does not use this type of
984 syntax, and trying to apply this logic on an Ada linespec
985 may trigger a spurious error (for instance, decode_compound
986 does not like expressions such as `ops."<"', which is a
987 valid function name in Ada). */
988 if (current_language->la_language == language_c
989 || current_language->la_language == language_cplus
990 || current_language->la_language == language_java)
992 struct symtabs_and_lines values;
993 volatile struct gdb_exception ex;
994 char *saved_argptr = *argptr;
996 if (is_quote_enclosed)
999 /* Initialize it just to avoid a GCC false warning. */
1000 memset (&values, 0, sizeof (values));
1002 TRY_CATCH (ex, RETURN_MASK_ERROR)
1004 values = decode_compound (self, argptr, saved_arg, p);
1006 if ((is_quoted || is_squote_enclosed) && **argptr == '\'')
1007 *argptr = *argptr + 1;
1011 do_cleanups (cleanup);
1015 if (ex.error != NOT_FOUND_ERROR)
1016 throw_exception (ex);
1018 *argptr = saved_argptr;
1023 /* If there was an exception looking up a specified filename earlier,
1024 then check whether we were really given `function:label'. */
1025 if (file_exception.reason < 0)
1027 function_symbols = find_function_symbols (argptr, p,
1029 &self->user_function);
1031 /* If we did not find a function, re-throw the original
1033 if (!function_symbols)
1034 throw_exception (file_exception);
1036 make_cleanup (VEC_cleanup (symbolp), &function_symbols);
1039 /* Check for single quotes on the non-filename part. */
1042 is_quoted = (**argptr
1043 && strchr (get_gdb_completer_quote_characters (),
1046 end_quote = skip_quoted (*argptr);
1051 /* self->file_symtabs holds the specified file symtabs, or 0 if no file
1053 If we are parsing `function:symbol', then FUNCTION_SYMBOLS holds the
1054 functions before the `:'.
1055 arg no longer contains the file name. */
1057 /* If the filename was quoted, we must re-check the quotation. */
1059 if (end_quote == first_half && *end_quote!= '\0')
1061 is_quoted = (**argptr
1062 && strchr (get_gdb_completer_quote_characters (),
1065 end_quote = skip_quoted (*argptr);
1068 /* Check whether arg is all digits (and sign). */
1071 if (*q == '-' || *q == '+')
1073 while (*q >= '0' && *q <= '9')
1076 if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ',')
1077 && function_symbols == NULL)
1079 struct symtabs_and_lines values;
1081 /* We found a token consisting of all digits -- at least one digit. */
1082 values = decode_all_digits (self, argptr, q);
1083 do_cleanups (cleanup);
1087 /* Arg token is not digits => try it as a variable name
1088 Find the next token (everything up to end or next whitespace). */
1090 if (**argptr == '$') /* May be a convenience variable. */
1091 /* One or two $ chars possible. */
1092 p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));
1093 else if (is_quoted || is_squote_enclosed)
1097 error (_("Unmatched single quote."));
1099 else if (is_objc_method)
1101 /* allow word separators in method names for Obj-C. */
1102 p = skip_quoted_chars (*argptr, NULL, "");
1106 p = skip_quoted (*argptr);
1109 /* Keep any important naming information. */
1110 p = keep_name_info (p, p == saved_arg || is_linespec_boundary (p[-1]));
1112 copy = (char *) alloca (p - *argptr + 1);
1113 memcpy (copy, *argptr, p - *argptr);
1114 copy[p - *argptr] = '\0';
1117 && copy[0] == copy[p - *argptr - 1]
1118 && strchr (get_gdb_completer_quote_characters (), copy[0]) != NULL)
1120 copy[p - *argptr - 1] = '\0';
1123 else if (is_quoted || is_squote_enclosed)
1124 copy[p - *argptr - 1] = '\0';
1126 *argptr = skip_spaces (p);
1128 /* If it starts with $: may be a legitimate variable or routine name
1129 (e.g. HP-UX millicode routines such as $$dyncall), or it may
1130 be history value, or it may be a convenience variable. */
1132 if (*copy == '$' && function_symbols == NULL)
1134 struct symtabs_and_lines values;
1136 values = decode_dollar (self, copy);
1137 do_cleanups (cleanup);
1141 /* Try the token as a label, but only if no file was specified,
1142 because we can only really find labels in the current scope. */
1144 if (VEC_length (symtab_p, self->file_symtabs) == 1
1145 && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
1147 struct symtabs_and_lines label_result;
1148 if (decode_label (self, function_symbols, copy, &label_result))
1150 do_cleanups (cleanup);
1151 return label_result;
1155 if (function_symbols)
1156 throw_exception (file_exception);
1158 /* Look up that token as a variable.
1159 If file specified, use that file's per-file block to start with. */
1162 struct symtabs_and_lines values;
1164 values = decode_variable (self, copy);
1165 do_cleanups (cleanup);
1170 /* A constructor for linespec_state. */
1173 linespec_state_constructor (struct linespec_state *self,
1175 struct symtab *default_symtab,
1177 struct linespec_result *canonical)
1179 memset (self, 0, sizeof (*self));
1180 self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
1181 self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
1182 self->default_symtab = default_symtab;
1183 self->default_line = default_line;
1184 self->canonical = canonical;
1185 self->program_space = current_program_space;
1186 self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
1187 xfree, xcalloc, xfree);
1190 /* A destructor for linespec_state. */
1193 linespec_state_destructor (void *arg)
1195 struct linespec_state *self = arg;
1197 xfree (self->user_filename);
1198 xfree (self->user_function);
1199 VEC_free (symtab_p, self->file_symtabs);
1200 htab_delete (self->addr_set);
1203 /* See linespec.h. */
1206 decode_line_full (char **argptr, int flags,
1207 struct symtab *default_symtab,
1208 int default_line, struct linespec_result *canonical,
1209 const char *select_mode,
1212 struct symtabs_and_lines result;
1213 struct linespec_state state;
1214 struct cleanup *cleanups;
1215 char *arg_start = *argptr;
1216 VEC (const_char_ptr) *filters = NULL;
1218 gdb_assert (canonical != NULL);
1219 /* The filter only makes sense for 'all'. */
1220 gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
1221 gdb_assert (select_mode == NULL
1222 || select_mode == multiple_symbols_all
1223 || select_mode == multiple_symbols_ask
1224 || select_mode == multiple_symbols_cancel);
1225 gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
1227 linespec_state_constructor (&state, flags,
1228 default_symtab, default_line, canonical);
1229 cleanups = make_cleanup (linespec_state_destructor, &state);
1230 save_current_program_space ();
1232 result = decode_line_internal (&state, argptr);
1234 gdb_assert (result.nelts == 1 || canonical->pre_expanded);
1235 gdb_assert (canonical->addr_string != NULL);
1236 canonical->pre_expanded = 1;
1238 /* Fill in the missing canonical names. */
1239 if (result.nelts > 0)
1243 if (state.canonical_names == NULL)
1244 state.canonical_names = xcalloc (result.nelts, sizeof (char *));
1245 make_cleanup (xfree, state.canonical_names);
1246 for (i = 0; i < result.nelts; ++i)
1248 if (state.canonical_names[i] == NULL)
1249 state.canonical_names[i] = savestring (arg_start,
1250 *argptr - arg_start);
1251 make_cleanup (xfree, state.canonical_names[i]);
1255 if (select_mode == NULL)
1257 if (ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
1258 select_mode = multiple_symbols_all;
1260 select_mode = multiple_symbols_select_mode ();
1263 if (select_mode == multiple_symbols_all)
1267 make_cleanup (VEC_cleanup (const_char_ptr), &filters);
1268 VEC_safe_push (const_char_ptr, filters, filter);
1269 filter_results (&state, &result, filters);
1272 convert_results_to_lsals (&state, &result);
1275 decode_line_2 (&state, &result, select_mode);
1277 do_cleanups (cleanups);
1280 struct symtabs_and_lines
1281 decode_line_1 (char **argptr, int flags,
1282 struct symtab *default_symtab,
1285 struct symtabs_and_lines result;
1286 struct linespec_state state;
1287 struct cleanup *cleanups;
1289 linespec_state_constructor (&state, flags,
1290 default_symtab, default_line, NULL);
1291 cleanups = make_cleanup (linespec_state_destructor, &state);
1292 save_current_program_space ();
1294 result = decode_line_internal (&state, argptr);
1295 do_cleanups (cleanups);
1301 /* First, some functions to initialize stuff at the beggining of the
1305 initialize_defaults (struct symtab **default_symtab, int *default_line)
1307 if (*default_symtab == 0)
1309 /* Use whatever we have for the default source line. We don't use
1310 get_current_or_default_symtab_and_line as it can recurse and call
1312 struct symtab_and_line cursal =
1313 get_current_source_symtab_and_line ();
1315 *default_symtab = cursal.symtab;
1316 *default_line = cursal.line;
1322 /* Decode arg of the form *PC. */
1324 static struct symtabs_and_lines
1325 decode_indirect (struct linespec_state *self, char **argptr)
1327 struct symtabs_and_lines values;
1329 char *initial = *argptr;
1331 if (current_program_space->executing_startup)
1332 /* The error message doesn't really matter, because this case
1333 should only hit during breakpoint reset. */
1334 throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
1335 "program space is in startup"));
1338 pc = value_as_address (parse_to_comma_and_eval (argptr));
1340 values.sals = (struct symtab_and_line *)
1341 xmalloc (sizeof (struct symtab_and_line));
1344 values.sals[0] = find_pc_line (pc, 0);
1345 values.sals[0].pc = pc;
1346 values.sals[0].section = find_pc_overlay (pc);
1347 values.sals[0].explicit_pc = 1;
1349 if (self->canonical)
1350 self->canonical->addr_string = savestring (initial, *argptr - initial);
1357 /* Locate the first half of the linespec, ending in a colon, period,
1358 or whitespace. (More or less.) Also, check to see if *ARGPTR is
1359 enclosed in double quotes; if so, set is_quote_enclosed, advance
1360 ARGPTR past that and zero out the trailing double quote.
1361 If ARGPTR is just a simple name like "main", p will point to ""
1365 locate_first_half (char **argptr, int *is_quote_enclosed)
1371 /* Check if the linespec starts with an Ada operator (such as "+",
1372 or ">", for instance). */
1375 && current_language->la_language == language_ada)
1377 const struct ada_opname_map *op;
1379 for (op = ada_opname_table; op->encoded != NULL; op++)
1380 if (strncmp (op->decoded, p, strlen (op->decoded)) == 0)
1382 if (op->encoded != NULL)
1384 *is_quote_enclosed = 0;
1385 return p + strlen (op->decoded);
1389 /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
1390 and we must isolate the first half. Outer layers will call again later
1391 for the second half.
1393 Don't count commas that appear in argument lists of overloaded
1394 functions, or in quoted strings. It's stupid to go to this much
1395 trouble when the rest of the function is such an obvious roach hotel. */
1396 ii = find_toplevel_char (*argptr, ',');
1397 has_comma = (ii != 0);
1399 /* Temporarily zap out second half to not confuse the code below.
1400 This is undone below. Do not change ii!! */
1406 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION. May also be
1407 CLASS::MEMBER, or NAMESPACE::NAME. Look for ':', but ignore
1413 *is_quote_enclosed = 1;
1419 *is_quote_enclosed = 0;
1420 if (strchr (get_gdb_completer_quote_characters (), *p))
1428 /* Check for a drive letter in the filename. This is done on all hosts
1429 to capture cross-compilation environments. On Unixen, directory
1430 separators are illegal in filenames, so if the user enters "e:/foo.c",
1431 he is referring to a directory named "e:" and a source file named
1432 "foo.c", and we still want to keep these two pieces together. */
1433 if (isalpha (p[0]) && p[1] == ':' && IS_DIR_SEPARATOR (p[2]))
1440 char *temp_end = find_template_name_end (p);
1443 error (_("malformed template specification in command"));
1448 p = find_method_overload_end (p);
1450 /* Check for a colon and a plus or minus and a [ (which
1451 indicates an Objective-C method). */
1452 if (is_objc_method_format (p))
1456 /* Check for the end of the first half of the linespec. End of
1457 line, a tab, a colon or a space. But if enclosed in double
1458 quotes we do not break on enclosed spaces. */
1462 || ((p[0] == ' ') && !*is_quote_enclosed))
1464 if (p[0] == '.' && strchr (p, ':') == NULL)
1466 /* Java qualified method. Find the *last* '.', since the
1467 others are package qualifiers. Stop at any open parenthesis
1468 which might provide overload information. */
1469 for (p1 = p; *p1 && *p1 != '('; p1++)
1477 p = skip_spaces (p);
1479 /* If the closing double quote was left at the end, remove it. */
1480 if (*is_quote_enclosed)
1482 char *closing_quote = strchr (p - 1, '"');
1484 if (closing_quote && closing_quote[1] == '\0')
1485 *closing_quote = '\0';
1488 /* Now that we've safely parsed the first half, put back ',' so
1489 outer layers can see it. */
1498 /* Here's where we recognise an Objective-C Selector. An Objective C
1499 selector may be implemented by more than one class, therefore it
1500 may represent more than one method/function. This gives us a
1501 situation somewhat analogous to C++ overloading. If there's more
1502 than one method that could represent the selector, then use some of
1503 the existing C++ code to let the user choose one. */
1505 static struct symtabs_and_lines
1506 decode_objc (struct linespec_state *self, char **argptr)
1508 struct collect_info info;
1509 VEC (const_char_ptr) *symbol_names = NULL;
1511 struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
1515 info.result.sals = NULL;
1516 info.result.nelts = 0;
1518 new_argptr = find_imps (*argptr, &symbol_names);
1519 if (VEC_empty (const_char_ptr, symbol_names))
1521 do_cleanups (cleanup);
1525 add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
1527 if (info.result.nelts > 0)
1531 saved_arg = alloca (new_argptr - *argptr + 1);
1532 memcpy (saved_arg, *argptr, new_argptr - *argptr);
1533 saved_arg[new_argptr - *argptr] = '\0';
1535 if (self->canonical)
1537 self->canonical->pre_expanded = 1;
1538 if (self->user_filename)
1539 self->canonical->addr_string
1540 = xstrprintf ("%s:%s", self->user_filename, saved_arg);
1542 self->canonical->addr_string = xstrdup (saved_arg);
1546 *argptr = new_argptr;
1548 do_cleanups (cleanup);
1552 /* This handles C++ and Java compound data structures. P should point
1553 at the first component separator, i.e. double-colon or period. As
1554 an example, on entrance to this function we could have ARGPTR
1555 pointing to "AAA::inA::fun" and P pointing to "::inA::fun". */
1557 static struct symtabs_and_lines
1558 decode_compound (struct linespec_state *self,
1559 char **argptr, char *the_real_saved_arg, char *p)
1561 struct symtabs_and_lines values;
1563 char *saved_arg2 = *argptr;
1567 VEC (symbolp) *sym_classes;
1568 char *saved_arg, *class_name;
1569 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
1571 /* If the user specified any completer quote characters in the input,
1572 strip them. They are superfluous. */
1573 saved_arg = alloca (strlen (the_real_saved_arg) + 1);
1575 char *dst = saved_arg;
1576 char *src = the_real_saved_arg;
1577 char *quotes = get_gdb_completer_quote_characters ();
1578 while (*src != '\0')
1580 if (strchr (quotes, *src) == NULL)
1587 /* First check for "global" namespace specification, of the form
1588 "::foo". If found, skip over the colons and jump to normal
1589 symbol processing. I.e. the whole line specification starts with
1590 "::" (note the condition that *argptr == p). */
1592 && ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
1595 /* Given our example "AAA::inA::fun", we have two cases to consider:
1597 1) AAA::inA is the name of a class. In that case, presumably it
1598 has a method called "fun"; we then look up that method using
1601 2) AAA::inA isn't the name of a class. In that case, either the
1602 user made a typo, AAA::inA is the name of a namespace, or it is
1603 the name of a minimal symbol.
1604 In this case we just delegate to decode_variable.
1606 Thus, our first task is to find everything before the last set of
1607 double-colons and figure out if it's the name of a class. So we
1608 first loop through all of the double-colons. */
1610 p2 = p; /* Save for restart. */
1612 /* This is very messy. Following the example above we have now the
1615 argptr -> "AAA::inA::fun
1616 saved_arg -> "AAA::inA::fun
1617 saved_arg2 -> "AAA::inA::fun
1618 p2 -> "::inA::fun". */
1620 /* In the loop below, with these strings, we'll make 2 passes, each
1621 is marked in comments. */
1625 static char *break_characters = " \t(";
1627 /* Move pointer up to next possible class/namespace token. */
1629 p = p2 + 1; /* Restart with old value +1. */
1631 /* PASS1: at this point p2->"::inA::fun", so p->":inA::fun",
1632 i.e. if there is a double-colon, p will now point to the
1634 /* PASS2: p2->"::fun", p->":fun" */
1636 /* Move pointer ahead to next double-colon. */
1638 && strchr (break_characters, *p) == NULL
1639 && strchr (get_gdb_completer_quote_characters (), *p) == NULL)
1641 if (current_language->la_language == language_cplus)
1642 p += cp_validate_operator (p);
1646 temp_end = find_template_name_end (p);
1648 error (_("malformed template specification in command"));
1651 /* Note that, since, at the start of this loop, p would be
1652 pointing to the second colon in a double-colon, we only
1653 satisfy the condition below if there is another
1654 double-colon to the right (after). I.e. there is another
1655 component that can be a class or a namespace. I.e, if at
1656 the beginning of this loop (PASS1), we had
1657 p->":inA::fun", we'll trigger this when p has been
1658 advanced to point to "::fun". */
1659 /* PASS2: we will not trigger this. */
1660 else if ((p[0] == ':') && (p[1] == ':'))
1661 break; /* Found double-colon. */
1664 /* PASS2: We'll keep getting here, until P points to one of the
1665 break characters, at which point we exit this loop. */
1669 && strncmp (&p[1], CP_ANONYMOUS_NAMESPACE_STR,
1670 CP_ANONYMOUS_NAMESPACE_LEN) == 0)
1671 p += CP_ANONYMOUS_NAMESPACE_LEN;
1672 else if (strchr (break_characters, *p) == NULL)
1679 break; /* Out of the while (1). This would happen
1680 for instance if we have looked up
1681 unsuccessfully all the components of the
1682 string, and p->""(PASS2). */
1684 /* We get here if p points to one of the break characters or "" (i.e.,
1686 /* Save restart for next time around. */
1688 /* Restore argptr as it was on entry to this function. */
1689 *argptr = saved_arg2;
1690 /* PASS1: at this point p->"::fun" argptr->"AAA::inA::fun",
1693 /* All ready for next pass through the loop. */
1697 /* Start of lookup in the symbol tables. */
1699 /* Lookup in the symbol table the substring between argptr and
1700 p. Note, this call changes the value of argptr. */
1701 /* Before the call, argptr->"AAA::inA::fun",
1702 p->"", p2->"::fun". After the call: argptr->"fun", p, p2
1704 sym_classes = lookup_prefix_sym (argptr, p2, self->file_symtabs,
1706 make_cleanup (VEC_cleanup (symbolp), &sym_classes);
1707 make_cleanup (xfree, class_name);
1709 /* If a class has been found, then we're in case 1 above. So we
1710 look up "fun" as a method of those classes. */
1711 if (!VEC_empty (symbolp, sym_classes))
1713 /* Arg token is not digits => try it as a function name.
1714 Find the next token (everything up to end or next
1717 && strchr (get_gdb_completer_quote_characters (),
1720 p = skip_quoted (*argptr);
1721 *argptr = *argptr + 1;
1725 /* At this point argptr->"fun". */
1729 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':'
1732 /* At this point p->"". String ended. */
1733 /* Nope, C++ operators could have spaces in them
1734 ("foo::operator <" or "foo::operator delete []").
1735 I apologize, this is a bit hacky... */
1736 if (current_language->la_language == language_cplus
1737 && *p == ' ' && p - 8 - *argptr + 1 > 0)
1739 /* The above loop has already swallowed "operator". */
1740 p += cp_validate_operator (p - 8) - 8;
1743 /* Keep any important naming information. */
1744 p = keep_name_info (p, 1);
1747 /* Allocate our own copy of the substring between argptr and
1749 copy = (char *) alloca (p - *argptr + 1);
1750 memcpy (copy, *argptr, p - *argptr);
1751 copy[p - *argptr] = '\0';
1753 && copy[p - *argptr - 1]
1754 && strchr (get_gdb_completer_quote_characters (),
1755 copy[p - *argptr - 1]) != NULL)
1756 copy[p - *argptr - 1] = '\0';
1758 /* At this point copy->"fun", p->"". */
1760 /* No line number may be specified. */
1761 *argptr = skip_spaces (p);
1762 /* At this point arptr->"". */
1764 /* Look for copy as a method of sym_class. */
1765 /* At this point copy->"fun", sym_class is "AAA:inA",
1766 saved_arg->"AAA::inA::fun". This concludes the scanning of
1767 the string for possible components matches. If we find it
1768 here, we return. If not, and we are at the and of the string,
1769 we'll lookup the whole string in the symbol tables. */
1771 values = find_method (self, saved_arg, copy, class_name, sym_classes);
1773 do_cleanups (cleanup);
1775 } /* End if symbol found. */
1778 /* We couldn't find a class, so we're in case 2 above. We check the
1779 entire name as a symbol instead. The simplest way to do this is
1780 to just throw an exception and let our caller fall through to
1783 throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
1786 /* An instance of this type is used when collecting prefix symbols for
1789 struct decode_compound_collector
1791 /* The result vector. */
1792 VEC (symbolp) *symbols;
1794 /* A hash table of all symbols we found. We use this to avoid
1795 adding any symbol more than once. */
1799 /* A callback for iterate_over_symbols that is used by
1800 lookup_prefix_sym to collect type symbols. */
1803 collect_one_symbol (struct symbol *sym, void *d)
1805 struct decode_compound_collector *collector = d;
1809 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
1810 return 1; /* Continue iterating. */
1812 t = SYMBOL_TYPE (sym);
1814 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
1815 && TYPE_CODE (t) != TYPE_CODE_UNION
1816 && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
1817 return 1; /* Continue iterating. */
1819 slot = htab_find_slot (collector->unique_syms, sym, INSERT);
1823 VEC_safe_push (symbolp, collector->symbols, sym);
1826 return 1; /* Continue iterating. */
1829 /* Return the symbol corresponding to the substring of *ARGPTR ending
1830 at P, allowing whitespace. Also, advance *ARGPTR past the symbol
1831 name in question, the compound object separator ("::" or "."), and
1832 whitespace. Note that *ARGPTR is changed whether or not the
1833 this call finds anything (i.e we return NULL). As an
1834 example, say ARGPTR is "AAA::inA::fun" and P is "::inA::fun". */
1836 static VEC (symbolp) *
1837 lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
1844 struct decode_compound_collector collector;
1845 struct cleanup *outer;
1846 struct cleanup *cleanup;
1847 struct block *search_block;
1849 /* Extract the class name. */
1851 while (p != *argptr && p[-1] == ' ')
1853 copy = (char *) xmalloc (p - *argptr + 1);
1854 memcpy (copy, *argptr, p - *argptr);
1855 copy[p - *argptr] = 0;
1857 outer = make_cleanup (xfree, copy);
1859 /* Discard the class name from the argptr. */
1860 p = p1 + (p1[0] == ':' ? 2 : 1);
1861 p = skip_spaces (p);
1864 /* At this point p1->"::inA::fun", p->"inA::fun" copy->"AAA",
1865 argptr->"inA::fun". */
1867 collector.symbols = NULL;
1868 make_cleanup (VEC_cleanup (symbolp), &collector.symbols);
1870 collector.unique_syms = htab_create_alloc (1, htab_hash_pointer,
1871 htab_eq_pointer, NULL,
1873 cleanup = make_cleanup_htab_delete (collector.unique_syms);
1875 for (ix = 0; VEC_iterate (symtab_p, file_symtabs, ix, elt); ++ix)
1879 iterate_over_all_matching_symtabs (copy, STRUCT_DOMAIN,
1880 collect_one_symbol, &collector,
1882 iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
1883 collect_one_symbol, &collector,
1888 struct block *search_block;
1890 /* Program spaces that are executing startup should have
1891 been filtered out earlier. */
1892 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
1893 set_current_program_space (SYMTAB_PSPACE (elt));
1894 search_block = get_search_block (elt);
1895 LA_ITERATE_OVER_SYMBOLS (search_block, copy, STRUCT_DOMAIN,
1896 collect_one_symbol, &collector);
1897 LA_ITERATE_OVER_SYMBOLS (search_block, copy, VAR_DOMAIN,
1898 collect_one_symbol, &collector);
1902 do_cleanups (cleanup);
1903 discard_cleanups (outer);
1904 return collector.symbols;
1907 /* A qsort comparison function for symbols. The resulting order does
1908 not actually matter; we just need to be able to sort them so that
1909 symbols with the same program space end up next to each other. */
1912 compare_symbols (const void *a, const void *b)
1914 struct symbol * const *sa = a;
1915 struct symbol * const *sb = b;
1918 uia = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sa));
1919 uib = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sb));
1926 uia = (uintptr_t) *sa;
1927 uib = (uintptr_t) *sb;
1937 /* Look for all the matching instances of each symbol in NAMES. Only
1938 instances from PSPACE are considered; other program spaces are
1939 handled by our caller. If PSPACE is NULL, then all program spaces
1940 are considered. Results are stored into INFO. */
1943 add_all_symbol_names_from_pspace (struct collect_info *info,
1944 struct program_space *pspace,
1945 VEC (const_char_ptr) *names)
1950 for (ix = 0; VEC_iterate (const_char_ptr, names, ix, iter); ++ix)
1951 add_matching_symbols_to_info (iter, info, pspace);
1955 find_superclass_methods (VEC (typep) *superclasses,
1957 VEC (const_char_ptr) **result_names)
1959 int old_len = VEC_length (const_char_ptr, *result_names);
1960 VEC (typep) *iter_classes;
1961 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
1963 iter_classes = superclasses;
1966 VEC (typep) *new_supers = NULL;
1970 make_cleanup (VEC_cleanup (typep), &new_supers);
1971 for (ix = 0; VEC_iterate (typep, iter_classes, ix, t); ++ix)
1972 find_methods (t, name, result_names, &new_supers);
1974 if (VEC_length (const_char_ptr, *result_names) != old_len
1975 || VEC_empty (typep, new_supers))
1978 iter_classes = new_supers;
1981 do_cleanups (cleanup);
1984 /* This finds the method COPY in the class whose type is given by one
1985 of the symbols in SYM_CLASSES. */
1987 static struct symtabs_and_lines
1988 find_method (struct linespec_state *self, char *saved_arg,
1989 char *copy, const char *class_name, VEC (symbolp) *sym_classes)
1993 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
1995 int last_result_len;
1996 VEC (typep) *superclass_vec;
1997 VEC (const_char_ptr) *result_names;
1998 struct collect_info info;
2001 /* NAME is typed by the user: it needs to be canonicalized before
2002 searching the symbol tables. */
2003 canon = cp_canonicalize_string_no_typedefs (copy);
2007 make_cleanup (xfree, copy);
2010 /* Sort symbols so that symbols with the same program space are next
2012 qsort (VEC_address (symbolp, sym_classes),
2013 VEC_length (symbolp, sym_classes),
2018 info.result.sals = NULL;
2019 info.result.nelts = 0;
2021 /* Iterate over all the types, looking for the names of existing
2022 methods matching COPY. If we cannot find a direct method in a
2023 given program space, then we consider inherited methods; this is
2024 not ideal (ideal would be to respect C++ hiding rules), but it
2025 seems good enough and is what GDB has historically done. We only
2026 need to collect the names because later we find all symbols with
2027 those names. This loop is written in a somewhat funny way
2028 because we collect data across the program space before deciding
2030 superclass_vec = NULL;
2031 make_cleanup (VEC_cleanup (typep), &superclass_vec);
2032 result_names = NULL;
2033 make_cleanup (VEC_cleanup (const_char_ptr), &result_names);
2034 last_result_len = 0;
2035 for (ix = 0; VEC_iterate (symbolp, sym_classes, ix, sym); ++ix)
2038 struct program_space *pspace;
2040 /* Program spaces that are executing startup should have
2041 been filtered out earlier. */
2042 gdb_assert (!SYMTAB_PSPACE (SYMBOL_SYMTAB (sym))->executing_startup);
2043 pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
2044 set_current_program_space (pspace);
2045 t = check_typedef (SYMBOL_TYPE (sym));
2046 find_methods (t, copy, &result_names, &superclass_vec);
2048 /* Handle all items from a single program space at once; and be
2049 sure not to miss the last batch. */
2050 if (ix == VEC_length (symbolp, sym_classes) - 1
2052 != SYMTAB_PSPACE (SYMBOL_SYMTAB (VEC_index (symbolp, sym_classes,
2055 /* If we did not find a direct implementation anywhere in
2056 this program space, consider superclasses. */
2057 if (VEC_length (const_char_ptr, result_names) == last_result_len)
2058 find_superclass_methods (superclass_vec, copy, &result_names);
2060 /* We have a list of candidate symbol names, so now we
2061 iterate over the symbol tables looking for all
2062 matches in this pspace. */
2063 add_all_symbol_names_from_pspace (&info, pspace, result_names);
2065 VEC_truncate (typep, superclass_vec, 0);
2066 last_result_len = VEC_length (const_char_ptr, result_names);
2070 if (info.result.nelts > 0)
2072 if (self->canonical)
2074 self->canonical->pre_expanded = 1;
2075 if (self->user_filename)
2076 self->canonical->addr_string
2077 = xstrprintf ("%s:%s", self->user_filename, saved_arg);
2079 self->canonical->addr_string = xstrdup (saved_arg);
2082 do_cleanups (cleanup);
2088 cplusplus_error (saved_arg,
2089 "the class `%s' does not have destructor defined\n",
2092 cplusplus_error (saved_arg,
2093 "the class %s does not have any method named %s\n",
2099 /* This object is used when collecting all matching symtabs. */
2101 struct symtab_collector
2103 /* The result vector of symtabs. */
2104 VEC (symtab_p) *symtabs;
2106 /* This is used to ensure the symtabs are unique. */
2107 htab_t symtab_table;
2110 /* Callback for iterate_over_symtabs. */
2113 add_symtabs_to_list (struct symtab *symtab, void *d)
2115 struct symtab_collector *data = d;
2118 slot = htab_find_slot (data->symtab_table, symtab, INSERT);
2122 VEC_safe_push (symtab_p, data->symtabs, symtab);
2128 /* Given a file name, return a VEC of all matching symtabs. */
2130 static VEC (symtab_p) *
2131 collect_symtabs_from_filename (const char *file)
2133 struct symtab_collector collector;
2134 struct cleanup *cleanups;
2135 struct program_space *pspace;
2137 collector.symtabs = NULL;
2138 collector.symtab_table = htab_create (1, htab_hash_pointer, htab_eq_pointer,
2140 cleanups = make_cleanup_htab_delete (collector.symtab_table);
2142 /* Find that file's data. */
2143 ALL_PSPACES (pspace)
2145 if (pspace->executing_startup)
2148 set_current_program_space (pspace);
2149 iterate_over_symtabs (file, add_symtabs_to_list, &collector);
2152 do_cleanups (cleanups);
2153 return collector.symtabs;
2156 /* Return all the symtabs associated to the filename given by the
2157 substring of *ARGPTR ending at P, and advance ARGPTR past that
2160 static VEC (symtab_p) *
2161 symtabs_from_filename (char **argptr, char *p, int is_quote_enclosed,
2162 char **user_filename)
2166 struct cleanup *outer;
2167 VEC (symtab_p) *result;
2170 while (p != *argptr && p[-1] == ' ')
2172 if ((*p == '"') && is_quote_enclosed)
2174 copy = xmalloc (p - *argptr + 1);
2175 outer = make_cleanup (xfree, copy);
2176 memcpy (copy, *argptr, p - *argptr);
2177 /* It may have the ending quote right after the file name. */
2178 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
2179 || copy[p - *argptr - 1] == '\'')
2180 copy[p - *argptr - 1] = 0;
2182 copy[p - *argptr] = 0;
2184 result = collect_symtabs_from_filename (copy);
2186 if (VEC_empty (symtab_p, result))
2188 if (!have_full_symbols () && !have_partial_symbols ())
2189 throw_error (NOT_FOUND_ERROR,
2190 _("No symbol table is loaded. "
2191 "Use the \"file\" command."));
2192 throw_error (NOT_FOUND_ERROR, _("No source file named %s."), copy);
2195 /* Discard the file name from the arg. */
2199 *argptr = skip_spaces (p1 + 1);
2201 discard_cleanups (outer);
2202 *user_filename = copy;
2206 /* A callback used by iterate_over_all_matching_symtabs that collects
2207 symbols for find_function_symbols. */
2210 collect_function_symbols (struct symbol *sym, void *arg)
2212 VEC (symbolp) **syms = arg;
2214 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
2215 VEC_safe_push (symbolp, *syms, sym);
2217 return 1; /* Continue iterating. */
2220 /* Look up a function symbol in *ARGPTR. If found, advance *ARGPTR
2221 and return the symbol. If not found, return NULL. */
2223 static VEC (symbolp) *
2224 find_function_symbols (char **argptr, char *p, int is_quote_enclosed,
2225 char **user_function)
2229 VEC (symbolp) *result = NULL;
2232 while (p != *argptr && p[-1] == ' ')
2234 if ((*p == '"') && is_quote_enclosed)
2236 copy = (char *) xmalloc (p - *argptr + 1);
2237 *user_function = copy;
2238 memcpy (copy, *argptr, p - *argptr);
2239 /* It may have the ending quote right after the file name. */
2240 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
2241 || copy[p - *argptr - 1] == '\'')
2242 copy[p - *argptr - 1] = 0;
2244 copy[p - *argptr] = 0;
2246 iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
2247 collect_function_symbols, &result, NULL);
2249 if (VEC_empty (symbolp, result))
2250 VEC_free (symbolp, result);
2253 /* Discard the file name from the arg. */
2254 *argptr = skip_spaces (p1 + 1);
2262 /* A helper for decode_all_digits that handles the 'list_mode' case. */
2265 decode_digits_list_mode (struct linespec_state *self,
2266 struct symtabs_and_lines *values,
2267 struct symtab_and_line val)
2272 gdb_assert (self->list_mode);
2274 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2276 /* The logic above should ensure this. */
2277 gdb_assert (elt != NULL);
2279 set_current_program_space (SYMTAB_PSPACE (elt));
2281 /* Simplistic search just for the list command. */
2282 val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
2283 if (val.symtab == NULL)
2285 val.pspace = SYMTAB_PSPACE (elt);
2287 val.explicit_line = 1;
2289 add_sal_to_sals (self, values, &val, NULL);
2293 /* A helper for decode_all_digits that iterates over the symtabs,
2294 adding lines to the VEC. */
2297 decode_digits_ordinary (struct linespec_state *self,
2299 struct symtabs_and_lines *sals,
2300 struct linetable_entry **best_entry)
2305 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2308 VEC (CORE_ADDR) *pcs;
2311 /* The logic above should ensure this. */
2312 gdb_assert (elt != NULL);
2314 set_current_program_space (SYMTAB_PSPACE (elt));
2316 pcs = find_pcs_for_symtab_line (elt, line, best_entry);
2317 for (i = 0; VEC_iterate (CORE_ADDR, pcs, i, pc); ++i)
2319 struct symtab_and_line sal;
2322 sal.pspace = SYMTAB_PSPACE (elt);
2326 add_sal_to_sals_basic (sals, &sal);
2329 VEC_free (CORE_ADDR, pcs);
2333 /* This decodes a line where the argument is all digits (possibly
2334 preceded by a sign). Q should point to the end of those digits;
2335 the other arguments are as usual. */
2337 static struct symtabs_and_lines
2338 decode_all_digits (struct linespec_state *self,
2342 struct symtabs_and_lines values;
2343 struct symtab_and_line val;
2344 int use_default = 0;
2345 char *saved_arg = *argptr;
2357 /* This is where we need to make sure that we have good defaults.
2358 We must guarantee that this section of code is never executed
2359 when we are called with just a function name, since
2360 set_default_source_symtab_and_line uses
2361 select_source_symtab that calls us with such an argument. */
2363 if (VEC_length (symtab_p, self->file_symtabs) == 1
2364 && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
2366 set_current_program_space (self->program_space);
2368 /* Make sure we have at least a default source file. */
2369 set_default_source_symtab_and_line ();
2370 initialize_defaults (&self->default_symtab, &self->default_line);
2371 VEC_pop (symtab_p, self->file_symtabs);
2372 VEC_free (symtab_p, self->file_symtabs);
2374 = collect_symtabs_from_filename (self->default_symtab->filename);
2378 if (**argptr == '+')
2379 sign = plus, (*argptr)++;
2380 else if (**argptr == '-')
2381 sign = minus, (*argptr)++;
2382 val.line = atoi (*argptr);
2389 val.line = self->default_line + val.line;
2395 val.line = self->default_line - val.line;
2400 break; /* No need to adjust val.line. */
2403 *argptr = skip_spaces (q);
2405 if (self->list_mode)
2406 decode_digits_list_mode (self, &values, val);
2409 struct linetable_entry *best_entry = NULL;
2411 struct block **blocks;
2412 struct cleanup *cleanup;
2413 struct symtabs_and_lines intermediate_results;
2416 intermediate_results.sals = NULL;
2417 intermediate_results.nelts = 0;
2419 decode_digits_ordinary (self, val.line, &intermediate_results,
2421 if (intermediate_results.nelts == 0 && best_entry != NULL)
2422 decode_digits_ordinary (self, best_entry->line, &intermediate_results,
2425 cleanup = make_cleanup (xfree, intermediate_results.sals);
2427 /* For optimized code, compiler can scatter one source line
2428 accross disjoint ranges of PC values, even when no duplicate
2429 functions or inline functions are involved. For example,
2430 'for (;;)' inside non-template non-inline non-ctor-or-dtor
2431 function can result in two PC ranges. In this case, we don't
2432 want to set breakpoint on first PC of each range. To filter
2433 such cases, we use containing blocks -- for each PC found
2434 above we see if there are other PCs that are in the same
2435 block. If yes, the other PCs are filtered out. */
2437 filter = xmalloc (intermediate_results.nelts * sizeof (int));
2438 make_cleanup (xfree, filter);
2439 blocks = xmalloc (intermediate_results.nelts * sizeof (struct block *));
2440 make_cleanup (xfree, blocks);
2442 for (i = 0; i < intermediate_results.nelts; ++i)
2444 set_current_program_space (intermediate_results.sals[i].pspace);
2447 blocks[i] = block_for_pc_sect (intermediate_results.sals[i].pc,
2448 intermediate_results.sals[i].section);
2451 for (i = 0; i < intermediate_results.nelts; ++i)
2453 if (blocks[i] != NULL)
2454 for (j = i + 1; j < intermediate_results.nelts; ++j)
2456 if (blocks[j] == blocks[i])
2464 for (i = 0; i < intermediate_results.nelts; ++i)
2467 struct symbol *sym = (blocks[i]
2468 ? block_containing_function (blocks[i])
2471 if (self->funfirstline)
2472 skip_prologue_sal (&intermediate_results.sals[i]);
2473 /* Make sure the line matches the request, not what was
2475 intermediate_results.sals[i].line = val.line;
2476 add_sal_to_sals (self, &values, &intermediate_results.sals[i],
2477 sym ? SYMBOL_NATURAL_NAME (sym) : NULL);
2480 do_cleanups (cleanup);
2483 if (values.nelts == 0)
2485 if (self->user_filename)
2486 throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
2487 val.line, self->user_filename);
2489 throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
2493 if (self->canonical)
2495 char *copy = savestring (saved_arg, q - saved_arg);
2497 self->canonical->pre_expanded = 1;
2498 gdb_assert (self->user_filename || use_default);
2499 self->canonical->addr_string
2500 = xstrprintf ("%s:%s", (self->user_filename
2501 ? self->user_filename
2502 : self->default_symtab->filename),
2512 /* Decode a linespec starting with a dollar sign. */
2514 static struct symtabs_and_lines
2515 decode_dollar (struct linespec_state *self, char *copy)
2519 struct symtabs_and_lines values;
2520 struct symtab_and_line val;
2523 struct minimal_symbol *msymbol;
2527 p = (copy[1] == '$') ? copy + 2 : copy + 1;
2528 while (*p >= '0' && *p <= '9')
2530 if (!*p) /* Reached end of token without hitting non-digit. */
2532 /* We have a value history reference. */
2533 struct value *val_history;
2535 sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
2536 val_history = access_value_history ((copy[1] == '$') ? -index : index);
2537 if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
2538 error (_("History values used in line "
2539 "specs must have integer values."));
2540 valx = value_as_long (val_history);
2544 /* Not all digits -- may be user variable/function or a
2545 convenience variable. */
2547 volatile struct gdb_exception exc;
2549 /* Avoid "may be used uninitialized" warning. */
2553 TRY_CATCH (exc, RETURN_MASK_ERROR)
2555 values = decode_variable (self, copy);
2558 if (exc.reason == 0)
2561 if (exc.error != NOT_FOUND_ERROR)
2562 throw_exception (exc);
2564 /* Not a user variable or function -- must be convenience variable. */
2565 if (!get_internalvar_integer (lookup_internalvar (copy + 1), &valx))
2566 error (_("Convenience variables used in line "
2567 "specs must have integer values."));
2575 for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
2579 elt = self->default_symtab;
2580 set_current_program_space (self->program_space);
2583 set_current_program_space (SYMTAB_PSPACE (elt));
2585 /* Either history value or convenience value from above, in valx. */
2589 val.pspace = elt ? SYMTAB_PSPACE (elt) : current_program_space;
2591 add_sal_to_sals (self, &values, &val, NULL);
2594 if (self->canonical)
2596 self->canonical->pre_expanded = 1;
2597 if (self->user_filename)
2598 self->canonical->addr_string = xstrprintf ("%s:%s",
2599 self->user_filename, copy);
2601 self->canonical->addr_string = xstrdup (copy);
2609 /* A helper for decode_line_1 that tries to find a label. The label
2610 is searched for in the current block.
2611 FUNCTION_SYMBOLS is a list of the enclosing functions; or NULL if none
2613 COPY is the name of the label to find.
2614 CANONICAL is the same as the "canonical" argument to decode_line_1.
2615 RESULT is a pointer to a symtabs_and_lines structure which will be
2616 filled in on success.
2617 This function returns 1 if a label was found, 0 otherwise. */
2620 decode_label (struct linespec_state *self,
2621 VEC (symbolp) *function_symbols, char *copy,
2622 struct symtabs_and_lines *result)
2624 struct symbol *fn_sym;
2627 if (function_symbols == NULL)
2629 struct block *block;
2631 struct symtab_and_line sal;
2632 struct symtabs_and_lines values;
2637 set_current_program_space (self->program_space);
2638 block = get_search_block (NULL);
2641 block && !BLOCK_FUNCTION (block);
2642 block = BLOCK_SUPERBLOCK (block))
2646 fn_sym = BLOCK_FUNCTION (block);
2648 sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
2653 symbol_to_sal (&sal, self->funfirstline, sym);
2654 add_sal_to_sals (self, &values, &sal,
2655 SYMBOL_NATURAL_NAME (fn_sym));
2657 if (self->canonical)
2659 self->canonical->special_display = 1;
2660 self->canonical->addr_string
2661 = xstrprintf ("%s:%s", SYMBOL_NATURAL_NAME (fn_sym),
2670 result->sals = NULL;
2673 for (ix = 0; VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
2675 struct block *block;
2678 set_current_program_space (SYMTAB_PSPACE (SYMBOL_SYMTAB (fn_sym)));
2679 block = SYMBOL_BLOCK_VALUE (fn_sym);
2680 sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
2684 struct symtab_and_line sal;
2687 symbol_to_sal (&sal, self->funfirstline, sym);
2688 symname = xstrprintf ("%s:%s",
2689 SYMBOL_NATURAL_NAME (fn_sym),
2690 SYMBOL_NATURAL_NAME (sym));
2691 add_sal_to_sals (self, result, &sal, symname);
2696 if (self->canonical && result->nelts > 0)
2698 self->canonical->pre_expanded = 1;
2699 self->canonical->special_display = 1;
2701 gdb_assert (self->user_function);
2702 self->canonical->addr_string
2703 = xstrprintf ("%s:%s", self->user_function, copy);
2706 return result->nelts > 0;
2709 /* A callback used to possibly add a symbol to the results. */
2712 collect_symbols (struct symbol *sym, void *data)
2714 struct collect_info *info = data;
2715 struct symtab_and_line sal;
2717 if (symbol_to_sal (&sal, info->state->funfirstline, sym)
2718 && maybe_add_address (info->state->addr_set,
2719 SYMTAB_PSPACE (SYMBOL_SYMTAB (sym)),
2721 add_sal_to_sals (info->state, &info->result, &sal,
2722 SYMBOL_NATURAL_NAME (sym));
2724 return 1; /* Continue iterating. */
2727 /* We've found a minimal symbol MSYMBOL to associate with our
2728 linespec; add it to the result symtabs_and_lines. */
2731 minsym_found (struct linespec_state *self, struct objfile *objfile,
2732 struct minimal_symbol *msymbol,
2733 struct symtabs_and_lines *result)
2735 struct gdbarch *gdbarch = get_objfile_arch (objfile);
2737 struct symtab_and_line sal;
2739 sal = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
2740 (struct obj_section *) 0, 0);
2741 sal.section = SYMBOL_OBJ_SECTION (msymbol);
2743 /* The minimal symbol might point to a function descriptor;
2744 resolve it to the actual code address instead. */
2745 pc = gdbarch_convert_from_func_ptr_addr (gdbarch, sal.pc, ¤t_target);
2747 sal = find_pc_sect_line (pc, NULL, 0);
2749 if (self->funfirstline)
2750 skip_prologue_sal (&sal);
2752 if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
2753 add_sal_to_sals (self, result, &sal, SYMBOL_NATURAL_NAME (msymbol));
2756 /* A helper struct which just holds a minimal symbol and the object
2757 file from which it came. */
2759 typedef struct minsym_and_objfile
2761 struct minimal_symbol *minsym;
2762 struct objfile *objfile;
2763 } minsym_and_objfile_d;
2765 DEF_VEC_O (minsym_and_objfile_d);
2767 /* A helper struct to pass some data through
2768 iterate_over_minimal_symbols. */
2770 struct collect_minsyms
2772 /* The objfile we're examining. */
2773 struct objfile *objfile;
2775 /* The funfirstline setting from the initial call. */
2778 /* The list_mode setting from the initial call. */
2781 /* The resulting symbols. */
2782 VEC (minsym_and_objfile_d) *msyms;
2785 /* A helper function to classify a minimal_symbol_type according to
2789 classify_mtype (enum minimal_symbol_type t)
2796 /* Intermediate priority. */
2799 case mst_solib_trampoline:
2800 /* Lowest priority. */
2804 /* Highest priority. */
2809 /* Callback for qsort that sorts symbols by priority. */
2812 compare_msyms (const void *a, const void *b)
2814 const minsym_and_objfile_d *moa = a;
2815 const minsym_and_objfile_d *mob = b;
2816 enum minimal_symbol_type ta = MSYMBOL_TYPE (moa->minsym);
2817 enum minimal_symbol_type tb = MSYMBOL_TYPE (mob->minsym);
2819 return classify_mtype (ta) - classify_mtype (tb);
2822 /* Callback for iterate_over_minimal_symbols that adds the symbol to
2826 add_minsym (struct minimal_symbol *minsym, void *d)
2828 struct collect_minsyms *info = d;
2829 minsym_and_objfile_d mo;
2831 /* Exclude data symbols when looking for breakpoint locations. */
2832 if (!info->list_mode)
2833 switch (minsym->type)
2835 case mst_slot_got_plt:
2842 /* Make sure this minsym is not a function descriptor
2843 before we decide to discard it. */
2844 struct gdbarch *gdbarch = info->objfile->gdbarch;
2845 CORE_ADDR addr = gdbarch_convert_from_func_ptr_addr
2846 (gdbarch, SYMBOL_VALUE_ADDRESS (minsym),
2849 if (addr == SYMBOL_VALUE_ADDRESS (minsym))
2855 mo.objfile = info->objfile;
2856 VEC_safe_push (minsym_and_objfile_d, info->msyms, &mo);
2859 /* Search minimal symbols in all objfiles for NAME. If SEARCH_PSPACE
2860 is not NULL, the search is restricted to just that program
2864 search_minsyms_for_name (struct collect_info *info, const char *name,
2865 struct program_space *search_pspace)
2867 struct objfile *objfile;
2868 struct program_space *pspace;
2870 ALL_PSPACES (pspace)
2872 struct collect_minsyms local;
2873 struct cleanup *cleanup;
2875 if (search_pspace != NULL && search_pspace != pspace)
2877 if (pspace->executing_startup)
2880 set_current_program_space (pspace);
2882 memset (&local, 0, sizeof (local));
2883 local.funfirstline = info->state->funfirstline;
2884 local.list_mode = info->state->list_mode;
2886 cleanup = make_cleanup (VEC_cleanup (minsym_and_objfile_d),
2889 ALL_OBJFILES (objfile)
2891 local.objfile = objfile;
2892 iterate_over_minimal_symbols (objfile, name, add_minsym, &local);
2895 if (!VEC_empty (minsym_and_objfile_d, local.msyms))
2899 minsym_and_objfile_d *item;
2901 qsort (VEC_address (minsym_and_objfile_d, local.msyms),
2902 VEC_length (minsym_and_objfile_d, local.msyms),
2903 sizeof (minsym_and_objfile_d),
2906 /* Now the minsyms are in classification order. So, we walk
2907 over them and process just the minsyms with the same
2908 classification as the very first minsym in the list. */
2909 item = VEC_index (minsym_and_objfile_d, local.msyms, 0);
2910 classification = classify_mtype (MSYMBOL_TYPE (item->minsym));
2913 VEC_iterate (minsym_and_objfile_d, local.msyms, ix, item);
2916 if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
2919 minsym_found (info->state, item->objfile, item->minsym,
2924 do_cleanups (cleanup);
2928 /* A helper function to add all symbols matching NAME to INFO. If
2929 PSPACE is not NULL, the search is restricted to just that program
2933 add_matching_symbols_to_info (const char *name,
2934 struct collect_info *info,
2935 struct program_space *pspace)
2940 for (ix = 0; VEC_iterate (symtab_p, info->state->file_symtabs, ix, elt); ++ix)
2946 iterate_over_all_matching_symtabs (name, VAR_DOMAIN,
2947 collect_symbols, info,
2949 search_minsyms_for_name (info, name, pspace);
2951 else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
2953 /* Program spaces that are executing startup should have
2954 been filtered out earlier. */
2955 gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
2956 set_current_program_space (SYMTAB_PSPACE (elt));
2957 LA_ITERATE_OVER_SYMBOLS (get_search_block (elt), name,
2958 VAR_DOMAIN, collect_symbols,
2964 /* Decode a linespec that's a variable. If FILE_SYMTAB is non-NULL,
2965 look in that symtab's static variables first. */
2967 static struct symtabs_and_lines
2968 decode_variable (struct linespec_state *self, char *copy)
2970 struct collect_info info;
2971 const char *lookup_name;
2973 struct cleanup *cleanup;
2976 info.result.sals = NULL;
2977 info.result.nelts = 0;
2979 cleanup = demangle_for_lookup (copy, current_language->la_language,
2981 if (current_language->la_language == language_ada)
2983 /* In Ada, the symbol lookups are performed using the encoded
2984 name rather than the demangled name. */
2985 lookup_name = ada_name_for_lookup (copy);
2986 make_cleanup (xfree, (void *) lookup_name);
2989 canon = cp_canonicalize_string_no_typedefs (lookup_name);
2992 make_cleanup (xfree, canon);
2993 lookup_name = canon;
2996 add_matching_symbols_to_info (lookup_name, &info, NULL);
2998 if (info.result.nelts > 0)
3000 if (self->canonical)
3002 self->canonical->pre_expanded = 1;
3003 if (self->user_filename)
3004 self->canonical->addr_string
3005 = xstrprintf ("%s:%s", self->user_filename, copy);
3007 self->canonical->addr_string = xstrdup (copy);
3012 if (!have_full_symbols ()
3013 && !have_partial_symbols ()
3014 && !have_minimal_symbols ())
3015 throw_error (NOT_FOUND_ERROR,
3016 _("No symbol table is loaded. Use the \"file\" command."));
3017 if (self->user_filename)
3018 throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined in \"%s\"."),
3019 copy, self->user_filename);
3021 throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
3027 /* Now come some functions that are called from multiple places within
3031 symbol_to_sal (struct symtab_and_line *result,
3032 int funfirstline, struct symbol *sym)
3034 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
3036 *result = find_function_start_sal (sym, funfirstline);
3041 if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
3044 result->symtab = SYMBOL_SYMTAB (sym);
3045 result->line = SYMBOL_LINE (sym);
3046 result->pc = SYMBOL_VALUE_ADDRESS (sym);
3047 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3048 result->explicit_pc = 1;
3051 else if (funfirstline)
3055 else if (SYMBOL_LINE (sym) != 0)
3057 /* We know its line number. */
3059 result->symtab = SYMBOL_SYMTAB (sym);
3060 result->line = SYMBOL_LINE (sym);
3061 result->pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
3069 /* See the comment in linespec.h. */
3072 init_linespec_result (struct linespec_result *lr)
3074 memset (lr, 0, sizeof (*lr));
3077 /* See the comment in linespec.h. */
3080 destroy_linespec_result (struct linespec_result *ls)
3083 struct linespec_sals *lsal;
3085 xfree (ls->addr_string);
3086 for (i = 0; VEC_iterate (linespec_sals, ls->sals, i, lsal); ++i)
3088 xfree (lsal->canonical);
3089 xfree (lsal->sals.sals);
3091 VEC_free (linespec_sals, ls->sals);
3094 /* Cleanup function for a linespec_result. */
3097 cleanup_linespec_result (void *a)
3099 destroy_linespec_result (a);
3102 /* See the comment in linespec.h. */
3105 make_cleanup_destroy_linespec_result (struct linespec_result *ls)
3107 return make_cleanup (cleanup_linespec_result, ls);