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