1 /* Symbol table lookup for the GNU debugger, GDB.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992
3 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 2 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, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
31 #include "call-cmds.h"
33 #include "expression.h"
40 #include <sys/types.h>
46 /* Prototypes for local functions */
49 expensive_mangler PARAMS ((const char *));
52 find_methods PARAMS ((struct type *, char *, char **, struct symbol **));
55 completion_list_add_symbol PARAMS ((char *, char *, int));
57 static struct symtabs_and_lines
58 decode_line_2 PARAMS ((struct symbol *[], int, int));
61 rbreak_command PARAMS ((char *, int));
64 types_info PARAMS ((char *, int));
67 functions_info PARAMS ((char *, int));
70 variables_info PARAMS ((char *, int));
73 sources_info PARAMS ((char *, int));
76 list_symbols PARAMS ((char *, int, int));
79 output_source_filename PARAMS ((char *, int *));
82 operator_chars PARAMS ((char *, char **));
85 find_line_common PARAMS ((struct linetable *, int, int *));
87 static struct partial_symbol *
88 lookup_partial_symbol PARAMS ((struct partial_symtab *, const char *,
89 int, enum namespace));
91 static struct partial_symbol *
92 lookup_demangled_partial_symbol PARAMS ((const struct partial_symtab *,
95 static struct symbol *
96 lookup_demangled_block_symbol PARAMS ((const struct block *, const char *));
98 static struct symtab *
99 lookup_symtab_1 PARAMS ((char *));
103 /* The single non-language-specific builtin type */
104 struct type *builtin_type_error;
106 /* Block in which the most recently searched-for symbol was found.
107 Might be better to make this a parameter to lookup_symbol and
110 const struct block *block_found;
112 char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
114 /* While the C++ support is still in flux, issue a possibly helpful hint on
115 using the new command completion feature on single quoted demangled C++
116 symbols. Remove when loose ends are cleaned up. FIXME -fnf */
119 cplusplus_hint (name)
122 printf ("Hint: try '%s<TAB> or '%s<ESC-?>\n", name, name);
123 printf ("(Note leading single quote.)\n");
126 /* Check for a symtab of a specific name; first in symtabs, then in
127 psymtabs. *If* there is no '/' in the name, a match after a '/'
128 in the symtab filename will also work. */
130 static struct symtab *
131 lookup_symtab_1 (name)
134 register struct symtab *s;
135 register struct partial_symtab *ps;
136 register char *slash;
137 register struct objfile *objfile;
141 /* First, search for an exact match */
143 ALL_SYMTABS (objfile, s)
144 if (strcmp (name, s->filename) == 0)
147 slash = strchr (name, '/');
149 /* Now, search for a matching tail (only if name doesn't have any dirs) */
152 ALL_SYMTABS (objfile, s)
154 char *p = s -> filename;
155 char *tail = strrchr (p, '/');
160 if (strcmp (p, name) == 0)
164 /* Same search rules as above apply here, but now we look thru the
167 ALL_PSYMTABS (objfile, ps)
168 if (strcmp (name, ps -> filename) == 0)
172 ALL_PSYMTABS (objfile, ps)
174 char *p = ps -> filename;
175 char *tail = strrchr (p, '/');
180 if (strcmp (p, name) == 0)
189 error ("Internal: readin pst for `%s' found when no symtab found.", name);
191 s = PSYMTAB_TO_SYMTAB (ps);
196 /* At this point, we have located the psymtab for this file, but
197 the conversion to a symtab has failed. This usually happens
198 when we are looking up an include file. In this case,
199 PSYMTAB_TO_SYMTAB doesn't return a symtab, even though one has
200 been created. So, we need to run through the symtabs again in
201 order to find the file.
202 XXX - This is a crock, and should be fixed inside of the the
203 symbol parsing routines. */
207 /* Lookup the symbol table of a source file named NAME. Try a couple
208 of variations if the first lookup doesn't work. */
214 register struct symtab *s;
217 s = lookup_symtab_1 (name);
220 /* If name not found as specified, see if adding ".c" helps. */
222 copy = (char *) alloca (strlen (name) + 3);
225 s = lookup_symtab_1 (copy);
228 /* We didn't find anything; die. */
232 /* Lookup the partial symbol table of a source file named NAME. This
233 only returns true on an exact match (ie. this semantics are
234 different from lookup_symtab. */
236 struct partial_symtab *
237 lookup_partial_symtab (name)
240 register struct partial_symtab *pst;
241 register struct objfile *objfile;
243 ALL_PSYMTABS (objfile, pst)
245 if (strcmp (name, pst -> filename) == 0)
253 /* Demangle a GDB method stub type. */
255 gdb_mangle_name (type, i, j)
259 int mangled_name_len;
261 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
262 struct fn_field *method = &f[j];
263 char *field_name = TYPE_FN_FIELDLIST_NAME (type, i);
264 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
266 int is_constructor = strcmp (field_name, type_name_no_tag (type)) == 0;
268 /* Need a new type prefix. */
269 char *const_prefix = method->is_const ? "C" : "";
270 char *volatile_prefix = method->is_volatile ? "V" : "";
279 sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
282 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
283 + strlen (buf) + strlen (physname) + 1);
285 /* Only needed for GNU-mangled names. ANSI-mangled names
286 work with the normal mechanisms. */
287 if (OPNAME_PREFIX_P (field_name))
289 opname = cplus_mangle_opname (field_name + 3, 0);
292 error ("No mangling for \"%s\"", field_name);
294 mangled_name_len += strlen (opname);
295 mangled_name = (char *) xmalloc (mangled_name_len);
297 strncpy (mangled_name, field_name, 3);
298 strcpy (mangled_name + 3, opname);
302 mangled_name = (char *) xmalloc (mangled_name_len);
305 mangled_name[0] = '\0';
309 strcpy (mangled_name, field_name);
312 strcat (mangled_name, buf);
313 strcat (mangled_name, physname);
315 return (mangled_name);
319 /* Find which partial symtab on contains PC. Return 0 if none. */
321 struct partial_symtab *
323 register CORE_ADDR pc;
325 register struct partial_symtab *pst;
326 register struct objfile *objfile;
328 ALL_PSYMTABS (objfile, pst)
330 if (pc >= pst -> textlow && pc < pst -> texthigh)
338 /* Find which partial symbol within a psymtab contains PC. Return 0
339 if none. Check all psymtabs if PSYMTAB is 0. */
340 struct partial_symbol *
341 find_pc_psymbol (psymtab, pc)
342 struct partial_symtab *psymtab;
345 struct partial_symbol *best, *p;
349 psymtab = find_pc_psymtab (pc);
353 best_pc = psymtab->textlow - 1;
355 for (p = psymtab->objfile->static_psymbols.list + psymtab->statics_offset;
356 (p - (psymtab->objfile->static_psymbols.list + psymtab->statics_offset)
357 < psymtab->n_static_syms);
359 if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
360 && SYMBOL_CLASS (p) == LOC_BLOCK
361 && pc >= SYMBOL_VALUE_ADDRESS (p)
362 && SYMBOL_VALUE_ADDRESS (p) > best_pc)
364 best_pc = SYMBOL_VALUE_ADDRESS (p);
367 if (best_pc == psymtab->textlow - 1)
373 /* Find the definition for a specified symbol name NAME
374 in namespace NAMESPACE, visible from lexical block BLOCK.
375 Returns the struct symbol pointer, or zero if no symbol is found.
376 If SYMTAB is non-NULL, store the symbol table in which the
377 symbol was found there, or NULL if not found.
378 C++: if IS_A_FIELD_OF_THIS is nonzero on entry, check to see if
379 NAME is a field of the current implied argument `this'. If so set
380 *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero.
381 BLOCK_FOUND is set to the block in which NAME is found (in the case of
382 a field of `this', value_of_this sets BLOCK_FOUND to the proper value.) */
385 lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
387 register const struct block *block;
388 const enum namespace namespace;
389 int *is_a_field_of_this;
390 struct symtab **symtab;
392 register struct symbol *sym;
393 register struct symtab *s;
394 register struct partial_symtab *ps;
395 struct blockvector *bv;
396 register struct objfile *objfile;
397 register struct block *b;
398 register struct minimal_symbol *msymbol;
400 extern char *gdb_completer_word_break_characters;
402 /* If NAME contains any characters from gdb_completer_word_break_characters
403 then it is probably from a quoted name string. So check to see if it
404 has a C++ mangled equivalent, and if so, use the mangled equivalent. */
406 if (strpbrk (name, gdb_completer_word_break_characters) != NULL)
408 if ((temp = expensive_mangler (name)) != NULL)
414 /* Search specified block and its superiors. */
418 sym = lookup_block_symbol (block, name, namespace);
424 /* Search the list of symtabs for one which contains the
425 address of the start of this block. */
426 ALL_SYMTABS (objfile, s)
428 bv = BLOCKVECTOR (s);
429 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
430 if (BLOCK_START (b) <= BLOCK_START (block)
431 && BLOCK_END (b) > BLOCK_START (block))
440 block = BLOCK_SUPERBLOCK (block);
443 /* But that doesn't do any demangling for the STATIC_BLOCK.
444 I'm not sure whether demangling is needed in the case of
445 nested function in inner blocks; if so this needs to be changed.
447 Don't need to mess with the psymtabs; if we have a block,
448 that file is read in. If we don't, then we deal later with
449 all the psymtab stuff that needs checking. */
450 if (namespace == VAR_NAMESPACE && block != NULL)
453 /* Find the right symtab. */
454 ALL_SYMTABS (objfile, s)
456 bv = BLOCKVECTOR (s);
457 b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
458 if (BLOCK_START (b) <= BLOCK_START (block)
459 && BLOCK_END (b) > BLOCK_START (block))
461 sym = lookup_demangled_block_symbol (b, name);
474 /* C++: If requested to do so by the caller,
475 check to see if NAME is a field of `this'. */
476 if (is_a_field_of_this)
478 struct value *v = value_of_this (0);
480 *is_a_field_of_this = 0;
481 if (v && check_field (v, name))
483 *is_a_field_of_this = 1;
490 /* Now search all global blocks. Do the symtab's first, then
491 check the psymtab's */
493 ALL_SYMTABS (objfile, s)
495 bv = BLOCKVECTOR (s);
496 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
497 sym = lookup_block_symbol (block, name, namespace);
507 /* Check for the possibility of the symbol being a global function
508 that is stored in one of the minimal symbol tables. Eventually, all
509 global symbols might be resolved in this way. */
511 if (namespace == VAR_NAMESPACE)
513 msymbol = lookup_minimal_symbol (name, (struct objfile *) NULL);
517 /* Test each minimal symbol to see if the minimal symbol's name
518 is a C++ mangled name that matches a user visible name. */
522 ALL_MSYMBOLS (objfile, msymbol)
524 demangled = demangle_and_match (msymbol -> name, name, 0);
525 if (demangled != NULL)
531 msymbol = NULL; /* Not found */
537 s = find_pc_symtab (msymbol -> address);
538 /* If S is NULL, there are no debug symbols for this file.
539 Skip this stuff and check for matching static symbols below. */
542 bv = BLOCKVECTOR (s);
543 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
544 sym = lookup_block_symbol (block, msymbol -> name, namespace);
545 /* We kept static functions in minimal symbol table as well as
546 in static scope. We want to find them in the symbol table. */
548 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
549 sym = lookup_block_symbol (block, msymbol -> name,
553 /* sym == 0 if symbol was found in the minimal symbol table
554 but not in the symtab.
555 Return 0 to use the msymbol definition of "foo_".
557 This happens for Fortran "foo_" symbols,
558 which are "foo" in the symtab.
560 This can also happen if "asm" is used to make a
561 regular symbol but not a debugging symbol, e.g.
573 ALL_PSYMTABS (objfile, ps)
575 if (!ps->readin && lookup_partial_symbol (ps, name, 1, namespace))
577 s = PSYMTAB_TO_SYMTAB(ps);
578 bv = BLOCKVECTOR (s);
579 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
580 sym = lookup_block_symbol (block, name, namespace);
582 error ("Internal: global symbol `%s' found in psymtab but not in symtab", name);
589 /* Now search all per-file blocks.
590 Not strictly correct, but more useful than an error.
591 Do the symtabs first, then check the psymtabs */
593 ALL_SYMTABS (objfile, s)
595 bv = BLOCKVECTOR (s);
596 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
597 sym = lookup_block_symbol (block, name, namespace);
607 ALL_PSYMTABS (objfile, ps)
609 if (!ps->readin && lookup_partial_symbol (ps, name, 0, namespace))
611 s = PSYMTAB_TO_SYMTAB(ps);
612 bv = BLOCKVECTOR (s);
613 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
614 sym = lookup_block_symbol (block, name, namespace);
616 error ("Internal: static symbol `%s' found in psymtab but not in symtab", name);
623 /* Now search all per-file blocks for static mangled symbols.
624 Do the symtabs first, then check the psymtabs. */
626 if (namespace == VAR_NAMESPACE)
628 ALL_SYMTABS (objfile, s)
630 bv = BLOCKVECTOR (s);
631 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
632 sym = lookup_demangled_block_symbol (block, name);
642 ALL_PSYMTABS (objfile, ps)
644 if (!ps->readin && lookup_demangled_partial_symbol (ps, name))
646 s = PSYMTAB_TO_SYMTAB(ps);
647 bv = BLOCKVECTOR (s);
648 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
649 sym = lookup_demangled_block_symbol (block, name);
651 error ("Internal: mangled static symbol `%s' found in psymtab but not in symtab", name);
664 /* Look for a static demangled symbol in block BLOCK. */
666 static struct symbol *
667 lookup_demangled_block_symbol (block, name)
668 register const struct block *block;
671 register int bot, top;
672 register struct symbol *sym;
676 top = BLOCK_NSYMS (block);
680 sym = BLOCK_SYM (block, bot);
681 if (SYMBOL_NAMESPACE (sym) == VAR_NAMESPACE)
683 demangled = demangle_and_match (SYMBOL_NAME (sym), name, 0);
684 if (demangled != NULL)
696 /* Look, in partial_symtab PST, for static mangled symbol NAME. */
698 static struct partial_symbol *
699 lookup_demangled_partial_symbol (pst, name)
700 const struct partial_symtab *pst;
703 struct partial_symbol *start, *psym;
704 int length = pst->n_static_syms;
708 return (struct partial_symbol *) 0;
710 start = pst->objfile->static_psymbols.list + pst->statics_offset;
711 for (psym = start; psym < start + length; psym++)
713 if (SYMBOL_NAMESPACE (psym) == VAR_NAMESPACE)
715 demangled = demangle_and_match (SYMBOL_NAME (psym), name, 0);
716 if (demangled != NULL)
727 /* Look, in partial_symtab PST, for symbol NAME. Check the global
728 symbols if GLOBAL, the static symbols if not */
730 static struct partial_symbol *
731 lookup_partial_symbol (pst, name, global, namespace)
732 struct partial_symtab *pst;
735 enum namespace namespace;
737 struct partial_symbol *start, *psym;
738 int length = (global ? pst->n_global_syms : pst->n_static_syms);
741 return (struct partial_symbol *) 0;
744 pst->objfile->global_psymbols.list + pst->globals_offset :
745 pst->objfile->static_psymbols.list + pst->statics_offset );
747 if (global) /* This means we can use a binary */
750 struct partial_symbol *top, *bottom, *center;
752 /* Binary search. This search is guaranteed to end with center
753 pointing at the earliest partial symbol with the correct
754 name. At that point *all* partial symbols with that name
755 will be checked against the correct namespace. */
757 top = start + length - 1;
760 center = bottom + (top - bottom) / 2;
762 assert (center < top);
764 if (strcmp (SYMBOL_NAME (center), name) >= 0)
769 assert (top == bottom);
771 while (!strcmp (SYMBOL_NAME (top), name))
773 if (SYMBOL_NAMESPACE (top) == namespace)
780 /* Can't use a binary search */
781 for (psym = start; psym < start + length; psym++)
782 if (namespace == SYMBOL_NAMESPACE (psym)
783 && !strcmp (name, SYMBOL_NAME (psym)))
787 return (struct partial_symbol *) 0;
790 /* Find the psymtab containing main(). */
792 struct partial_symtab *
795 register struct partial_symtab *pst;
796 register struct objfile *objfile;
798 ALL_PSYMTABS (objfile, pst)
800 if (lookup_partial_symbol (pst, "main", 1, VAR_NAMESPACE))
808 /* Look for a symbol in block BLOCK. */
811 lookup_block_symbol (block, name, namespace)
812 register const struct block *block;
814 const enum namespace namespace;
816 register int bot, top, inc;
817 register struct symbol *sym, *parameter_sym;
819 top = BLOCK_NSYMS (block);
822 /* If the blocks's symbols were sorted, start with a binary search. */
824 if (BLOCK_SHOULD_SORT (block))
826 /* First, advance BOT to not far before
827 the first symbol whose name is NAME. */
831 inc = (top - bot + 1);
832 /* No need to keep binary searching for the last few bits worth. */
835 inc = (inc >> 1) + bot;
836 sym = BLOCK_SYM (block, inc);
837 if (SYMBOL_NAME (sym)[0] < name[0])
839 else if (SYMBOL_NAME (sym)[0] > name[0])
841 else if (strcmp (SYMBOL_NAME (sym), name) < 0)
847 /* Now scan forward until we run out of symbols,
848 find one whose name is greater than NAME,
850 If there is more than one symbol with the right name and namespace,
851 we return the first one. dbxread.c is careful to make sure
852 that if one is a register then it comes first. */
854 top = BLOCK_NSYMS (block);
857 sym = BLOCK_SYM (block, bot);
858 inc = SYMBOL_NAME (sym)[0] - name[0];
860 inc = strcmp (SYMBOL_NAME (sym), name);
861 if (inc == 0 && SYMBOL_NAMESPACE (sym) == namespace)
870 /* Here if block isn't sorted.
871 This loop is equivalent to the loop above,
872 but hacked greatly for speed.
874 Note that parameter symbols do not always show up last in the
875 list; this loop makes sure to take anything else other than
876 parameter symbols first; it only uses parameter symbols as a
877 last resort. Note that this only takes up extra computation
880 parameter_sym = (struct symbol *) 0;
881 top = BLOCK_NSYMS (block);
885 sym = BLOCK_SYM (block, bot);
886 if (SYMBOL_NAME (sym)[0] == inc
887 && !strcmp (SYMBOL_NAME (sym), name)
888 && SYMBOL_NAMESPACE (sym) == namespace)
890 if (SYMBOL_CLASS (sym) == LOC_ARG
891 || SYMBOL_CLASS (sym) == LOC_LOCAL_ARG
892 || SYMBOL_CLASS (sym) == LOC_REF_ARG
893 || SYMBOL_CLASS (sym) == LOC_REGPARM)
900 return parameter_sym; /* Will be 0 if not found. */
903 /* Return the symbol for the function which contains a specified
904 lexical block, described by a struct block BL. */
910 while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
911 bl = BLOCK_SUPERBLOCK (bl);
913 return BLOCK_FUNCTION (bl);
916 /* Subroutine of find_pc_line */
920 register CORE_ADDR pc;
922 register struct block *b;
923 struct blockvector *bv;
924 register struct symtab *s = 0;
925 register struct partial_symtab *ps;
926 register struct objfile *objfile;
928 /* Search all symtabs for one whose file contains our pc */
930 ALL_SYMTABS (objfile, s)
932 bv = BLOCKVECTOR (s);
933 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
934 if (BLOCK_START (b) <= pc
935 && BLOCK_END (b) > pc)
941 ps = find_pc_psymtab (pc);
942 if (ps && ps->readin)
944 printf_filtered ("(Internal error: pc 0x%x in read in psymtab, but not in symtab.)\n", pc);
948 s = PSYMTAB_TO_SYMTAB (ps);
956 /* Find the source file and line number for a given PC value.
957 Return a structure containing a symtab pointer, a line number,
958 and a pc range for the entire source line.
959 The value's .pc field is NOT the specified pc.
960 NOTCURRENT nonzero means, if specified pc is on a line boundary,
961 use the line that ends there. Otherwise, in that case, the line
962 that begins there is used. */
964 struct symtab_and_line
965 find_pc_line (pc, notcurrent)
970 register struct linetable *l;
973 register struct linetable_entry *item;
974 struct symtab_and_line val;
975 struct blockvector *bv;
977 /* Info on best line seen so far, and where it starts, and its file. */
980 CORE_ADDR best_pc = 0;
981 CORE_ADDR best_end = 0;
982 struct symtab *best_symtab = 0;
984 /* Store here the first line number
985 of a file which contains the line at the smallest pc after PC.
986 If we don't find a line whose range contains PC,
987 we will use a line one less than this,
988 with a range from the start of that file to the first line's pc. */
990 CORE_ADDR alt_pc = 0;
991 struct symtab *alt_symtab = 0;
993 /* Info on best line seen in this file. */
998 /* Info on first line of this file. */
1003 /* If this pc is not from the current frame,
1004 it is the address of the end of a call instruction.
1005 Quite likely that is the start of the following statement.
1006 But what we want is the statement containing the instruction.
1007 Fudge the pc to make sure we get that. */
1009 if (notcurrent) pc -= 1;
1011 s = find_pc_symtab (pc);
1021 bv = BLOCKVECTOR (s);
1023 /* Look at all the symtabs that share this blockvector.
1024 They all have the same apriori range, that we found was right;
1025 but they have different line tables. */
1027 for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1029 /* Find the best line in this symtab. */
1036 for (i = 0; i < len; i++)
1038 item = &(l->item[i]);
1042 first_line = item->line;
1043 first_pc = item->pc;
1045 /* Return the last line that did not start after PC. */
1048 prev_line = item->line;
1055 /* Is this file's best line closer than the best in the other files?
1056 If so, record this file, and its best line, as best so far. */
1057 if (prev_line >= 0 && prev_pc > best_pc)
1060 best_line = prev_line;
1062 /* If another line is in the linetable, and its PC is closer
1063 than the best_end we currently have, take it as best_end. */
1064 if (i < len && (best_end == 0 || best_end > item->pc))
1065 best_end = item->pc;
1067 /* Is this file's first line closer than the first lines of other files?
1068 If so, record this file, and its first line, as best alternate. */
1069 if (first_line >= 0 && first_pc > pc
1070 && (alt_pc == 0 || first_pc < alt_pc))
1073 alt_line = first_line;
1077 if (best_symtab == 0)
1079 val.symtab = alt_symtab;
1080 val.line = alt_line - 1;
1081 val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1086 val.symtab = best_symtab;
1087 val.line = best_line;
1089 if (best_end && (alt_pc == 0 || best_end < alt_pc))
1094 val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1099 /* Find the PC value for a given source file and line number.
1100 Returns zero for invalid line number.
1101 The source file is specified with a struct symtab. */
1104 find_line_pc (symtab, line)
1105 struct symtab *symtab;
1108 register struct linetable *l;
1114 l = LINETABLE (symtab);
1115 ind = find_line_common(l, line, &dummy);
1116 return (ind >= 0) ? l->item[ind].pc : 0;
1119 /* Find the range of pc values in a line.
1120 Store the starting pc of the line into *STARTPTR
1121 and the ending pc (start of next line) into *ENDPTR.
1122 Returns 1 to indicate success.
1123 Returns 0 if could not find the specified line. */
1126 find_line_pc_range (symtab, thisline, startptr, endptr)
1127 struct symtab *symtab;
1129 CORE_ADDR *startptr, *endptr;
1131 register struct linetable *l;
1133 int exact_match; /* did we get an exact linenumber match */
1138 l = LINETABLE (symtab);
1139 ind = find_line_common (l, thisline, &exact_match);
1142 *startptr = l->item[ind].pc;
1143 /* If we have not seen an entry for the specified line,
1144 assume that means the specified line has zero bytes. */
1145 if (!exact_match || ind == l->nitems-1)
1146 *endptr = *startptr;
1148 /* Perhaps the following entry is for the following line.
1149 It's worth a try. */
1150 if (ind+1 < l->nitems
1151 && l->item[ind+1].line == thisline + 1)
1152 *endptr = l->item[ind+1].pc;
1154 *endptr = find_line_pc (symtab, thisline+1);
1161 /* Given a line table and a line number, return the index into the line
1162 table for the pc of the nearest line whose number is >= the specified one.
1163 Return -1 if none is found. The value is >= 0 if it is an index.
1165 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
1168 find_line_common (l, lineno, exact_match)
1169 register struct linetable *l;
1170 register int lineno;
1176 /* BEST is the smallest linenumber > LINENO so far seen,
1177 or 0 if none has been seen so far.
1178 BEST_INDEX identifies the item for it. */
1180 int best_index = -1;
1189 for (i = 0; i < len; i++)
1191 register struct linetable_entry *item = &(l->item[i]);
1193 if (item->line == lineno)
1199 if (item->line > lineno && (best == 0 || item->line < best))
1206 /* If we got here, we didn't get an exact match. */
1213 find_pc_line_pc_range (pc, startptr, endptr)
1215 CORE_ADDR *startptr, *endptr;
1217 struct symtab_and_line sal;
1218 sal = find_pc_line (pc, 0);
1221 return sal.symtab != 0;
1224 /* If P is of the form "operator[ \t]+..." where `...' is
1225 some legitimate operator text, return a pointer to the
1226 beginning of the substring of the operator text.
1227 Otherwise, return "". */
1229 operator_chars (p, end)
1234 if (strncmp (p, "operator", 8))
1238 /* Don't get faked out by `operator' being part of a longer
1240 if (isalpha(*p) || *p == '_' || *p == '$' || *p == '\0')
1243 /* Allow some whitespace between `operator' and the operator symbol. */
1244 while (*p == ' ' || *p == '\t')
1247 /* Recognize 'operator TYPENAME'. */
1249 if (isalpha(*p) || *p == '_' || *p == '$')
1251 register char *q = p+1;
1252 while (isalnum(*q) || *q == '_' || *q == '$')
1277 if (p[1] == '=' || p[1] == p[0])
1288 error ("`operator ()' must be specified without whitespace in `()'");
1293 error ("`operator ?:' must be specified without whitespace in `?:'");
1298 error ("`operator []' must be specified without whitespace in `[]'");
1302 error ("`operator %s' not supported", p);
1309 /* Recursive helper function for decode_line_1.
1310 * Look for methods named NAME in type T.
1311 * Return number of matches.
1312 * Put matches in PHYSNAMES and SYM_ARR (which better be big enough!).
1313 * These allocations seem to define "big enough":
1314 * sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1315 * physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1319 find_methods (t, name, physnames, sym_arr)
1323 struct symbol **sym_arr;
1327 struct symbol *sym_class;
1328 char *class_name = type_name_no_tag (t);
1329 /* Ignore this class if it doesn't have a name.
1330 This prevents core dumps, but is just a workaround
1331 because we might not find the function in
1332 certain cases, such as
1333 struct D {virtual int f();}
1334 struct C : D {virtual int g();}
1335 (in this case g++ 1.35.1- does not put out a name
1336 for D as such, it defines type 19 (for example) in
1337 the same stab as C, and then does a
1338 .stabs "D:T19" and a .stabs "D:t19".
1340 "break C::f" should not be looking for field f in
1342 but just for the field f in the baseclasses of C
1343 (no matter what their names).
1345 However, I don't know how to replace the code below
1346 that depends on knowing the name of D. */
1348 && (sym_class = lookup_symbol (class_name,
1349 (struct block *)NULL,
1352 (struct symtab **)NULL)))
1355 t = SYMBOL_TYPE (sym_class);
1356 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1357 method_counter >= 0;
1361 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, method_counter);
1363 char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1364 if (!strcmp (name, method_name))
1365 /* Find all the fields with that name. */
1366 for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
1371 if (TYPE_FN_FIELD_STUB (f, field_counter))
1372 check_stub_method (t, method_counter, field_counter);
1373 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1374 physnames[i1] = (char*) alloca (strlen (phys_name) + 1);
1375 strcpy (physnames[i1], phys_name);
1376 sym_arr[i1] = lookup_symbol (phys_name,
1377 SYMBOL_BLOCK_VALUE (sym_class),
1380 (struct symtab **) NULL);
1381 if (sym_arr[i1]) i1++;
1384 fputs_filtered("(Cannot find method ", stdout);
1385 fputs_demangled(phys_name, stdout, DMGL_PARAMS);
1386 fputs_filtered(" - possibly inlined.)\n", stdout);
1391 /* Only search baseclasses if there is no match yet,
1392 * since names in derived classes override those in baseclasses.
1396 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1397 i1 += find_methods(TYPE_BASECLASS(t, ibase), name,
1398 physnames + i1, sym_arr + i1);
1402 /* Parse a string that specifies a line number.
1403 Pass the address of a char * variable; that variable will be
1404 advanced over the characters actually parsed.
1408 LINENUM -- that line number in current file. PC returned is 0.
1409 FILE:LINENUM -- that line in that file. PC returned is 0.
1410 FUNCTION -- line number of openbrace of that function.
1411 PC returned is the start of the function.
1412 VARIABLE -- line number of definition of that variable.
1414 FILE:FUNCTION -- likewise, but prefer functions in that file.
1415 *EXPR -- line in which address EXPR appears.
1417 FUNCTION may be an undebuggable function found in minimal symbol table.
1419 If the argument FUNFIRSTLINE is nonzero, we want the first line
1420 of real code inside a function when a function is specified.
1422 DEFAULT_SYMTAB specifies the file to use if none is specified.
1423 It defaults to current_source_symtab.
1424 DEFAULT_LINE specifies the line number to use for relative
1425 line numbers (that start with signs). Defaults to current_source_line.
1427 Note that it is possible to return zero for the symtab
1428 if no file is validly specified. Callers must check that.
1429 Also, the line number returned may be invalid. */
1431 struct symtabs_and_lines
1432 decode_line_1 (argptr, funfirstline, default_symtab, default_line)
1435 struct symtab *default_symtab;
1438 struct symtabs_and_lines values;
1439 struct symtab_and_line val;
1440 register char *p, *p1;
1442 register struct symtab *s;
1444 register struct symbol *sym;
1445 /* The symtab that SYM was found in. */
1446 struct symtab *sym_symtab;
1448 register CORE_ADDR pc;
1449 register struct minimal_symbol *msymbol;
1451 struct symbol *sym_class;
1454 struct symbol **sym_arr;
1457 char *saved_arg = *argptr;
1458 extern char *gdb_completer_quote_characters;
1460 /* Defaults have defaults. */
1462 if (default_symtab == 0)
1464 default_symtab = current_source_symtab;
1465 default_line = current_source_line;
1468 /* See if arg is *PC */
1470 if (**argptr == '*')
1472 if (**argptr == '*')
1476 pc = parse_and_eval_address_1 (argptr);
1477 values.sals = (struct symtab_and_line *)
1478 xmalloc (sizeof (struct symtab_and_line));
1480 values.sals[0] = find_pc_line (pc, 0);
1481 values.sals[0].pc = pc;
1485 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
1488 is_quoted = (strchr (gdb_completer_quote_characters, **argptr) != NULL);
1490 for (p = *argptr; *p; p++)
1492 if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
1495 while (p[0] == ' ' || p[0] == '\t') p++;
1497 if ((p[0] == ':') && !is_quoted)
1503 /* Extract the class name. */
1505 while (p != *argptr && p[-1] == ' ') --p;
1506 copy = (char *) alloca (p - *argptr + 1);
1507 memcpy (copy, *argptr, p - *argptr);
1508 copy[p - *argptr] = 0;
1510 /* Discard the class name from the arg. */
1512 while (*p == ' ' || *p == '\t') p++;
1515 sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
1516 (struct symtab **)NULL);
1519 ( TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_STRUCT
1520 || TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_UNION))
1522 /* Arg token is not digits => try it as a function name
1523 Find the next token (everything up to end or next whitespace). */
1525 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
1526 q = operator_chars (*argptr, &q1);
1531 char *tmp = alloca (q1 - q + 1);
1532 memcpy (tmp, q, q1 - q);
1534 opname = cplus_mangle_opname (tmp, DMGL_ANSI);
1537 warning ("no mangling for \"%s\"", tmp);
1538 cplusplus_hint (saved_arg);
1539 return_to_top_level ();
1541 copy = (char*) alloca (3 + strlen(opname));
1542 sprintf (copy, "__%s", opname);
1547 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
1548 memcpy (copy, *argptr, p - *argptr);
1549 copy[p - *argptr] = '\0';
1552 /* no line number may be specified */
1553 while (*p == ' ' || *p == '\t') p++;
1557 i1 = 0; /* counter for the symbol array */
1558 t = SYMBOL_TYPE (sym_class);
1559 sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1560 physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1562 if (destructor_name_p (copy, t))
1564 /* destructors are a special case. */
1565 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, 0);
1566 int len = TYPE_FN_FIELDLIST_LENGTH (t, 0) - 1;
1567 char *phys_name = TYPE_FN_FIELD_PHYSNAME (f, len);
1568 physnames[i1] = (char *)alloca (strlen (phys_name) + 1);
1569 strcpy (physnames[i1], phys_name);
1571 lookup_symbol (phys_name, SYMBOL_BLOCK_VALUE (sym_class),
1572 VAR_NAMESPACE, 0, (struct symtab **)NULL);
1573 if (sym_arr[i1]) i1++;
1576 i1 = find_methods (t, copy, physnames, sym_arr);
1579 /* There is exactly one field with that name. */
1582 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1584 /* Arg is the name of a function */
1585 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1588 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1590 values.sals[0] = find_pc_line (pc, 0);
1591 values.sals[0].pc = (values.sals[0].end && values.sals[0].pc != pc) ? values.sals[0].end : pc;
1601 /* There is more than one field with that name
1602 (overloaded). Ask the user which one to use. */
1603 return decode_line_2 (sym_arr, i1, funfirstline);
1609 if (OPNAME_PREFIX_P (copy))
1611 tmp = (char *)alloca (strlen (copy+3) + 9);
1612 strcpy (tmp, "operator ");
1613 strcat (tmp, copy+3);
1618 warning ("the class `%s' does not have destructor defined",
1621 warning ("the class %s does not have any method named %s",
1622 sym_class->name, tmp);
1623 cplusplus_hint (saved_arg);
1624 return_to_top_level ();
1629 /* The quotes are important if copy is empty. */
1630 warning ("can't find class, struct, or union named \"%s\"",
1632 cplusplus_hint (saved_arg);
1633 return_to_top_level ();
1639 /* Extract the file name. */
1641 while (p != *argptr && p[-1] == ' ') --p;
1642 copy = (char *) alloca (p - *argptr + 1);
1643 memcpy (copy, *argptr, p - *argptr);
1644 copy[p - *argptr] = 0;
1646 /* Find that file's data. */
1647 s = lookup_symtab (copy);
1650 if (!have_full_symbols () && !have_partial_symbols ())
1651 error (no_symtab_msg);
1652 error ("No source file named %s.", copy);
1655 /* Discard the file name from the arg. */
1657 while (*p == ' ' || *p == '\t') p++;
1661 /* S is specified file's symtab, or 0 if no file specified.
1662 arg no longer contains the file name. */
1664 /* Check whether arg is all digits (and sign) */
1667 if (*p == '-' || *p == '+') p++;
1668 while (*p >= '0' && *p <= '9')
1671 if (p != *argptr && (*p == 0 || *p == ' ' || *p == '\t' || *p == ','))
1673 /* We found a token consisting of all digits -- at least one digit. */
1674 enum sign {none, plus, minus} sign = none;
1676 /* This is where we need to make sure that we have good defaults.
1677 We must guarantee that this section of code is never executed
1678 when we are called with just a function name, since
1679 select_source_symtab calls us with such an argument */
1681 if (s == 0 && default_symtab == 0)
1683 select_source_symtab (0);
1684 default_symtab = current_source_symtab;
1685 default_line = current_source_line;
1688 if (**argptr == '+')
1689 sign = plus, (*argptr)++;
1690 else if (**argptr == '-')
1691 sign = minus, (*argptr)++;
1692 val.line = atoi (*argptr);
1699 val.line = default_line + val.line;
1705 val.line = default_line - val.line;
1710 break; /* No need to adjust val.line. */
1713 while (*p == ' ' || *p == '\t') p++;
1719 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1720 values.sals[0] = val;
1725 /* Arg token is not digits => try it as a variable name
1726 Find the next token (everything up to end or next whitespace). */
1728 p = skip_quoted (*argptr);
1729 copy = (char *) alloca (p - *argptr + 1);
1730 memcpy (copy, *argptr, p - *argptr);
1731 copy[p - *argptr] = '\0';
1732 if ((copy[0] == copy [p - *argptr - 1])
1733 && strchr (gdb_completer_quote_characters, copy[0]) != NULL)
1736 copy [p - *argptr - 1] = '\0';
1738 if ((temp = expensive_mangler (copy)) != NULL)
1743 while (*p == ' ' || *p == '\t') p++;
1746 /* Look up that token as a variable.
1747 If file specified, use that file's per-file block to start with. */
1749 sym = lookup_symbol (copy,
1750 (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
1751 : get_selected_block ()),
1752 VAR_NAMESPACE, 0, &sym_symtab);
1756 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
1758 /* Arg is the name of a function */
1759 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1762 val = find_pc_line (pc, 0);
1763 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
1764 /* Convex: no need to suppress code on first line, if any */
1767 /* If SKIP_PROLOGUE left us in mid-line, and the next line is still
1768 part of the same function:
1769 advance to next line,
1770 recalculate its line number (might not be N+1). */
1771 if (val.pc != pc && val.end &&
1772 lookup_minimal_symbol_by_pc (pc) == lookup_minimal_symbol_by_pc (val.end)) {
1773 pc = val.end; /* First pc of next line */
1774 val = find_pc_line (pc, 0);
1778 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1779 values.sals[0] = val;
1782 /* I think this is always the same as the line that
1783 we calculate above, but the general principle is
1784 "trust the symbols more than stuff like
1786 if (SYMBOL_LINE (sym) != 0)
1787 values.sals[0].line = SYMBOL_LINE (sym);
1791 else if (SYMBOL_LINE (sym) != 0)
1793 /* We know its line number. */
1794 values.sals = (struct symtab_and_line *)
1795 xmalloc (sizeof (struct symtab_and_line));
1797 memset (&values.sals[0], 0, sizeof (values.sals[0]));
1798 values.sals[0].symtab = sym_symtab;
1799 values.sals[0].line = SYMBOL_LINE (sym);
1803 /* This can happen if it is compiled with a compiler which doesn't
1804 put out line numbers for variables. */
1805 error ("Line number not known for symbol \"%s\"", copy);
1808 msymbol = lookup_minimal_symbol (copy, (struct objfile *) NULL);
1809 if (msymbol != NULL)
1813 val.pc = msymbol -> address + FUNCTION_START_OFFSET;
1815 SKIP_PROLOGUE (val.pc);
1816 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1817 values.sals[0] = val;
1822 if (!have_full_symbols () &&
1823 !have_partial_symbols () && !have_minimal_symbols ())
1824 error (no_symtab_msg);
1826 error ("Function \"%s\" not defined.", copy);
1827 return values; /* for lint */
1830 struct symtabs_and_lines
1831 decode_line_spec (string, funfirstline)
1835 struct symtabs_and_lines sals;
1837 error ("Empty line specification.");
1838 sals = decode_line_1 (&string, funfirstline,
1839 current_source_symtab, current_source_line);
1841 error ("Junk at end of line specification: %s", string);
1845 /* Given a list of NELTS symbols in sym_arr (with corresponding
1846 mangled names in physnames), return a list of lines to operate on
1847 (ask user if necessary). */
1848 static struct symtabs_and_lines
1849 decode_line_2 (sym_arr, nelts, funfirstline)
1850 struct symbol *sym_arr[];
1854 struct symtabs_and_lines values, return_values;
1855 register CORE_ADDR pc;
1861 values.sals = (struct symtab_and_line *) alloca (nelts * sizeof(struct symtab_and_line));
1862 return_values.sals = (struct symtab_and_line *) xmalloc (nelts * sizeof(struct symtab_and_line));
1865 printf("[0] cancel\n[1] all\n");
1868 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
1870 /* Arg is the name of a function */
1871 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym_arr[i]))
1872 + FUNCTION_START_OFFSET;
1875 values.sals[i] = find_pc_line (pc, 0);
1876 values.sals[i].pc = (values.sals[i].end && values.sals[i].pc != pc) ?
1877 values.sals[i].end : pc;
1878 demangled = cplus_demangle (SYMBOL_NAME (sym_arr[i]),
1879 DMGL_PARAMS | DMGL_ANSI);
1880 printf("[%d] %s at %s:%d\n", (i+2),
1881 demangled ? demangled : SYMBOL_NAME (sym_arr[i]),
1882 values.sals[i].symtab->filename, values.sals[i].line);
1883 if (demangled != NULL)
1888 else printf ("?HERE\n");
1892 if ((prompt = getenv ("PS2")) == NULL)
1896 printf("%s ",prompt);
1899 args = command_line_input ((char *) NULL, 0);
1902 error_no_arg ("one or more choice numbers");
1910 while (*arg1 >= '0' && *arg1 <= '9') arg1++;
1911 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
1912 error ("Arguments must be choice numbers.");
1917 error ("cancelled");
1920 memcpy (return_values.sals, values.sals,
1921 (nelts * sizeof(struct symtab_and_line)));
1922 return_values.nelts = nelts;
1923 return return_values;
1926 if (num > nelts + 2)
1928 printf ("No choice number %d.\n", num);
1933 if (values.sals[num].pc)
1935 return_values.sals[i++] = values.sals[num];
1936 values.sals[num].pc = 0;
1940 printf ("duplicate request for %d ignored.\n", num);
1945 while (*args == ' ' || *args == '\t') args++;
1947 return_values.nelts = i;
1948 return return_values;
1952 /* Slave routine for sources_info. Force line breaks at ,'s.
1953 NAME is the name to print and *FIRST is nonzero if this is the first
1954 name printed. Set *FIRST to zero. */
1956 output_source_filename (name, first)
1960 /* Table of files printed so far. Since a single source file can
1961 result in several partial symbol tables, we need to avoid printing
1962 it more than once. Note: if some of the psymtabs are read in and
1963 some are not, it gets printed both under "Source files for which
1964 symbols have been read" and "Source files for which symbols will
1965 be read in on demand". I consider this a reasonable way to deal
1966 with the situation. I'm not sure whether this can also happen for
1967 symtabs; it doesn't hurt to check. */
1968 static char **tab = NULL;
1969 /* Allocated size of tab in elements.
1970 Start with one 256-byte block (when using GNU malloc.c).
1971 24 is the malloc overhead when range checking is in effect. */
1972 static int tab_alloc_size = (256 - 24) / sizeof (char *);
1973 /* Current size of tab in elements. */
1974 static int tab_cur_size;
1981 tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
1985 /* Is NAME in tab? */
1986 for (p = tab; p < tab + tab_cur_size; p++)
1987 if (strcmp (*p, name) == 0)
1988 /* Yes; don't print it again. */
1990 /* No; add it to tab. */
1991 if (tab_cur_size == tab_alloc_size)
1993 tab_alloc_size *= 2;
1994 tab = (char **) xrealloc ((char *) tab, tab_alloc_size * sizeof (*tab));
1996 tab[tab_cur_size++] = name;
2004 printf_filtered (", ");
2008 fputs_filtered (name, stdout);
2012 sources_info (ignore, from_tty)
2016 register struct symtab *s;
2017 register struct partial_symtab *ps;
2018 register struct objfile *objfile;
2021 if (!have_full_symbols () && !have_partial_symbols ())
2023 error (no_symtab_msg);
2026 printf_filtered ("Source files for which symbols have been read in:\n\n");
2029 ALL_SYMTABS (objfile, s)
2031 output_source_filename (s -> filename, &first);
2033 printf_filtered ("\n\n");
2035 printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2038 ALL_PSYMTABS (objfile, ps)
2042 output_source_filename (ps -> filename, &first);
2045 printf_filtered ("\n");
2052 char *demangled = cplus_demangle (name, DMGL_ANSI);
2053 if (demangled != NULL)
2055 int cond = re_exec (demangled);
2059 return (re_exec (name));
2061 #define NAME_MATCH(NAME) name_match(NAME)
2063 /* List all symbols (if REGEXP is 0) or all symbols matching REGEXP.
2064 If CLASS is zero, list all symbols except functions, type names, and
2066 If CLASS is 1, list only functions.
2067 If CLASS is 2, list only type names.
2068 If CLASS is 3, list only method names.
2070 BPT is non-zero if we should set a breakpoint at the functions
2074 list_symbols (regexp, class, bpt)
2079 register struct symtab *s;
2080 register struct partial_symtab *ps;
2081 register struct blockvector *bv;
2082 struct blockvector *prev_bv = 0;
2083 register struct block *b;
2085 register struct symbol *sym;
2086 struct partial_symbol *psym;
2087 struct objfile *objfile;
2088 struct minimal_symbol *msymbol;
2090 static char *classnames[]
2091 = {"variable", "function", "type", "method"};
2092 int found_in_file = 0;
2094 static enum minimal_symbol_type types[]
2095 = {mst_data, mst_text, mst_abs, mst_unknown};
2096 static enum minimal_symbol_type types2[]
2097 = {mst_bss, mst_text, mst_abs, mst_unknown};
2098 enum minimal_symbol_type ourtype = types[class];
2099 enum minimal_symbol_type ourtype2 = types2[class];
2103 /* Make sure spacing is right for C++ operators.
2104 This is just a courtesy to make the matching less sensitive
2105 to how many spaces the user leaves between 'operator'
2106 and <TYPENAME> or <OPERATOR>. */
2108 char *opname = operator_chars (regexp, &opend);
2111 int fix = -1; /* -1 means ok; otherwise number of spaces needed. */
2112 if (isalpha(*opname) || *opname == '_' || *opname == '$')
2114 /* There should 1 space between 'operator' and 'TYPENAME'. */
2115 if (opname[-1] != ' ' || opname[-2] == ' ')
2120 /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2121 if (opname[-1] == ' ')
2124 /* If wrong number of spaces, fix it. */
2127 char *tmp = (char*) alloca(opend-opname+10);
2128 sprintf(tmp, "operator%.*s%s", fix, " ", opname);
2133 if (0 != (val = re_comp (regexp)))
2134 error ("Invalid regexp (%s): %s", val, regexp);
2137 /* Search through the partial symtabs *first* for all symbols
2138 matching the regexp. That way we don't have to reproduce all of
2139 the machinery below. */
2141 ALL_PSYMTABS (objfile, ps)
2143 struct partial_symbol *bound, *gbound, *sbound;
2146 if (ps->readin) continue;
2148 gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2149 sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2152 /* Go through all of the symbols stored in a partial
2153 symtab in one loop. */
2154 psym = objfile->global_psymbols.list + ps->globals_offset;
2159 if (bound == gbound && ps->n_static_syms != 0)
2161 psym = objfile->static_psymbols.list + ps->statics_offset;
2172 /* If it would match (logic taken from loop below)
2173 load the file and go on to the next one */
2174 if ((regexp == 0 || NAME_MATCH (SYMBOL_NAME (psym)))
2175 && ((class == 0 && SYMBOL_CLASS (psym) != LOC_TYPEDEF
2176 && SYMBOL_CLASS (psym) != LOC_BLOCK)
2177 || (class == 1 && SYMBOL_CLASS (psym) == LOC_BLOCK)
2178 || (class == 2 && SYMBOL_CLASS (psym) == LOC_TYPEDEF)
2179 || (class == 3 && SYMBOL_CLASS (psym) == LOC_BLOCK)))
2181 PSYMTAB_TO_SYMTAB(ps);
2189 /* Here, we search through the minimal symbol tables for functions that
2190 match, and call find_pc_symtab on them to force their symbols to
2191 be read. The symbol will then be found during the scan of symtabs
2192 below. If find_pc_symtab fails, set found_misc so that we will
2193 rescan to print any matching symbols without debug info. */
2197 ALL_MSYMBOLS (objfile, msymbol)
2199 if (msymbol -> type == ourtype || msymbol -> type == ourtype2)
2201 if (regexp == 0 || NAME_MATCH (msymbol -> name))
2203 if (0 == find_pc_symtab (msymbol -> address))
2212 /* Printout here so as to get after the "Reading in symbols"
2213 messages which will be generated above. */
2215 printf_filtered (regexp
2216 ? "All %ss matching regular expression \"%s\":\n"
2217 : "All defined %ss:\n",
2221 ALL_SYMTABS (objfile, s)
2224 bv = BLOCKVECTOR (s);
2225 /* Often many files share a blockvector.
2226 Scan each blockvector only once so that
2227 we don't get every symbol many times.
2228 It happens that the first symtab in the list
2229 for any given blockvector is the main file. */
2231 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
2233 b = BLOCKVECTOR_BLOCK (bv, i);
2234 /* Skip the sort if this block is always sorted. */
2235 if (!BLOCK_SHOULD_SORT (b))
2236 sort_block_syms (b);
2237 for (j = 0; j < BLOCK_NSYMS (b); j++)
2240 sym = BLOCK_SYM (b, j);
2241 if ((regexp == 0 || NAME_MATCH (SYMBOL_NAME (sym)))
2242 && ((class == 0 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
2243 && SYMBOL_CLASS (sym) != LOC_BLOCK
2244 && SYMBOL_CLASS (sym) != LOC_CONST)
2245 || (class == 1 && SYMBOL_CLASS (sym) == LOC_BLOCK)
2246 || (class == 2 && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2247 || (class == 3 && SYMBOL_CLASS (sym) == LOC_BLOCK)))
2251 /* Set a breakpoint here, if it's a function */
2253 break_command (SYMBOL_NAME(sym), 0);
2255 else if (!found_in_file)
2257 fputs_filtered ("\nFile ", stdout);
2258 fputs_filtered (s->filename, stdout);
2259 fputs_filtered (":\n", stdout);
2263 if (class != 2 && i == STATIC_BLOCK)
2264 printf_filtered ("static ");
2266 /* Typedef that is not a C++ class */
2268 && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
2269 typedef_print (SYMBOL_TYPE(sym), sym, stdout);
2270 /* variable, func, or typedef-that-is-c++-class */
2271 else if (class < 2 ||
2273 SYMBOL_NAMESPACE(sym) == STRUCT_NAMESPACE))
2275 type_print (SYMBOL_TYPE (sym),
2276 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2277 ? "" : SYMBOL_NAME (sym)),
2280 printf_filtered (";\n");
2285 /* FIXME, why is this zapped out? */
2287 type_print_base (TYPE_FN_FIELD_TYPE(t, i), stdout, 0, 0);
2288 type_print_varspec_prefix (TYPE_FN_FIELD_TYPE(t, i), stdout, 0);
2289 sprintf (buf, " %s::", type_name_no_tag (t));
2290 type_print_method_args (TYPE_FN_FIELD_ARGS (t, i), buf, name, stdout);
2299 /* If there are no eyes, avoid all contact. I mean, if there are
2300 no debug symbols, then print directly from the msymbol_vector. */
2302 if (found_misc || class != 1)
2305 ALL_MSYMBOLS (objfile, msymbol)
2307 if (msymbol -> type == ourtype || msymbol -> type == ourtype2)
2309 if (regexp == 0 || NAME_MATCH (msymbol -> name))
2311 /* Functions: Look up by address. */
2313 (0 == find_pc_symtab (msymbol -> address)))
2315 /* Variables/Absolutes: Look up by name */
2316 if (lookup_symbol (msymbol -> name,
2317 (struct block *) 0, VAR_NAMESPACE, 0,
2318 (struct symtab **) 0) == NULL)
2322 printf_filtered ("\nNon-debugging symbols:\n");
2325 printf_filtered (" %08x %s\n",
2337 variables_info (regexp, from_tty)
2341 list_symbols (regexp, 0, 0);
2345 functions_info (regexp, from_tty)
2349 list_symbols (regexp, 1, 0);
2353 types_info (regexp, from_tty)
2357 list_symbols (regexp, 2, 0);
2361 /* Tiemann says: "info methods was never implemented." */
2363 methods_info (regexp)
2366 list_symbols (regexp, 3, 0);
2370 /* Breakpoint all functions matching regular expression. */
2372 rbreak_command (regexp, from_tty)
2376 list_symbols (regexp, 1, 1);
2380 /* Return Nonzero if block a is lexically nested within block b,
2381 or if a and b have the same pc range.
2382 Return zero otherwise. */
2385 struct block *a, *b;
2389 return BLOCK_START (a) >= BLOCK_START (b)
2390 && BLOCK_END (a) <= BLOCK_END (b);
2394 /* Helper routine for make_symbol_completion_list. */
2396 static int return_val_size;
2397 static int return_val_index;
2398 static char **return_val;
2400 /* Test to see if the symbol specified by SYMNAME (or it's demangled
2401 equivalent) matches TEXT in the first TEXT_LEN characters. If so,
2402 add it to the current completion list. */
2405 completion_list_add_symbol (symname, text, text_len)
2413 /* First see if SYMNAME is a C++ mangled name, and if so, use the
2414 demangled name instead, including any parameters. */
2416 if ((demangled = cplus_demangle (symname, DMGL_PARAMS | DMGL_ANSI)) != NULL)
2418 symname = demangled;
2421 /* If we have a match for a completion, then add SYMNAME to the current
2422 list of matches. Note that we always make a copy of the string, even
2423 if it is one that was returned from cplus_demangle and is already
2424 in malloc'd memory. */
2426 if (strncmp (symname, text, text_len) == 0)
2428 if (return_val_index + 3 > return_val_size)
2430 newsize = (return_val_size *= 2) * sizeof (char *);
2431 return_val = (char **) xrealloc ((char *) return_val, newsize);
2433 return_val[return_val_index++] = savestring (symname, strlen (symname));
2434 return_val[return_val_index] = NULL;
2437 if (demangled != NULL)
2443 /* Return a NULL terminated array of all symbols (regardless of class) which
2444 begin by matching TEXT. If the answer is no symbols, then the return value
2445 is an array which contains only a NULL pointer.
2447 Problem: All of the symbols have to be copied because readline frees them.
2448 I'm not going to worry about this; hopefully there won't be that many. */
2451 make_symbol_completion_list (text)
2454 register struct symbol *sym;
2455 register struct symtab *s;
2456 register struct partial_symtab *ps;
2457 register struct minimal_symbol *msymbol;
2458 register struct objfile *objfile;
2459 register struct block *b, *surrounding_static_block = 0;
2462 struct partial_symbol *psym;
2464 text_len = strlen (text);
2465 return_val_size = 100;
2466 return_val_index = 0;
2467 return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
2468 return_val[0] = NULL;
2470 /* Look through the partial symtabs for all symbols which begin
2471 by matching TEXT. Add each one that you find to the list. */
2473 ALL_PSYMTABS (objfile, ps)
2475 /* If the psymtab's been read in we'll get it when we search
2476 through the blockvector. */
2477 if (ps->readin) continue;
2479 for (psym = objfile->global_psymbols.list + ps->globals_offset;
2480 psym < (objfile->global_psymbols.list + ps->globals_offset
2481 + ps->n_global_syms);
2484 /* If interrupted, then quit. */
2486 completion_list_add_symbol (SYMBOL_NAME (psym), text, text_len);
2489 for (psym = objfile->static_psymbols.list + ps->statics_offset;
2490 psym < (objfile->static_psymbols.list + ps->statics_offset
2491 + ps->n_static_syms);
2495 completion_list_add_symbol (SYMBOL_NAME (psym), text, text_len);
2499 /* At this point scan through the misc symbol vectors and add each
2500 symbol you find to the list. Eventually we want to ignore
2501 anything that isn't a text symbol (everything else will be
2502 handled by the psymtab code above). */
2504 ALL_MSYMBOLS (objfile, msymbol)
2507 completion_list_add_symbol (msymbol -> name, text, text_len);
2510 /* Search upwards from currently selected frame (so that we can
2511 complete on local vars. */
2513 for (b = get_selected_block (); b != NULL; b = BLOCK_SUPERBLOCK (b))
2515 if (!BLOCK_SUPERBLOCK (b))
2517 surrounding_static_block = b; /* For elmin of dups */
2520 /* Also catch fields of types defined in this places which match our
2521 text string. Only complete on types visible from current context. */
2523 for (i = 0; i < BLOCK_NSYMS (b); i++)
2525 sym = BLOCK_SYM (b, i);
2526 completion_list_add_symbol (SYMBOL_NAME (sym), text, text_len);
2527 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2529 struct type *t = SYMBOL_TYPE (sym);
2530 enum type_code c = TYPE_CODE (t);
2532 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2534 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2536 if (TYPE_FIELD_NAME (t, j))
2538 completion_list_add_symbol (TYPE_FIELD_NAME (t, j),
2547 /* Go through the symtabs and check the externs and statics for
2548 symbols which match. */
2550 ALL_SYMTABS (objfile, s)
2553 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2554 for (i = 0; i < BLOCK_NSYMS (b); i++)
2556 sym = BLOCK_SYM (b, i);
2557 completion_list_add_symbol (SYMBOL_NAME (sym), text, text_len);
2561 ALL_SYMTABS (objfile, s)
2564 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
2565 /* Don't do this block twice. */
2566 if (b == surrounding_static_block) continue;
2567 for (i = 0; i < BLOCK_NSYMS (b); i++)
2569 sym = BLOCK_SYM (b, i);
2570 completion_list_add_symbol (SYMBOL_NAME (sym), text, text_len);
2574 return (return_val);
2578 /* Find a mangled symbol that corresponds to LOOKFOR using brute force.
2579 Basically we go munging through available symbols, demangling each one,
2580 looking for a match on the demangled result. */
2583 expensive_mangler (lookfor)
2584 const char *lookfor;
2586 register struct symbol *sym;
2587 register struct symtab *s;
2588 register struct partial_symtab *ps;
2589 register struct minimal_symbol *msymbol;
2590 register struct objfile *objfile;
2591 register struct block *b, *surrounding_static_block = 0;
2593 struct partial_symbol *psym;
2596 /* Look through the partial symtabs for a symbol that matches */
2598 ALL_PSYMTABS (objfile, ps)
2600 /* If the psymtab's been read in we'll get it when we search
2601 through the blockvector. */
2602 if (ps->readin) continue;
2604 for (psym = objfile->global_psymbols.list + ps->globals_offset;
2605 psym < (objfile->global_psymbols.list + ps->globals_offset
2606 + ps->n_global_syms);
2609 QUIT; /* If interrupted, then quit. */
2610 demangled = demangle_and_match (SYMBOL_NAME (psym), lookfor,
2611 DMGL_PARAMS | DMGL_ANSI);
2612 if (demangled != NULL)
2615 return (SYMBOL_NAME (psym));
2619 for (psym = objfile->static_psymbols.list + ps->statics_offset;
2620 psym < (objfile->static_psymbols.list + ps->statics_offset
2621 + ps->n_static_syms);
2625 demangled = demangle_and_match (SYMBOL_NAME (psym), lookfor,
2626 DMGL_PARAMS | DMGL_ANSI);
2627 if (demangled != NULL)
2630 return (SYMBOL_NAME (psym));
2635 /* Scan through the misc symbol vectors looking for a match. */
2637 ALL_MSYMBOLS (objfile, msymbol)
2640 demangled = demangle_and_match (msymbol -> name, lookfor,
2641 DMGL_PARAMS | DMGL_ANSI);
2642 if (demangled != NULL)
2645 return (msymbol -> name);
2649 /* Search upwards from currently selected frame looking for a match */
2651 for (b = get_selected_block (); b; b = BLOCK_SUPERBLOCK (b))
2653 if (!BLOCK_SUPERBLOCK (b))
2654 surrounding_static_block = b; /* For elmin of dups */
2656 /* Also catch fields of types defined in this places which
2657 match our text string. Only complete on types visible
2658 from current context. */
2659 for (i = 0; i < BLOCK_NSYMS (b); i++)
2661 sym = BLOCK_SYM (b, i);
2662 demangled = demangle_and_match (SYMBOL_NAME (sym), lookfor,
2663 DMGL_PARAMS | DMGL_ANSI);
2664 if (demangled != NULL)
2667 return (SYMBOL_NAME (sym));
2669 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2671 struct type *t = SYMBOL_TYPE (sym);
2672 enum type_code c = TYPE_CODE (t);
2674 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2676 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2678 if (TYPE_FIELD_NAME (t, j))
2681 demangle_and_match (TYPE_FIELD_NAME (t, j),
2683 DMGL_PARAMS | DMGL_ANSI);
2684 if (demangled != NULL)
2687 return (TYPE_FIELD_NAME (t, j));
2696 /* Go through the symtabs and check the externs and statics for
2697 symbols which match. */
2699 ALL_SYMTABS (objfile, s)
2702 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2703 for (i = 0; i < BLOCK_NSYMS (b); i++)
2705 sym = BLOCK_SYM (b, i);
2706 demangled = demangle_and_match (SYMBOL_NAME (sym), lookfor,
2707 DMGL_PARAMS | DMGL_ANSI);
2708 if (demangled != NULL)
2711 return (SYMBOL_NAME (sym));
2716 ALL_SYMTABS (objfile, s)
2719 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
2720 /* Don't do this block twice. */
2721 if (b == surrounding_static_block) continue;
2722 for (i = 0; i < BLOCK_NSYMS (b); i++)
2724 sym = BLOCK_SYM (b, i);
2725 demangled = demangle_and_match (SYMBOL_NAME (sym), lookfor,
2726 DMGL_PARAMS | DMGL_ANSI);
2727 if (demangled != NULL)
2730 return (SYMBOL_NAME (sym));
2740 /* Add the type of the symbol sym to the type of the current
2741 function whose block we are in (assumed). The type of
2742 this current function is contained in *TYPE.
2744 This basically works as follows: When we find a function
2745 symbol (N_FUNC with a 'f' or 'F' in the symbol name), we record
2746 a pointer to its type in the global in_function_type. Every
2747 time we come across a parameter symbol ('p' in its name), then
2748 this procedure adds the name and type of that parameter
2749 to the function type pointed to by *TYPE. (Which should correspond
2750 to in_function_type if it was called correctly).
2752 Note that since we are modifying a type, the result of
2753 lookup_function_type() should be memcpy()ed before calling
2754 this. When not in strict typing mode, the expression
2755 evaluator can choose to ignore this.
2757 Assumption: All of a function's parameter symbols will
2758 appear before another function symbol is found. The parameters
2759 appear in the same order in the argument list as they do in the
2763 add_param_to_type (type,sym)
2767 int num = ++(TYPE_NFIELDS(*type));
2769 if(TYPE_NFIELDS(*type)-1)
2770 TYPE_FIELDS(*type) = (struct field *)
2771 (*current_objfile->xrealloc) ((char *)(TYPE_FIELDS(*type)),
2772 num*sizeof(struct field));
2774 TYPE_FIELDS(*type) = (struct field *)
2775 (*current_objfile->xmalloc) (num*sizeof(struct field));
2777 TYPE_FIELD_BITPOS(*type,num-1) = num-1;
2778 TYPE_FIELD_BITSIZE(*type,num-1) = 0;
2779 TYPE_FIELD_TYPE(*type,num-1) = SYMBOL_TYPE(sym);
2780 TYPE_FIELD_NAME(*type,num-1) = SYMBOL_NAME(sym);
2785 _initialize_symtab ()
2787 add_info ("variables", variables_info,
2788 "All global and static variable names, or those matching REGEXP.");
2789 add_info ("functions", functions_info,
2790 "All function names, or those matching REGEXP.");
2792 /* FIXME: This command has at least the following problems:
2793 1. It prints builtin types (in a very strange and confusing fashion).
2794 2. It doesn't print right, e.g. with
2795 typedef struct foo *FOO
2796 type_print prints "FOO" when we want to make it (in this situation)
2797 print "struct foo *".
2798 I also think "ptype" or "whatis" is more likely to be useful (but if
2799 there is much disagreement "info types" can be fixed). */
2800 add_info ("types", types_info,
2801 "All type names, or those matching REGEXP.");
2804 add_info ("methods", methods_info,
2805 "All method names, or those matching REGEXP::REGEXP.\n\
2806 If the class qualifier is omitted, it is assumed to be the current scope.\n\
2807 If the first REGEXP is omitted, then all methods matching the second REGEXP\n\
2810 add_info ("sources", sources_info,
2811 "Source files in the program.");
2813 add_com ("rbreak", no_class, rbreak_command,
2814 "Set a breakpoint for all functions matching REGEXP.");
2816 /* Initialize the one built-in type that isn't language dependent... */
2817 builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
2818 "<unknown type>", (struct objfile *) NULL);