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