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 find_methods PARAMS ((struct type *, char *, struct symbol **));
52 completion_list_add_name PARAMS ((char *, char *, int));
54 static struct symtabs_and_lines
55 decode_line_2 PARAMS ((struct symbol *[], int, int));
58 rbreak_command PARAMS ((char *, int));
61 types_info PARAMS ((char *, int));
64 functions_info PARAMS ((char *, int));
67 variables_info PARAMS ((char *, int));
70 sources_info PARAMS ((char *, int));
73 list_symbols PARAMS ((char *, int, int));
76 output_source_filename PARAMS ((char *, int *));
79 operator_chars PARAMS ((char *, char **));
82 find_line_common PARAMS ((struct linetable *, int, int *));
84 static struct partial_symbol *
85 lookup_partial_symbol PARAMS ((struct partial_symtab *, const char *,
86 int, enum namespace));
88 static struct symtab *
89 lookup_symtab_1 PARAMS ((char *));
93 /* The single non-language-specific builtin type */
94 struct type *builtin_type_error;
96 /* Block in which the most recently searched-for symbol was found.
97 Might be better to make this a parameter to lookup_symbol and
100 const struct block *block_found;
102 char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
104 /* While the C++ support is still in flux, issue a possibly helpful hint on
105 using the new command completion feature on single quoted demangled C++
106 symbols. Remove when loose ends are cleaned up. FIXME -fnf */
109 cplusplus_hint (name)
112 printf ("Hint: try '%s<TAB> or '%s<ESC-?>\n", name, name);
113 printf ("(Note leading single quote.)\n");
116 /* Check for a symtab of a specific name; first in symtabs, then in
117 psymtabs. *If* there is no '/' in the name, a match after a '/'
118 in the symtab filename will also work. */
120 static struct symtab *
121 lookup_symtab_1 (name)
124 register struct symtab *s;
125 register struct partial_symtab *ps;
126 register char *slash;
127 register struct objfile *objfile;
131 /* First, search for an exact match */
133 ALL_SYMTABS (objfile, s)
134 if (STREQ (name, s->filename))
137 slash = strchr (name, '/');
139 /* Now, search for a matching tail (only if name doesn't have any dirs) */
142 ALL_SYMTABS (objfile, s)
144 char *p = s -> filename;
145 char *tail = strrchr (p, '/');
154 /* Same search rules as above apply here, but now we look thru the
157 ALL_PSYMTABS (objfile, ps)
158 if (STREQ (name, ps -> filename))
162 ALL_PSYMTABS (objfile, ps)
164 char *p = ps -> filename;
165 char *tail = strrchr (p, '/');
179 error ("Internal: readin %s pst for `%s' found when no symtab found.",
180 ps -> filename, name);
182 s = PSYMTAB_TO_SYMTAB (ps);
187 /* At this point, we have located the psymtab for this file, but
188 the conversion to a symtab has failed. This usually happens
189 when we are looking up an include file. In this case,
190 PSYMTAB_TO_SYMTAB doesn't return a symtab, even though one has
191 been created. So, we need to run through the symtabs again in
192 order to find the file.
193 XXX - This is a crock, and should be fixed inside of the the
194 symbol parsing routines. */
198 /* Lookup the symbol table of a source file named NAME. Try a couple
199 of variations if the first lookup doesn't work. */
205 register struct symtab *s;
208 s = lookup_symtab_1 (name);
211 /* If name not found as specified, see if adding ".c" helps. */
213 copy = (char *) alloca (strlen (name) + 3);
216 s = lookup_symtab_1 (copy);
219 /* We didn't find anything; die. */
223 /* Lookup the partial symbol table of a source file named NAME. This
224 only returns true on an exact match (ie. this semantics are
225 different from lookup_symtab. */
227 struct partial_symtab *
228 lookup_partial_symtab (name)
231 register struct partial_symtab *pst;
232 register struct objfile *objfile;
234 ALL_PSYMTABS (objfile, pst)
236 if (STREQ (name, pst -> filename))
244 /* Demangle a GDB method stub type.
245 Note that this function is g++ specific. */
248 gdb_mangle_name (type, i, j)
252 int mangled_name_len;
254 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
255 struct fn_field *method = &f[j];
256 char *field_name = TYPE_FN_FIELDLIST_NAME (type, i);
257 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
258 char *newname = type_name_no_tag (type);
259 int is_constructor = STREQ (field_name, newname);
260 int is_destructor = is_constructor && DESTRUCTOR_PREFIX_P (physname);
261 /* Need a new type prefix. */
262 char *const_prefix = method->is_const ? "C" : "";
263 char *volatile_prefix = method->is_volatile ? "V" : "";
265 #ifndef GCC_MANGLE_BUG
266 int len = strlen (newname);
270 mangled_name = (char*) xmalloc(strlen(physname)+1);
271 strcpy(mangled_name, physname);
275 sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
276 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
281 /* Only needed for GNU-mangled names. ANSI-mangled names
282 work with the normal mechanisms. */
283 if (OPNAME_PREFIX_P (field_name))
285 char *opname = cplus_mangle_opname (field_name + 3, 0);
287 error ("No mangling for \"%s\"", field_name);
288 mangled_name_len += strlen (opname);
289 mangled_name = (char *)xmalloc (mangled_name_len);
291 strncpy (mangled_name, field_name, 3);
292 mangled_name[3] = '\0';
293 strcat (mangled_name, opname);
297 mangled_name = (char *)xmalloc (mangled_name_len);
299 mangled_name[0] = '\0';
301 strcpy (mangled_name, field_name);
303 strcat (mangled_name, buf);
304 strcat (mangled_name, newname);
314 sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
317 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
318 + strlen (buf) + strlen (physname) + 1);
320 /* Only needed for GNU-mangled names. ANSI-mangled names
321 work with the normal mechanisms. */
322 if (OPNAME_PREFIX_P (field_name))
324 opname = cplus_mangle_opname (field_name + 3, 0);
327 error ("No mangling for \"%s\"", field_name);
329 mangled_name_len += strlen (opname);
330 mangled_name = (char *) xmalloc (mangled_name_len);
332 strncpy (mangled_name, field_name, 3);
333 strcpy (mangled_name + 3, opname);
337 mangled_name = (char *) xmalloc (mangled_name_len);
340 mangled_name[0] = '\0';
344 strcpy (mangled_name, field_name);
347 strcat (mangled_name, buf);
350 strcat (mangled_name, physname);
351 return (mangled_name);
355 /* Find which partial symtab on contains PC. Return 0 if none. */
357 struct partial_symtab *
359 register CORE_ADDR pc;
361 register struct partial_symtab *pst;
362 register struct objfile *objfile;
364 ALL_PSYMTABS (objfile, pst)
366 if (pc >= pst->textlow && pc < pst->texthigh)
372 /* Find which partial symbol within a psymtab contains PC. Return 0
373 if none. Check all psymtabs if PSYMTAB is 0. */
374 struct partial_symbol *
375 find_pc_psymbol (psymtab, pc)
376 struct partial_symtab *psymtab;
379 struct partial_symbol *best, *p;
383 psymtab = find_pc_psymtab (pc);
387 best_pc = psymtab->textlow - 1;
389 for (p = psymtab->objfile->static_psymbols.list + psymtab->statics_offset;
390 (p - (psymtab->objfile->static_psymbols.list + psymtab->statics_offset)
391 < psymtab->n_static_syms);
393 if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
394 && SYMBOL_CLASS (p) == LOC_BLOCK
395 && pc >= SYMBOL_VALUE_ADDRESS (p)
396 && SYMBOL_VALUE_ADDRESS (p) > best_pc)
398 best_pc = SYMBOL_VALUE_ADDRESS (p);
401 if (best_pc == psymtab->textlow - 1)
407 /* Find the definition for a specified symbol name NAME
408 in namespace NAMESPACE, visible from lexical block BLOCK.
409 Returns the struct symbol pointer, or zero if no symbol is found.
410 If SYMTAB is non-NULL, store the symbol table in which the
411 symbol was found there, or NULL if not found.
412 C++: if IS_A_FIELD_OF_THIS is nonzero on entry, check to see if
413 NAME is a field of the current implied argument `this'. If so set
414 *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero.
415 BLOCK_FOUND is set to the block in which NAME is found (in the case of
416 a field of `this', value_of_this sets BLOCK_FOUND to the proper value.) */
419 lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
421 register const struct block *block;
422 const enum namespace namespace;
423 int *is_a_field_of_this;
424 struct symtab **symtab;
426 register struct symbol *sym;
427 register struct symtab *s;
428 register struct partial_symtab *ps;
429 struct blockvector *bv;
430 register struct objfile *objfile;
431 register struct block *b;
432 register struct minimal_symbol *msymbol;
434 extern char *gdb_completer_word_break_characters;
436 /* Search specified block and its superiors. */
440 sym = lookup_block_symbol (block, name, namespace);
446 /* Search the list of symtabs for one which contains the
447 address of the start of this block. */
448 ALL_SYMTABS (objfile, s)
450 bv = BLOCKVECTOR (s);
451 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
452 if (BLOCK_START (b) <= BLOCK_START (block)
453 && BLOCK_END (b) > BLOCK_START (block))
462 block = BLOCK_SUPERBLOCK (block);
465 /* FIXME: this code is never executed--block is always NULL at this
466 point. What is it trying to do, anyway? We already should have
467 checked the STATIC_BLOCK above (it is the superblock of top-level
468 blocks). Why is VAR_NAMESPACE special-cased? */
469 /* Don't need to mess with the psymtabs; if we have a block,
470 that file is read in. If we don't, then we deal later with
471 all the psymtab stuff that needs checking. */
472 if (namespace == VAR_NAMESPACE && block != NULL)
475 /* Find the right symtab. */
476 ALL_SYMTABS (objfile, s)
478 bv = BLOCKVECTOR (s);
479 b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
480 if (BLOCK_START (b) <= BLOCK_START (block)
481 && BLOCK_END (b) > BLOCK_START (block))
483 sym = lookup_block_symbol (b, name, VAR_NAMESPACE);
496 /* C++: If requested to do so by the caller,
497 check to see if NAME is a field of `this'. */
498 if (is_a_field_of_this)
500 struct value *v = value_of_this (0);
502 *is_a_field_of_this = 0;
503 if (v && check_field (v, name))
505 *is_a_field_of_this = 1;
512 /* Now search all global blocks. Do the symtab's first, then
513 check the psymtab's */
515 ALL_SYMTABS (objfile, s)
517 bv = BLOCKVECTOR (s);
518 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
519 sym = lookup_block_symbol (block, name, namespace);
529 /* Check for the possibility of the symbol being a global function
530 that is stored in one of the minimal symbol tables. Eventually, all
531 global symbols might be resolved in this way. */
533 if (namespace == VAR_NAMESPACE)
535 msymbol = lookup_minimal_symbol (name, (struct objfile *) NULL);
538 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
539 /* If S is NULL, there are no debug symbols for this file.
540 Skip this stuff and check for matching static symbols below. */
543 bv = BLOCKVECTOR (s);
544 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
545 sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
547 /* We kept static functions in minimal symbol table as well as
548 in static scope. We want to find them in the symbol table. */
550 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
551 sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
555 /* sym == 0 if symbol was found in the minimal symbol table
556 but not in the symtab.
557 Return 0 to use the msymbol definition of "foo_".
559 This happens for Fortran "foo_" symbols,
560 which are "foo" in the symtab.
562 This can also happen if "asm" is used to make a
563 regular symbol but not a debugging symbol, e.g.
575 ALL_PSYMTABS (objfile, ps)
577 if (!ps->readin && lookup_partial_symbol (ps, name, 1, namespace))
579 s = PSYMTAB_TO_SYMTAB(ps);
580 bv = BLOCKVECTOR (s);
581 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
582 sym = lookup_block_symbol (block, name, namespace);
584 error ("Internal: global symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
591 /* Now search all per-file blocks.
592 Not strictly correct, but more useful than an error.
593 Do the symtabs first, then check the psymtabs */
595 ALL_SYMTABS (objfile, s)
597 bv = BLOCKVECTOR (s);
598 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
599 sym = lookup_block_symbol (block, name, namespace);
609 ALL_PSYMTABS (objfile, ps)
611 if (!ps->readin && lookup_partial_symbol (ps, name, 0, namespace))
613 s = PSYMTAB_TO_SYMTAB(ps);
614 bv = BLOCKVECTOR (s);
615 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
616 sym = lookup_block_symbol (block, name, namespace);
618 error ("Internal: static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
625 /* Now search all per-file blocks for static mangled symbols.
626 Do the symtabs first, then check the psymtabs. */
628 if (namespace == VAR_NAMESPACE)
630 ALL_SYMTABS (objfile, s)
632 bv = BLOCKVECTOR (s);
633 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
634 sym = lookup_block_symbol (block, name, VAR_NAMESPACE);
644 ALL_PSYMTABS (objfile, ps)
646 if (!ps->readin && lookup_partial_symbol (ps, name, 0, VAR_NAMESPACE))
648 s = PSYMTAB_TO_SYMTAB(ps);
649 bv = BLOCKVECTOR (s);
650 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
651 sym = lookup_block_symbol (block, name, VAR_NAMESPACE);
653 error ("Internal: mangled static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
666 /* Look, in partial_symtab PST, for symbol NAME. Check the global
667 symbols if GLOBAL, the static symbols if not */
669 static struct partial_symbol *
670 lookup_partial_symbol (pst, name, global, namespace)
671 struct partial_symtab *pst;
674 enum namespace namespace;
676 struct partial_symbol *start, *psym;
677 struct partial_symbol *top, *bottom, *center;
678 int length = (global ? pst->n_global_syms : pst->n_static_syms);
679 int do_linear_search = 1;
687 pst->objfile->global_psymbols.list + pst->globals_offset :
688 pst->objfile->static_psymbols.list + pst->statics_offset );
690 if (global) /* This means we can use a binary search. */
692 do_linear_search = 0;
694 /* Binary search. This search is guaranteed to end with center
695 pointing at the earliest partial symbol with the correct
696 name. At that point *all* partial symbols with that name
697 will be checked against the correct namespace. */
700 top = start + length - 1;
703 center = bottom + (top - bottom) / 2;
704 assert (center < top);
705 if (!do_linear_search && SYMBOL_LANGUAGE (center) == language_cplus)
707 do_linear_search = 1;
709 if (STRCMP (SYMBOL_NAME (center), name) >= 0)
718 assert (top == bottom);
719 while (STREQ (SYMBOL_NAME (top), name))
721 if (SYMBOL_NAMESPACE (top) == namespace)
729 /* Can't use a binary search or else we found during the binary search that
730 we should also do a linear search. */
732 if (do_linear_search)
734 for (psym = start; psym < start + length; psym++)
736 if (namespace == SYMBOL_NAMESPACE (psym))
738 if (SYMBOL_MATCHES_NAME (psym, name))
749 /* Find the psymtab containing main(). */
750 /* FIXME: What about languages without main() or specially linked
751 executables that have no main() ? */
753 struct partial_symtab *
756 register struct partial_symtab *pst;
757 register struct objfile *objfile;
759 ALL_PSYMTABS (objfile, pst)
761 if (lookup_partial_symbol (pst, "main", 1, VAR_NAMESPACE))
769 /* Search BLOCK for symbol NAME in NAMESPACE.
771 Note that if NAME is the demangled form of a C++ symbol, we will fail
772 to find a match during the binary search of the non-encoded names, but
773 for now we don't worry about the slight inefficiency of looking for
774 a match we'll never find, since it will go pretty quick. Once the
775 binary search terminates, we drop through and do a straight linear
776 search on the symbols. Each symbol which is marked as being a C++
777 symbol (language_cplus set) has both the encoded and non-encoded names
778 tested for a match. */
781 lookup_block_symbol (block, name, namespace)
782 register const struct block *block;
784 const enum namespace namespace;
786 register int bot, top, inc;
787 register struct symbol *sym;
788 register struct symbol *sym_found = NULL;
789 register int do_linear_search = 1;
791 /* If the blocks's symbols were sorted, start with a binary search. */
793 if (BLOCK_SHOULD_SORT (block))
795 /* Reset the linear search flag so if the binary search fails, we
796 won't do the linear search once unless we find some reason to
797 do so, such as finding a C++ symbol during the binary search.
798 Note that for C++ modules, ALL the symbols in a block should
799 end up marked as C++ symbols. */
801 do_linear_search = 0;
802 top = BLOCK_NSYMS (block);
805 /* Advance BOT to not far before the first symbol whose name is NAME. */
809 inc = (top - bot + 1);
810 /* No need to keep binary searching for the last few bits worth. */
815 inc = (inc >> 1) + bot;
816 sym = BLOCK_SYM (block, inc);
817 if (!do_linear_search && SYMBOL_LANGUAGE (sym) == language_cplus)
819 do_linear_search = 1;
821 if (SYMBOL_NAME (sym)[0] < name[0])
825 else if (SYMBOL_NAME (sym)[0] > name[0])
829 else if (STRCMP (SYMBOL_NAME (sym), name) < 0)
839 /* Now scan forward until we run out of symbols, find one whose name is
840 greater than NAME, or find one we want. If there is more than one
841 symbol with the right name and namespace, we return the first one.
842 dbxread.c is careful to make sure that if one is a register then it
845 top = BLOCK_NSYMS (block);
848 sym = BLOCK_SYM (block, bot);
849 inc = SYMBOL_NAME (sym)[0] - name[0];
852 inc = STRCMP (SYMBOL_NAME (sym), name);
854 if (inc == 0 && SYMBOL_NAMESPACE (sym) == namespace)
866 /* Here if block isn't sorted, or we fail to find a match during the
867 binary search above. If during the binary search above, we find a
868 symbol which is a C++ symbol, then we have re-enabled the linear
869 search flag which was reset when starting the binary search.
871 This loop is equivalent to the loop above, but hacked greatly for speed.
873 Note that parameter symbols do not always show up last in the
874 list; this loop makes sure to take anything else other than
875 parameter symbols first; it only uses parameter symbols as a
876 last resort. Note that this only takes up extra computation
879 if (do_linear_search)
881 top = BLOCK_NSYMS (block);
885 sym = BLOCK_SYM (block, bot);
886 if (SYMBOL_NAMESPACE (sym) == namespace &&
887 SYMBOL_MATCHES_NAME (sym, name))
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)
901 return (sym_found); /* Will be NULL if not found. */
905 /* Return the symbol for the function which contains a specified
906 lexical block, described by a struct block BL. */
912 while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
913 bl = BLOCK_SUPERBLOCK (bl);
915 return BLOCK_FUNCTION (bl);
918 /* Find the symtab associated with PC. Look through the psymtabs and read in
919 another symtab if necessary. */
923 register CORE_ADDR pc;
925 register struct block *b;
926 struct blockvector *bv;
927 register struct symtab *s = NULL;
928 register struct symtab *best_s = NULL;
929 register struct partial_symtab *ps;
930 register struct objfile *objfile;
934 /* Search all symtabs for one whose file contains our pc */
936 ALL_SYMTABS (objfile, s)
938 bv = BLOCKVECTOR (s);
939 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
940 if (BLOCK_START (b) <= pc
941 && BLOCK_END (b) > pc
943 || BLOCK_END (b) - BLOCK_START (b) < distance))
945 distance = BLOCK_END (b) - BLOCK_START (b);
954 ps = find_pc_psymtab (pc);
958 printf_filtered ("(Internal error: pc 0x%x in read in psymtab, but not in symtab.)\n", pc);
959 s = PSYMTAB_TO_SYMTAB (ps);
964 /* Find the source file and line number for a given PC value.
965 Return a structure containing a symtab pointer, a line number,
966 and a pc range for the entire source line.
967 The value's .pc field is NOT the specified pc.
968 NOTCURRENT nonzero means, if specified pc is on a line boundary,
969 use the line that ends there. Otherwise, in that case, the line
970 that begins there is used. */
972 /* The big complication here is that a line may start in one file, and end just
973 before the start of another file. This usually occurs when you #include
974 code in the middle of a subroutine. To properly find the end of a line's PC
975 range, we must search all symtabs associated with this compilation unit, and
976 find the one whose first PC is closer than that of the next line in this
979 FIXME: We used to complain here about zero length or negative length line
980 tables, but there are two problems with this: (1) some symtabs may not have
981 any line numbers due to gcc -g1 compilation, and (2) this function is called
982 during single stepping, when we don't own the terminal and thus can't
983 produce any output. One solution might be to implement a mechanism whereby
984 complaints can be queued until we regain control of the terminal. -fnf
987 struct symtab_and_line
988 find_pc_line (pc, notcurrent)
993 register struct linetable *l;
996 register struct linetable_entry *item;
997 struct symtab_and_line val;
998 struct blockvector *bv;
1000 /* Info on best line seen so far, and where it starts, and its file. */
1002 struct linetable_entry *best = NULL;
1003 CORE_ADDR best_end = 0;
1004 struct symtab *best_symtab = 0;
1006 /* Store here the first line number
1007 of a file which contains the line at the smallest pc after PC.
1008 If we don't find a line whose range contains PC,
1009 we will use a line one less than this,
1010 with a range from the start of that file to the first line's pc. */
1011 struct linetable_entry *alt = NULL;
1012 struct symtab *alt_symtab = 0;
1014 /* Info on best line seen in this file. */
1016 struct linetable_entry *prev;
1018 /* If this pc is not from the current frame,
1019 it is the address of the end of a call instruction.
1020 Quite likely that is the start of the following statement.
1021 But what we want is the statement containing the instruction.
1022 Fudge the pc to make sure we get that. */
1024 if (notcurrent) pc -= 1;
1026 s = find_pc_symtab (pc);
1036 bv = BLOCKVECTOR (s);
1038 /* Look at all the symtabs that share this blockvector.
1039 They all have the same apriori range, that we found was right;
1040 but they have different line tables. */
1042 for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1044 /* Find the best line in this symtab. */
1049 if (len <= 0) /* See FIXME above. */
1055 item = l->item; /* Get first line info */
1057 /* Is this file's first line closer than the first lines of other files?
1058 If so, record this file, and its first line, as best alternate. */
1059 if (item->pc > pc && (!alt || item->pc < alt->pc))
1065 for (i = 0; i < len; i++, item++)
1067 /* Return the last line that did not start after PC. */
1074 /* At this point, prev points at the line whose start addr is <= pc, and
1075 item points at the next line. If we ran off the end of the linetable
1076 (pc >= start of the last line), then prev == item. If pc < start of
1077 the first line, prev will not be set. */
1079 /* Is this file's best line closer than the best in the other files?
1080 If so, record this file, and its best line, as best so far. */
1082 if (prev && (!best || prev->pc > best->pc))
1086 /* If another line is in the linetable, and its PC is closer
1087 than the best_end we currently have, take it as best_end. */
1088 if (i < len && (best_end == 0 || best_end > item->pc))
1089 best_end = item->pc;
1096 { /* If we didn't find any line # info, just
1105 val.symtab = alt_symtab;
1106 val.line = alt->line - 1;
1107 val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1113 val.symtab = best_symtab;
1114 val.line = best->line;
1116 if (best_end && (!alt || best_end < alt->pc))
1121 val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1126 /* Find the PC value for a given source file and line number.
1127 Returns zero for invalid line number.
1128 The source file is specified with a struct symtab. */
1131 find_line_pc (symtab, line)
1132 struct symtab *symtab;
1135 register struct linetable *l;
1141 l = LINETABLE (symtab);
1142 ind = find_line_common(l, line, &dummy);
1143 return (ind >= 0) ? l->item[ind].pc : 0;
1146 /* Find the range of pc values in a line.
1147 Store the starting pc of the line into *STARTPTR
1148 and the ending pc (start of next line) into *ENDPTR.
1149 Returns 1 to indicate success.
1150 Returns 0 if could not find the specified line. */
1153 find_line_pc_range (symtab, thisline, startptr, endptr)
1154 struct symtab *symtab;
1156 CORE_ADDR *startptr, *endptr;
1158 register struct linetable *l;
1160 int exact_match; /* did we get an exact linenumber match */
1165 l = LINETABLE (symtab);
1166 ind = find_line_common (l, thisline, &exact_match);
1169 *startptr = l->item[ind].pc;
1170 /* If we have not seen an entry for the specified line,
1171 assume that means the specified line has zero bytes. */
1172 if (!exact_match || ind == l->nitems-1)
1173 *endptr = *startptr;
1175 /* Perhaps the following entry is for the following line.
1176 It's worth a try. */
1177 if (ind+1 < l->nitems
1178 && l->item[ind+1].line == thisline + 1)
1179 *endptr = l->item[ind+1].pc;
1181 *endptr = find_line_pc (symtab, thisline+1);
1188 /* Given a line table and a line number, return the index into the line
1189 table for the pc of the nearest line whose number is >= the specified one.
1190 Return -1 if none is found. The value is >= 0 if it is an index.
1192 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
1195 find_line_common (l, lineno, exact_match)
1196 register struct linetable *l;
1197 register int lineno;
1203 /* BEST is the smallest linenumber > LINENO so far seen,
1204 or 0 if none has been seen so far.
1205 BEST_INDEX identifies the item for it. */
1207 int best_index = -1;
1216 for (i = 0; i < len; i++)
1218 register struct linetable_entry *item = &(l->item[i]);
1220 if (item->line == lineno)
1226 if (item->line > lineno && (best == 0 || item->line < best))
1233 /* If we got here, we didn't get an exact match. */
1240 find_pc_line_pc_range (pc, startptr, endptr)
1242 CORE_ADDR *startptr, *endptr;
1244 struct symtab_and_line sal;
1245 sal = find_pc_line (pc, 0);
1248 return sal.symtab != 0;
1251 /* If P is of the form "operator[ \t]+..." where `...' is
1252 some legitimate operator text, return a pointer to the
1253 beginning of the substring of the operator text.
1254 Otherwise, return "". */
1256 operator_chars (p, end)
1261 if (strncmp (p, "operator", 8))
1265 /* Don't get faked out by `operator' being part of a longer
1267 if (isalpha(*p) || *p == '_' || *p == '$' || *p == '\0')
1270 /* Allow some whitespace between `operator' and the operator symbol. */
1271 while (*p == ' ' || *p == '\t')
1274 /* Recognize 'operator TYPENAME'. */
1276 if (isalpha(*p) || *p == '_' || *p == '$')
1278 register char *q = p+1;
1279 while (isalnum(*q) || *q == '_' || *q == '$')
1304 if (p[1] == '=' || p[1] == p[0])
1315 error ("`operator ()' must be specified without whitespace in `()'");
1320 error ("`operator ?:' must be specified without whitespace in `?:'");
1325 error ("`operator []' must be specified without whitespace in `[]'");
1329 error ("`operator %s' not supported", p);
1336 /* Recursive helper function for decode_line_1.
1337 * Look for methods named NAME in type T.
1338 * Return number of matches.
1339 * Put matches in SYM_ARR (which better be big enough!).
1340 * These allocations seem to define "big enough":
1341 * sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1342 * Note that this function is g++ specific.
1346 find_methods (t, name, sym_arr)
1349 struct symbol **sym_arr;
1353 struct symbol *sym_class;
1354 char *class_name = type_name_no_tag (t);
1355 /* Ignore this class if it doesn't have a name.
1356 This prevents core dumps, but is just a workaround
1357 because we might not find the function in
1358 certain cases, such as
1359 struct D {virtual int f();}
1360 struct C : D {virtual int g();}
1361 (in this case g++ 1.35.1- does not put out a name
1362 for D as such, it defines type 19 (for example) in
1363 the same stab as C, and then does a
1364 .stabs "D:T19" and a .stabs "D:t19".
1366 "break C::f" should not be looking for field f in
1368 but just for the field f in the baseclasses of C
1369 (no matter what their names).
1371 However, I don't know how to replace the code below
1372 that depends on knowing the name of D. */
1374 && (sym_class = lookup_symbol (class_name,
1375 (struct block *)NULL,
1378 (struct symtab **)NULL)))
1381 t = SYMBOL_TYPE (sym_class);
1382 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1383 method_counter >= 0;
1387 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, method_counter);
1389 char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1390 if (STREQ (name, method_name))
1391 /* Find all the fields with that name. */
1392 for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
1397 if (TYPE_FN_FIELD_STUB (f, field_counter))
1398 check_stub_method (t, method_counter, field_counter);
1399 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1400 /* Destructor is handled by caller, dont add it to the list */
1401 if (DESTRUCTOR_PREFIX_P (phys_name))
1403 sym_arr[i1] = lookup_symbol (phys_name,
1404 SYMBOL_BLOCK_VALUE (sym_class),
1407 (struct symtab **) NULL);
1408 if (sym_arr[i1]) i1++;
1411 fputs_filtered("(Cannot find method ", stdout);
1412 fprintf_symbol_filtered (stdout, phys_name,
1413 language_cplus, DMGL_PARAMS);
1414 fputs_filtered(" - possibly inlined.)\n", stdout);
1419 /* Only search baseclasses if there is no match yet,
1420 * since names in derived classes override those in baseclasses.
1424 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1425 i1 += find_methods(TYPE_BASECLASS(t, ibase), name,
1430 /* Parse a string that specifies a line number.
1431 Pass the address of a char * variable; that variable will be
1432 advanced over the characters actually parsed.
1436 LINENUM -- that line number in current file. PC returned is 0.
1437 FILE:LINENUM -- that line in that file. PC returned is 0.
1438 FUNCTION -- line number of openbrace of that function.
1439 PC returned is the start of the function.
1440 VARIABLE -- line number of definition of that variable.
1442 FILE:FUNCTION -- likewise, but prefer functions in that file.
1443 *EXPR -- line in which address EXPR appears.
1445 FUNCTION may be an undebuggable function found in minimal symbol table.
1447 If the argument FUNFIRSTLINE is nonzero, we want the first line
1448 of real code inside a function when a function is specified.
1450 DEFAULT_SYMTAB specifies the file to use if none is specified.
1451 It defaults to current_source_symtab.
1452 DEFAULT_LINE specifies the line number to use for relative
1453 line numbers (that start with signs). Defaults to current_source_line.
1455 Note that it is possible to return zero for the symtab
1456 if no file is validly specified. Callers must check that.
1457 Also, the line number returned may be invalid. */
1459 struct symtabs_and_lines
1460 decode_line_1 (argptr, funfirstline, default_symtab, default_line)
1463 struct symtab *default_symtab;
1466 struct symtabs_and_lines values;
1467 #ifdef HPPA_COMPILER_BUG
1468 /* FIXME: The native HP 9000/700 compiler has a bug which appears
1469 when optimizing this file with target i960-vxworks. I haven't
1470 been able to construct a simple test case. The problem is that
1471 in the second call to SKIP_PROLOGUE below, the compiler somehow
1472 does not realize that the statement val = find_pc_line (...) will
1473 change the values of the fields of val. It extracts the elements
1474 into registers at the top of the block, and does not update the
1475 registers after the call to find_pc_line. You can check this by
1476 inserting a printf at the end of find_pc_line to show what values
1477 it is returning for val.pc and val.end and another printf after
1478 the call to see what values the function actually got (remember,
1479 this is compiling with cc -O, with this patch removed). You can
1480 also examine the assembly listing: search for the second call to
1481 skip_prologue; the LDO statement before the next call to
1482 find_pc_line loads the address of the structure which
1483 find_pc_line will return; if there is a LDW just before the LDO,
1484 which fetches an element of the structure, then the compiler
1487 Setting val to volatile avoids the problem. We must undef
1488 volatile, because the HPPA native compiler does not define
1489 __STDC__, although it does understand volatile, and so volatile
1490 will have been defined away in defs.h. */
1492 volatile struct symtab_and_line val;
1493 #define volatile /*nothing*/
1495 struct symtab_and_line val;
1497 register char *p, *p1;
1499 register struct symtab *s;
1501 register struct symbol *sym;
1502 /* The symtab that SYM was found in. */
1503 struct symtab *sym_symtab;
1505 register CORE_ADDR pc;
1506 register struct minimal_symbol *msymbol;
1508 struct symbol *sym_class;
1511 struct symbol **sym_arr;
1513 char *saved_arg = *argptr;
1514 extern char *gdb_completer_quote_characters;
1516 /* Defaults have defaults. */
1518 if (default_symtab == 0)
1520 default_symtab = current_source_symtab;
1521 default_line = current_source_line;
1524 /* See if arg is *PC */
1526 if (**argptr == '*')
1528 if (**argptr == '*')
1532 pc = parse_and_eval_address_1 (argptr);
1533 values.sals = (struct symtab_and_line *)
1534 xmalloc (sizeof (struct symtab_and_line));
1536 values.sals[0] = find_pc_line (pc, 0);
1537 values.sals[0].pc = pc;
1541 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
1544 is_quoted = (strchr (gdb_completer_quote_characters, **argptr) != NULL);
1546 for (p = *argptr; *p; p++)
1548 if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
1551 while (p[0] == ' ' || p[0] == '\t') p++;
1553 if ((p[0] == ':') && !is_quoted)
1559 /* Extract the class name. */
1561 while (p != *argptr && p[-1] == ' ') --p;
1562 copy = (char *) alloca (p - *argptr + 1);
1563 memcpy (copy, *argptr, p - *argptr);
1564 copy[p - *argptr] = 0;
1566 /* Discard the class name from the arg. */
1568 while (*p == ' ' || *p == '\t') p++;
1571 sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
1572 (struct symtab **)NULL);
1575 ( TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_STRUCT
1576 || TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_UNION))
1578 /* Arg token is not digits => try it as a function name
1579 Find the next token (everything up to end or next whitespace). */
1581 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
1582 q = operator_chars (*argptr, &q1);
1587 char *tmp = alloca (q1 - q + 1);
1588 memcpy (tmp, q, q1 - q);
1590 opname = cplus_mangle_opname (tmp, DMGL_ANSI);
1593 warning ("no mangling for \"%s\"", tmp);
1594 cplusplus_hint (saved_arg);
1595 return_to_top_level ();
1597 copy = (char*) alloca (3 + strlen(opname));
1598 sprintf (copy, "__%s", opname);
1603 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
1604 memcpy (copy, *argptr, p - *argptr);
1605 copy[p - *argptr] = '\0';
1608 /* no line number may be specified */
1609 while (*p == ' ' || *p == '\t') p++;
1613 i1 = 0; /* counter for the symbol array */
1614 t = SYMBOL_TYPE (sym_class);
1615 sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1617 if (destructor_name_p (copy, t))
1619 /* destructors are a special case. */
1620 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, 0);
1621 int len = TYPE_FN_FIELDLIST_LENGTH (t, 0) - 1;
1622 /* gcc 1.x puts destructor in last field,
1623 gcc 2.x puts destructor in first field. */
1624 char *phys_name = TYPE_FN_FIELD_PHYSNAME (f, len);
1625 if (!DESTRUCTOR_PREFIX_P (phys_name))
1627 phys_name = TYPE_FN_FIELD_PHYSNAME (f, 0);
1628 if (!DESTRUCTOR_PREFIX_P (phys_name))
1632 lookup_symbol (phys_name, SYMBOL_BLOCK_VALUE (sym_class),
1633 VAR_NAMESPACE, 0, (struct symtab **)NULL);
1634 if (sym_arr[i1]) i1++;
1637 i1 = find_methods (t, copy, sym_arr);
1640 /* There is exactly one field with that name. */
1643 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1645 /* Arg is the name of a function */
1646 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1649 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1651 values.sals[0] = find_pc_line (pc, 0);
1652 values.sals[0].pc = (values.sals[0].end && values.sals[0].pc != pc) ? values.sals[0].end : pc;
1662 /* There is more than one field with that name
1663 (overloaded). Ask the user which one to use. */
1664 return decode_line_2 (sym_arr, i1, funfirstline);
1670 if (OPNAME_PREFIX_P (copy))
1672 tmp = (char *)alloca (strlen (copy+3) + 9);
1673 strcpy (tmp, "operator ");
1674 strcat (tmp, copy+3);
1679 warning ("the class `%s' does not have destructor defined",
1680 SYMBOL_SOURCE_NAME(sym_class));
1682 warning ("the class %s does not have any method named %s",
1683 SYMBOL_SOURCE_NAME(sym_class), tmp);
1684 cplusplus_hint (saved_arg);
1685 return_to_top_level ();
1690 /* The quotes are important if copy is empty. */
1691 warning ("can't find class, struct, or union named \"%s\"",
1693 cplusplus_hint (saved_arg);
1694 return_to_top_level ();
1700 /* Extract the file name. */
1702 while (p != *argptr && p[-1] == ' ') --p;
1703 copy = (char *) alloca (p - *argptr + 1);
1704 memcpy (copy, *argptr, p - *argptr);
1705 copy[p - *argptr] = 0;
1707 /* Find that file's data. */
1708 s = lookup_symtab (copy);
1711 if (!have_full_symbols () && !have_partial_symbols ())
1712 error (no_symtab_msg);
1713 error ("No source file named %s.", copy);
1716 /* Discard the file name from the arg. */
1718 while (*p == ' ' || *p == '\t') p++;
1722 /* S is specified file's symtab, or 0 if no file specified.
1723 arg no longer contains the file name. */
1725 /* Check whether arg is all digits (and sign) */
1728 if (*p == '-' || *p == '+') p++;
1729 while (*p >= '0' && *p <= '9')
1732 if (p != *argptr && (*p == 0 || *p == ' ' || *p == '\t' || *p == ','))
1734 /* We found a token consisting of all digits -- at least one digit. */
1735 enum sign {none, plus, minus} sign = none;
1737 /* This is where we need to make sure that we have good defaults.
1738 We must guarantee that this section of code is never executed
1739 when we are called with just a function name, since
1740 select_source_symtab calls us with such an argument */
1742 if (s == 0 && default_symtab == 0)
1744 select_source_symtab (0);
1745 default_symtab = current_source_symtab;
1746 default_line = current_source_line;
1749 if (**argptr == '+')
1750 sign = plus, (*argptr)++;
1751 else if (**argptr == '-')
1752 sign = minus, (*argptr)++;
1753 val.line = atoi (*argptr);
1760 val.line = default_line + val.line;
1766 val.line = default_line - val.line;
1771 break; /* No need to adjust val.line. */
1774 while (*p == ' ' || *p == '\t') p++;
1780 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1781 values.sals[0] = val;
1786 /* Arg token is not digits => try it as a variable name
1787 Find the next token (everything up to end or next whitespace). */
1789 p = skip_quoted (*argptr);
1790 copy = (char *) alloca (p - *argptr + 1);
1791 memcpy (copy, *argptr, p - *argptr);
1792 copy[p - *argptr] = '\0';
1793 if ((copy[0] == copy [p - *argptr - 1])
1794 && strchr (gdb_completer_quote_characters, copy[0]) != NULL)
1797 copy [p - *argptr - 1] = '\0';
1800 while (*p == ' ' || *p == '\t') p++;
1803 /* Look up that token as a variable.
1804 If file specified, use that file's per-file block to start with. */
1806 sym = lookup_symbol (copy,
1807 (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
1808 : get_selected_block ()),
1809 VAR_NAMESPACE, 0, &sym_symtab);
1813 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
1815 /* Arg is the name of a function */
1816 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1819 val = find_pc_line (pc, 0);
1820 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
1821 /* Convex: no need to suppress code on first line, if any */
1824 /* If SKIP_PROLOGUE left us in mid-line, and the next line is still
1825 part of the same function:
1826 advance to next line,
1827 recalculate its line number (might not be N+1). */
1828 if (val.pc != pc && val.end &&
1829 lookup_minimal_symbol_by_pc (pc) == lookup_minimal_symbol_by_pc (val.end)) {
1830 pc = val.end; /* First pc of next line */
1831 val = find_pc_line (pc, 0);
1835 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1836 values.sals[0] = val;
1839 /* I think this is always the same as the line that
1840 we calculate above, but the general principle is
1841 "trust the symbols more than stuff like
1843 if (SYMBOL_LINE (sym) != 0)
1844 values.sals[0].line = SYMBOL_LINE (sym);
1848 else if (SYMBOL_LINE (sym) != 0)
1850 /* We know its line number. */
1851 values.sals = (struct symtab_and_line *)
1852 xmalloc (sizeof (struct symtab_and_line));
1854 memset (&values.sals[0], 0, sizeof (values.sals[0]));
1855 values.sals[0].symtab = sym_symtab;
1856 values.sals[0].line = SYMBOL_LINE (sym);
1860 /* This can happen if it is compiled with a compiler which doesn't
1861 put out line numbers for variables. */
1862 error ("Line number not known for symbol \"%s\"", copy);
1865 msymbol = lookup_minimal_symbol (copy, (struct objfile *) NULL);
1866 if (msymbol != NULL)
1870 val.pc = SYMBOL_VALUE_ADDRESS (msymbol) + FUNCTION_START_OFFSET;
1872 SKIP_PROLOGUE (val.pc);
1873 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1874 values.sals[0] = val;
1879 if (!have_full_symbols () &&
1880 !have_partial_symbols () && !have_minimal_symbols ())
1881 error (no_symtab_msg);
1883 error ("Function \"%s\" not defined.", copy);
1884 return values; /* for lint */
1887 struct symtabs_and_lines
1888 decode_line_spec (string, funfirstline)
1892 struct symtabs_and_lines sals;
1894 error ("Empty line specification.");
1895 sals = decode_line_1 (&string, funfirstline,
1896 current_source_symtab, current_source_line);
1898 error ("Junk at end of line specification: %s", string);
1902 /* Given a list of NELTS symbols in sym_arr, return a list of lines to
1903 operate on (ask user if necessary). */
1905 static struct symtabs_and_lines
1906 decode_line_2 (sym_arr, nelts, funfirstline)
1907 struct symbol *sym_arr[];
1911 struct symtabs_and_lines values, return_values;
1912 register CORE_ADDR pc;
1918 values.sals = (struct symtab_and_line *) alloca (nelts * sizeof(struct symtab_and_line));
1919 return_values.sals = (struct symtab_and_line *) xmalloc (nelts * sizeof(struct symtab_and_line));
1922 printf("[0] cancel\n[1] all\n");
1925 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
1927 /* Arg is the name of a function */
1928 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym_arr[i]))
1929 + FUNCTION_START_OFFSET;
1932 values.sals[i] = find_pc_line (pc, 0);
1933 values.sals[i].pc = (values.sals[i].end && values.sals[i].pc != pc) ?
1934 values.sals[i].end : pc;
1935 printf("[%d] %s at %s:%d\n", (i+2), SYMBOL_SOURCE_NAME (sym_arr[i]),
1936 values.sals[i].symtab->filename, values.sals[i].line);
1938 else printf ("?HERE\n");
1942 if ((prompt = getenv ("PS2")) == NULL)
1946 printf("%s ",prompt);
1949 args = command_line_input ((char *) NULL, 0);
1952 error_no_arg ("one or more choice numbers");
1960 while (*arg1 >= '0' && *arg1 <= '9') arg1++;
1961 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
1962 error ("Arguments must be choice numbers.");
1967 error ("cancelled");
1970 memcpy (return_values.sals, values.sals,
1971 (nelts * sizeof(struct symtab_and_line)));
1972 return_values.nelts = nelts;
1973 return return_values;
1976 if (num > nelts + 2)
1978 printf ("No choice number %d.\n", num);
1983 if (values.sals[num].pc)
1985 return_values.sals[i++] = values.sals[num];
1986 values.sals[num].pc = 0;
1990 printf ("duplicate request for %d ignored.\n", num);
1995 while (*args == ' ' || *args == '\t') args++;
1997 return_values.nelts = i;
1998 return return_values;
2002 /* Slave routine for sources_info. Force line breaks at ,'s.
2003 NAME is the name to print and *FIRST is nonzero if this is the first
2004 name printed. Set *FIRST to zero. */
2006 output_source_filename (name, first)
2010 /* Table of files printed so far. Since a single source file can
2011 result in several partial symbol tables, we need to avoid printing
2012 it more than once. Note: if some of the psymtabs are read in and
2013 some are not, it gets printed both under "Source files for which
2014 symbols have been read" and "Source files for which symbols will
2015 be read in on demand". I consider this a reasonable way to deal
2016 with the situation. I'm not sure whether this can also happen for
2017 symtabs; it doesn't hurt to check. */
2018 static char **tab = NULL;
2019 /* Allocated size of tab in elements.
2020 Start with one 256-byte block (when using GNU malloc.c).
2021 24 is the malloc overhead when range checking is in effect. */
2022 static int tab_alloc_size = (256 - 24) / sizeof (char *);
2023 /* Current size of tab in elements. */
2024 static int tab_cur_size;
2031 tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
2035 /* Is NAME in tab? */
2036 for (p = tab; p < tab + tab_cur_size; p++)
2037 if (STREQ (*p, name))
2038 /* Yes; don't print it again. */
2040 /* No; add it to tab. */
2041 if (tab_cur_size == tab_alloc_size)
2043 tab_alloc_size *= 2;
2044 tab = (char **) xrealloc ((char *) tab, tab_alloc_size * sizeof (*tab));
2046 tab[tab_cur_size++] = name;
2054 printf_filtered (", ");
2058 fputs_filtered (name, stdout);
2062 sources_info (ignore, from_tty)
2066 register struct symtab *s;
2067 register struct partial_symtab *ps;
2068 register struct objfile *objfile;
2071 if (!have_full_symbols () && !have_partial_symbols ())
2073 error (no_symtab_msg);
2076 printf_filtered ("Source files for which symbols have been read in:\n\n");
2079 ALL_SYMTABS (objfile, s)
2081 output_source_filename (s -> filename, &first);
2083 printf_filtered ("\n\n");
2085 printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2088 ALL_PSYMTABS (objfile, ps)
2092 output_source_filename (ps -> filename, &first);
2095 printf_filtered ("\n");
2098 /* List all symbols (if REGEXP is NULL) or all symbols matching REGEXP.
2099 If CLASS is zero, list all symbols except functions, type names, and
2101 If CLASS is 1, list only functions.
2102 If CLASS is 2, list only type names.
2103 If CLASS is 3, list only method names.
2105 BPT is non-zero if we should set a breakpoint at the functions
2109 list_symbols (regexp, class, bpt)
2114 register struct symtab *s;
2115 register struct partial_symtab *ps;
2116 register struct blockvector *bv;
2117 struct blockvector *prev_bv = 0;
2118 register struct block *b;
2120 register struct symbol *sym;
2121 struct partial_symbol *psym;
2122 struct objfile *objfile;
2123 struct minimal_symbol *msymbol;
2125 static char *classnames[]
2126 = {"variable", "function", "type", "method"};
2127 int found_in_file = 0;
2129 static enum minimal_symbol_type types[]
2130 = {mst_data, mst_text, mst_abs, mst_unknown};
2131 static enum minimal_symbol_type types2[]
2132 = {mst_bss, mst_text, mst_abs, mst_unknown};
2133 enum minimal_symbol_type ourtype = types[class];
2134 enum minimal_symbol_type ourtype2 = types2[class];
2138 /* Make sure spacing is right for C++ operators.
2139 This is just a courtesy to make the matching less sensitive
2140 to how many spaces the user leaves between 'operator'
2141 and <TYPENAME> or <OPERATOR>. */
2143 char *opname = operator_chars (regexp, &opend);
2146 int fix = -1; /* -1 means ok; otherwise number of spaces needed. */
2147 if (isalpha(*opname) || *opname == '_' || *opname == '$')
2149 /* There should 1 space between 'operator' and 'TYPENAME'. */
2150 if (opname[-1] != ' ' || opname[-2] == ' ')
2155 /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2156 if (opname[-1] == ' ')
2159 /* If wrong number of spaces, fix it. */
2162 char *tmp = (char*) alloca(opend-opname+10);
2163 sprintf(tmp, "operator%.*s%s", fix, " ", opname);
2168 if (0 != (val = re_comp (regexp)))
2169 error ("Invalid regexp (%s): %s", val, regexp);
2172 /* Search through the partial symtabs *first* for all symbols
2173 matching the regexp. That way we don't have to reproduce all of
2174 the machinery below. */
2176 ALL_PSYMTABS (objfile, ps)
2178 struct partial_symbol *bound, *gbound, *sbound;
2181 if (ps->readin) continue;
2183 gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2184 sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2187 /* Go through all of the symbols stored in a partial
2188 symtab in one loop. */
2189 psym = objfile->global_psymbols.list + ps->globals_offset;
2194 if (bound == gbound && ps->n_static_syms != 0)
2196 psym = objfile->static_psymbols.list + ps->statics_offset;
2207 /* If it would match (logic taken from loop below)
2208 load the file and go on to the next one */
2209 if ((regexp == NULL || SYMBOL_MATCHES_REGEXP (psym))
2210 && ((class == 0 && SYMBOL_CLASS (psym) != LOC_TYPEDEF
2211 && SYMBOL_CLASS (psym) != LOC_BLOCK)
2212 || (class == 1 && SYMBOL_CLASS (psym) == LOC_BLOCK)
2213 || (class == 2 && SYMBOL_CLASS (psym) == LOC_TYPEDEF)
2214 || (class == 3 && SYMBOL_CLASS (psym) == LOC_BLOCK)))
2216 PSYMTAB_TO_SYMTAB(ps);
2224 /* Here, we search through the minimal symbol tables for functions that
2225 match, and call find_pc_symtab on them to force their symbols to
2226 be read. The symbol will then be found during the scan of symtabs
2227 below. If find_pc_symtab fails, set found_misc so that we will
2228 rescan to print any matching symbols without debug info. */
2232 ALL_MSYMBOLS (objfile, msymbol)
2234 if (MSYMBOL_TYPE (msymbol) == ourtype ||
2235 MSYMBOL_TYPE (msymbol) == ourtype2)
2237 if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
2239 if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
2248 /* Printout here so as to get after the "Reading in symbols"
2249 messages which will be generated above. */
2251 printf_filtered (regexp
2252 ? "All %ss matching regular expression \"%s\":\n"
2253 : "All defined %ss:\n",
2257 ALL_SYMTABS (objfile, s)
2260 bv = BLOCKVECTOR (s);
2261 /* Often many files share a blockvector.
2262 Scan each blockvector only once so that
2263 we don't get every symbol many times.
2264 It happens that the first symtab in the list
2265 for any given blockvector is the main file. */
2267 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
2269 b = BLOCKVECTOR_BLOCK (bv, i);
2270 /* Skip the sort if this block is always sorted. */
2271 if (!BLOCK_SHOULD_SORT (b))
2272 sort_block_syms (b);
2273 for (j = 0; j < BLOCK_NSYMS (b); j++)
2276 sym = BLOCK_SYM (b, j);
2277 if ((regexp == NULL || SYMBOL_MATCHES_REGEXP (sym))
2278 && ((class == 0 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
2279 && SYMBOL_CLASS (sym) != LOC_BLOCK
2280 && SYMBOL_CLASS (sym) != LOC_CONST)
2281 || (class == 1 && SYMBOL_CLASS (sym) == LOC_BLOCK)
2282 || (class == 2 && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2283 || (class == 3 && SYMBOL_CLASS (sym) == LOC_BLOCK)))
2287 /* Set a breakpoint here, if it's a function */
2290 /* There may be more than one function with the
2291 same name but in different files. In order to
2292 set breakpoints on all of them, we must give
2293 both the file name and the function name to
2296 (char *) alloca (strlen (s->filename)
2297 + strlen (SYMBOL_NAME(sym))
2299 strcpy (string, s->filename);
2300 strcat (string, ":");
2301 strcat (string, SYMBOL_NAME(sym));
2302 break_command (string, 0);
2305 else if (!found_in_file)
2307 fputs_filtered ("\nFile ", stdout);
2308 fputs_filtered (s->filename, stdout);
2309 fputs_filtered (":\n", stdout);
2313 if (class != 2 && i == STATIC_BLOCK)
2314 printf_filtered ("static ");
2316 /* Typedef that is not a C++ class */
2318 && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
2319 c_typedef_print (SYMBOL_TYPE(sym), sym, stdout);
2320 /* variable, func, or typedef-that-is-c++-class */
2321 else if (class < 2 ||
2323 SYMBOL_NAMESPACE(sym) == STRUCT_NAMESPACE))
2325 type_print (SYMBOL_TYPE (sym),
2326 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2327 ? "" : SYMBOL_SOURCE_NAME (sym)),
2330 printf_filtered (";\n");
2334 # if 0 /* FIXME, why is this zapped out? */
2336 c_type_print_base (TYPE_FN_FIELD_TYPE(t, i),
2338 c_type_print_varspec_prefix (TYPE_FN_FIELD_TYPE(t, i),
2340 sprintf (buf, " %s::", type_name_no_tag (t));
2341 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (t, i),
2351 /* If there are no eyes, avoid all contact. I mean, if there are
2352 no debug symbols, then print directly from the msymbol_vector. */
2354 if (found_misc || class != 1)
2357 ALL_MSYMBOLS (objfile, msymbol)
2359 if (MSYMBOL_TYPE (msymbol) == ourtype ||
2360 MSYMBOL_TYPE (msymbol) == ourtype2)
2362 if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
2364 /* Functions: Look up by address. */
2366 (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
2368 /* Variables/Absolutes: Look up by name */
2369 if (lookup_symbol (SYMBOL_NAME (msymbol),
2370 (struct block *) NULL, VAR_NAMESPACE,
2371 0, (struct symtab **) NULL) == NULL)
2375 printf_filtered ("\nNon-debugging symbols:\n");
2378 printf_filtered (" %08x %s\n",
2379 SYMBOL_VALUE_ADDRESS (msymbol),
2380 SYMBOL_SOURCE_NAME (msymbol));
2390 variables_info (regexp, from_tty)
2394 list_symbols (regexp, 0, 0);
2398 functions_info (regexp, from_tty)
2402 list_symbols (regexp, 1, 0);
2406 types_info (regexp, from_tty)
2410 list_symbols (regexp, 2, 0);
2414 /* Tiemann says: "info methods was never implemented." */
2416 methods_info (regexp)
2419 list_symbols (regexp, 3, 0);
2423 /* Breakpoint all functions matching regular expression. */
2425 rbreak_command (regexp, from_tty)
2429 list_symbols (regexp, 1, 1);
2433 /* Return Nonzero if block a is lexically nested within block b,
2434 or if a and b have the same pc range.
2435 Return zero otherwise. */
2438 struct block *a, *b;
2442 return BLOCK_START (a) >= BLOCK_START (b)
2443 && BLOCK_END (a) <= BLOCK_END (b);
2447 /* Helper routine for make_symbol_completion_list. */
2449 static int return_val_size;
2450 static int return_val_index;
2451 static char **return_val;
2453 #define COMPLETION_LIST_ADD_SYMBOL(symbol, text, len) \
2455 completion_list_add_name (SYMBOL_NAME (symbol), text, len); \
2456 if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) \
2457 completion_list_add_name (SYMBOL_DEMANGLED_NAME (symbol), text, len); \
2460 /* Test to see if the symbol specified by SYMNAME (which is already
2461 demangled for C++ symbols) matches TEXT in the first TEXT_LEN
2462 characters. If so, add it to the current completion list. */
2465 completion_list_add_name (symname, text, text_len)
2473 /* clip symbols that cannot match */
2475 if (strncmp (symname, text, text_len) != 0)
2480 /* Clip any symbol names that we've already considered. (This is a
2481 time optimization) */
2483 for (i = 0; i < return_val_index; ++i)
2485 if (STREQ (symname, return_val[i]))
2491 /* We have a match for a completion, so add SYMNAME to the current list
2492 of matches. Note that the name is moved to freshly malloc'd space. */
2494 symname = savestring (symname, strlen (symname));
2495 if (return_val_index + 3 > return_val_size)
2497 newsize = (return_val_size *= 2) * sizeof (char *);
2498 return_val = (char **) xrealloc ((char *) return_val, newsize);
2500 return_val[return_val_index++] = symname;
2501 return_val[return_val_index] = NULL;
2504 /* Return a NULL terminated array of all symbols (regardless of class) which
2505 begin by matching TEXT. If the answer is no symbols, then the return value
2506 is an array which contains only a NULL pointer.
2508 Problem: All of the symbols have to be copied because readline frees them.
2509 I'm not going to worry about this; hopefully there won't be that many. */
2512 make_symbol_completion_list (text)
2515 register struct symbol *sym;
2516 register struct symtab *s;
2517 register struct partial_symtab *ps;
2518 register struct minimal_symbol *msymbol;
2519 register struct objfile *objfile;
2520 register struct block *b, *surrounding_static_block = 0;
2523 struct partial_symbol *psym;
2525 text_len = strlen (text);
2526 return_val_size = 100;
2527 return_val_index = 0;
2528 return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
2529 return_val[0] = NULL;
2531 /* Look through the partial symtabs for all symbols which begin
2532 by matching TEXT. Add each one that you find to the list. */
2534 ALL_PSYMTABS (objfile, ps)
2536 /* If the psymtab's been read in we'll get it when we search
2537 through the blockvector. */
2538 if (ps->readin) continue;
2540 for (psym = objfile->global_psymbols.list + ps->globals_offset;
2541 psym < (objfile->global_psymbols.list + ps->globals_offset
2542 + ps->n_global_syms);
2545 /* If interrupted, then quit. */
2547 COMPLETION_LIST_ADD_SYMBOL (psym, text, text_len);
2550 for (psym = objfile->static_psymbols.list + ps->statics_offset;
2551 psym < (objfile->static_psymbols.list + ps->statics_offset
2552 + ps->n_static_syms);
2556 COMPLETION_LIST_ADD_SYMBOL (psym, text, text_len);
2560 /* At this point scan through the misc symbol vectors and add each
2561 symbol you find to the list. Eventually we want to ignore
2562 anything that isn't a text symbol (everything else will be
2563 handled by the psymtab code above). */
2565 ALL_MSYMBOLS (objfile, msymbol)
2568 COMPLETION_LIST_ADD_SYMBOL (msymbol, text, text_len);
2571 /* Search upwards from currently selected frame (so that we can
2572 complete on local vars. */
2574 for (b = get_selected_block (); b != NULL; b = BLOCK_SUPERBLOCK (b))
2576 if (!BLOCK_SUPERBLOCK (b))
2578 surrounding_static_block = b; /* For elmin of dups */
2581 /* Also catch fields of types defined in this places which match our
2582 text string. Only complete on types visible from current context. */
2584 for (i = 0; i < BLOCK_NSYMS (b); i++)
2586 sym = BLOCK_SYM (b, i);
2587 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
2588 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2590 struct type *t = SYMBOL_TYPE (sym);
2591 enum type_code c = TYPE_CODE (t);
2593 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2595 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2597 if (TYPE_FIELD_NAME (t, j))
2599 completion_list_add_name (TYPE_FIELD_NAME (t, j),
2608 /* Go through the symtabs and check the externs and statics for
2609 symbols which match. */
2611 ALL_SYMTABS (objfile, s)
2614 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2615 for (i = 0; i < BLOCK_NSYMS (b); i++)
2617 sym = BLOCK_SYM (b, i);
2618 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
2622 ALL_SYMTABS (objfile, s)
2625 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
2626 /* Don't do this block twice. */
2627 if (b == surrounding_static_block) continue;
2628 for (i = 0; i < BLOCK_NSYMS (b); i++)
2630 sym = BLOCK_SYM (b, i);
2631 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
2635 return (return_val);
2640 /* Add the type of the symbol sym to the type of the current
2641 function whose block we are in (assumed). The type of
2642 this current function is contained in *TYPE.
2644 This basically works as follows: When we find a function
2645 symbol (N_FUNC with a 'f' or 'F' in the symbol name), we record
2646 a pointer to its type in the global in_function_type. Every
2647 time we come across a parameter symbol ('p' in its name), then
2648 this procedure adds the name and type of that parameter
2649 to the function type pointed to by *TYPE. (Which should correspond
2650 to in_function_type if it was called correctly).
2652 Note that since we are modifying a type, the result of
2653 lookup_function_type() should be memcpy()ed before calling
2654 this. When not in strict typing mode, the expression
2655 evaluator can choose to ignore this.
2657 Assumption: All of a function's parameter symbols will
2658 appear before another function symbol is found. The parameters
2659 appear in the same order in the argument list as they do in the
2663 add_param_to_type (type,sym)
2667 int num = ++(TYPE_NFIELDS(*type));
2669 if(TYPE_NFIELDS(*type)-1)
2670 TYPE_FIELDS(*type) = (struct field *)
2671 (*current_objfile->xrealloc) ((char *)(TYPE_FIELDS(*type)),
2672 num*sizeof(struct field));
2674 TYPE_FIELDS(*type) = (struct field *)
2675 (*current_objfile->xmalloc) (num*sizeof(struct field));
2677 TYPE_FIELD_BITPOS(*type,num-1) = num-1;
2678 TYPE_FIELD_BITSIZE(*type,num-1) = 0;
2679 TYPE_FIELD_TYPE(*type,num-1) = SYMBOL_TYPE(sym);
2680 TYPE_FIELD_NAME(*type,num-1) = SYMBOL_NAME(sym);
2685 _initialize_symtab ()
2687 add_info ("variables", variables_info,
2688 "All global and static variable names, or those matching REGEXP.");
2689 add_info ("functions", functions_info,
2690 "All function names, or those matching REGEXP.");
2692 /* FIXME: This command has at least the following problems:
2693 1. It prints builtin types (in a very strange and confusing fashion).
2694 2. It doesn't print right, e.g. with
2695 typedef struct foo *FOO
2696 type_print prints "FOO" when we want to make it (in this situation)
2697 print "struct foo *".
2698 I also think "ptype" or "whatis" is more likely to be useful (but if
2699 there is much disagreement "info types" can be fixed). */
2700 add_info ("types", types_info,
2701 "All type names, or those matching REGEXP.");
2704 add_info ("methods", methods_info,
2705 "All method names, or those matching REGEXP::REGEXP.\n\
2706 If the class qualifier is omitted, it is assumed to be the current scope.\n\
2707 If the first REGEXP is omitted, then all methods matching the second REGEXP\n\
2710 add_info ("sources", sources_info,
2711 "Source files in the program.");
2713 add_com ("rbreak", no_class, rbreak_command,
2714 "Set a breakpoint for all functions matching REGEXP.");
2716 /* Initialize the one built-in type that isn't language dependent... */
2717 builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
2718 "<unknown type>", (struct objfile *) NULL);