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