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