* hppa-tdep.c (hppa_push_arguments): Allocate enough space for
[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 extern int
49 find_methods PARAMS ((struct type *, char *, struct symbol **));
50
51 static void
52 completion_list_add_name PARAMS ((char *, char *, int));
53
54 static struct symtabs_and_lines
55 decode_line_2 PARAMS ((struct symbol *[], int, int));
56
57 static void
58 rbreak_command PARAMS ((char *, int));
59
60 static void
61 types_info PARAMS ((char *, int));
62
63 static void
64 functions_info PARAMS ((char *, int));
65
66 static void
67 variables_info PARAMS ((char *, int));
68
69 static void
70 sources_info PARAMS ((char *, int));
71
72 static void
73 list_symbols PARAMS ((char *, int, int));
74
75 static void
76 output_source_filename PARAMS ((char *, int *));
77
78 static char *
79 operator_chars PARAMS ((char *, char **));
80
81 static int
82 find_line_common PARAMS ((struct linetable *, int, int *));
83
84 static struct partial_symbol *
85 lookup_partial_symbol PARAMS ((struct partial_symtab *, const char *,
86 int, enum namespace));
87
88 static struct symtab *
89 lookup_symtab_1 PARAMS ((char *));
90
91 /* */
92
93 /* The single non-language-specific builtin type */
94 struct type *builtin_type_error;
95
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
98 value_of_this. */
99
100 const struct block *block_found;
101
102 char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
103
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 */
107
108 void
109 cplusplus_hint (name)
110 char *name;
111 {
112 printf ("Hint: try '%s<TAB> or '%s<ESC-?>\n", name, name);
113 printf ("(Note leading single quote.)\n");
114 }
115
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. */
119
120 static struct symtab *
121 lookup_symtab_1 (name)
122 char *name;
123 {
124 register struct symtab *s;
125 register struct partial_symtab *ps;
126 register char *slash;
127 register struct objfile *objfile;
128
129 got_symtab:
130
131 /* First, search for an exact match */
132
133 ALL_SYMTABS (objfile, s)
134 if (STREQ (name, s->filename))
135 return s;
136
137 slash = strchr (name, '/');
138
139 /* Now, search for a matching tail (only if name doesn't have any dirs) */
140
141 if (!slash)
142 ALL_SYMTABS (objfile, s)
143 {
144 char *p = s -> filename;
145 char *tail = strrchr (p, '/');
146
147 if (tail)
148 p = tail + 1;
149
150 if (STREQ (p, name))
151 return s;
152 }
153
154 /* Same search rules as above apply here, but now we look thru the
155 psymtabs. */
156
157 ALL_PSYMTABS (objfile, ps)
158 if (STREQ (name, ps -> filename))
159 goto got_psymtab;
160
161 if (!slash)
162 ALL_PSYMTABS (objfile, ps)
163 {
164 char *p = ps -> filename;
165 char *tail = strrchr (p, '/');
166
167 if (tail)
168 p = tail + 1;
169
170 if (STREQ (p, name))
171 goto got_psymtab;
172 }
173
174 return (NULL);
175
176 got_psymtab:
177
178 if (ps -> readin)
179 error ("Internal: readin %s pst for `%s' found when no symtab found.",
180 ps -> filename, name);
181
182 s = PSYMTAB_TO_SYMTAB (ps);
183
184 if (s)
185 return s;
186
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. */
195 goto got_symtab;
196 }
197
198 /* Lookup the symbol table of a source file named NAME. Try a couple
199 of variations if the first lookup doesn't work. */
200
201 struct symtab *
202 lookup_symtab (name)
203 char *name;
204 {
205 register struct symtab *s;
206 register char *copy;
207
208 s = lookup_symtab_1 (name);
209 if (s) return s;
210
211 /* If name not found as specified, see if adding ".c" helps. */
212
213 copy = (char *) alloca (strlen (name) + 3);
214 strcpy (copy, name);
215 strcat (copy, ".c");
216 s = lookup_symtab_1 (copy);
217 if (s) return s;
218
219 /* We didn't find anything; die. */
220 return 0;
221 }
222
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. */
226
227 struct partial_symtab *
228 lookup_partial_symtab (name)
229 char *name;
230 {
231 register struct partial_symtab *pst;
232 register struct objfile *objfile;
233
234 ALL_PSYMTABS (objfile, pst)
235 {
236 if (STREQ (name, pst -> filename))
237 {
238 return (pst);
239 }
240 }
241 return (NULL);
242 }
243 \f
244 /* Demangle a GDB method stub type.
245 Note that this function is g++ specific. */
246
247 char *
248 gdb_mangle_name (type, i, j)
249 struct type *type;
250 int i, j;
251 {
252 int mangled_name_len;
253 char *mangled_name;
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" : "";
264 char buf[20];
265 #ifndef GCC_MANGLE_BUG
266 int len = strlen (newname);
267
268 if (is_destructor)
269 {
270 mangled_name = (char*) xmalloc(strlen(physname)+1);
271 strcpy(mangled_name, physname);
272 return mangled_name;
273 }
274
275 sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
276 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
277 + strlen (buf) + len
278 + strlen (physname)
279 + 1);
280
281 /* Only needed for GNU-mangled names. ANSI-mangled names
282 work with the normal mechanisms. */
283 if (OPNAME_PREFIX_P (field_name))
284 {
285 char *opname = cplus_mangle_opname (field_name + 3, 0);
286 if (opname == NULL)
287 error ("No mangling for \"%s\"", field_name);
288 mangled_name_len += strlen (opname);
289 mangled_name = (char *)xmalloc (mangled_name_len);
290
291 strncpy (mangled_name, field_name, 3);
292 mangled_name[3] = '\0';
293 strcat (mangled_name, opname);
294 }
295 else
296 {
297 mangled_name = (char *)xmalloc (mangled_name_len);
298 if (is_constructor)
299 mangled_name[0] = '\0';
300 else
301 strcpy (mangled_name, field_name);
302 }
303 strcat (mangled_name, buf);
304 strcat (mangled_name, newname);
305 #else
306 char *opname;
307
308 if (is_constructor)
309 {
310 buf[0] = '\0';
311 }
312 else
313 {
314 sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
315 }
316
317 mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
318 + strlen (buf) + strlen (physname) + 1);
319
320 /* Only needed for GNU-mangled names. ANSI-mangled names
321 work with the normal mechanisms. */
322 if (OPNAME_PREFIX_P (field_name))
323 {
324 opname = cplus_mangle_opname (field_name + 3, 0);
325 if (opname == NULL)
326 {
327 error ("No mangling for \"%s\"", field_name);
328 }
329 mangled_name_len += strlen (opname);
330 mangled_name = (char *) xmalloc (mangled_name_len);
331
332 strncpy (mangled_name, field_name, 3);
333 strcpy (mangled_name + 3, opname);
334 }
335 else
336 {
337 mangled_name = (char *) xmalloc (mangled_name_len);
338 if (is_constructor)
339 {
340 mangled_name[0] = '\0';
341 }
342 else
343 {
344 strcpy (mangled_name, field_name);
345 }
346 }
347 strcat (mangled_name, buf);
348
349 #endif
350 strcat (mangled_name, physname);
351 return (mangled_name);
352 }
353
354 \f
355 /* Find which partial symtab on contains PC. Return 0 if none. */
356
357 struct partial_symtab *
358 find_pc_psymtab (pc)
359 register CORE_ADDR pc;
360 {
361 register struct partial_symtab *pst;
362 register struct objfile *objfile;
363
364 ALL_PSYMTABS (objfile, pst)
365 {
366 if (pc >= pst->textlow && pc < pst->texthigh)
367 return (pst);
368 }
369 return (NULL);
370 }
371
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;
377 CORE_ADDR pc;
378 {
379 struct partial_symbol *best, *p;
380 CORE_ADDR best_pc;
381
382 if (!psymtab)
383 psymtab = find_pc_psymtab (pc);
384 if (!psymtab)
385 return 0;
386
387 best_pc = psymtab->textlow - 1;
388
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);
392 p++)
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)
397 {
398 best_pc = SYMBOL_VALUE_ADDRESS (p);
399 best = p;
400 }
401 if (best_pc == psymtab->textlow - 1)
402 return 0;
403 return best;
404 }
405
406 \f
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.) */
417
418 struct symbol *
419 lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
420 const char *name;
421 register const struct block *block;
422 const enum namespace namespace;
423 int *is_a_field_of_this;
424 struct symtab **symtab;
425 {
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;
433 char *temp;
434 extern char *gdb_completer_word_break_characters;
435
436 /* Search specified block and its superiors. */
437
438 while (block != 0)
439 {
440 sym = lookup_block_symbol (block, name, namespace);
441 if (sym)
442 {
443 block_found = block;
444 if (symtab != NULL)
445 {
446 /* Search the list of symtabs for one which contains the
447 address of the start of this block. */
448 ALL_SYMTABS (objfile, s)
449 {
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))
454 goto found;
455 }
456 found:
457 *symtab = s;
458 }
459
460 return (sym);
461 }
462 block = BLOCK_SUPERBLOCK (block);
463 }
464
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)
473 {
474 struct block *b;
475 /* Find the right symtab. */
476 ALL_SYMTABS (objfile, s)
477 {
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))
482 {
483 sym = lookup_block_symbol (b, name, VAR_NAMESPACE);
484 if (sym)
485 {
486 block_found = b;
487 if (symtab != NULL)
488 *symtab = s;
489 return sym;
490 }
491 }
492 }
493 }
494
495
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)
499 {
500 struct value *v = value_of_this (0);
501
502 *is_a_field_of_this = 0;
503 if (v && check_field (v, name))
504 {
505 *is_a_field_of_this = 1;
506 if (symtab != NULL)
507 *symtab = NULL;
508 return 0;
509 }
510 }
511
512 /* Now search all global blocks. Do the symtab's first, then
513 check the psymtab's */
514
515 ALL_SYMTABS (objfile, s)
516 {
517 bv = BLOCKVECTOR (s);
518 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
519 sym = lookup_block_symbol (block, name, namespace);
520 if (sym)
521 {
522 block_found = block;
523 if (symtab != NULL)
524 *symtab = s;
525 return sym;
526 }
527 }
528
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. */
532
533 if (namespace == VAR_NAMESPACE)
534 {
535 msymbol = lookup_minimal_symbol (name, (struct objfile *) NULL);
536 if (msymbol != NULL)
537 {
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. */
541 if (s != NULL)
542 {
543 bv = BLOCKVECTOR (s);
544 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
545 sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
546 namespace);
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. */
549 if (!sym) {
550 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
551 sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
552 namespace);
553 }
554
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_".
558
559 This happens for Fortran "foo_" symbols,
560 which are "foo" in the symtab.
561
562 This can also happen if "asm" is used to make a
563 regular symbol but not a debugging symbol, e.g.
564 asm(".globl _main");
565 asm("_main:");
566 */
567
568 if (symtab != NULL)
569 *symtab = s;
570 return sym;
571 }
572 }
573 }
574
575 ALL_PSYMTABS (objfile, ps)
576 {
577 if (!ps->readin && lookup_partial_symbol (ps, name, 1, namespace))
578 {
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);
583 if (!sym)
584 error ("Internal: global symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
585 if (symtab != NULL)
586 *symtab = s;
587 return sym;
588 }
589 }
590
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 */
594
595 ALL_SYMTABS (objfile, s)
596 {
597 bv = BLOCKVECTOR (s);
598 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
599 sym = lookup_block_symbol (block, name, namespace);
600 if (sym)
601 {
602 block_found = block;
603 if (symtab != NULL)
604 *symtab = s;
605 return sym;
606 }
607 }
608
609 ALL_PSYMTABS (objfile, ps)
610 {
611 if (!ps->readin && lookup_partial_symbol (ps, name, 0, namespace))
612 {
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);
617 if (!sym)
618 error ("Internal: static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
619 if (symtab != NULL)
620 *symtab = s;
621 return sym;
622 }
623 }
624
625 /* Now search all per-file blocks for static mangled symbols.
626 Do the symtabs first, then check the psymtabs. */
627
628 if (namespace == VAR_NAMESPACE)
629 {
630 ALL_SYMTABS (objfile, s)
631 {
632 bv = BLOCKVECTOR (s);
633 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
634 sym = lookup_block_symbol (block, name, VAR_NAMESPACE);
635 if (sym)
636 {
637 block_found = block;
638 if (symtab != NULL)
639 *symtab = s;
640 return sym;
641 }
642 }
643
644 ALL_PSYMTABS (objfile, ps)
645 {
646 if (!ps->readin && lookup_partial_symbol (ps, name, 0, VAR_NAMESPACE))
647 {
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);
652 if (!sym)
653 error ("Internal: mangled static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename);
654 if (symtab != NULL)
655 *symtab = s;
656 return sym;
657 }
658 }
659 }
660
661 if (symtab != NULL)
662 *symtab = NULL;
663 return 0;
664 }
665
666 /* Look, in partial_symtab PST, for symbol NAME. Check the global
667 symbols if GLOBAL, the static symbols if not */
668
669 static struct partial_symbol *
670 lookup_partial_symbol (pst, name, global, namespace)
671 struct partial_symtab *pst;
672 const char *name;
673 int global;
674 enum namespace namespace;
675 {
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;
680
681 if (length == 0)
682 {
683 return (NULL);
684 }
685
686 start = (global ?
687 pst->objfile->global_psymbols.list + pst->globals_offset :
688 pst->objfile->static_psymbols.list + pst->statics_offset );
689
690 if (global) /* This means we can use a binary search. */
691 {
692 do_linear_search = 0;
693
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. */
698
699 bottom = start;
700 top = start + length - 1;
701 while (top > bottom)
702 {
703 center = bottom + (top - bottom) / 2;
704 assert (center < top);
705 if (!do_linear_search && SYMBOL_LANGUAGE (center) == language_cplus)
706 {
707 do_linear_search = 1;
708 }
709 if (STRCMP (SYMBOL_NAME (center), name) >= 0)
710 {
711 top = center;
712 }
713 else
714 {
715 bottom = center + 1;
716 }
717 }
718 assert (top == bottom);
719 while (STREQ (SYMBOL_NAME (top), name))
720 {
721 if (SYMBOL_NAMESPACE (top) == namespace)
722 {
723 return top;
724 }
725 top ++;
726 }
727 }
728
729 /* Can't use a binary search or else we found during the binary search that
730 we should also do a linear search. */
731
732 if (do_linear_search)
733 {
734 for (psym = start; psym < start + length; psym++)
735 {
736 if (namespace == SYMBOL_NAMESPACE (psym))
737 {
738 if (SYMBOL_MATCHES_NAME (psym, name))
739 {
740 return (psym);
741 }
742 }
743 }
744 }
745
746 return (NULL);
747 }
748
749 /* Find the psymtab containing main(). */
750 /* FIXME: What about languages without main() or specially linked
751 executables that have no main() ? */
752
753 struct partial_symtab *
754 find_main_psymtab ()
755 {
756 register struct partial_symtab *pst;
757 register struct objfile *objfile;
758
759 ALL_PSYMTABS (objfile, pst)
760 {
761 if (lookup_partial_symbol (pst, "main", 1, VAR_NAMESPACE))
762 {
763 return (pst);
764 }
765 }
766 return (NULL);
767 }
768
769 /* Search BLOCK for symbol NAME in NAMESPACE.
770
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. */
779
780 struct symbol *
781 lookup_block_symbol (block, name, namespace)
782 register const struct block *block;
783 const char *name;
784 const enum namespace namespace;
785 {
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;
790
791 /* If the blocks's symbols were sorted, start with a binary search. */
792
793 if (BLOCK_SHOULD_SORT (block))
794 {
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. */
800
801 do_linear_search = 0;
802 top = BLOCK_NSYMS (block);
803 bot = 0;
804
805 /* Advance BOT to not far before the first symbol whose name is NAME. */
806
807 while (1)
808 {
809 inc = (top - bot + 1);
810 /* No need to keep binary searching for the last few bits worth. */
811 if (inc < 4)
812 {
813 break;
814 }
815 inc = (inc >> 1) + bot;
816 sym = BLOCK_SYM (block, inc);
817 if (!do_linear_search && SYMBOL_LANGUAGE (sym) == language_cplus)
818 {
819 do_linear_search = 1;
820 }
821 if (SYMBOL_NAME (sym)[0] < name[0])
822 {
823 bot = inc;
824 }
825 else if (SYMBOL_NAME (sym)[0] > name[0])
826 {
827 top = inc;
828 }
829 else if (STRCMP (SYMBOL_NAME (sym), name) < 0)
830 {
831 bot = inc;
832 }
833 else
834 {
835 top = inc;
836 }
837 }
838
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
843 comes first. */
844
845 top = BLOCK_NSYMS (block);
846 while (bot < top)
847 {
848 sym = BLOCK_SYM (block, bot);
849 inc = SYMBOL_NAME (sym)[0] - name[0];
850 if (inc == 0)
851 {
852 inc = STRCMP (SYMBOL_NAME (sym), name);
853 }
854 if (inc == 0 && SYMBOL_NAMESPACE (sym) == namespace)
855 {
856 return (sym);
857 }
858 if (inc > 0)
859 {
860 break;
861 }
862 bot++;
863 }
864 }
865
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.
870
871 This loop is equivalent to the loop above, but hacked greatly for speed.
872
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
877 time on a match. */
878
879 if (do_linear_search)
880 {
881 top = BLOCK_NSYMS (block);
882 bot = 0;
883 while (bot < top)
884 {
885 sym = BLOCK_SYM (block, bot);
886 if (SYMBOL_NAMESPACE (sym) == namespace &&
887 SYMBOL_MATCHES_NAME (sym, name))
888 {
889 sym_found = sym;
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)
894 {
895 break;
896 }
897 }
898 bot++;
899 }
900 }
901 return (sym_found); /* Will be NULL if not found. */
902 }
903
904 \f
905 /* Return the symbol for the function which contains a specified
906 lexical block, described by a struct block BL. */
907
908 struct symbol *
909 block_function (bl)
910 struct block *bl;
911 {
912 while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
913 bl = BLOCK_SUPERBLOCK (bl);
914
915 return BLOCK_FUNCTION (bl);
916 }
917
918 /* Find the symtab associated with PC. Look through the psymtabs and read in
919 another symtab if necessary. */
920
921 struct symtab *
922 find_pc_symtab (pc)
923 register CORE_ADDR pc;
924 {
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;
931 int distance = 0;;
932
933
934 /* Search all symtabs for one whose file contains our pc */
935
936 ALL_SYMTABS (objfile, s)
937 {
938 bv = BLOCKVECTOR (s);
939 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
940 if (BLOCK_START (b) <= pc
941 && BLOCK_END (b) > pc
942 && (distance == 0
943 || BLOCK_END (b) - BLOCK_START (b) < distance))
944 {
945 distance = BLOCK_END (b) - BLOCK_START (b);
946 best_s = s;
947 }
948 }
949
950 if (best_s != NULL)
951 return(best_s);
952
953 s = NULL;
954 ps = find_pc_psymtab (pc);
955 if (ps)
956 {
957 if (ps->readin)
958 printf_filtered ("(Internal error: pc 0x%x in read in psymtab, but not in symtab.)\n", pc);
959 s = PSYMTAB_TO_SYMTAB (ps);
960 }
961 return (s);
962 }
963
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. */
971
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
977 symtab.
978
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
985 */
986
987 struct symtab_and_line
988 find_pc_line (pc, notcurrent)
989 CORE_ADDR pc;
990 int notcurrent;
991 {
992 struct symtab *s;
993 register struct linetable *l;
994 register int len;
995 register int i;
996 register struct linetable_entry *item;
997 struct symtab_and_line val;
998 struct blockvector *bv;
999
1000 /* Info on best line seen so far, and where it starts, and its file. */
1001
1002 struct linetable_entry *best = NULL;
1003 CORE_ADDR best_end = 0;
1004 struct symtab *best_symtab = 0;
1005
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;
1013
1014 /* Info on best line seen in this file. */
1015
1016 struct linetable_entry *prev;
1017
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. */
1023
1024 if (notcurrent) pc -= 1;
1025
1026 s = find_pc_symtab (pc);
1027 if (!s)
1028 {
1029 val.symtab = 0;
1030 val.line = 0;
1031 val.pc = pc;
1032 val.end = 0;
1033 return val;
1034 }
1035
1036 bv = BLOCKVECTOR (s);
1037
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. */
1041
1042 for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1043 {
1044 /* Find the best line in this symtab. */
1045 l = LINETABLE (s);
1046 if (!l)
1047 continue;
1048 len = l->nitems;
1049 if (len <= 0) /* See FIXME above. */
1050 {
1051 continue;
1052 }
1053
1054 prev = NULL;
1055 item = l->item; /* Get first line info */
1056
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))
1060 {
1061 alt = item;
1062 alt_symtab = s;
1063 }
1064
1065 for (i = 0; i < len; i++, item++)
1066 {
1067 /* Return the last line that did not start after PC. */
1068 if (item->pc > pc)
1069 break;
1070
1071 prev = item;
1072 }
1073
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. */
1078
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. */
1081
1082 if (prev && (!best || prev->pc > best->pc))
1083 {
1084 best = prev;
1085 best_symtab = s;
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;
1090 }
1091 }
1092
1093 if (!best_symtab)
1094 {
1095 if (!alt_symtab)
1096 { /* If we didn't find any line # info, just
1097 return zeros. */
1098 val.symtab = 0;
1099 val.line = 0;
1100 val.pc = pc;
1101 val.end = 0;
1102 }
1103 else
1104 {
1105 val.symtab = alt_symtab;
1106 val.line = alt->line - 1;
1107 val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1108 val.end = alt->pc;
1109 }
1110 }
1111 else
1112 {
1113 val.symtab = best_symtab;
1114 val.line = best->line;
1115 val.pc = best->pc;
1116 if (best_end && (!alt || best_end < alt->pc))
1117 val.end = best_end;
1118 else if (alt)
1119 val.end = alt->pc;
1120 else
1121 val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1122 }
1123 return val;
1124 }
1125 \f
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. */
1129
1130 CORE_ADDR
1131 find_line_pc (symtab, line)
1132 struct symtab *symtab;
1133 int line;
1134 {
1135 register struct linetable *l;
1136 register int ind;
1137 int dummy;
1138
1139 if (symtab == 0)
1140 return 0;
1141 l = LINETABLE (symtab);
1142 ind = find_line_common(l, line, &dummy);
1143 return (ind >= 0) ? l->item[ind].pc : 0;
1144 }
1145
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. */
1151
1152 int
1153 find_line_pc_range (symtab, thisline, startptr, endptr)
1154 struct symtab *symtab;
1155 int thisline;
1156 CORE_ADDR *startptr, *endptr;
1157 {
1158 register struct linetable *l;
1159 register int ind;
1160 int exact_match; /* did we get an exact linenumber match */
1161
1162 if (symtab == 0)
1163 return 0;
1164
1165 l = LINETABLE (symtab);
1166 ind = find_line_common (l, thisline, &exact_match);
1167 if (ind >= 0)
1168 {
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;
1174 else
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;
1180 else
1181 *endptr = find_line_pc (symtab, thisline+1);
1182 return 1;
1183 }
1184
1185 return 0;
1186 }
1187
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.
1191
1192 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
1193
1194 static int
1195 find_line_common (l, lineno, exact_match)
1196 register struct linetable *l;
1197 register int lineno;
1198 int *exact_match;
1199 {
1200 register int i;
1201 register int len;
1202
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. */
1206
1207 int best_index = -1;
1208 int best = 0;
1209
1210 if (lineno <= 0)
1211 return -1;
1212 if (l == 0)
1213 return -1;
1214
1215 len = l->nitems;
1216 for (i = 0; i < len; i++)
1217 {
1218 register struct linetable_entry *item = &(l->item[i]);
1219
1220 if (item->line == lineno)
1221 {
1222 *exact_match = 1;
1223 return i;
1224 }
1225
1226 if (item->line > lineno && (best == 0 || item->line < best))
1227 {
1228 best = item->line;
1229 best_index = i;
1230 }
1231 }
1232
1233 /* If we got here, we didn't get an exact match. */
1234
1235 *exact_match = 0;
1236 return best_index;
1237 }
1238
1239 int
1240 find_pc_line_pc_range (pc, startptr, endptr)
1241 CORE_ADDR pc;
1242 CORE_ADDR *startptr, *endptr;
1243 {
1244 struct symtab_and_line sal;
1245 sal = find_pc_line (pc, 0);
1246 *startptr = sal.pc;
1247 *endptr = sal.end;
1248 return sal.symtab != 0;
1249 }
1250 \f
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 "". */
1255 static char *
1256 operator_chars (p, end)
1257 char *p;
1258 char **end;
1259 {
1260 *end = "";
1261 if (strncmp (p, "operator", 8))
1262 return *end;
1263 p += 8;
1264
1265 /* Don't get faked out by `operator' being part of a longer
1266 identifier. */
1267 if (isalpha(*p) || *p == '_' || *p == '$' || *p == '\0')
1268 return *end;
1269
1270 /* Allow some whitespace between `operator' and the operator symbol. */
1271 while (*p == ' ' || *p == '\t')
1272 p++;
1273
1274 /* Recognize 'operator TYPENAME'. */
1275
1276 if (isalpha(*p) || *p == '_' || *p == '$')
1277 {
1278 register char *q = p+1;
1279 while (isalnum(*q) || *q == '_' || *q == '$')
1280 q++;
1281 *end = q;
1282 return p;
1283 }
1284
1285 switch (*p)
1286 {
1287 case '!':
1288 case '=':
1289 case '*':
1290 case '/':
1291 case '%':
1292 case '^':
1293 if (p[1] == '=')
1294 *end = p+2;
1295 else
1296 *end = p+1;
1297 return p;
1298 case '<':
1299 case '>':
1300 case '+':
1301 case '-':
1302 case '&':
1303 case '|':
1304 if (p[1] == '=' || p[1] == p[0])
1305 *end = p+2;
1306 else
1307 *end = p+1;
1308 return p;
1309 case '~':
1310 case ',':
1311 *end = p+1;
1312 return p;
1313 case '(':
1314 if (p[1] != ')')
1315 error ("`operator ()' must be specified without whitespace in `()'");
1316 *end = p+2;
1317 return p;
1318 case '?':
1319 if (p[1] != ':')
1320 error ("`operator ?:' must be specified without whitespace in `?:'");
1321 *end = p+2;
1322 return p;
1323 case '[':
1324 if (p[1] != ']')
1325 error ("`operator []' must be specified without whitespace in `[]'");
1326 *end = p+2;
1327 return p;
1328 default:
1329 error ("`operator %s' not supported", p);
1330 break;
1331 }
1332 *end = "";
1333 return *end;
1334 }
1335
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.
1343 */
1344
1345 int
1346 find_methods (t, name, sym_arr)
1347 struct type *t;
1348 char *name;
1349 struct symbol **sym_arr;
1350 {
1351 int i1 = 0;
1352 int ibase;
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".
1365 Thus
1366 "break C::f" should not be looking for field f in
1367 the class named D,
1368 but just for the field f in the baseclasses of C
1369 (no matter what their names).
1370
1371 However, I don't know how to replace the code below
1372 that depends on knowing the name of D. */
1373 if (class_name
1374 && (sym_class = lookup_symbol (class_name,
1375 (struct block *)NULL,
1376 STRUCT_NAMESPACE,
1377 (int *)NULL,
1378 (struct symtab **)NULL)))
1379 {
1380 int method_counter;
1381 t = SYMBOL_TYPE (sym_class);
1382 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1383 method_counter >= 0;
1384 --method_counter)
1385 {
1386 int field_counter;
1387 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, method_counter);
1388
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;
1393 field_counter >= 0;
1394 --field_counter)
1395 {
1396 char *phys_name;
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))
1402 continue;
1403 sym_arr[i1] = lookup_symbol (phys_name,
1404 SYMBOL_BLOCK_VALUE (sym_class),
1405 VAR_NAMESPACE,
1406 (int *) NULL,
1407 (struct symtab **) NULL);
1408 if (sym_arr[i1]) i1++;
1409 else
1410 {
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);
1415 }
1416 }
1417 }
1418 }
1419 /* Only search baseclasses if there is no match yet,
1420 * since names in derived classes override those in baseclasses.
1421 */
1422 if (i1)
1423 return i1;
1424 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1425 i1 += find_methods(TYPE_BASECLASS(t, ibase), name,
1426 sym_arr + i1);
1427 return i1;
1428 }
1429
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.
1433
1434 The string can be:
1435
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.
1441 PC returned is 0.
1442 FILE:FUNCTION -- likewise, but prefer functions in that file.
1443 *EXPR -- line in which address EXPR appears.
1444
1445 FUNCTION may be an undebuggable function found in minimal symbol table.
1446
1447 If the argument FUNFIRSTLINE is nonzero, we want the first line
1448 of real code inside a function when a function is specified.
1449
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.
1454
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. */
1458
1459 struct symtabs_and_lines
1460 decode_line_1 (argptr, funfirstline, default_symtab, default_line)
1461 char **argptr;
1462 int funfirstline;
1463 struct symtab *default_symtab;
1464 int default_line;
1465 {
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
1485 still has the bug.
1486
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. */
1491 #undef volatile
1492 volatile struct symtab_and_line val;
1493 #define volatile /*nothing*/
1494 #else
1495 struct symtab_and_line val;
1496 #endif
1497 register char *p, *p1;
1498 char *q, *q1;
1499 register struct symtab *s;
1500
1501 register struct symbol *sym;
1502 /* The symtab that SYM was found in. */
1503 struct symtab *sym_symtab;
1504
1505 register CORE_ADDR pc;
1506 register struct minimal_symbol *msymbol;
1507 char *copy;
1508 struct symbol *sym_class;
1509 int i1;
1510 int is_quoted;
1511 struct symbol **sym_arr;
1512 struct type *t;
1513 char *saved_arg = *argptr;
1514 extern char *gdb_completer_quote_characters;
1515
1516 /* Defaults have defaults. */
1517
1518 if (default_symtab == 0)
1519 {
1520 default_symtab = current_source_symtab;
1521 default_line = current_source_line;
1522 }
1523
1524 /* See if arg is *PC */
1525
1526 if (**argptr == '*')
1527 {
1528 if (**argptr == '*')
1529 {
1530 (*argptr)++;
1531 }
1532 pc = parse_and_eval_address_1 (argptr);
1533 values.sals = (struct symtab_and_line *)
1534 xmalloc (sizeof (struct symtab_and_line));
1535 values.nelts = 1;
1536 values.sals[0] = find_pc_line (pc, 0);
1537 values.sals[0].pc = pc;
1538 return values;
1539 }
1540
1541 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
1542
1543 s = NULL;
1544 is_quoted = (strchr (gdb_completer_quote_characters, **argptr) != NULL);
1545
1546 for (p = *argptr; *p; p++)
1547 {
1548 if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
1549 break;
1550 }
1551 while (p[0] == ' ' || p[0] == '\t') p++;
1552
1553 if ((p[0] == ':') && !is_quoted)
1554 {
1555
1556 /* C++ */
1557 if (p[1] ==':')
1558 {
1559 /* Extract the class name. */
1560 p1 = p;
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;
1565
1566 /* Discard the class name from the arg. */
1567 p = p1 + 2;
1568 while (*p == ' ' || *p == '\t') p++;
1569 *argptr = p;
1570
1571 sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
1572 (struct symtab **)NULL);
1573
1574 if (sym_class &&
1575 ( TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_STRUCT
1576 || TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_UNION))
1577 {
1578 /* Arg token is not digits => try it as a function name
1579 Find the next token (everything up to end or next whitespace). */
1580 p = *argptr;
1581 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
1582 q = operator_chars (*argptr, &q1);
1583
1584 if (q1 - q)
1585 {
1586 char *opname;
1587 char *tmp = alloca (q1 - q + 1);
1588 memcpy (tmp, q, q1 - q);
1589 tmp[q1 - q] = '\0';
1590 opname = cplus_mangle_opname (tmp, DMGL_ANSI);
1591 if (opname == NULL)
1592 {
1593 warning ("no mangling for \"%s\"", tmp);
1594 cplusplus_hint (saved_arg);
1595 return_to_top_level ();
1596 }
1597 copy = (char*) alloca (3 + strlen(opname));
1598 sprintf (copy, "__%s", opname);
1599 p = q1;
1600 }
1601 else
1602 {
1603 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
1604 memcpy (copy, *argptr, p - *argptr);
1605 copy[p - *argptr] = '\0';
1606 }
1607
1608 /* no line number may be specified */
1609 while (*p == ' ' || *p == '\t') p++;
1610 *argptr = p;
1611
1612 sym = 0;
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*));
1616
1617 if (destructor_name_p (copy, t))
1618 {
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))
1626 {
1627 phys_name = TYPE_FN_FIELD_PHYSNAME (f, 0);
1628 if (!DESTRUCTOR_PREFIX_P (phys_name))
1629 phys_name = "";
1630 }
1631 sym_arr[i1] =
1632 lookup_symbol (phys_name, SYMBOL_BLOCK_VALUE (sym_class),
1633 VAR_NAMESPACE, 0, (struct symtab **)NULL);
1634 if (sym_arr[i1]) i1++;
1635 }
1636 else
1637 i1 = find_methods (t, copy, sym_arr);
1638 if (i1 == 1)
1639 {
1640 /* There is exactly one field with that name. */
1641 sym = sym_arr[0];
1642
1643 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1644 {
1645 /* Arg is the name of a function */
1646 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1647 if (funfirstline)
1648 SKIP_PROLOGUE (pc);
1649 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1650 values.nelts = 1;
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;
1653 }
1654 else
1655 {
1656 values.nelts = 0;
1657 }
1658 return values;
1659 }
1660 if (i1 > 0)
1661 {
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);
1665 }
1666 else
1667 {
1668 char *tmp;
1669
1670 if (OPNAME_PREFIX_P (copy))
1671 {
1672 tmp = (char *)alloca (strlen (copy+3) + 9);
1673 strcpy (tmp, "operator ");
1674 strcat (tmp, copy+3);
1675 }
1676 else
1677 tmp = copy;
1678 if (tmp[0] == '~')
1679 warning ("the class `%s' does not have destructor defined",
1680 SYMBOL_SOURCE_NAME(sym_class));
1681 else
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 ();
1686 }
1687 }
1688 else
1689 {
1690 /* The quotes are important if copy is empty. */
1691 warning ("can't find class, struct, or union named \"%s\"",
1692 copy);
1693 cplusplus_hint (saved_arg);
1694 return_to_top_level ();
1695 }
1696 }
1697 /* end of C++ */
1698
1699
1700 /* Extract the file name. */
1701 p1 = p;
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;
1706
1707 /* Find that file's data. */
1708 s = lookup_symtab (copy);
1709 if (s == 0)
1710 {
1711 if (!have_full_symbols () && !have_partial_symbols ())
1712 error (no_symtab_msg);
1713 error ("No source file named %s.", copy);
1714 }
1715
1716 /* Discard the file name from the arg. */
1717 p = p1 + 1;
1718 while (*p == ' ' || *p == '\t') p++;
1719 *argptr = p;
1720 }
1721
1722 /* S is specified file's symtab, or 0 if no file specified.
1723 arg no longer contains the file name. */
1724
1725 /* Check whether arg is all digits (and sign) */
1726
1727 p = *argptr;
1728 if (*p == '-' || *p == '+') p++;
1729 while (*p >= '0' && *p <= '9')
1730 p++;
1731
1732 if (p != *argptr && (*p == 0 || *p == ' ' || *p == '\t' || *p == ','))
1733 {
1734 /* We found a token consisting of all digits -- at least one digit. */
1735 enum sign {none, plus, minus} sign = none;
1736
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 */
1741
1742 if (s == 0 && default_symtab == 0)
1743 {
1744 select_source_symtab (0);
1745 default_symtab = current_source_symtab;
1746 default_line = current_source_line;
1747 }
1748
1749 if (**argptr == '+')
1750 sign = plus, (*argptr)++;
1751 else if (**argptr == '-')
1752 sign = minus, (*argptr)++;
1753 val.line = atoi (*argptr);
1754 switch (sign)
1755 {
1756 case plus:
1757 if (p == *argptr)
1758 val.line = 5;
1759 if (s == 0)
1760 val.line = default_line + val.line;
1761 break;
1762 case minus:
1763 if (p == *argptr)
1764 val.line = 15;
1765 if (s == 0)
1766 val.line = default_line - val.line;
1767 else
1768 val.line = 1;
1769 break;
1770 case none:
1771 break; /* No need to adjust val.line. */
1772 }
1773
1774 while (*p == ' ' || *p == '\t') p++;
1775 *argptr = p;
1776 if (s == 0)
1777 s = default_symtab;
1778 val.symtab = s;
1779 val.pc = 0;
1780 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1781 values.sals[0] = val;
1782 values.nelts = 1;
1783 return values;
1784 }
1785
1786 /* Arg token is not digits => try it as a variable name
1787 Find the next token (everything up to end or next whitespace). */
1788
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)
1795 {
1796 char *temp;
1797 copy [p - *argptr - 1] = '\0';
1798 copy++;
1799 }
1800 while (*p == ' ' || *p == '\t') p++;
1801 *argptr = p;
1802
1803 /* Look up that token as a variable.
1804 If file specified, use that file's per-file block to start with. */
1805
1806 sym = lookup_symbol (copy,
1807 (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
1808 : get_selected_block ()),
1809 VAR_NAMESPACE, 0, &sym_symtab);
1810
1811 if (sym != NULL)
1812 {
1813 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
1814 {
1815 /* Arg is the name of a function */
1816 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1817 if (funfirstline)
1818 SKIP_PROLOGUE (pc);
1819 val = find_pc_line (pc, 0);
1820 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
1821 /* Convex: no need to suppress code on first line, if any */
1822 val.pc = pc;
1823 #else
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);
1832 }
1833 val.pc = pc;
1834 #endif
1835 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1836 values.sals[0] = val;
1837 values.nelts = 1;
1838
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
1842 SKIP_PROLOGUE". */
1843 if (SYMBOL_LINE (sym) != 0)
1844 values.sals[0].line = SYMBOL_LINE (sym);
1845
1846 return values;
1847 }
1848 else if (SYMBOL_LINE (sym) != 0)
1849 {
1850 /* We know its line number. */
1851 values.sals = (struct symtab_and_line *)
1852 xmalloc (sizeof (struct symtab_and_line));
1853 values.nelts = 1;
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);
1857 return values;
1858 }
1859 else
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);
1863 }
1864
1865 msymbol = lookup_minimal_symbol (copy, (struct objfile *) NULL);
1866 if (msymbol != NULL)
1867 {
1868 val.symtab = 0;
1869 val.line = 0;
1870 val.pc = SYMBOL_VALUE_ADDRESS (msymbol) + FUNCTION_START_OFFSET;
1871 if (funfirstline)
1872 SKIP_PROLOGUE (val.pc);
1873 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1874 values.sals[0] = val;
1875 values.nelts = 1;
1876 return values;
1877 }
1878
1879 if (!have_full_symbols () &&
1880 !have_partial_symbols () && !have_minimal_symbols ())
1881 error (no_symtab_msg);
1882
1883 error ("Function \"%s\" not defined.", copy);
1884 return values; /* for lint */
1885 }
1886
1887 struct symtabs_and_lines
1888 decode_line_spec (string, funfirstline)
1889 char *string;
1890 int funfirstline;
1891 {
1892 struct symtabs_and_lines sals;
1893 if (string == 0)
1894 error ("Empty line specification.");
1895 sals = decode_line_1 (&string, funfirstline,
1896 current_source_symtab, current_source_line);
1897 if (*string)
1898 error ("Junk at end of line specification: %s", string);
1899 return sals;
1900 }
1901
1902 /* Given a list of NELTS symbols in sym_arr, return a list of lines to
1903 operate on (ask user if necessary). */
1904
1905 static struct symtabs_and_lines
1906 decode_line_2 (sym_arr, nelts, funfirstline)
1907 struct symbol *sym_arr[];
1908 int nelts;
1909 int funfirstline;
1910 {
1911 struct symtabs_and_lines values, return_values;
1912 register CORE_ADDR pc;
1913 char *args, *arg1;
1914 int i;
1915 char *prompt;
1916 char *symname;
1917
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));
1920
1921 i = 0;
1922 printf("[0] cancel\n[1] all\n");
1923 while (i < nelts)
1924 {
1925 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
1926 {
1927 /* Arg is the name of a function */
1928 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym_arr[i]))
1929 + FUNCTION_START_OFFSET;
1930 if (funfirstline)
1931 SKIP_PROLOGUE (pc);
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);
1937 }
1938 else printf ("?HERE\n");
1939 i++;
1940 }
1941
1942 if ((prompt = getenv ("PS2")) == NULL)
1943 {
1944 prompt = ">";
1945 }
1946 printf("%s ",prompt);
1947 fflush(stdout);
1948
1949 args = command_line_input ((char *) NULL, 0);
1950
1951 if (args == 0)
1952 error_no_arg ("one or more choice numbers");
1953
1954 i = 0;
1955 while (*args)
1956 {
1957 int num;
1958
1959 arg1 = args;
1960 while (*arg1 >= '0' && *arg1 <= '9') arg1++;
1961 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
1962 error ("Arguments must be choice numbers.");
1963
1964 num = atoi (args);
1965
1966 if (num == 0)
1967 error ("cancelled");
1968 else if (num == 1)
1969 {
1970 memcpy (return_values.sals, values.sals,
1971 (nelts * sizeof(struct symtab_and_line)));
1972 return_values.nelts = nelts;
1973 return return_values;
1974 }
1975
1976 if (num > nelts + 2)
1977 {
1978 printf ("No choice number %d.\n", num);
1979 }
1980 else
1981 {
1982 num -= 2;
1983 if (values.sals[num].pc)
1984 {
1985 return_values.sals[i++] = values.sals[num];
1986 values.sals[num].pc = 0;
1987 }
1988 else
1989 {
1990 printf ("duplicate request for %d ignored.\n", num);
1991 }
1992 }
1993
1994 args = arg1;
1995 while (*args == ' ' || *args == '\t') args++;
1996 }
1997 return_values.nelts = i;
1998 return return_values;
1999 }
2000
2001 \f
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. */
2005 static void
2006 output_source_filename (name, first)
2007 char *name;
2008 int *first;
2009 {
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;
2025
2026 char **p;
2027
2028 if (*first)
2029 {
2030 if (tab == NULL)
2031 tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
2032 tab_cur_size = 0;
2033 }
2034
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. */
2039 return;
2040 /* No; add it to tab. */
2041 if (tab_cur_size == tab_alloc_size)
2042 {
2043 tab_alloc_size *= 2;
2044 tab = (char **) xrealloc ((char *) tab, tab_alloc_size * sizeof (*tab));
2045 }
2046 tab[tab_cur_size++] = name;
2047
2048 if (*first)
2049 {
2050 *first = 0;
2051 }
2052 else
2053 {
2054 printf_filtered (", ");
2055 }
2056
2057 wrap_here ("");
2058 fputs_filtered (name, stdout);
2059 }
2060
2061 static void
2062 sources_info (ignore, from_tty)
2063 char *ignore;
2064 int from_tty;
2065 {
2066 register struct symtab *s;
2067 register struct partial_symtab *ps;
2068 register struct objfile *objfile;
2069 int first;
2070
2071 if (!have_full_symbols () && !have_partial_symbols ())
2072 {
2073 error (no_symtab_msg);
2074 }
2075
2076 printf_filtered ("Source files for which symbols have been read in:\n\n");
2077
2078 first = 1;
2079 ALL_SYMTABS (objfile, s)
2080 {
2081 output_source_filename (s -> filename, &first);
2082 }
2083 printf_filtered ("\n\n");
2084
2085 printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2086
2087 first = 1;
2088 ALL_PSYMTABS (objfile, ps)
2089 {
2090 if (!ps->readin)
2091 {
2092 output_source_filename (ps -> filename, &first);
2093 }
2094 }
2095 printf_filtered ("\n");
2096 }
2097
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
2100 constants (enums).
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.
2104
2105 BPT is non-zero if we should set a breakpoint at the functions
2106 we find. */
2107
2108 static void
2109 list_symbols (regexp, class, bpt)
2110 char *regexp;
2111 int class;
2112 int bpt;
2113 {
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;
2119 register int i, j;
2120 register struct symbol *sym;
2121 struct partial_symbol *psym;
2122 struct objfile *objfile;
2123 struct minimal_symbol *msymbol;
2124 char *val;
2125 static char *classnames[]
2126 = {"variable", "function", "type", "method"};
2127 int found_in_file = 0;
2128 int found_misc = 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];
2135
2136 if (regexp != NULL)
2137 {
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>. */
2142 char *opend;
2143 char *opname = operator_chars (regexp, &opend);
2144 if (*opname)
2145 {
2146 int fix = -1; /* -1 means ok; otherwise number of spaces needed. */
2147 if (isalpha(*opname) || *opname == '_' || *opname == '$')
2148 {
2149 /* There should 1 space between 'operator' and 'TYPENAME'. */
2150 if (opname[-1] != ' ' || opname[-2] == ' ')
2151 fix = 1;
2152 }
2153 else
2154 {
2155 /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2156 if (opname[-1] == ' ')
2157 fix = 0;
2158 }
2159 /* If wrong number of spaces, fix it. */
2160 if (fix >= 0)
2161 {
2162 char *tmp = (char*) alloca(opend-opname+10);
2163 sprintf(tmp, "operator%.*s%s", fix, " ", opname);
2164 regexp = tmp;
2165 }
2166 }
2167
2168 if (0 != (val = re_comp (regexp)))
2169 error ("Invalid regexp (%s): %s", val, regexp);
2170 }
2171
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. */
2175
2176 ALL_PSYMTABS (objfile, ps)
2177 {
2178 struct partial_symbol *bound, *gbound, *sbound;
2179 int keep_going = 1;
2180
2181 if (ps->readin) continue;
2182
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;
2185 bound = gbound;
2186
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;
2190 while (keep_going)
2191 {
2192 if (psym >= bound)
2193 {
2194 if (bound == gbound && ps->n_static_syms != 0)
2195 {
2196 psym = objfile->static_psymbols.list + ps->statics_offset;
2197 bound = sbound;
2198 }
2199 else
2200 keep_going = 0;
2201 continue;
2202 }
2203 else
2204 {
2205 QUIT;
2206
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)))
2215 {
2216 PSYMTAB_TO_SYMTAB(ps);
2217 keep_going = 0;
2218 }
2219 }
2220 psym++;
2221 }
2222 }
2223
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. */
2229
2230 if (class == 1)
2231 {
2232 ALL_MSYMBOLS (objfile, msymbol)
2233 {
2234 if (MSYMBOL_TYPE (msymbol) == ourtype ||
2235 MSYMBOL_TYPE (msymbol) == ourtype2)
2236 {
2237 if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
2238 {
2239 if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
2240 {
2241 found_misc = 1;
2242 }
2243 }
2244 }
2245 }
2246 }
2247
2248 /* Printout here so as to get after the "Reading in symbols"
2249 messages which will be generated above. */
2250 if (!bpt)
2251 printf_filtered (regexp
2252 ? "All %ss matching regular expression \"%s\":\n"
2253 : "All defined %ss:\n",
2254 classnames[class],
2255 regexp);
2256
2257 ALL_SYMTABS (objfile, s)
2258 {
2259 found_in_file = 0;
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. */
2266 if (bv != prev_bv)
2267 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
2268 {
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++)
2274 {
2275 QUIT;
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)))
2284 {
2285 if (bpt)
2286 {
2287 /* Set a breakpoint here, if it's a function */
2288 if (class == 1)
2289 {
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
2294 break_command. */
2295 char *string =
2296 (char *) alloca (strlen (s->filename)
2297 + strlen (SYMBOL_NAME(sym))
2298 + 2);
2299 strcpy (string, s->filename);
2300 strcat (string, ":");
2301 strcat (string, SYMBOL_NAME(sym));
2302 break_command (string, 0);
2303 }
2304 }
2305 else if (!found_in_file)
2306 {
2307 fputs_filtered ("\nFile ", stdout);
2308 fputs_filtered (s->filename, stdout);
2309 fputs_filtered (":\n", stdout);
2310 }
2311 found_in_file = 1;
2312
2313 if (class != 2 && i == STATIC_BLOCK)
2314 printf_filtered ("static ");
2315
2316 /* Typedef that is not a C++ class */
2317 if (class == 2
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 ||
2322 (class == 2 &&
2323 SYMBOL_NAMESPACE(sym) == STRUCT_NAMESPACE))
2324 {
2325 type_print (SYMBOL_TYPE (sym),
2326 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2327 ? "" : SYMBOL_SOURCE_NAME (sym)),
2328 stdout, 0);
2329
2330 printf_filtered (";\n");
2331 }
2332 else
2333 {
2334 # if 0 /* FIXME, why is this zapped out? */
2335 char buf[1024];
2336 c_type_print_base (TYPE_FN_FIELD_TYPE(t, i),
2337 stdout, 0, 0);
2338 c_type_print_varspec_prefix (TYPE_FN_FIELD_TYPE(t, i),
2339 stdout, 0);
2340 sprintf (buf, " %s::", type_name_no_tag (t));
2341 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (t, i),
2342 buf, name, stdout);
2343 # endif
2344 }
2345 }
2346 }
2347 }
2348 prev_bv = bv;
2349 }
2350
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. */
2353
2354 if (found_misc || class != 1)
2355 {
2356 found_in_file = 0;
2357 ALL_MSYMBOLS (objfile, msymbol)
2358 {
2359 if (MSYMBOL_TYPE (msymbol) == ourtype ||
2360 MSYMBOL_TYPE (msymbol) == ourtype2)
2361 {
2362 if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
2363 {
2364 /* Functions: Look up by address. */
2365 if (class != 1 ||
2366 (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
2367 {
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)
2372 {
2373 if (!found_in_file)
2374 {
2375 printf_filtered ("\nNon-debugging symbols:\n");
2376 found_in_file = 1;
2377 }
2378 printf_filtered (" %08x %s\n",
2379 SYMBOL_VALUE_ADDRESS (msymbol),
2380 SYMBOL_SOURCE_NAME (msymbol));
2381 }
2382 }
2383 }
2384 }
2385 }
2386 }
2387 }
2388
2389 static void
2390 variables_info (regexp, from_tty)
2391 char *regexp;
2392 int from_tty;
2393 {
2394 list_symbols (regexp, 0, 0);
2395 }
2396
2397 static void
2398 functions_info (regexp, from_tty)
2399 char *regexp;
2400 int from_tty;
2401 {
2402 list_symbols (regexp, 1, 0);
2403 }
2404
2405 static void
2406 types_info (regexp, from_tty)
2407 char *regexp;
2408 int from_tty;
2409 {
2410 list_symbols (regexp, 2, 0);
2411 }
2412
2413 #if 0
2414 /* Tiemann says: "info methods was never implemented." */
2415 static void
2416 methods_info (regexp)
2417 char *regexp;
2418 {
2419 list_symbols (regexp, 3, 0);
2420 }
2421 #endif /* 0 */
2422
2423 /* Breakpoint all functions matching regular expression. */
2424 static void
2425 rbreak_command (regexp, from_tty)
2426 char *regexp;
2427 int from_tty;
2428 {
2429 list_symbols (regexp, 1, 1);
2430 }
2431 \f
2432
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. */
2436 int
2437 contained_in (a, b)
2438 struct block *a, *b;
2439 {
2440 if (!a || !b)
2441 return 0;
2442 return BLOCK_START (a) >= BLOCK_START (b)
2443 && BLOCK_END (a) <= BLOCK_END (b);
2444 }
2445
2446 \f
2447 /* Helper routine for make_symbol_completion_list. */
2448
2449 static int return_val_size;
2450 static int return_val_index;
2451 static char **return_val;
2452
2453 #define COMPLETION_LIST_ADD_SYMBOL(symbol, text, len) \
2454 do { \
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); \
2458 } while (0)
2459
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. */
2463
2464 static void
2465 completion_list_add_name (symname, text, text_len)
2466 char *symname;
2467 char *text;
2468 int text_len;
2469 {
2470 int newsize;
2471 int i;
2472
2473 /* clip symbols that cannot match */
2474
2475 if (strncmp (symname, text, text_len) != 0)
2476 {
2477 return;
2478 }
2479
2480 /* Clip any symbol names that we've already considered. (This is a
2481 time optimization) */
2482
2483 for (i = 0; i < return_val_index; ++i)
2484 {
2485 if (STREQ (symname, return_val[i]))
2486 {
2487 return;
2488 }
2489 }
2490
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. */
2493
2494 symname = savestring (symname, strlen (symname));
2495 if (return_val_index + 3 > return_val_size)
2496 {
2497 newsize = (return_val_size *= 2) * sizeof (char *);
2498 return_val = (char **) xrealloc ((char *) return_val, newsize);
2499 }
2500 return_val[return_val_index++] = symname;
2501 return_val[return_val_index] = NULL;
2502 }
2503
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.
2507
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. */
2510
2511 char **
2512 make_symbol_completion_list (text)
2513 char *text;
2514 {
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;
2521 register int i, j;
2522 int text_len;
2523 struct partial_symbol *psym;
2524
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;
2530
2531 /* Look through the partial symtabs for all symbols which begin
2532 by matching TEXT. Add each one that you find to the list. */
2533
2534 ALL_PSYMTABS (objfile, ps)
2535 {
2536 /* If the psymtab's been read in we'll get it when we search
2537 through the blockvector. */
2538 if (ps->readin) continue;
2539
2540 for (psym = objfile->global_psymbols.list + ps->globals_offset;
2541 psym < (objfile->global_psymbols.list + ps->globals_offset
2542 + ps->n_global_syms);
2543 psym++)
2544 {
2545 /* If interrupted, then quit. */
2546 QUIT;
2547 COMPLETION_LIST_ADD_SYMBOL (psym, text, text_len);
2548 }
2549
2550 for (psym = objfile->static_psymbols.list + ps->statics_offset;
2551 psym < (objfile->static_psymbols.list + ps->statics_offset
2552 + ps->n_static_syms);
2553 psym++)
2554 {
2555 QUIT;
2556 COMPLETION_LIST_ADD_SYMBOL (psym, text, text_len);
2557 }
2558 }
2559
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). */
2564
2565 ALL_MSYMBOLS (objfile, msymbol)
2566 {
2567 QUIT;
2568 COMPLETION_LIST_ADD_SYMBOL (msymbol, text, text_len);
2569 }
2570
2571 /* Search upwards from currently selected frame (so that we can
2572 complete on local vars. */
2573
2574 for (b = get_selected_block (); b != NULL; b = BLOCK_SUPERBLOCK (b))
2575 {
2576 if (!BLOCK_SUPERBLOCK (b))
2577 {
2578 surrounding_static_block = b; /* For elmin of dups */
2579 }
2580
2581 /* Also catch fields of types defined in this places which match our
2582 text string. Only complete on types visible from current context. */
2583
2584 for (i = 0; i < BLOCK_NSYMS (b); i++)
2585 {
2586 sym = BLOCK_SYM (b, i);
2587 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
2588 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2589 {
2590 struct type *t = SYMBOL_TYPE (sym);
2591 enum type_code c = TYPE_CODE (t);
2592
2593 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2594 {
2595 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2596 {
2597 if (TYPE_FIELD_NAME (t, j))
2598 {
2599 completion_list_add_name (TYPE_FIELD_NAME (t, j),
2600 text, text_len);
2601 }
2602 }
2603 }
2604 }
2605 }
2606 }
2607
2608 /* Go through the symtabs and check the externs and statics for
2609 symbols which match. */
2610
2611 ALL_SYMTABS (objfile, s)
2612 {
2613 QUIT;
2614 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2615 for (i = 0; i < BLOCK_NSYMS (b); i++)
2616 {
2617 sym = BLOCK_SYM (b, i);
2618 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
2619 }
2620 }
2621
2622 ALL_SYMTABS (objfile, s)
2623 {
2624 QUIT;
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++)
2629 {
2630 sym = BLOCK_SYM (b, i);
2631 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
2632 }
2633 }
2634
2635 return (return_val);
2636 }
2637
2638 \f
2639 #if 0
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.
2643
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).
2651
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.
2656
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
2660 symbol table. */
2661
2662 void
2663 add_param_to_type (type,sym)
2664 struct type **type;
2665 struct symbol *sym;
2666 {
2667 int num = ++(TYPE_NFIELDS(*type));
2668
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));
2673 else
2674 TYPE_FIELDS(*type) = (struct field *)
2675 (*current_objfile->xmalloc) (num*sizeof(struct field));
2676
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);
2681 }
2682 #endif
2683 \f
2684 void
2685 _initialize_symtab ()
2686 {
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.");
2691
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.");
2702
2703 #if 0
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\
2708 are listed.");
2709 #endif
2710 add_info ("sources", sources_info,
2711 "Source files in the program.");
2712
2713 add_com ("rbreak", no_class, rbreak_command,
2714 "Set a breakpoint for all functions matching REGEXP.");
2715
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);
2719 }
This page took 0.086442 seconds and 4 git commands to generate.