* Makefile.in (VERSION): Bump to 4.7.2
[deliverable/binutils-gdb.git] / gdb / symtab.c
1 /* Symbol table lookup for the GNU debugger, GDB.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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. */
20
21 #include "defs.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "gdbcore.h"
25 #include "frame.h"
26 #include "target.h"
27 #include "value.h"
28 #include "symfile.h"
29 #include "objfiles.h"
30 #include "gdbcmd.h"
31 #include "call-cmds.h"
32 #include "regex.h"
33 #include "expression.h"
34 #include "language.h"
35 #include "demangle.h"
36
37 #include <obstack.h>
38 #include <assert.h>
39
40 #include <sys/types.h>
41 #include <fcntl.h>
42 #include <string.h>
43 #include <sys/stat.h>
44 #include <ctype.h>
45
46 /* Prototypes for local functions */
47
48 static char *
49 expensive_mangler PARAMS ((const char *));
50
51 extern int
52 find_methods PARAMS ((struct type *, char *, char **, struct symbol **));
53
54 static void
55 completion_list_add_symbol PARAMS ((char *, char *, int));
56
57 static struct symtabs_and_lines
58 decode_line_2 PARAMS ((struct symbol *[], int, int));
59
60 static void
61 rbreak_command PARAMS ((char *, int));
62
63 static void
64 types_info PARAMS ((char *, int));
65
66 static void
67 functions_info PARAMS ((char *, int));
68
69 static void
70 variables_info PARAMS ((char *, int));
71
72 static void
73 sources_info PARAMS ((char *, int));
74
75 static void
76 list_symbols PARAMS ((char *, int, int));
77
78 static void
79 output_source_filename PARAMS ((char *, int *));
80
81 static char *
82 operator_chars PARAMS ((char *, char **));
83
84 static int
85 find_line_common PARAMS ((struct linetable *, int, int *));
86
87 static struct partial_symbol *
88 lookup_partial_symbol PARAMS ((struct partial_symtab *, const char *,
89 int, enum namespace));
90
91 static struct partial_symbol *
92 lookup_demangled_partial_symbol PARAMS ((const struct partial_symtab *,
93 const char *));
94
95 static struct symbol *
96 lookup_demangled_block_symbol PARAMS ((const struct block *, const char *));
97
98 static struct symtab *
99 lookup_symtab_1 PARAMS ((char *));
100
101 /* */
102
103 /* The single non-language-specific builtin type */
104 struct type *builtin_type_error;
105
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
108 value_of_this. */
109
110 const struct block *block_found;
111
112 char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
113
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 */
117
118 void
119 cplusplus_hint (name)
120 char *name;
121 {
122 printf ("Hint: try '%s<TAB> or '%s<ESC-?>\n", name, name);
123 printf ("(Note leading single quote.)\n");
124 }
125
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. */
129
130 static struct symtab *
131 lookup_symtab_1 (name)
132 char *name;
133 {
134 register struct symtab *s;
135 register struct partial_symtab *ps;
136 register char *slash;
137 register struct objfile *objfile;
138
139 got_symtab:
140
141 /* First, search for an exact match */
142
143 ALL_SYMTABS (objfile, s)
144 if (strcmp (name, s->filename) == 0)
145 return s;
146
147 slash = strchr (name, '/');
148
149 /* Now, search for a matching tail (only if name doesn't have any dirs) */
150
151 if (!slash)
152 ALL_SYMTABS (objfile, s)
153 {
154 char *p = s -> filename;
155 char *tail = strrchr (p, '/');
156
157 if (tail)
158 p = tail + 1;
159
160 if (strcmp (p, name) == 0)
161 return s;
162 }
163
164 /* Same search rules as above apply here, but now we look thru the
165 psymtabs. */
166
167 ALL_PSYMTABS (objfile, ps)
168 if (strcmp (name, ps -> filename) == 0)
169 goto got_psymtab;
170
171 if (!slash)
172 ALL_PSYMTABS (objfile, ps)
173 {
174 char *p = ps -> filename;
175 char *tail = strrchr (p, '/');
176
177 if (tail)
178 p = tail + 1;
179
180 if (strcmp (p, name) == 0)
181 goto got_psymtab;
182 }
183
184 return (NULL);
185
186 got_psymtab:
187
188 if (ps -> readin)
189 error ("Internal: readin %s pst for `%s' found when no symtab found.",
190 ps -> filename, name);
191
192 s = PSYMTAB_TO_SYMTAB (ps);
193
194 if (s)
195 return s;
196
197 /* At this point, we have located the psymtab for this file, but
198 the conversion to a symtab has failed. This usually happens
199 when we are looking up an include file. In this case,
200 PSYMTAB_TO_SYMTAB doesn't return a symtab, even though one has
201 been created. So, we need to run through the symtabs again in
202 order to find the file.
203 XXX - This is a crock, and should be fixed inside of the the
204 symbol parsing routines. */
205 goto got_symtab;
206 }
207
208 /* Lookup the symbol table of a source file named NAME. Try a couple
209 of variations if the first lookup doesn't work. */
210
211 struct symtab *
212 lookup_symtab (name)
213 char *name;
214 {
215 register struct symtab *s;
216 register char *copy;
217
218 s = lookup_symtab_1 (name);
219 if (s) return s;
220
221 /* If name not found as specified, see if adding ".c" helps. */
222
223 copy = (char *) alloca (strlen (name) + 3);
224 strcpy (copy, name);
225 strcat (copy, ".c");
226 s = lookup_symtab_1 (copy);
227 if (s) return s;
228
229 /* We didn't find anything; die. */
230 return 0;
231 }
232
233 /* Lookup the partial symbol table of a source file named NAME. This
234 only returns true on an exact match (ie. this semantics are
235 different from lookup_symtab. */
236
237 struct partial_symtab *
238 lookup_partial_symtab (name)
239 char *name;
240 {
241 register struct partial_symtab *pst;
242 register struct objfile *objfile;
243
244 ALL_PSYMTABS (objfile, pst)
245 {
246 if (strcmp (name, pst -> filename) == 0)
247 {
248 return (pst);
249 }
250 }
251 return (NULL);
252 }
253 \f
254 /* Demangle a GDB method stub type. */
255 char *
256 gdb_mangle_name (type, i, j)
257 struct type *type;
258 int i, j;
259 {
260 int mangled_name_len;
261 char *mangled_name;
262 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
263 struct fn_field *method = &f[j];
264 char *field_name = TYPE_FN_FIELDLIST_NAME (type, i);
265 char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
266 char *newname = type_name_no_tag (type);
267 int is_constructor = strcmp(field_name, newname) == 0;
268 int is_destructor = is_constructor && physname[0] == '_'
269 && physname[1] == CPLUS_MARKER && physname[2] == '_';
270 /* Need a new type prefix. */
271 char *const_prefix = method->is_const ? "C" : "";
272 char *volatile_prefix = method->is_volatile ? "V" : "";
273 char buf[20];
274 #ifndef GCC_MANGLE_BUG
275 int len = strlen (newname);
276
277 if (is_destructor)
278 {
279 mangled_name = (char*) xmalloc(strlen(physname)+1);
280 strcpy(mangled_name, physname);
281 return mangled_name;
282 }
283
284 sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
285 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
286 + strlen (buf) + len
287 + strlen (physname)
288 + 1);
289
290 /* Only needed for GNU-mangled names. ANSI-mangled names
291 work with the normal mechanisms. */
292 if (OPNAME_PREFIX_P (field_name))
293 {
294 char *opname = cplus_mangle_opname (field_name + 3, 0);
295 if (opname == NULL)
296 error ("No mangling for \"%s\"", field_name);
297 mangled_name_len += strlen (opname);
298 mangled_name = (char *)xmalloc (mangled_name_len);
299
300 strncpy (mangled_name, field_name, 3);
301 mangled_name[3] = '\0';
302 strcat (mangled_name, opname);
303 }
304 else
305 {
306 mangled_name = (char *)xmalloc (mangled_name_len);
307 if (is_constructor)
308 mangled_name[0] = '\0';
309 else
310 strcpy (mangled_name, field_name);
311 }
312 strcat (mangled_name, buf);
313 strcat (mangled_name, newname);
314 #else
315 char *opname;
316
317 if (is_constructor)
318 {
319 buf[0] = '\0';
320 }
321 else
322 {
323 sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
324 }
325
326 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
327 + strlen (buf) + strlen (physname) + 1);
328
329 /* Only needed for GNU-mangled names. ANSI-mangled names
330 work with the normal mechanisms. */
331 if (OPNAME_PREFIX_P (field_name))
332 {
333 opname = cplus_mangle_opname (field_name + 3, 0);
334 if (opname == NULL)
335 {
336 error ("No mangling for \"%s\"", field_name);
337 }
338 mangled_name_len += strlen (opname);
339 mangled_name = (char *) xmalloc (mangled_name_len);
340
341 strncpy (mangled_name, field_name, 3);
342 strcpy (mangled_name + 3, opname);
343 }
344 else
345 {
346 mangled_name = (char *) xmalloc (mangled_name_len);
347 if (is_constructor)
348 {
349 mangled_name[0] = '\0';
350 }
351 else
352 {
353 strcpy (mangled_name, field_name);
354 }
355 }
356 strcat (mangled_name, buf);
357
358 #endif
359 strcat (mangled_name, physname);
360 return (mangled_name);
361 }
362
363 \f
364 /* Find which partial symtab on contains PC. Return 0 if none. */
365
366 struct partial_symtab *
367 find_pc_psymtab (pc)
368 register CORE_ADDR pc;
369 {
370 register struct partial_symtab *pst;
371 register struct objfile *objfile;
372
373 ALL_PSYMTABS (objfile, pst)
374 {
375 if (pc >= pst->textlow && pc < pst->texthigh)
376 return (pst);
377 }
378 return (NULL);
379 }
380
381 /* Find which partial symbol within a psymtab contains PC. Return 0
382 if none. Check all psymtabs if PSYMTAB is 0. */
383 struct partial_symbol *
384 find_pc_psymbol (psymtab, pc)
385 struct partial_symtab *psymtab;
386 CORE_ADDR pc;
387 {
388 struct partial_symbol *best, *p;
389 CORE_ADDR best_pc;
390
391 if (!psymtab)
392 psymtab = find_pc_psymtab (pc);
393 if (!psymtab)
394 return 0;
395
396 best_pc = psymtab->textlow - 1;
397
398 for (p = psymtab->objfile->static_psymbols.list + psymtab->statics_offset;
399 (p - (psymtab->objfile->static_psymbols.list + psymtab->statics_offset)
400 < psymtab->n_static_syms);
401 p++)
402 if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
403 && SYMBOL_CLASS (p) == LOC_BLOCK
404 && pc >= SYMBOL_VALUE_ADDRESS (p)
405 && SYMBOL_VALUE_ADDRESS (p) > best_pc)
406 {
407 best_pc = SYMBOL_VALUE_ADDRESS (p);
408 best = p;
409 }
410 if (best_pc == psymtab->textlow - 1)
411 return 0;
412 return best;
413 }
414
415 \f
416 /* Find the definition for a specified symbol name NAME
417 in namespace NAMESPACE, visible from lexical block BLOCK.
418 Returns the struct symbol pointer, or zero if no symbol is found.
419 If SYMTAB is non-NULL, store the symbol table in which the
420 symbol was found there, or NULL if not found.
421 C++: if IS_A_FIELD_OF_THIS is nonzero on entry, check to see if
422 NAME is a field of the current implied argument `this'. If so set
423 *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero.
424 BLOCK_FOUND is set to the block in which NAME is found (in the case of
425 a field of `this', value_of_this sets BLOCK_FOUND to the proper value.) */
426
427 struct symbol *
428 lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
429 const char *name;
430 register const struct block *block;
431 const enum namespace namespace;
432 int *is_a_field_of_this;
433 struct symtab **symtab;
434 {
435 register struct symbol *sym;
436 register struct symtab *s;
437 register struct partial_symtab *ps;
438 struct blockvector *bv;
439 register struct objfile *objfile;
440 register struct block *b;
441 register struct minimal_symbol *msymbol;
442 char *temp;
443 extern char *gdb_completer_word_break_characters;
444
445 /* If NAME contains any characters from gdb_completer_word_break_characters
446 then it is probably from a quoted name string. So check to see if it
447 has a C++ mangled equivalent, and if so, use the mangled equivalent. */
448
449 if (strpbrk (name, gdb_completer_word_break_characters) != NULL)
450 {
451 if ((temp = expensive_mangler (name)) != NULL)
452 {
453 name = temp;
454 }
455 }
456
457 /* Search specified block and its superiors. */
458
459 while (block != 0)
460 {
461 sym = lookup_block_symbol (block, name, namespace);
462 if (sym)
463 {
464 block_found = block;
465 if (symtab != NULL)
466 {
467 /* Search the list of symtabs for one which contains the
468 address of the start of this block. */
469 ALL_SYMTABS (objfile, s)
470 {
471 bv = BLOCKVECTOR (s);
472 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
473 if (BLOCK_START (b) <= BLOCK_START (block)
474 && BLOCK_END (b) > BLOCK_START (block))
475 goto found;
476 }
477 found:
478 *symtab = s;
479 }
480
481 return (sym);
482 }
483 block = BLOCK_SUPERBLOCK (block);
484 }
485
486 /* But that doesn't do any demangling for the STATIC_BLOCK.
487 I'm not sure whether demangling is needed in the case of
488 nested function in inner blocks; if so this needs to be changed.
489
490 Don't need to mess with the psymtabs; if we have a block,
491 that file is read in. If we don't, then we deal later with
492 all the psymtab stuff that needs checking. */
493 if (namespace == VAR_NAMESPACE && block != NULL)
494 {
495 struct block *b;
496 /* Find the right symtab. */
497 ALL_SYMTABS (objfile, s)
498 {
499 bv = BLOCKVECTOR (s);
500 b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
501 if (BLOCK_START (b) <= BLOCK_START (block)
502 && BLOCK_END (b) > BLOCK_START (block))
503 {
504 sym = lookup_demangled_block_symbol (b, name);
505 if (sym)
506 {
507 block_found = b;
508 if (symtab != NULL)
509 *symtab = s;
510 return sym;
511 }
512 }
513 }
514 }
515
516
517 /* C++: If requested to do so by the caller,
518 check to see if NAME is a field of `this'. */
519 if (is_a_field_of_this)
520 {
521 struct value *v = value_of_this (0);
522
523 *is_a_field_of_this = 0;
524 if (v && check_field (v, name))
525 {
526 *is_a_field_of_this = 1;
527 if (symtab != NULL)
528 *symtab = NULL;
529 return 0;
530 }
531 }
532
533 /* Now search all global blocks. Do the symtab's first, then
534 check the psymtab's */
535
536 ALL_SYMTABS (objfile, s)
537 {
538 bv = BLOCKVECTOR (s);
539 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
540 sym = lookup_block_symbol (block, name, namespace);
541 if (sym)
542 {
543 block_found = block;
544 if (symtab != NULL)
545 *symtab = s;
546 return sym;
547 }
548 }
549
550 /* Check for the possibility of the symbol being a global function
551 that is stored in one of the minimal symbol tables. Eventually, all
552 global symbols might be resolved in this way. */
553
554 if (namespace == VAR_NAMESPACE)
555 {
556 msymbol = lookup_minimal_symbol (name, (struct objfile *) NULL);
557
558 if (msymbol == NULL)
559 {
560 /* Test each minimal symbol to see if the minimal symbol's name
561 is a C++ mangled name that matches a user visible name. */
562
563 char *demangled;
564
565 ALL_MSYMBOLS (objfile, msymbol)
566 {
567 demangled = demangle_and_match (msymbol -> name, name,
568 DMGL_PARAMS | DMGL_ANSI);
569 if (demangled != NULL)
570 {
571 free (demangled);
572 goto found_msym;
573 }
574 }
575 msymbol = NULL; /* Not found */
576 }
577
578 found_msym:
579 if (msymbol != NULL)
580 {
581 s = find_pc_symtab (msymbol -> address);
582 /* If S is NULL, there are no debug symbols for this file.
583 Skip this stuff and check for matching static symbols below. */
584 if (s != NULL)
585 {
586 bv = BLOCKVECTOR (s);
587 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
588 sym = lookup_block_symbol (block, msymbol -> name, namespace);
589 /* We kept static functions in minimal symbol table as well as
590 in static scope. We want to find them in the symbol table. */
591 if (!sym) {
592 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
593 sym = lookup_block_symbol (block, msymbol -> name,
594 namespace);
595 }
596
597 /* sym == 0 if symbol was found in the minimal symbol table
598 but not in the symtab.
599 Return 0 to use the msymbol definition of "foo_".
600
601 This happens for Fortran "foo_" symbols,
602 which are "foo" in the symtab.
603
604 This can also happen if "asm" is used to make a
605 regular symbol but not a debugging symbol, e.g.
606 asm(".globl _main");
607 asm("_main:");
608 */
609
610 if (symtab != NULL)
611 *symtab = s;
612 return sym;
613 }
614 }
615 }
616
617 ALL_PSYMTABS (objfile, ps)
618 {
619 if (!ps->readin && lookup_partial_symbol (ps, name, 1, namespace))
620 {
621 s = PSYMTAB_TO_SYMTAB(ps);
622 bv = BLOCKVECTOR (s);
623 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
624 sym = lookup_block_symbol (block, name, namespace);
625 if (!sym)
626 error ("Internal: global symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
627 if (symtab != NULL)
628 *symtab = s;
629 return sym;
630 }
631 }
632
633 /* Now search all per-file blocks.
634 Not strictly correct, but more useful than an error.
635 Do the symtabs first, then check the psymtabs */
636
637 ALL_SYMTABS (objfile, s)
638 {
639 bv = BLOCKVECTOR (s);
640 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
641 sym = lookup_block_symbol (block, name, namespace);
642 if (sym)
643 {
644 block_found = block;
645 if (symtab != NULL)
646 *symtab = s;
647 return sym;
648 }
649 }
650
651 ALL_PSYMTABS (objfile, ps)
652 {
653 if (!ps->readin && lookup_partial_symbol (ps, name, 0, namespace))
654 {
655 s = PSYMTAB_TO_SYMTAB(ps);
656 bv = BLOCKVECTOR (s);
657 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
658 sym = lookup_block_symbol (block, name, namespace);
659 if (!sym)
660 error ("Internal: static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
661 if (symtab != NULL)
662 *symtab = s;
663 return sym;
664 }
665 }
666
667 /* Now search all per-file blocks for static mangled symbols.
668 Do the symtabs first, then check the psymtabs. */
669
670 if (namespace == VAR_NAMESPACE)
671 {
672 ALL_SYMTABS (objfile, s)
673 {
674 bv = BLOCKVECTOR (s);
675 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
676 sym = lookup_demangled_block_symbol (block, name);
677 if (sym)
678 {
679 block_found = block;
680 if (symtab != NULL)
681 *symtab = s;
682 return sym;
683 }
684 }
685
686 ALL_PSYMTABS (objfile, ps)
687 {
688 if (!ps->readin && lookup_demangled_partial_symbol (ps, name))
689 {
690 s = PSYMTAB_TO_SYMTAB(ps);
691 bv = BLOCKVECTOR (s);
692 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
693 sym = lookup_demangled_block_symbol (block, name);
694 if (!sym)
695 error ("Internal: mangled static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
696 if (symtab != NULL)
697 *symtab = s;
698 return sym;
699 }
700 }
701 }
702
703 if (symtab != NULL)
704 *symtab = NULL;
705 return 0;
706 }
707
708 /* Look for a static demangled symbol in block BLOCK. */
709
710 static struct symbol *
711 lookup_demangled_block_symbol (block, name)
712 register const struct block *block;
713 const char *name;
714 {
715 register int bot, top;
716 register struct symbol *sym;
717 char *demangled;
718
719 bot = 0;
720 top = BLOCK_NSYMS (block);
721
722 while (bot < top)
723 {
724 sym = BLOCK_SYM (block, bot);
725 if (SYMBOL_NAMESPACE (sym) == VAR_NAMESPACE)
726 {
727 demangled = demangle_and_match (SYMBOL_NAME (sym), name,
728 DMGL_PARAMS | DMGL_ANSI);
729 if (demangled != NULL)
730 {
731 free (demangled);
732 return (sym);
733 }
734 }
735 bot++;
736 }
737
738 return (NULL);
739 }
740
741 /* Look, in partial_symtab PST, for static mangled symbol NAME. */
742
743 static struct partial_symbol *
744 lookup_demangled_partial_symbol (pst, name)
745 const struct partial_symtab *pst;
746 const char *name;
747 {
748 struct partial_symbol *start, *psym;
749 int length = pst->n_static_syms;
750 char *demangled;
751
752 if (!length)
753 return (struct partial_symbol *) 0;
754
755 start = pst->objfile->static_psymbols.list + pst->statics_offset;
756 for (psym = start; psym < start + length; psym++)
757 {
758 if (SYMBOL_NAMESPACE (psym) == VAR_NAMESPACE)
759 {
760 demangled = demangle_and_match (SYMBOL_NAME (psym), name,
761 DMGL_PARAMS | DMGL_ANSI);
762 if (demangled != NULL)
763 {
764 free (demangled);
765 return (psym);
766 }
767 }
768 }
769
770 return (NULL);
771 }
772
773 /* Look, in partial_symtab PST, for symbol NAME. Check the global
774 symbols if GLOBAL, the static symbols if not */
775
776 static struct partial_symbol *
777 lookup_partial_symbol (pst, name, global, namespace)
778 struct partial_symtab *pst;
779 const char *name;
780 int global;
781 enum namespace namespace;
782 {
783 struct partial_symbol *start, *psym;
784 int length = (global ? pst->n_global_syms : pst->n_static_syms);
785
786 if (!length)
787 return (struct partial_symbol *) 0;
788
789 start = (global ?
790 pst->objfile->global_psymbols.list + pst->globals_offset :
791 pst->objfile->static_psymbols.list + pst->statics_offset );
792
793 if (global) /* This means we can use a binary */
794 /* search. */
795 {
796 struct partial_symbol *top, *bottom, *center;
797
798 /* Binary search. This search is guaranteed to end with center
799 pointing at the earliest partial symbol with the correct
800 name. At that point *all* partial symbols with that name
801 will be checked against the correct namespace. */
802 bottom = start;
803 top = start + length - 1;
804 while (top > bottom)
805 {
806 center = bottom + (top - bottom) / 2;
807
808 assert (center < top);
809
810 if (strcmp (SYMBOL_NAME (center), name) >= 0)
811 top = center;
812 else
813 bottom = center + 1;
814 }
815 assert (top == bottom);
816
817 while (!strcmp (SYMBOL_NAME (top), name))
818 {
819 if (SYMBOL_NAMESPACE (top) == namespace)
820 return top;
821 top ++;
822 }
823 }
824 else
825 {
826 /* Can't use a binary search */
827 for (psym = start; psym < start + length; psym++)
828 if (namespace == SYMBOL_NAMESPACE (psym)
829 && !strcmp (name, SYMBOL_NAME (psym)))
830 return psym;
831 }
832
833 return (struct partial_symbol *) 0;
834 }
835
836 /* Find the psymtab containing main(). */
837 /* FIXME: What about languages without main() or specially linked
838 executables that have no main() ? */
839
840 struct partial_symtab *
841 find_main_psymtab ()
842 {
843 register struct partial_symtab *pst;
844 register struct objfile *objfile;
845
846 ALL_PSYMTABS (objfile, pst)
847 {
848 if (lookup_partial_symbol (pst, "main", 1, VAR_NAMESPACE))
849 {
850 return (pst);
851 }
852 }
853 return (NULL);
854 }
855
856 /* Look for a symbol in block BLOCK. */
857
858 struct symbol *
859 lookup_block_symbol (block, name, namespace)
860 register const struct block *block;
861 const char *name;
862 const enum namespace namespace;
863 {
864 register int bot, top, inc;
865 register struct symbol *sym, *parameter_sym;
866
867 top = BLOCK_NSYMS (block);
868 bot = 0;
869
870 /* If the blocks's symbols were sorted, start with a binary search. */
871
872 if (BLOCK_SHOULD_SORT (block))
873 {
874 /* First, advance BOT to not far before
875 the first symbol whose name is NAME. */
876
877 while (1)
878 {
879 inc = (top - bot + 1);
880 /* No need to keep binary searching for the last few bits worth. */
881 if (inc < 4)
882 break;
883 inc = (inc >> 1) + bot;
884 sym = BLOCK_SYM (block, inc);
885 if (SYMBOL_NAME (sym)[0] < name[0])
886 bot = inc;
887 else if (SYMBOL_NAME (sym)[0] > name[0])
888 top = inc;
889 else if (strcmp (SYMBOL_NAME (sym), name) < 0)
890 bot = inc;
891 else
892 top = inc;
893 }
894
895 /* Now scan forward until we run out of symbols,
896 find one whose name is greater than NAME,
897 or find one we want.
898 If there is more than one symbol with the right name and namespace,
899 we return the first one. dbxread.c is careful to make sure
900 that if one is a register then it comes first. */
901
902 top = BLOCK_NSYMS (block);
903 while (bot < top)
904 {
905 sym = BLOCK_SYM (block, bot);
906 inc = SYMBOL_NAME (sym)[0] - name[0];
907 if (inc == 0)
908 inc = strcmp (SYMBOL_NAME (sym), name);
909 if (inc == 0 && SYMBOL_NAMESPACE (sym) == namespace)
910 return sym;
911 if (inc > 0)
912 return 0;
913 bot++;
914 }
915 return 0;
916 }
917
918 /* Here if block isn't sorted.
919 This loop is equivalent to the loop above,
920 but hacked greatly for speed.
921
922 Note that parameter symbols do not always show up last in the
923 list; this loop makes sure to take anything else other than
924 parameter symbols first; it only uses parameter symbols as a
925 last resort. Note that this only takes up extra computation
926 time on a match. */
927
928 parameter_sym = (struct symbol *) 0;
929 top = BLOCK_NSYMS (block);
930 inc = name[0];
931 while (bot < top)
932 {
933 sym = BLOCK_SYM (block, bot);
934 if (SYMBOL_NAME (sym)[0] == inc
935 && !strcmp (SYMBOL_NAME (sym), name)
936 && SYMBOL_NAMESPACE (sym) == namespace)
937 {
938 if (SYMBOL_CLASS (sym) == LOC_ARG
939 || SYMBOL_CLASS (sym) == LOC_LOCAL_ARG
940 || SYMBOL_CLASS (sym) == LOC_REF_ARG
941 || SYMBOL_CLASS (sym) == LOC_REGPARM)
942 parameter_sym = sym;
943 else
944 return sym;
945 }
946 bot++;
947 }
948 return parameter_sym; /* Will be 0 if not found. */
949 }
950 \f
951 /* Return the symbol for the function which contains a specified
952 lexical block, described by a struct block BL. */
953
954 struct symbol *
955 block_function (bl)
956 struct block *bl;
957 {
958 while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
959 bl = BLOCK_SUPERBLOCK (bl);
960
961 return BLOCK_FUNCTION (bl);
962 }
963
964 /* Find the symtab associated with PC. Look through the psymtabs and read in
965 another symtab if necessary. */
966
967 struct symtab *
968 find_pc_symtab (pc)
969 register CORE_ADDR pc;
970 {
971 register struct block *b;
972 struct blockvector *bv;
973 register struct symtab *s = NULL;
974 register struct partial_symtab *ps;
975 register struct objfile *objfile;
976
977 /* Search all symtabs for one whose file contains our pc */
978
979 ALL_SYMTABS (objfile, s)
980 {
981 bv = BLOCKVECTOR (s);
982 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
983 if (BLOCK_START (b) <= pc
984 && BLOCK_END (b) > pc)
985 return (s);
986 }
987
988 s = NULL;
989 ps = find_pc_psymtab (pc);
990 if (ps)
991 {
992 if (ps->readin)
993 printf_filtered ("(Internal error: pc 0x%x in read in psymtab, but not in symtab.)\n", pc);
994 s = PSYMTAB_TO_SYMTAB (ps);
995 }
996 return (s);
997 }
998
999 /* Find the source file and line number for a given PC value.
1000 Return a structure containing a symtab pointer, a line number,
1001 and a pc range for the entire source line.
1002 The value's .pc field is NOT the specified pc.
1003 NOTCURRENT nonzero means, if specified pc is on a line boundary,
1004 use the line that ends there. Otherwise, in that case, the line
1005 that begins there is used. */
1006
1007 struct symtab_and_line
1008 find_pc_line (pc, notcurrent)
1009 CORE_ADDR pc;
1010 int notcurrent;
1011 {
1012 struct symtab *s;
1013 register struct linetable *l;
1014 register int len;
1015 register int i;
1016 register struct linetable_entry item;
1017 struct symtab_and_line val;
1018 struct blockvector *bv;
1019
1020 /* Info on best line seen so far, and where it starts, and its file. */
1021
1022 struct linetable_entry best;
1023 CORE_ADDR best_end = 0;
1024 struct symtab *best_symtab = 0;
1025
1026 /* Store here the first line number
1027 of a file which contains the line at the smallest pc after PC.
1028 If we don't find a line whose range contains PC,
1029 we will use a line one less than this,
1030 with a range from the start of that file to the first line's pc. */
1031 struct linetable_entry alt;
1032 struct symtab *alt_symtab = 0;
1033
1034 /* Info on best line seen in this file. */
1035
1036 struct linetable_entry prev;
1037
1038 best.line = 0;
1039 best.pc = 0;
1040 alt.line = 0;
1041 alt.pc = 0;
1042
1043 /* If this pc is not from the current frame,
1044 it is the address of the end of a call instruction.
1045 Quite likely that is the start of the following statement.
1046 But what we want is the statement containing the instruction.
1047 Fudge the pc to make sure we get that. */
1048
1049 if (notcurrent) pc -= 1;
1050
1051 s = find_pc_symtab (pc);
1052 if (!s)
1053 {
1054 val.symtab = 0;
1055 val.line = 0;
1056 val.pc = pc;
1057 val.end = 0;
1058 return val;
1059 }
1060
1061 bv = BLOCKVECTOR (s);
1062
1063 /* Look at all the symtabs that share this blockvector.
1064 They all have the same apriori range, that we found was right;
1065 but they have different line tables. */
1066
1067 for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1068 {
1069 /* Find the best line in this symtab. */
1070 l = LINETABLE (s);
1071 if (!l)
1072 continue;
1073 len = l->nitems;
1074 if (len <= 0)
1075 {
1076 fprintf (stderr, "Inconsistent line number info for %s\n",
1077 s->filename);
1078 continue;
1079 }
1080
1081 prev.line = -1;
1082 item = l->item[0]; /* Get first line info */
1083
1084 /* Is this file's first line closer than the first lines of other files?
1085 If so, record this file, and its first line, as best alternate. */
1086 if (item.pc > pc && (alt.pc == 0 || item.pc < alt.pc))
1087 {
1088 alt = item;
1089 alt_symtab = s;
1090 }
1091
1092 for (i = 0; i < len; i++)
1093 {
1094 item = l->item[i];
1095
1096 /* Return the last line that did not start after PC. */
1097 if (item.pc > pc)
1098 break;
1099
1100 prev = item;
1101 }
1102
1103 /* At this point, prev points at the line whose start addr is <= pc, and
1104 item points at the next line. If we ran off the end of the linetable
1105 (pc >= start of the last line), then prev == item. If pc < start of
1106 the first line, prev will not be set. */
1107
1108 /* Is this file's best line closer than the best in the other files?
1109 If so, record this file, and its best line, as best so far. */
1110
1111 if (prev.line >= 0 && prev.pc > best.pc)
1112 {
1113 best = prev;
1114 best_symtab = s;
1115 /* If another line is in the linetable, and its PC is closer
1116 than the best_end we currently have, take it as best_end. */
1117 if (i < len && (best_end == 0 || best_end > item.pc))
1118 best_end = item.pc;
1119 }
1120 }
1121
1122 if (!best_symtab)
1123 {
1124 if (!alt_symtab)
1125 { /* If we didn't find any line # info, just
1126 return zeros. */
1127 val.symtab = 0;
1128 val.line = 0;
1129 val.pc = pc;
1130 val.end = 0;
1131 }
1132 else
1133 {
1134 val.symtab = alt_symtab;
1135 val.line = alt.line - 1;
1136 val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1137 val.end = alt.pc;
1138 }
1139 }
1140 else
1141 {
1142 val.symtab = best_symtab;
1143 val.line = best.line;
1144 val.pc = best.pc;
1145 if (best_end && (alt.pc == 0 || best_end < alt.pc))
1146 val.end = best_end;
1147 else if (alt.pc)
1148 val.end = alt.pc;
1149 else
1150 val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1151 }
1152 return val;
1153 }
1154 \f
1155 /* Find the PC value for a given source file and line number.
1156 Returns zero for invalid line number.
1157 The source file is specified with a struct symtab. */
1158
1159 CORE_ADDR
1160 find_line_pc (symtab, line)
1161 struct symtab *symtab;
1162 int line;
1163 {
1164 register struct linetable *l;
1165 register int ind;
1166 int dummy;
1167
1168 if (symtab == 0)
1169 return 0;
1170 l = LINETABLE (symtab);
1171 ind = find_line_common(l, line, &dummy);
1172 return (ind >= 0) ? l->item[ind].pc : 0;
1173 }
1174
1175 /* Find the range of pc values in a line.
1176 Store the starting pc of the line into *STARTPTR
1177 and the ending pc (start of next line) into *ENDPTR.
1178 Returns 1 to indicate success.
1179 Returns 0 if could not find the specified line. */
1180
1181 int
1182 find_line_pc_range (symtab, thisline, startptr, endptr)
1183 struct symtab *symtab;
1184 int thisline;
1185 CORE_ADDR *startptr, *endptr;
1186 {
1187 register struct linetable *l;
1188 register int ind;
1189 int exact_match; /* did we get an exact linenumber match */
1190
1191 if (symtab == 0)
1192 return 0;
1193
1194 l = LINETABLE (symtab);
1195 ind = find_line_common (l, thisline, &exact_match);
1196 if (ind >= 0)
1197 {
1198 *startptr = l->item[ind].pc;
1199 /* If we have not seen an entry for the specified line,
1200 assume that means the specified line has zero bytes. */
1201 if (!exact_match || ind == l->nitems-1)
1202 *endptr = *startptr;
1203 else
1204 /* Perhaps the following entry is for the following line.
1205 It's worth a try. */
1206 if (ind+1 < l->nitems
1207 && l->item[ind+1].line == thisline + 1)
1208 *endptr = l->item[ind+1].pc;
1209 else
1210 *endptr = find_line_pc (symtab, thisline+1);
1211 return 1;
1212 }
1213
1214 return 0;
1215 }
1216
1217 /* Given a line table and a line number, return the index into the line
1218 table for the pc of the nearest line whose number is >= the specified one.
1219 Return -1 if none is found. The value is >= 0 if it is an index.
1220
1221 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
1222
1223 static int
1224 find_line_common (l, lineno, exact_match)
1225 register struct linetable *l;
1226 register int lineno;
1227 int *exact_match;
1228 {
1229 register int i;
1230 register int len;
1231
1232 /* BEST is the smallest linenumber > LINENO so far seen,
1233 or 0 if none has been seen so far.
1234 BEST_INDEX identifies the item for it. */
1235
1236 int best_index = -1;
1237 int best = 0;
1238
1239 if (lineno <= 0)
1240 return -1;
1241 if (l == 0)
1242 return -1;
1243
1244 len = l->nitems;
1245 for (i = 0; i < len; i++)
1246 {
1247 register struct linetable_entry *item = &(l->item[i]);
1248
1249 if (item->line == lineno)
1250 {
1251 *exact_match = 1;
1252 return i;
1253 }
1254
1255 if (item->line > lineno && (best == 0 || item->line < best))
1256 {
1257 best = item->line;
1258 best_index = i;
1259 }
1260 }
1261
1262 /* If we got here, we didn't get an exact match. */
1263
1264 *exact_match = 0;
1265 return best_index;
1266 }
1267
1268 int
1269 find_pc_line_pc_range (pc, startptr, endptr)
1270 CORE_ADDR pc;
1271 CORE_ADDR *startptr, *endptr;
1272 {
1273 struct symtab_and_line sal;
1274 sal = find_pc_line (pc, 0);
1275 *startptr = sal.pc;
1276 *endptr = sal.end;
1277 return sal.symtab != 0;
1278 }
1279 \f
1280 /* If P is of the form "operator[ \t]+..." where `...' is
1281 some legitimate operator text, return a pointer to the
1282 beginning of the substring of the operator text.
1283 Otherwise, return "". */
1284 static char *
1285 operator_chars (p, end)
1286 char *p;
1287 char **end;
1288 {
1289 *end = "";
1290 if (strncmp (p, "operator", 8))
1291 return *end;
1292 p += 8;
1293
1294 /* Don't get faked out by `operator' being part of a longer
1295 identifier. */
1296 if (isalpha(*p) || *p == '_' || *p == '$' || *p == '\0')
1297 return *end;
1298
1299 /* Allow some whitespace between `operator' and the operator symbol. */
1300 while (*p == ' ' || *p == '\t')
1301 p++;
1302
1303 /* Recognize 'operator TYPENAME'. */
1304
1305 if (isalpha(*p) || *p == '_' || *p == '$')
1306 {
1307 register char *q = p+1;
1308 while (isalnum(*q) || *q == '_' || *q == '$')
1309 q++;
1310 *end = q;
1311 return p;
1312 }
1313
1314 switch (*p)
1315 {
1316 case '!':
1317 case '=':
1318 case '*':
1319 case '/':
1320 case '%':
1321 case '^':
1322 if (p[1] == '=')
1323 *end = p+2;
1324 else
1325 *end = p+1;
1326 return p;
1327 case '<':
1328 case '>':
1329 case '+':
1330 case '-':
1331 case '&':
1332 case '|':
1333 if (p[1] == '=' || p[1] == p[0])
1334 *end = p+2;
1335 else
1336 *end = p+1;
1337 return p;
1338 case '~':
1339 case ',':
1340 *end = p+1;
1341 return p;
1342 case '(':
1343 if (p[1] != ')')
1344 error ("`operator ()' must be specified without whitespace in `()'");
1345 *end = p+2;
1346 return p;
1347 case '?':
1348 if (p[1] != ':')
1349 error ("`operator ?:' must be specified without whitespace in `?:'");
1350 *end = p+2;
1351 return p;
1352 case '[':
1353 if (p[1] != ']')
1354 error ("`operator []' must be specified without whitespace in `[]'");
1355 *end = p+2;
1356 return p;
1357 default:
1358 error ("`operator %s' not supported", p);
1359 break;
1360 }
1361 *end = "";
1362 return *end;
1363 }
1364
1365 /* Recursive helper function for decode_line_1.
1366 * Look for methods named NAME in type T.
1367 * Return number of matches.
1368 * Put matches in PHYSNAMES and SYM_ARR (which better be big enough!).
1369 * These allocations seem to define "big enough":
1370 * sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1371 * physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1372 */
1373
1374 int
1375 find_methods (t, name, physnames, sym_arr)
1376 struct type *t;
1377 char *name;
1378 char **physnames;
1379 struct symbol **sym_arr;
1380 {
1381 int i1 = 0;
1382 int ibase;
1383 struct symbol *sym_class;
1384 char *class_name = type_name_no_tag (t);
1385 /* Ignore this class if it doesn't have a name.
1386 This prevents core dumps, but is just a workaround
1387 because we might not find the function in
1388 certain cases, such as
1389 struct D {virtual int f();}
1390 struct C : D {virtual int g();}
1391 (in this case g++ 1.35.1- does not put out a name
1392 for D as such, it defines type 19 (for example) in
1393 the same stab as C, and then does a
1394 .stabs "D:T19" and a .stabs "D:t19".
1395 Thus
1396 "break C::f" should not be looking for field f in
1397 the class named D,
1398 but just for the field f in the baseclasses of C
1399 (no matter what their names).
1400
1401 However, I don't know how to replace the code below
1402 that depends on knowing the name of D. */
1403 if (class_name
1404 && (sym_class = lookup_symbol (class_name,
1405 (struct block *)NULL,
1406 STRUCT_NAMESPACE,
1407 (int *)NULL,
1408 (struct symtab **)NULL)))
1409 {
1410 int method_counter;
1411 t = SYMBOL_TYPE (sym_class);
1412 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1413 method_counter >= 0;
1414 --method_counter)
1415 {
1416 int field_counter;
1417 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, method_counter);
1418
1419 char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1420 if (!strcmp (name, method_name))
1421 /* Find all the fields with that name. */
1422 for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
1423 field_counter >= 0;
1424 --field_counter)
1425 {
1426 char *phys_name;
1427 if (TYPE_FN_FIELD_STUB (f, field_counter))
1428 check_stub_method (t, method_counter, field_counter);
1429 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1430 physnames[i1] = (char*) alloca (strlen (phys_name) + 1);
1431 strcpy (physnames[i1], phys_name);
1432 sym_arr[i1] = lookup_symbol (phys_name,
1433 SYMBOL_BLOCK_VALUE (sym_class),
1434 VAR_NAMESPACE,
1435 (int *) NULL,
1436 (struct symtab **) NULL);
1437 if (sym_arr[i1]) i1++;
1438 else
1439 {
1440 fputs_filtered("(Cannot find method ", stdout);
1441 fputs_demangled(phys_name, stdout, DMGL_PARAMS);
1442 fputs_filtered(" - possibly inlined.)\n", stdout);
1443 }
1444 }
1445 }
1446 }
1447 /* Only search baseclasses if there is no match yet,
1448 * since names in derived classes override those in baseclasses.
1449 */
1450 if (i1)
1451 return i1;
1452 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1453 i1 += find_methods(TYPE_BASECLASS(t, ibase), name,
1454 physnames + i1, sym_arr + i1);
1455 return i1;
1456 }
1457
1458 /* Parse a string that specifies a line number.
1459 Pass the address of a char * variable; that variable will be
1460 advanced over the characters actually parsed.
1461
1462 The string can be:
1463
1464 LINENUM -- that line number in current file. PC returned is 0.
1465 FILE:LINENUM -- that line in that file. PC returned is 0.
1466 FUNCTION -- line number of openbrace of that function.
1467 PC returned is the start of the function.
1468 VARIABLE -- line number of definition of that variable.
1469 PC returned is 0.
1470 FILE:FUNCTION -- likewise, but prefer functions in that file.
1471 *EXPR -- line in which address EXPR appears.
1472
1473 FUNCTION may be an undebuggable function found in minimal symbol table.
1474
1475 If the argument FUNFIRSTLINE is nonzero, we want the first line
1476 of real code inside a function when a function is specified.
1477
1478 DEFAULT_SYMTAB specifies the file to use if none is specified.
1479 It defaults to current_source_symtab.
1480 DEFAULT_LINE specifies the line number to use for relative
1481 line numbers (that start with signs). Defaults to current_source_line.
1482
1483 Note that it is possible to return zero for the symtab
1484 if no file is validly specified. Callers must check that.
1485 Also, the line number returned may be invalid. */
1486
1487 struct symtabs_and_lines
1488 decode_line_1 (argptr, funfirstline, default_symtab, default_line)
1489 char **argptr;
1490 int funfirstline;
1491 struct symtab *default_symtab;
1492 int default_line;
1493 {
1494 struct symtabs_and_lines values;
1495 #ifdef HPPA_COMPILER_BUG
1496 /* FIXME: The native HP 9000/700 compiler has a bug which appears
1497 when optimizing this file with target i960-vxworks. I haven't
1498 been able to construct a simple test case. The problem is that
1499 in the second call to SKIP_PROLOGUE below, the compiler somehow
1500 does not realize that the statement val = find_pc_line (...) will
1501 change the values of the fields of val. It extracts the elements
1502 into registers at the top of the block, and does not update the
1503 registers after the call to find_pc_line. You can check this by
1504 inserting a printf at the end of find_pc_line to show what values
1505 it is returning for val.pc and val.end and another printf after
1506 the call to see what values the function actually got (remember,
1507 this is compiling with cc -O, with this patch removed). You can
1508 also examine the assembly listing: search for the second call to
1509 skip_prologue; the LDO statement before the next call to
1510 find_pc_line loads the address of the structure which
1511 find_pc_line will return; if there is a LDW just before the LDO,
1512 which fetches an element of the structure, then the compiler
1513 still has the bug.
1514
1515 Setting val to volatile avoids the problem. We must undef
1516 volatile, because the HPPA native compiler does not define
1517 __STDC__, although it does understand volatile, and so volatile
1518 will have been defined away in defs.h. */
1519 #undef volatile
1520 volatile struct symtab_and_line val;
1521 #define volatile /*nothing*/
1522 #else
1523 struct symtab_and_line val;
1524 #endif
1525 register char *p, *p1;
1526 char *q, *q1;
1527 register struct symtab *s;
1528
1529 register struct symbol *sym;
1530 /* The symtab that SYM was found in. */
1531 struct symtab *sym_symtab;
1532
1533 register CORE_ADDR pc;
1534 register struct minimal_symbol *msymbol;
1535 char *copy;
1536 struct symbol *sym_class;
1537 int i1;
1538 int is_quoted;
1539 struct symbol **sym_arr;
1540 struct type *t;
1541 char **physnames;
1542 char *saved_arg = *argptr;
1543 extern char *gdb_completer_quote_characters;
1544
1545 /* Defaults have defaults. */
1546
1547 if (default_symtab == 0)
1548 {
1549 default_symtab = current_source_symtab;
1550 default_line = current_source_line;
1551 }
1552
1553 /* See if arg is *PC */
1554
1555 if (**argptr == '*')
1556 {
1557 if (**argptr == '*')
1558 {
1559 (*argptr)++;
1560 }
1561 pc = parse_and_eval_address_1 (argptr);
1562 values.sals = (struct symtab_and_line *)
1563 xmalloc (sizeof (struct symtab_and_line));
1564 values.nelts = 1;
1565 values.sals[0] = find_pc_line (pc, 0);
1566 values.sals[0].pc = pc;
1567 return values;
1568 }
1569
1570 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
1571
1572 s = NULL;
1573 is_quoted = (strchr (gdb_completer_quote_characters, **argptr) != NULL);
1574
1575 for (p = *argptr; *p; p++)
1576 {
1577 if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
1578 break;
1579 }
1580 while (p[0] == ' ' || p[0] == '\t') p++;
1581
1582 if ((p[0] == ':') && !is_quoted)
1583 {
1584
1585 /* C++ */
1586 if (p[1] ==':')
1587 {
1588 /* Extract the class name. */
1589 p1 = p;
1590 while (p != *argptr && p[-1] == ' ') --p;
1591 copy = (char *) alloca (p - *argptr + 1);
1592 memcpy (copy, *argptr, p - *argptr);
1593 copy[p - *argptr] = 0;
1594
1595 /* Discard the class name from the arg. */
1596 p = p1 + 2;
1597 while (*p == ' ' || *p == '\t') p++;
1598 *argptr = p;
1599
1600 sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
1601 (struct symtab **)NULL);
1602
1603 if (sym_class &&
1604 ( TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_STRUCT
1605 || TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_UNION))
1606 {
1607 /* Arg token is not digits => try it as a function name
1608 Find the next token (everything up to end or next whitespace). */
1609 p = *argptr;
1610 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
1611 q = operator_chars (*argptr, &q1);
1612
1613 if (q1 - q)
1614 {
1615 char *opname;
1616 char *tmp = alloca (q1 - q + 1);
1617 memcpy (tmp, q, q1 - q);
1618 tmp[q1 - q] = '\0';
1619 opname = cplus_mangle_opname (tmp, DMGL_ANSI);
1620 if (opname == NULL)
1621 {
1622 warning ("no mangling for \"%s\"", tmp);
1623 cplusplus_hint (saved_arg);
1624 return_to_top_level ();
1625 }
1626 copy = (char*) alloca (3 + strlen(opname));
1627 sprintf (copy, "__%s", opname);
1628 p = q1;
1629 }
1630 else
1631 {
1632 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
1633 memcpy (copy, *argptr, p - *argptr);
1634 copy[p - *argptr] = '\0';
1635 }
1636
1637 /* no line number may be specified */
1638 while (*p == ' ' || *p == '\t') p++;
1639 *argptr = p;
1640
1641 sym = 0;
1642 i1 = 0; /* counter for the symbol array */
1643 t = SYMBOL_TYPE (sym_class);
1644 sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1645 physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1646
1647 if (destructor_name_p (copy, t))
1648 {
1649 /* destructors are a special case. */
1650 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, 0);
1651 int len = TYPE_FN_FIELDLIST_LENGTH (t, 0) - 1;
1652 char *phys_name = TYPE_FN_FIELD_PHYSNAME (f, len);
1653 physnames[i1] = (char *)alloca (strlen (phys_name) + 1);
1654 strcpy (physnames[i1], phys_name);
1655 sym_arr[i1] =
1656 lookup_symbol (phys_name, SYMBOL_BLOCK_VALUE (sym_class),
1657 VAR_NAMESPACE, 0, (struct symtab **)NULL);
1658 if (sym_arr[i1]) i1++;
1659 }
1660 else
1661 i1 = find_methods (t, copy, physnames, sym_arr);
1662 if (i1 == 1)
1663 {
1664 /* There is exactly one field with that name. */
1665 sym = sym_arr[0];
1666
1667 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1668 {
1669 /* Arg is the name of a function */
1670 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1671 if (funfirstline)
1672 SKIP_PROLOGUE (pc);
1673 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1674 values.nelts = 1;
1675 values.sals[0] = find_pc_line (pc, 0);
1676 values.sals[0].pc = (values.sals[0].end && values.sals[0].pc != pc) ? values.sals[0].end : pc;
1677 }
1678 else
1679 {
1680 values.nelts = 0;
1681 }
1682 return values;
1683 }
1684 if (i1 > 0)
1685 {
1686 /* There is more than one field with that name
1687 (overloaded). Ask the user which one to use. */
1688 return decode_line_2 (sym_arr, i1, funfirstline);
1689 }
1690 else
1691 {
1692 char *tmp;
1693
1694 if (OPNAME_PREFIX_P (copy))
1695 {
1696 tmp = (char *)alloca (strlen (copy+3) + 9);
1697 strcpy (tmp, "operator ");
1698 strcat (tmp, copy+3);
1699 }
1700 else
1701 tmp = copy;
1702 if (tmp[0] == '~')
1703 warning ("the class `%s' does not have destructor defined",
1704 sym_class->name);
1705 else
1706 warning ("the class %s does not have any method named %s",
1707 sym_class->name, tmp);
1708 cplusplus_hint (saved_arg);
1709 return_to_top_level ();
1710 }
1711 }
1712 else
1713 {
1714 /* The quotes are important if copy is empty. */
1715 warning ("can't find class, struct, or union named \"%s\"",
1716 copy);
1717 cplusplus_hint (saved_arg);
1718 return_to_top_level ();
1719 }
1720 }
1721 /* end of C++ */
1722
1723
1724 /* Extract the file name. */
1725 p1 = p;
1726 while (p != *argptr && p[-1] == ' ') --p;
1727 copy = (char *) alloca (p - *argptr + 1);
1728 memcpy (copy, *argptr, p - *argptr);
1729 copy[p - *argptr] = 0;
1730
1731 /* Find that file's data. */
1732 s = lookup_symtab (copy);
1733 if (s == 0)
1734 {
1735 if (!have_full_symbols () && !have_partial_symbols ())
1736 error (no_symtab_msg);
1737 error ("No source file named %s.", copy);
1738 }
1739
1740 /* Discard the file name from the arg. */
1741 p = p1 + 1;
1742 while (*p == ' ' || *p == '\t') p++;
1743 *argptr = p;
1744 }
1745
1746 /* S is specified file's symtab, or 0 if no file specified.
1747 arg no longer contains the file name. */
1748
1749 /* Check whether arg is all digits (and sign) */
1750
1751 p = *argptr;
1752 if (*p == '-' || *p == '+') p++;
1753 while (*p >= '0' && *p <= '9')
1754 p++;
1755
1756 if (p != *argptr && (*p == 0 || *p == ' ' || *p == '\t' || *p == ','))
1757 {
1758 /* We found a token consisting of all digits -- at least one digit. */
1759 enum sign {none, plus, minus} sign = none;
1760
1761 /* This is where we need to make sure that we have good defaults.
1762 We must guarantee that this section of code is never executed
1763 when we are called with just a function name, since
1764 select_source_symtab calls us with such an argument */
1765
1766 if (s == 0 && default_symtab == 0)
1767 {
1768 select_source_symtab (0);
1769 default_symtab = current_source_symtab;
1770 default_line = current_source_line;
1771 }
1772
1773 if (**argptr == '+')
1774 sign = plus, (*argptr)++;
1775 else if (**argptr == '-')
1776 sign = minus, (*argptr)++;
1777 val.line = atoi (*argptr);
1778 switch (sign)
1779 {
1780 case plus:
1781 if (p == *argptr)
1782 val.line = 5;
1783 if (s == 0)
1784 val.line = default_line + val.line;
1785 break;
1786 case minus:
1787 if (p == *argptr)
1788 val.line = 15;
1789 if (s == 0)
1790 val.line = default_line - val.line;
1791 else
1792 val.line = 1;
1793 break;
1794 case none:
1795 break; /* No need to adjust val.line. */
1796 }
1797
1798 while (*p == ' ' || *p == '\t') p++;
1799 *argptr = p;
1800 if (s == 0)
1801 s = default_symtab;
1802 val.symtab = s;
1803 val.pc = 0;
1804 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1805 values.sals[0] = val;
1806 values.nelts = 1;
1807 return values;
1808 }
1809
1810 /* Arg token is not digits => try it as a variable name
1811 Find the next token (everything up to end or next whitespace). */
1812
1813 p = skip_quoted (*argptr);
1814 copy = (char *) alloca (p - *argptr + 1);
1815 memcpy (copy, *argptr, p - *argptr);
1816 copy[p - *argptr] = '\0';
1817 if ((copy[0] == copy [p - *argptr - 1])
1818 && strchr (gdb_completer_quote_characters, copy[0]) != NULL)
1819 {
1820 char *temp;
1821 copy [p - *argptr - 1] = '\0';
1822 copy++;
1823 if ((temp = expensive_mangler (copy)) != NULL)
1824 {
1825 copy = temp;
1826 }
1827 }
1828 while (*p == ' ' || *p == '\t') p++;
1829 *argptr = p;
1830
1831 /* Look up that token as a variable.
1832 If file specified, use that file's per-file block to start with. */
1833
1834 sym = lookup_symbol (copy,
1835 (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
1836 : get_selected_block ()),
1837 VAR_NAMESPACE, 0, &sym_symtab);
1838
1839 if (sym != NULL)
1840 {
1841 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
1842 {
1843 /* Arg is the name of a function */
1844 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1845 if (funfirstline)
1846 SKIP_PROLOGUE (pc);
1847 val = find_pc_line (pc, 0);
1848 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
1849 /* Convex: no need to suppress code on first line, if any */
1850 val.pc = pc;
1851 #else
1852 /* If SKIP_PROLOGUE left us in mid-line, and the next line is still
1853 part of the same function:
1854 advance to next line,
1855 recalculate its line number (might not be N+1). */
1856 if (val.pc != pc && val.end &&
1857 lookup_minimal_symbol_by_pc (pc) == lookup_minimal_symbol_by_pc (val.end)) {
1858 pc = val.end; /* First pc of next line */
1859 val = find_pc_line (pc, 0);
1860 }
1861 val.pc = pc;
1862 #endif
1863 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1864 values.sals[0] = val;
1865 values.nelts = 1;
1866
1867 /* I think this is always the same as the line that
1868 we calculate above, but the general principle is
1869 "trust the symbols more than stuff like
1870 SKIP_PROLOGUE". */
1871 if (SYMBOL_LINE (sym) != 0)
1872 values.sals[0].line = SYMBOL_LINE (sym);
1873
1874 return values;
1875 }
1876 else if (SYMBOL_LINE (sym) != 0)
1877 {
1878 /* We know its line number. */
1879 values.sals = (struct symtab_and_line *)
1880 xmalloc (sizeof (struct symtab_and_line));
1881 values.nelts = 1;
1882 memset (&values.sals[0], 0, sizeof (values.sals[0]));
1883 values.sals[0].symtab = sym_symtab;
1884 values.sals[0].line = SYMBOL_LINE (sym);
1885 return values;
1886 }
1887 else
1888 /* This can happen if it is compiled with a compiler which doesn't
1889 put out line numbers for variables. */
1890 error ("Line number not known for symbol \"%s\"", copy);
1891 }
1892
1893 msymbol = lookup_minimal_symbol (copy, (struct objfile *) NULL);
1894 if (msymbol != NULL)
1895 {
1896 val.symtab = 0;
1897 val.line = 0;
1898 val.pc = msymbol -> address + FUNCTION_START_OFFSET;
1899 if (funfirstline)
1900 SKIP_PROLOGUE (val.pc);
1901 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1902 values.sals[0] = val;
1903 values.nelts = 1;
1904 return values;
1905 }
1906
1907 if (!have_full_symbols () &&
1908 !have_partial_symbols () && !have_minimal_symbols ())
1909 error (no_symtab_msg);
1910
1911 error ("Function \"%s\" not defined.", copy);
1912 return values; /* for lint */
1913 }
1914
1915 struct symtabs_and_lines
1916 decode_line_spec (string, funfirstline)
1917 char *string;
1918 int funfirstline;
1919 {
1920 struct symtabs_and_lines sals;
1921 if (string == 0)
1922 error ("Empty line specification.");
1923 sals = decode_line_1 (&string, funfirstline,
1924 current_source_symtab, current_source_line);
1925 if (*string)
1926 error ("Junk at end of line specification: %s", string);
1927 return sals;
1928 }
1929
1930 /* Given a list of NELTS symbols in sym_arr (with corresponding
1931 mangled names in physnames), return a list of lines to operate on
1932 (ask user if necessary). */
1933 static struct symtabs_and_lines
1934 decode_line_2 (sym_arr, nelts, funfirstline)
1935 struct symbol *sym_arr[];
1936 int nelts;
1937 int funfirstline;
1938 {
1939 struct symtabs_and_lines values, return_values;
1940 register CORE_ADDR pc;
1941 char *args, *arg1;
1942 int i;
1943 char *prompt;
1944 char *demangled;
1945
1946 values.sals = (struct symtab_and_line *) alloca (nelts * sizeof(struct symtab_and_line));
1947 return_values.sals = (struct symtab_and_line *) xmalloc (nelts * sizeof(struct symtab_and_line));
1948
1949 i = 0;
1950 printf("[0] cancel\n[1] all\n");
1951 while (i < nelts)
1952 {
1953 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
1954 {
1955 /* Arg is the name of a function */
1956 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym_arr[i]))
1957 + FUNCTION_START_OFFSET;
1958 if (funfirstline)
1959 SKIP_PROLOGUE (pc);
1960 values.sals[i] = find_pc_line (pc, 0);
1961 values.sals[i].pc = (values.sals[i].end && values.sals[i].pc != pc) ?
1962 values.sals[i].end : pc;
1963 demangled = cplus_demangle (SYMBOL_NAME (sym_arr[i]),
1964 DMGL_PARAMS | DMGL_ANSI);
1965 printf("[%d] %s at %s:%d\n", (i+2),
1966 demangled ? demangled : SYMBOL_NAME (sym_arr[i]),
1967 values.sals[i].symtab->filename, values.sals[i].line);
1968 if (demangled != NULL)
1969 {
1970 free (demangled);
1971 }
1972 }
1973 else printf ("?HERE\n");
1974 i++;
1975 }
1976
1977 if ((prompt = getenv ("PS2")) == NULL)
1978 {
1979 prompt = ">";
1980 }
1981 printf("%s ",prompt);
1982 fflush(stdout);
1983
1984 args = command_line_input ((char *) NULL, 0);
1985
1986 if (args == 0)
1987 error_no_arg ("one or more choice numbers");
1988
1989 i = 0;
1990 while (*args)
1991 {
1992 int num;
1993
1994 arg1 = args;
1995 while (*arg1 >= '0' && *arg1 <= '9') arg1++;
1996 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
1997 error ("Arguments must be choice numbers.");
1998
1999 num = atoi (args);
2000
2001 if (num == 0)
2002 error ("cancelled");
2003 else if (num == 1)
2004 {
2005 memcpy (return_values.sals, values.sals,
2006 (nelts * sizeof(struct symtab_and_line)));
2007 return_values.nelts = nelts;
2008 return return_values;
2009 }
2010
2011 if (num > nelts + 2)
2012 {
2013 printf ("No choice number %d.\n", num);
2014 }
2015 else
2016 {
2017 num -= 2;
2018 if (values.sals[num].pc)
2019 {
2020 return_values.sals[i++] = values.sals[num];
2021 values.sals[num].pc = 0;
2022 }
2023 else
2024 {
2025 printf ("duplicate request for %d ignored.\n", num);
2026 }
2027 }
2028
2029 args = arg1;
2030 while (*args == ' ' || *args == '\t') args++;
2031 }
2032 return_values.nelts = i;
2033 return return_values;
2034 }
2035
2036 \f
2037 /* Slave routine for sources_info. Force line breaks at ,'s.
2038 NAME is the name to print and *FIRST is nonzero if this is the first
2039 name printed. Set *FIRST to zero. */
2040 static void
2041 output_source_filename (name, first)
2042 char *name;
2043 int *first;
2044 {
2045 /* Table of files printed so far. Since a single source file can
2046 result in several partial symbol tables, we need to avoid printing
2047 it more than once. Note: if some of the psymtabs are read in and
2048 some are not, it gets printed both under "Source files for which
2049 symbols have been read" and "Source files for which symbols will
2050 be read in on demand". I consider this a reasonable way to deal
2051 with the situation. I'm not sure whether this can also happen for
2052 symtabs; it doesn't hurt to check. */
2053 static char **tab = NULL;
2054 /* Allocated size of tab in elements.
2055 Start with one 256-byte block (when using GNU malloc.c).
2056 24 is the malloc overhead when range checking is in effect. */
2057 static int tab_alloc_size = (256 - 24) / sizeof (char *);
2058 /* Current size of tab in elements. */
2059 static int tab_cur_size;
2060
2061 char **p;
2062
2063 if (*first)
2064 {
2065 if (tab == NULL)
2066 tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
2067 tab_cur_size = 0;
2068 }
2069
2070 /* Is NAME in tab? */
2071 for (p = tab; p < tab + tab_cur_size; p++)
2072 if (strcmp (*p, name) == 0)
2073 /* Yes; don't print it again. */
2074 return;
2075 /* No; add it to tab. */
2076 if (tab_cur_size == tab_alloc_size)
2077 {
2078 tab_alloc_size *= 2;
2079 tab = (char **) xrealloc ((char *) tab, tab_alloc_size * sizeof (*tab));
2080 }
2081 tab[tab_cur_size++] = name;
2082
2083 if (*first)
2084 {
2085 *first = 0;
2086 }
2087 else
2088 {
2089 printf_filtered (", ");
2090 }
2091
2092 wrap_here ("");
2093 fputs_filtered (name, stdout);
2094 }
2095
2096 static void
2097 sources_info (ignore, from_tty)
2098 char *ignore;
2099 int from_tty;
2100 {
2101 register struct symtab *s;
2102 register struct partial_symtab *ps;
2103 register struct objfile *objfile;
2104 int first;
2105
2106 if (!have_full_symbols () && !have_partial_symbols ())
2107 {
2108 error (no_symtab_msg);
2109 }
2110
2111 printf_filtered ("Source files for which symbols have been read in:\n\n");
2112
2113 first = 1;
2114 ALL_SYMTABS (objfile, s)
2115 {
2116 output_source_filename (s -> filename, &first);
2117 }
2118 printf_filtered ("\n\n");
2119
2120 printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2121
2122 first = 1;
2123 ALL_PSYMTABS (objfile, ps)
2124 {
2125 if (!ps->readin)
2126 {
2127 output_source_filename (ps -> filename, &first);
2128 }
2129 }
2130 printf_filtered ("\n");
2131 }
2132
2133 static int
2134 name_match (name)
2135 char *name;
2136 {
2137 char *demangled = cplus_demangle (name, DMGL_ANSI);
2138 if (demangled != NULL)
2139 {
2140 int cond = re_exec (demangled);
2141 free (demangled);
2142 return (cond);
2143 }
2144 return (re_exec (name));
2145 }
2146 #define NAME_MATCH(NAME) name_match(NAME)
2147
2148 /* List all symbols (if REGEXP is 0) or all symbols matching REGEXP.
2149 If CLASS is zero, list all symbols except functions, type names, and
2150 constants (enums).
2151 If CLASS is 1, list only functions.
2152 If CLASS is 2, list only type names.
2153 If CLASS is 3, list only method names.
2154
2155 BPT is non-zero if we should set a breakpoint at the functions
2156 we find. */
2157
2158 static void
2159 list_symbols (regexp, class, bpt)
2160 char *regexp;
2161 int class;
2162 int bpt;
2163 {
2164 register struct symtab *s;
2165 register struct partial_symtab *ps;
2166 register struct blockvector *bv;
2167 struct blockvector *prev_bv = 0;
2168 register struct block *b;
2169 register int i, j;
2170 register struct symbol *sym;
2171 struct partial_symbol *psym;
2172 struct objfile *objfile;
2173 struct minimal_symbol *msymbol;
2174 char *val;
2175 static char *classnames[]
2176 = {"variable", "function", "type", "method"};
2177 int found_in_file = 0;
2178 int found_misc = 0;
2179 static enum minimal_symbol_type types[]
2180 = {mst_data, mst_text, mst_abs, mst_unknown};
2181 static enum minimal_symbol_type types2[]
2182 = {mst_bss, mst_text, mst_abs, mst_unknown};
2183 enum minimal_symbol_type ourtype = types[class];
2184 enum minimal_symbol_type ourtype2 = types2[class];
2185
2186 if (regexp)
2187 {
2188 /* Make sure spacing is right for C++ operators.
2189 This is just a courtesy to make the matching less sensitive
2190 to how many spaces the user leaves between 'operator'
2191 and <TYPENAME> or <OPERATOR>. */
2192 char *opend;
2193 char *opname = operator_chars (regexp, &opend);
2194 if (*opname)
2195 {
2196 int fix = -1; /* -1 means ok; otherwise number of spaces needed. */
2197 if (isalpha(*opname) || *opname == '_' || *opname == '$')
2198 {
2199 /* There should 1 space between 'operator' and 'TYPENAME'. */
2200 if (opname[-1] != ' ' || opname[-2] == ' ')
2201 fix = 1;
2202 }
2203 else
2204 {
2205 /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2206 if (opname[-1] == ' ')
2207 fix = 0;
2208 }
2209 /* If wrong number of spaces, fix it. */
2210 if (fix >= 0)
2211 {
2212 char *tmp = (char*) alloca(opend-opname+10);
2213 sprintf(tmp, "operator%.*s%s", fix, " ", opname);
2214 regexp = tmp;
2215 }
2216 }
2217
2218 if (0 != (val = re_comp (regexp)))
2219 error ("Invalid regexp (%s): %s", val, regexp);
2220 }
2221
2222 /* Search through the partial symtabs *first* for all symbols
2223 matching the regexp. That way we don't have to reproduce all of
2224 the machinery below. */
2225
2226 ALL_PSYMTABS (objfile, ps)
2227 {
2228 struct partial_symbol *bound, *gbound, *sbound;
2229 int keep_going = 1;
2230
2231 if (ps->readin) continue;
2232
2233 gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2234 sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2235 bound = gbound;
2236
2237 /* Go through all of the symbols stored in a partial
2238 symtab in one loop. */
2239 psym = objfile->global_psymbols.list + ps->globals_offset;
2240 while (keep_going)
2241 {
2242 if (psym >= bound)
2243 {
2244 if (bound == gbound && ps->n_static_syms != 0)
2245 {
2246 psym = objfile->static_psymbols.list + ps->statics_offset;
2247 bound = sbound;
2248 }
2249 else
2250 keep_going = 0;
2251 continue;
2252 }
2253 else
2254 {
2255 QUIT;
2256
2257 /* If it would match (logic taken from loop below)
2258 load the file and go on to the next one */
2259 if ((regexp == 0 || NAME_MATCH (SYMBOL_NAME (psym)))
2260 && ((class == 0 && SYMBOL_CLASS (psym) != LOC_TYPEDEF
2261 && SYMBOL_CLASS (psym) != LOC_BLOCK)
2262 || (class == 1 && SYMBOL_CLASS (psym) == LOC_BLOCK)
2263 || (class == 2 && SYMBOL_CLASS (psym) == LOC_TYPEDEF)
2264 || (class == 3 && SYMBOL_CLASS (psym) == LOC_BLOCK)))
2265 {
2266 PSYMTAB_TO_SYMTAB(ps);
2267 keep_going = 0;
2268 }
2269 }
2270 psym++;
2271 }
2272 }
2273
2274 /* Here, we search through the minimal symbol tables for functions that
2275 match, and call find_pc_symtab on them to force their symbols to
2276 be read. The symbol will then be found during the scan of symtabs
2277 below. If find_pc_symtab fails, set found_misc so that we will
2278 rescan to print any matching symbols without debug info. */
2279
2280 if (class == 1)
2281 {
2282 ALL_MSYMBOLS (objfile, msymbol)
2283 {
2284 if (msymbol -> type == ourtype || msymbol -> type == ourtype2)
2285 {
2286 if (regexp == 0 || NAME_MATCH (msymbol -> name))
2287 {
2288 if (0 == find_pc_symtab (msymbol -> address))
2289 {
2290 found_misc = 1;
2291 }
2292 }
2293 }
2294 }
2295 }
2296
2297 /* Printout here so as to get after the "Reading in symbols"
2298 messages which will be generated above. */
2299 if (!bpt)
2300 printf_filtered (regexp
2301 ? "All %ss matching regular expression \"%s\":\n"
2302 : "All defined %ss:\n",
2303 classnames[class],
2304 regexp);
2305
2306 ALL_SYMTABS (objfile, s)
2307 {
2308 found_in_file = 0;
2309 bv = BLOCKVECTOR (s);
2310 /* Often many files share a blockvector.
2311 Scan each blockvector only once so that
2312 we don't get every symbol many times.
2313 It happens that the first symtab in the list
2314 for any given blockvector is the main file. */
2315 if (bv != prev_bv)
2316 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
2317 {
2318 b = BLOCKVECTOR_BLOCK (bv, i);
2319 /* Skip the sort if this block is always sorted. */
2320 if (!BLOCK_SHOULD_SORT (b))
2321 sort_block_syms (b);
2322 for (j = 0; j < BLOCK_NSYMS (b); j++)
2323 {
2324 QUIT;
2325 sym = BLOCK_SYM (b, j);
2326 if ((regexp == 0 || NAME_MATCH (SYMBOL_NAME (sym)))
2327 && ((class == 0 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
2328 && SYMBOL_CLASS (sym) != LOC_BLOCK
2329 && SYMBOL_CLASS (sym) != LOC_CONST)
2330 || (class == 1 && SYMBOL_CLASS (sym) == LOC_BLOCK)
2331 || (class == 2 && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2332 || (class == 3 && SYMBOL_CLASS (sym) == LOC_BLOCK)))
2333 {
2334 if (bpt)
2335 {
2336 /* Set a breakpoint here, if it's a function */
2337 if (class == 1)
2338 break_command (SYMBOL_NAME(sym), 0);
2339 }
2340 else if (!found_in_file)
2341 {
2342 fputs_filtered ("\nFile ", stdout);
2343 fputs_filtered (s->filename, stdout);
2344 fputs_filtered (":\n", stdout);
2345 }
2346 found_in_file = 1;
2347
2348 if (class != 2 && i == STATIC_BLOCK)
2349 printf_filtered ("static ");
2350
2351 /* Typedef that is not a C++ class */
2352 if (class == 2
2353 && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
2354 typedef_print (SYMBOL_TYPE(sym), sym, stdout);
2355 /* variable, func, or typedef-that-is-c++-class */
2356 else if (class < 2 ||
2357 (class == 2 &&
2358 SYMBOL_NAMESPACE(sym) == STRUCT_NAMESPACE))
2359 {
2360 type_print (SYMBOL_TYPE (sym),
2361 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2362 ? "" : SYMBOL_NAME (sym)),
2363 stdout, 0);
2364
2365 printf_filtered (";\n");
2366 }
2367 else
2368 {
2369 # if 0
2370 /* FIXME, why is this zapped out? */
2371 char buf[1024];
2372 type_print_base (TYPE_FN_FIELD_TYPE(t, i), stdout, 0, 0);
2373 type_print_varspec_prefix (TYPE_FN_FIELD_TYPE(t, i), stdout, 0);
2374 sprintf (buf, " %s::", type_name_no_tag (t));
2375 type_print_method_args (TYPE_FN_FIELD_ARGS (t, i), buf, name, stdout);
2376 # endif
2377 }
2378 }
2379 }
2380 }
2381 prev_bv = bv;
2382 }
2383
2384 /* If there are no eyes, avoid all contact. I mean, if there are
2385 no debug symbols, then print directly from the msymbol_vector. */
2386
2387 if (found_misc || class != 1)
2388 {
2389 found_in_file = 0;
2390 ALL_MSYMBOLS (objfile, msymbol)
2391 {
2392 if (msymbol -> type == ourtype || msymbol -> type == ourtype2)
2393 {
2394 if (regexp == 0 || NAME_MATCH (msymbol -> name))
2395 {
2396 /* Functions: Look up by address. */
2397 if (class != 1 ||
2398 (0 == find_pc_symtab (msymbol -> address)))
2399 {
2400 /* Variables/Absolutes: Look up by name */
2401 if (lookup_symbol (msymbol -> name,
2402 (struct block *) 0, VAR_NAMESPACE, 0,
2403 (struct symtab **) 0) == NULL)
2404 {
2405 if (!found_in_file)
2406 {
2407 printf_filtered ("\nNon-debugging symbols:\n");
2408 found_in_file = 1;
2409 }
2410 printf_filtered (" %08x %s\n",
2411 msymbol -> address,
2412 msymbol -> name);
2413 }
2414 }
2415 }
2416 }
2417 }
2418 }
2419 }
2420
2421 static void
2422 variables_info (regexp, from_tty)
2423 char *regexp;
2424 int from_tty;
2425 {
2426 list_symbols (regexp, 0, 0);
2427 }
2428
2429 static void
2430 functions_info (regexp, from_tty)
2431 char *regexp;
2432 int from_tty;
2433 {
2434 list_symbols (regexp, 1, 0);
2435 }
2436
2437 static void
2438 types_info (regexp, from_tty)
2439 char *regexp;
2440 int from_tty;
2441 {
2442 list_symbols (regexp, 2, 0);
2443 }
2444
2445 #if 0
2446 /* Tiemann says: "info methods was never implemented." */
2447 static void
2448 methods_info (regexp)
2449 char *regexp;
2450 {
2451 list_symbols (regexp, 3, 0);
2452 }
2453 #endif /* 0 */
2454
2455 /* Breakpoint all functions matching regular expression. */
2456 static void
2457 rbreak_command (regexp, from_tty)
2458 char *regexp;
2459 int from_tty;
2460 {
2461 list_symbols (regexp, 1, 1);
2462 }
2463 \f
2464
2465 /* Return Nonzero if block a is lexically nested within block b,
2466 or if a and b have the same pc range.
2467 Return zero otherwise. */
2468 int
2469 contained_in (a, b)
2470 struct block *a, *b;
2471 {
2472 if (!a || !b)
2473 return 0;
2474 return BLOCK_START (a) >= BLOCK_START (b)
2475 && BLOCK_END (a) <= BLOCK_END (b);
2476 }
2477
2478 \f
2479 /* Helper routine for make_symbol_completion_list. */
2480
2481 static int return_val_size;
2482 static int return_val_index;
2483 static char **return_val;
2484
2485 /* Test to see if the symbol specified by SYMNAME (or it's demangled
2486 equivalent) matches TEXT in the first TEXT_LEN characters. If so,
2487 add it to the current completion list. */
2488
2489 static void
2490 completion_list_add_symbol (symname, text, text_len)
2491 char *symname;
2492 char *text;
2493 int text_len;
2494 {
2495 char *demangled;
2496 int newsize;
2497 int i;
2498
2499 /* clip symbols that cannot match */
2500
2501 if (!cplus_match (symname, text, text_len)) {
2502 return;
2503 }
2504
2505 /* matches mangled, may match unmangled. now clip any symbol names
2506 that we've already considered. (This is a time optimization) */
2507
2508 for (i = 0; i < return_val_index; ++i) {
2509 if (strcmp (symname, return_val[i]) == 0) {
2510 return;
2511 }
2512 }
2513
2514 /* See if SYMNAME is a C++ mangled name, and if so, use the
2515 demangled name instead, including any parameters. */
2516
2517 if ((demangled = cplus_demangle (symname, DMGL_PARAMS | DMGL_ANSI)) != NULL)
2518 {
2519 if (strncmp (demangled, text, text_len) != 0) {
2520 return;
2521 } /* demangled, but didn't match so clip it */
2522
2523 symname = demangled;
2524 } else {
2525 symname = savestring (symname, strlen (symname));
2526 }
2527
2528 /* If we have a match for a completion, then add SYMNAME to the current
2529 list of matches. Note that the name is in freshly malloc'd space;
2530 either from cplus_demangle or from savestring above. */
2531
2532 if (return_val_index + 3 > return_val_size)
2533 {
2534 newsize = (return_val_size *= 2) * sizeof (char *);
2535 return_val = (char **) xrealloc ((char *) return_val, newsize);
2536 }
2537 return_val[return_val_index++] = symname;
2538 return_val[return_val_index] = NULL;
2539
2540 return;
2541 }
2542
2543 /* Return a NULL terminated array of all symbols (regardless of class) which
2544 begin by matching TEXT. If the answer is no symbols, then the return value
2545 is an array which contains only a NULL pointer.
2546
2547 Problem: All of the symbols have to be copied because readline frees them.
2548 I'm not going to worry about this; hopefully there won't be that many. */
2549
2550 char **
2551 make_symbol_completion_list (text)
2552 char *text;
2553 {
2554 register struct symbol *sym;
2555 register struct symtab *s;
2556 register struct partial_symtab *ps;
2557 register struct minimal_symbol *msymbol;
2558 register struct objfile *objfile;
2559 register struct block *b, *surrounding_static_block = 0;
2560 register int i, j;
2561 int text_len;
2562 struct partial_symbol *psym;
2563
2564 text_len = strlen (text);
2565 return_val_size = 100;
2566 return_val_index = 0;
2567 return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
2568 return_val[0] = NULL;
2569
2570 /* Look through the partial symtabs for all symbols which begin
2571 by matching TEXT. Add each one that you find to the list. */
2572
2573 ALL_PSYMTABS (objfile, ps)
2574 {
2575 /* If the psymtab's been read in we'll get it when we search
2576 through the blockvector. */
2577 if (ps->readin) continue;
2578
2579 for (psym = objfile->global_psymbols.list + ps->globals_offset;
2580 psym < (objfile->global_psymbols.list + ps->globals_offset
2581 + ps->n_global_syms);
2582 psym++)
2583 {
2584 /* If interrupted, then quit. */
2585 QUIT;
2586 completion_list_add_symbol (SYMBOL_NAME (psym), text, text_len);
2587 }
2588
2589 for (psym = objfile->static_psymbols.list + ps->statics_offset;
2590 psym < (objfile->static_psymbols.list + ps->statics_offset
2591 + ps->n_static_syms);
2592 psym++)
2593 {
2594 QUIT;
2595 completion_list_add_symbol (SYMBOL_NAME (psym), text, text_len);
2596 }
2597 }
2598
2599 /* At this point scan through the misc symbol vectors and add each
2600 symbol you find to the list. Eventually we want to ignore
2601 anything that isn't a text symbol (everything else will be
2602 handled by the psymtab code above). */
2603
2604 ALL_MSYMBOLS (objfile, msymbol)
2605 {
2606 QUIT;
2607 completion_list_add_symbol (msymbol -> name, text, text_len);
2608 }
2609
2610 /* Search upwards from currently selected frame (so that we can
2611 complete on local vars. */
2612
2613 for (b = get_selected_block (); b != NULL; b = BLOCK_SUPERBLOCK (b))
2614 {
2615 if (!BLOCK_SUPERBLOCK (b))
2616 {
2617 surrounding_static_block = b; /* For elmin of dups */
2618 }
2619
2620 /* Also catch fields of types defined in this places which match our
2621 text string. Only complete on types visible from current context. */
2622
2623 for (i = 0; i < BLOCK_NSYMS (b); i++)
2624 {
2625 sym = BLOCK_SYM (b, i);
2626 completion_list_add_symbol (SYMBOL_NAME (sym), text, text_len);
2627 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2628 {
2629 struct type *t = SYMBOL_TYPE (sym);
2630 enum type_code c = TYPE_CODE (t);
2631
2632 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2633 {
2634 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2635 {
2636 if (TYPE_FIELD_NAME (t, j))
2637 {
2638 completion_list_add_symbol (TYPE_FIELD_NAME (t, j),
2639 text, text_len);
2640 }
2641 }
2642 }
2643 }
2644 }
2645 }
2646
2647 /* Go through the symtabs and check the externs and statics for
2648 symbols which match. */
2649
2650 ALL_SYMTABS (objfile, s)
2651 {
2652 QUIT;
2653 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2654 for (i = 0; i < BLOCK_NSYMS (b); i++)
2655 {
2656 sym = BLOCK_SYM (b, i);
2657 completion_list_add_symbol (SYMBOL_NAME (sym), text, text_len);
2658 }
2659 }
2660
2661 ALL_SYMTABS (objfile, s)
2662 {
2663 QUIT;
2664 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
2665 /* Don't do this block twice. */
2666 if (b == surrounding_static_block) continue;
2667 for (i = 0; i < BLOCK_NSYMS (b); i++)
2668 {
2669 sym = BLOCK_SYM (b, i);
2670 completion_list_add_symbol (SYMBOL_NAME (sym), text, text_len);
2671 }
2672 }
2673
2674 return (return_val);
2675 }
2676
2677 \f
2678 /* Find a mangled symbol that corresponds to LOOKFOR using brute force.
2679 Basically we go munging through available symbols, demangling each one,
2680 looking for a match on the demangled result. */
2681
2682 static char *
2683 expensive_mangler (lookfor)
2684 const char *lookfor;
2685 {
2686 register struct symbol *sym;
2687 register struct symtab *s;
2688 register struct partial_symtab *ps;
2689 register struct minimal_symbol *msymbol;
2690 register struct objfile *objfile;
2691 register struct block *b, *surrounding_static_block = 0;
2692 register int i, j;
2693 struct partial_symbol *psym;
2694 char *demangled;
2695
2696 /* Look through the partial symtabs for a symbol that matches */
2697
2698 ALL_PSYMTABS (objfile, ps)
2699 {
2700 /* If the psymtab's been read in we'll get it when we search
2701 through the blockvector. */
2702 if (ps->readin) continue;
2703
2704 for (psym = objfile->global_psymbols.list + ps->globals_offset;
2705 psym < (objfile->global_psymbols.list + ps->globals_offset
2706 + ps->n_global_syms);
2707 psym++)
2708 {
2709 QUIT; /* If interrupted, then quit. */
2710 demangled = demangle_and_match (SYMBOL_NAME (psym), lookfor,
2711 DMGL_PARAMS | DMGL_ANSI);
2712 if (demangled != NULL)
2713 {
2714 free (demangled);
2715 return (SYMBOL_NAME (psym));
2716 }
2717 }
2718
2719 for (psym = objfile->static_psymbols.list + ps->statics_offset;
2720 psym < (objfile->static_psymbols.list + ps->statics_offset
2721 + ps->n_static_syms);
2722 psym++)
2723 {
2724 QUIT;
2725 demangled = demangle_and_match (SYMBOL_NAME (psym), lookfor,
2726 DMGL_PARAMS | DMGL_ANSI);
2727 if (demangled != NULL)
2728 {
2729 free (demangled);
2730 return (SYMBOL_NAME (psym));
2731 }
2732 }
2733 }
2734
2735 /* Scan through the misc symbol vectors looking for a match. */
2736
2737 ALL_MSYMBOLS (objfile, msymbol)
2738 {
2739 QUIT;
2740 demangled = demangle_and_match (msymbol -> name, lookfor,
2741 DMGL_PARAMS | DMGL_ANSI);
2742 if (demangled != NULL)
2743 {
2744 free (demangled);
2745 return (msymbol -> name);
2746 }
2747 }
2748
2749 /* Search upwards from currently selected frame looking for a match */
2750
2751 for (b = get_selected_block (); b; b = BLOCK_SUPERBLOCK (b))
2752 {
2753 if (!BLOCK_SUPERBLOCK (b))
2754 surrounding_static_block = b; /* For elmin of dups */
2755
2756 /* Also catch fields of types defined in this places which
2757 match our text string. Only complete on types visible
2758 from current context. */
2759 for (i = 0; i < BLOCK_NSYMS (b); i++)
2760 {
2761 sym = BLOCK_SYM (b, i);
2762 demangled = demangle_and_match (SYMBOL_NAME (sym), lookfor,
2763 DMGL_PARAMS | DMGL_ANSI);
2764 if (demangled != NULL)
2765 {
2766 free (demangled);
2767 return (SYMBOL_NAME (sym));
2768 }
2769 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2770 {
2771 struct type *t = SYMBOL_TYPE (sym);
2772 enum type_code c = TYPE_CODE (t);
2773
2774 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2775 {
2776 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2777 {
2778 if (TYPE_FIELD_NAME (t, j))
2779 {
2780 demangled =
2781 demangle_and_match (TYPE_FIELD_NAME (t, j),
2782 lookfor,
2783 DMGL_PARAMS | DMGL_ANSI);
2784 if (demangled != NULL)
2785 {
2786 free (demangled);
2787 return (TYPE_FIELD_NAME (t, j));
2788 }
2789 }
2790 }
2791 }
2792 }
2793 }
2794 }
2795
2796 /* Go through the symtabs and check the externs and statics for
2797 symbols which match. */
2798
2799 ALL_SYMTABS (objfile, s)
2800 {
2801 QUIT;
2802 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2803 for (i = 0; i < BLOCK_NSYMS (b); i++)
2804 {
2805 sym = BLOCK_SYM (b, i);
2806 demangled = demangle_and_match (SYMBOL_NAME (sym), lookfor,
2807 DMGL_PARAMS | DMGL_ANSI);
2808 if (demangled != NULL)
2809 {
2810 free (demangled);
2811 return (SYMBOL_NAME (sym));
2812 }
2813 }
2814 }
2815
2816 ALL_SYMTABS (objfile, s)
2817 {
2818 QUIT;
2819 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
2820 /* Don't do this block twice. */
2821 if (b == surrounding_static_block) continue;
2822 for (i = 0; i < BLOCK_NSYMS (b); i++)
2823 {
2824 sym = BLOCK_SYM (b, i);
2825 demangled = demangle_and_match (SYMBOL_NAME (sym), lookfor,
2826 DMGL_PARAMS | DMGL_ANSI);
2827 if (demangled != NULL)
2828 {
2829 free (demangled);
2830 return (SYMBOL_NAME (sym));
2831 }
2832 }
2833 }
2834
2835 return (NULL);
2836 }
2837
2838 \f
2839 #if 0
2840 /* Add the type of the symbol sym to the type of the current
2841 function whose block we are in (assumed). The type of
2842 this current function is contained in *TYPE.
2843
2844 This basically works as follows: When we find a function
2845 symbol (N_FUNC with a 'f' or 'F' in the symbol name), we record
2846 a pointer to its type in the global in_function_type. Every
2847 time we come across a parameter symbol ('p' in its name), then
2848 this procedure adds the name and type of that parameter
2849 to the function type pointed to by *TYPE. (Which should correspond
2850 to in_function_type if it was called correctly).
2851
2852 Note that since we are modifying a type, the result of
2853 lookup_function_type() should be memcpy()ed before calling
2854 this. When not in strict typing mode, the expression
2855 evaluator can choose to ignore this.
2856
2857 Assumption: All of a function's parameter symbols will
2858 appear before another function symbol is found. The parameters
2859 appear in the same order in the argument list as they do in the
2860 symbol table. */
2861
2862 void
2863 add_param_to_type (type,sym)
2864 struct type **type;
2865 struct symbol *sym;
2866 {
2867 int num = ++(TYPE_NFIELDS(*type));
2868
2869 if(TYPE_NFIELDS(*type)-1)
2870 TYPE_FIELDS(*type) = (struct field *)
2871 (*current_objfile->xrealloc) ((char *)(TYPE_FIELDS(*type)),
2872 num*sizeof(struct field));
2873 else
2874 TYPE_FIELDS(*type) = (struct field *)
2875 (*current_objfile->xmalloc) (num*sizeof(struct field));
2876
2877 TYPE_FIELD_BITPOS(*type,num-1) = num-1;
2878 TYPE_FIELD_BITSIZE(*type,num-1) = 0;
2879 TYPE_FIELD_TYPE(*type,num-1) = SYMBOL_TYPE(sym);
2880 TYPE_FIELD_NAME(*type,num-1) = SYMBOL_NAME(sym);
2881 }
2882 #endif
2883 \f
2884 void
2885 _initialize_symtab ()
2886 {
2887 add_info ("variables", variables_info,
2888 "All global and static variable names, or those matching REGEXP.");
2889 add_info ("functions", functions_info,
2890 "All function names, or those matching REGEXP.");
2891
2892 /* FIXME: This command has at least the following problems:
2893 1. It prints builtin types (in a very strange and confusing fashion).
2894 2. It doesn't print right, e.g. with
2895 typedef struct foo *FOO
2896 type_print prints "FOO" when we want to make it (in this situation)
2897 print "struct foo *".
2898 I also think "ptype" or "whatis" is more likely to be useful (but if
2899 there is much disagreement "info types" can be fixed). */
2900 add_info ("types", types_info,
2901 "All type names, or those matching REGEXP.");
2902
2903 #if 0
2904 add_info ("methods", methods_info,
2905 "All method names, or those matching REGEXP::REGEXP.\n\
2906 If the class qualifier is omitted, it is assumed to be the current scope.\n\
2907 If the first REGEXP is omitted, then all methods matching the second REGEXP\n\
2908 are listed.");
2909 #endif
2910 add_info ("sources", sources_info,
2911 "Source files in the program.");
2912
2913 add_com ("rbreak", no_class, rbreak_command,
2914 "Set a breakpoint for all functions matching REGEXP.");
2915
2916 /* Initialize the one built-in type that isn't language dependent... */
2917 builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
2918 "<unknown type>", (struct objfile *) NULL);
2919 }
This page took 0.099516 seconds and 5 git commands to generate.