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