* hppah-tdep.c (skip_trampoline_code): Use new macros 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
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.
962 */
963
bd5635a1
RP
964struct symtab_and_line
965find_pc_line (pc, notcurrent)
966 CORE_ADDR pc;
967 int notcurrent;
968{
969 struct symtab *s;
970 register struct linetable *l;
971 register int len;
972 register int i;
b638ca91 973 register struct linetable_entry *item;
bd5635a1
RP
974 struct symtab_and_line val;
975 struct blockvector *bv;
976
977 /* Info on best line seen so far, and where it starts, and its file. */
978
b638ca91 979 struct linetable_entry *best = NULL;
bd5635a1
RP
980 CORE_ADDR best_end = 0;
981 struct symtab *best_symtab = 0;
982
983 /* Store here the first line number
984 of a file which contains the line at the smallest pc after PC.
985 If we don't find a line whose range contains PC,
986 we will use a line one less than this,
987 with a range from the start of that file to the first line's pc. */
b638ca91 988 struct linetable_entry *alt = NULL;
bd5635a1
RP
989 struct symtab *alt_symtab = 0;
990
991 /* Info on best line seen in this file. */
992
b638ca91 993 struct linetable_entry *prev;
bd5635a1
RP
994
995 /* If this pc is not from the current frame,
996 it is the address of the end of a call instruction.
997 Quite likely that is the start of the following statement.
998 But what we want is the statement containing the instruction.
999 Fudge the pc to make sure we get that. */
1000
1001 if (notcurrent) pc -= 1;
1002
1003 s = find_pc_symtab (pc);
c1878f87 1004 if (!s)
bd5635a1
RP
1005 {
1006 val.symtab = 0;
1007 val.line = 0;
1008 val.pc = pc;
1009 val.end = 0;
1010 return val;
1011 }
1012
1013 bv = BLOCKVECTOR (s);
1014
1015 /* Look at all the symtabs that share this blockvector.
1016 They all have the same apriori range, that we found was right;
1017 but they have different line tables. */
1018
1019 for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1020 {
1021 /* Find the best line in this symtab. */
1022 l = LINETABLE (s);
4137c5fc
JG
1023 if (!l)
1024 continue;
bd5635a1 1025 len = l->nitems;
c1878f87
SG
1026 if (len <= 0)
1027 {
1028 fprintf (stderr, "Inconsistent line number info for %s\n",
1029 s->filename);
1030 continue;
1031 }
1032
b638ca91
SG
1033 prev = NULL;
1034 item = l->item; /* Get first line info */
c1878f87
SG
1035
1036 /* Is this file's first line closer than the first lines of other files?
1037 If so, record this file, and its first line, as best alternate. */
b638ca91 1038 if (item->pc > pc && (!alt || item->pc < alt->pc))
c1878f87
SG
1039 {
1040 alt = item;
1041 alt_symtab = s;
1042 }
1043
b638ca91 1044 for (i = 0; i < len; i++, item++)
bd5635a1 1045 {
bd5635a1 1046 /* Return the last line that did not start after PC. */
b638ca91 1047 if (item->pc > pc)
bd5635a1 1048 break;
c1878f87
SG
1049
1050 prev = item;
bd5635a1
RP
1051 }
1052
c1878f87
SG
1053 /* At this point, prev points at the line whose start addr is <= pc, and
1054 item points at the next line. If we ran off the end of the linetable
1055 (pc >= start of the last line), then prev == item. If pc < start of
1056 the first line, prev will not be set. */
1057
bd5635a1
RP
1058 /* Is this file's best line closer than the best in the other files?
1059 If so, record this file, and its best line, as best so far. */
c1878f87 1060
b638ca91 1061 if (prev && (!best || prev->pc > best->pc))
bd5635a1 1062 {
c1878f87 1063 best = prev;
bd5635a1 1064 best_symtab = s;
cba0d141
JG
1065 /* If another line is in the linetable, and its PC is closer
1066 than the best_end we currently have, take it as best_end. */
b638ca91
SG
1067 if (i < len && (best_end == 0 || best_end > item->pc))
1068 best_end = item->pc;
bd5635a1
RP
1069 }
1070 }
c1878f87
SG
1071
1072 if (!best_symtab)
bd5635a1 1073 {
c1878f87
SG
1074 if (!alt_symtab)
1075 { /* If we didn't find any line # info, just
1076 return zeros. */
1077 val.symtab = 0;
1078 val.line = 0;
1079 val.pc = pc;
1080 val.end = 0;
1081 }
1082 else
1083 {
1084 val.symtab = alt_symtab;
b638ca91 1085 val.line = alt->line - 1;
c1878f87 1086 val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
b638ca91 1087 val.end = alt->pc;
c1878f87 1088 }
bd5635a1
RP
1089 }
1090 else
1091 {
1092 val.symtab = best_symtab;
b638ca91
SG
1093 val.line = best->line;
1094 val.pc = best->pc;
1095 if (best_end && (!alt || best_end < alt->pc))
cba0d141 1096 val.end = best_end;
a8a69e63 1097 else if (alt)
b638ca91 1098 val.end = alt->pc;
cba0d141
JG
1099 else
1100 val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
bd5635a1
RP
1101 }
1102 return val;
1103}
1104\f
1105/* Find the PC value for a given source file and line number.
1106 Returns zero for invalid line number.
1107 The source file is specified with a struct symtab. */
1108
1109CORE_ADDR
1110find_line_pc (symtab, line)
1111 struct symtab *symtab;
1112 int line;
1113{
1114 register struct linetable *l;
1115 register int ind;
1116 int dummy;
1117
1118 if (symtab == 0)
1119 return 0;
1120 l = LINETABLE (symtab);
1121 ind = find_line_common(l, line, &dummy);
b203fc18 1122 return (ind >= 0) ? l->item[ind].pc : 0;
bd5635a1
RP
1123}
1124
1125/* Find the range of pc values in a line.
1126 Store the starting pc of the line into *STARTPTR
1127 and the ending pc (start of next line) into *ENDPTR.
1128 Returns 1 to indicate success.
1129 Returns 0 if could not find the specified line. */
1130
1131int
1132find_line_pc_range (symtab, thisline, startptr, endptr)
1133 struct symtab *symtab;
1134 int thisline;
1135 CORE_ADDR *startptr, *endptr;
1136{
1137 register struct linetable *l;
1138 register int ind;
1139 int exact_match; /* did we get an exact linenumber match */
1140
1141 if (symtab == 0)
1142 return 0;
1143
1144 l = LINETABLE (symtab);
1145 ind = find_line_common (l, thisline, &exact_match);
b203fc18 1146 if (ind >= 0)
bd5635a1
RP
1147 {
1148 *startptr = l->item[ind].pc;
1149 /* If we have not seen an entry for the specified line,
1150 assume that means the specified line has zero bytes. */
1151 if (!exact_match || ind == l->nitems-1)
1152 *endptr = *startptr;
1153 else
1154 /* Perhaps the following entry is for the following line.
1155 It's worth a try. */
1156 if (ind+1 < l->nitems
1157 && l->item[ind+1].line == thisline + 1)
1158 *endptr = l->item[ind+1].pc;
1159 else
1160 *endptr = find_line_pc (symtab, thisline+1);
1161 return 1;
1162 }
1163
1164 return 0;
1165}
1166
1167/* Given a line table and a line number, return the index into the line
1168 table for the pc of the nearest line whose number is >= the specified one.
b203fc18 1169 Return -1 if none is found. The value is >= 0 if it is an index.
bd5635a1
RP
1170
1171 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
1172
1173static int
1174find_line_common (l, lineno, exact_match)
1175 register struct linetable *l;
1176 register int lineno;
1177 int *exact_match;
1178{
1179 register int i;
1180 register int len;
1181
1182 /* BEST is the smallest linenumber > LINENO so far seen,
1183 or 0 if none has been seen so far.
1184 BEST_INDEX identifies the item for it. */
1185
b203fc18 1186 int best_index = -1;
bd5635a1
RP
1187 int best = 0;
1188
1189 if (lineno <= 0)
b203fc18 1190 return -1;
4137c5fc
JG
1191 if (l == 0)
1192 return -1;
bd5635a1
RP
1193
1194 len = l->nitems;
1195 for (i = 0; i < len; i++)
1196 {
1197 register struct linetable_entry *item = &(l->item[i]);
1198
1199 if (item->line == lineno)
1200 {
1201 *exact_match = 1;
1202 return i;
1203 }
1204
1205 if (item->line > lineno && (best == 0 || item->line < best))
1206 {
1207 best = item->line;
1208 best_index = i;
1209 }
1210 }
1211
1212 /* If we got here, we didn't get an exact match. */
1213
1214 *exact_match = 0;
1215 return best_index;
1216}
1217
1218int
1219find_pc_line_pc_range (pc, startptr, endptr)
1220 CORE_ADDR pc;
1221 CORE_ADDR *startptr, *endptr;
1222{
1223 struct symtab_and_line sal;
1224 sal = find_pc_line (pc, 0);
1225 *startptr = sal.pc;
1226 *endptr = sal.end;
1227 return sal.symtab != 0;
1228}
1229\f
d96b54ea
JK
1230/* If P is of the form "operator[ \t]+..." where `...' is
1231 some legitimate operator text, return a pointer to the
1232 beginning of the substring of the operator text.
1233 Otherwise, return "". */
1234static char *
1235operator_chars (p, end)
1236 char *p;
1237 char **end;
1238{
1239 *end = "";
1240 if (strncmp (p, "operator", 8))
1241 return *end;
1242 p += 8;
1243
1244 /* Don't get faked out by `operator' being part of a longer
1245 identifier. */
2cd99985 1246 if (isalpha(*p) || *p == '_' || *p == '$' || *p == '\0')
d96b54ea
JK
1247 return *end;
1248
1249 /* Allow some whitespace between `operator' and the operator symbol. */
1250 while (*p == ' ' || *p == '\t')
1251 p++;
1252
2cd99985
PB
1253 /* Recognize 'operator TYPENAME'. */
1254
1255 if (isalpha(*p) || *p == '_' || *p == '$')
1256 {
1257 register char *q = p+1;
1258 while (isalnum(*q) || *q == '_' || *q == '$')
1259 q++;
1260 *end = q;
1261 return p;
1262 }
1263
d96b54ea
JK
1264 switch (*p)
1265 {
1266 case '!':
1267 case '=':
1268 case '*':
1269 case '/':
1270 case '%':
1271 case '^':
1272 if (p[1] == '=')
1273 *end = p+2;
1274 else
1275 *end = p+1;
1276 return p;
1277 case '<':
1278 case '>':
1279 case '+':
1280 case '-':
1281 case '&':
1282 case '|':
1283 if (p[1] == '=' || p[1] == p[0])
1284 *end = p+2;
1285 else
1286 *end = p+1;
1287 return p;
1288 case '~':
1289 case ',':
1290 *end = p+1;
1291 return p;
1292 case '(':
1293 if (p[1] != ')')
1294 error ("`operator ()' must be specified without whitespace in `()'");
1295 *end = p+2;
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 default:
1308 error ("`operator %s' not supported", p);
1309 break;
1310 }
1311 *end = "";
1312 return *end;
1313}
1314
bd5635a1
RP
1315/* Recursive helper function for decode_line_1.
1316 * Look for methods named NAME in type T.
1317 * Return number of matches.
2e4964ad 1318 * Put matches in SYM_ARR (which better be big enough!).
bd5635a1
RP
1319 * These allocations seem to define "big enough":
1320 * sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
bd5635a1
RP
1321 */
1322
2cd99985 1323int
2e4964ad 1324find_methods (t, name, sym_arr)
bd5635a1
RP
1325 struct type *t;
1326 char *name;
bd5635a1
RP
1327 struct symbol **sym_arr;
1328{
1329 int i1 = 0;
1330 int ibase;
1331 struct symbol *sym_class;
1332 char *class_name = type_name_no_tag (t);
1333 /* Ignore this class if it doesn't have a name.
1334 This prevents core dumps, but is just a workaround
1335 because we might not find the function in
1336 certain cases, such as
1337 struct D {virtual int f();}
1338 struct C : D {virtual int g();}
1339 (in this case g++ 1.35.1- does not put out a name
1340 for D as such, it defines type 19 (for example) in
1341 the same stab as C, and then does a
1342 .stabs "D:T19" and a .stabs "D:t19".
1343 Thus
1344 "break C::f" should not be looking for field f in
1345 the class named D,
1346 but just for the field f in the baseclasses of C
1347 (no matter what their names).
1348
1349 However, I don't know how to replace the code below
1350 that depends on knowing the name of D. */
1351 if (class_name
1352 && (sym_class = lookup_symbol (class_name,
1353 (struct block *)NULL,
1354 STRUCT_NAMESPACE,
1355 (int *)NULL,
1356 (struct symtab **)NULL)))
1357 {
1358 int method_counter;
1359 t = SYMBOL_TYPE (sym_class);
1360 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1361 method_counter >= 0;
1362 --method_counter)
1363 {
1364 int field_counter;
1365 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, method_counter);
1366
1367 char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
2e4964ad 1368 if (STREQ (name, method_name))
bd5635a1
RP
1369 /* Find all the fields with that name. */
1370 for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
1371 field_counter >= 0;
1372 --field_counter)
1373 {
1374 char *phys_name;
7e258d18 1375 if (TYPE_FN_FIELD_STUB (f, field_counter))
bd5635a1
RP
1376 check_stub_method (t, method_counter, field_counter);
1377 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
bd5635a1
RP
1378 sym_arr[i1] = lookup_symbol (phys_name,
1379 SYMBOL_BLOCK_VALUE (sym_class),
1380 VAR_NAMESPACE,
1381 (int *) NULL,
1382 (struct symtab **) NULL);
1383 if (sym_arr[i1]) i1++;
2cd99985
PB
1384 else
1385 {
1386 fputs_filtered("(Cannot find method ", stdout);
f70be3e4 1387 fputs_demangled(phys_name, stdout, DMGL_PARAMS);
2cd99985
PB
1388 fputs_filtered(" - possibly inlined.)\n", stdout);
1389 }
bd5635a1
RP
1390 }
1391 }
1392 }
1393 /* Only search baseclasses if there is no match yet,
1394 * since names in derived classes override those in baseclasses.
1395 */
1396 if (i1)
1397 return i1;
1398 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1399 i1 += find_methods(TYPE_BASECLASS(t, ibase), name,
2e4964ad 1400 sym_arr + i1);
bd5635a1
RP
1401 return i1;
1402}
1403
1404/* Parse a string that specifies a line number.
1405 Pass the address of a char * variable; that variable will be
1406 advanced over the characters actually parsed.
1407
1408 The string can be:
1409
1410 LINENUM -- that line number in current file. PC returned is 0.
1411 FILE:LINENUM -- that line in that file. PC returned is 0.
1412 FUNCTION -- line number of openbrace of that function.
1413 PC returned is the start of the function.
1414 VARIABLE -- line number of definition of that variable.
1415 PC returned is 0.
1416 FILE:FUNCTION -- likewise, but prefer functions in that file.
1417 *EXPR -- line in which address EXPR appears.
1418
cba0d141 1419 FUNCTION may be an undebuggable function found in minimal symbol table.
bd5635a1
RP
1420
1421 If the argument FUNFIRSTLINE is nonzero, we want the first line
1422 of real code inside a function when a function is specified.
1423
1424 DEFAULT_SYMTAB specifies the file to use if none is specified.
1425 It defaults to current_source_symtab.
1426 DEFAULT_LINE specifies the line number to use for relative
1427 line numbers (that start with signs). Defaults to current_source_line.
1428
1429 Note that it is possible to return zero for the symtab
1430 if no file is validly specified. Callers must check that.
1431 Also, the line number returned may be invalid. */
1432
1433struct symtabs_and_lines
1434decode_line_1 (argptr, funfirstline, default_symtab, default_line)
1435 char **argptr;
1436 int funfirstline;
1437 struct symtab *default_symtab;
1438 int default_line;
1439{
bd5635a1 1440 struct symtabs_and_lines values;
c1878f87
SG
1441#ifdef HPPA_COMPILER_BUG
1442 /* FIXME: The native HP 9000/700 compiler has a bug which appears
1443 when optimizing this file with target i960-vxworks. I haven't
1444 been able to construct a simple test case. The problem is that
1445 in the second call to SKIP_PROLOGUE below, the compiler somehow
1446 does not realize that the statement val = find_pc_line (...) will
1447 change the values of the fields of val. It extracts the elements
1448 into registers at the top of the block, and does not update the
1449 registers after the call to find_pc_line. You can check this by
1450 inserting a printf at the end of find_pc_line to show what values
1451 it is returning for val.pc and val.end and another printf after
1452 the call to see what values the function actually got (remember,
1453 this is compiling with cc -O, with this patch removed). You can
1454 also examine the assembly listing: search for the second call to
1455 skip_prologue; the LDO statement before the next call to
1456 find_pc_line loads the address of the structure which
1457 find_pc_line will return; if there is a LDW just before the LDO,
1458 which fetches an element of the structure, then the compiler
1459 still has the bug.
1460
1461 Setting val to volatile avoids the problem. We must undef
1462 volatile, because the HPPA native compiler does not define
1463 __STDC__, although it does understand volatile, and so volatile
1464 will have been defined away in defs.h. */
1465#undef volatile
1466 volatile struct symtab_and_line val;
1467#define volatile /*nothing*/
1468#else
bd5635a1 1469 struct symtab_and_line val;
c1878f87 1470#endif
bd5635a1 1471 register char *p, *p1;
d96b54ea 1472 char *q, *q1;
bd5635a1
RP
1473 register struct symtab *s;
1474
1475 register struct symbol *sym;
1476 /* The symtab that SYM was found in. */
1477 struct symtab *sym_symtab;
1478
1479 register CORE_ADDR pc;
cba0d141 1480 register struct minimal_symbol *msymbol;
bd5635a1
RP
1481 char *copy;
1482 struct symbol *sym_class;
1483 int i1;
8050a57b 1484 int is_quoted;
bd5635a1
RP
1485 struct symbol **sym_arr;
1486 struct type *t;
f70be3e4
JG
1487 char *saved_arg = *argptr;
1488 extern char *gdb_completer_quote_characters;
bd5635a1
RP
1489
1490 /* Defaults have defaults. */
1491
1492 if (default_symtab == 0)
1493 {
1494 default_symtab = current_source_symtab;
1495 default_line = current_source_line;
1496 }
1497
8050a57b 1498 /* See if arg is *PC */
bd5635a1 1499
8050a57b 1500 if (**argptr == '*')
f70be3e4
JG
1501 {
1502 if (**argptr == '*')
1503 {
1504 (*argptr)++;
1505 }
bd5635a1
RP
1506 pc = parse_and_eval_address_1 (argptr);
1507 values.sals = (struct symtab_and_line *)
1508 xmalloc (sizeof (struct symtab_and_line));
1509 values.nelts = 1;
1510 values.sals[0] = find_pc_line (pc, 0);
1511 values.sals[0].pc = pc;
1512 return values;
1513 }
1514
1515 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
1516
8050a57b
FF
1517 s = NULL;
1518 is_quoted = (strchr (gdb_completer_quote_characters, **argptr) != NULL);
bd5635a1
RP
1519
1520 for (p = *argptr; *p; p++)
1521 {
1522 if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
1523 break;
1524 }
1525 while (p[0] == ' ' || p[0] == '\t') p++;
1526
8050a57b 1527 if ((p[0] == ':') && !is_quoted)
bd5635a1
RP
1528 {
1529
1530 /* C++ */
1531 if (p[1] ==':')
1532 {
1533 /* Extract the class name. */
1534 p1 = p;
1535 while (p != *argptr && p[-1] == ' ') --p;
1536 copy = (char *) alloca (p - *argptr + 1);
4ed3a9ea 1537 memcpy (copy, *argptr, p - *argptr);
bd5635a1
RP
1538 copy[p - *argptr] = 0;
1539
1540 /* Discard the class name from the arg. */
1541 p = p1 + 2;
1542 while (*p == ' ' || *p == '\t') p++;
1543 *argptr = p;
1544
1545 sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
1546 (struct symtab **)NULL);
1547
1548 if (sym_class &&
f1d77e90 1549 ( TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_STRUCT
bd5635a1
RP
1550 || TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_UNION))
1551 {
1552 /* Arg token is not digits => try it as a function name
1553 Find the next token (everything up to end or next whitespace). */
1554 p = *argptr;
1555 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
d96b54ea 1556 q = operator_chars (*argptr, &q1);
aec4cb91 1557
d96b54ea
JK
1558 if (q1 - q)
1559 {
2cd99985
PB
1560 char *opname;
1561 char *tmp = alloca (q1 - q + 1);
1562 memcpy (tmp, q, q1 - q);
1563 tmp[q1 - q] = '\0';
8050a57b 1564 opname = cplus_mangle_opname (tmp, DMGL_ANSI);
2cd99985 1565 if (opname == NULL)
f70be3e4
JG
1566 {
1567 warning ("no mangling for \"%s\"", tmp);
1568 cplusplus_hint (saved_arg);
1569 return_to_top_level ();
1570 }
2cd99985
PB
1571 copy = (char*) alloca (3 + strlen(opname));
1572 sprintf (copy, "__%s", opname);
d96b54ea
JK
1573 p = q1;
1574 }
1575 else
1576 {
2cd99985 1577 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
4ed3a9ea 1578 memcpy (copy, *argptr, p - *argptr);
d96b54ea
JK
1579 copy[p - *argptr] = '\0';
1580 }
bd5635a1
RP
1581
1582 /* no line number may be specified */
1583 while (*p == ' ' || *p == '\t') p++;
1584 *argptr = p;
1585
1586 sym = 0;
1587 i1 = 0; /* counter for the symbol array */
1588 t = SYMBOL_TYPE (sym_class);
1589 sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
bd5635a1
RP
1590
1591 if (destructor_name_p (copy, t))
1592 {
1593 /* destructors are a special case. */
1594 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, 0);
1595 int len = TYPE_FN_FIELDLIST_LENGTH (t, 0) - 1;
1596 char *phys_name = TYPE_FN_FIELD_PHYSNAME (f, len);
bd5635a1
RP
1597 sym_arr[i1] =
1598 lookup_symbol (phys_name, SYMBOL_BLOCK_VALUE (sym_class),
1599 VAR_NAMESPACE, 0, (struct symtab **)NULL);
1600 if (sym_arr[i1]) i1++;
1601 }
1602 else
2e4964ad 1603 i1 = find_methods (t, copy, sym_arr);
bd5635a1
RP
1604 if (i1 == 1)
1605 {
1606 /* There is exactly one field with that name. */
1607 sym = sym_arr[0];
1608
1609 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1610 {
1611 /* Arg is the name of a function */
1612 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1613 if (funfirstline)
1614 SKIP_PROLOGUE (pc);
1615 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1616 values.nelts = 1;
1617 values.sals[0] = find_pc_line (pc, 0);
1618 values.sals[0].pc = (values.sals[0].end && values.sals[0].pc != pc) ? values.sals[0].end : pc;
1619 }
1620 else
1621 {
1622 values.nelts = 0;
1623 }
1624 return values;
1625 }
1626 if (i1 > 0)
1627 {
1628 /* There is more than one field with that name
1629 (overloaded). Ask the user which one to use. */
1630 return decode_line_2 (sym_arr, i1, funfirstline);
1631 }
1632 else
d96b54ea
JK
1633 {
1634 char *tmp;
1635
1636 if (OPNAME_PREFIX_P (copy))
1637 {
1638 tmp = (char *)alloca (strlen (copy+3) + 9);
1639 strcpy (tmp, "operator ");
1640 strcat (tmp, copy+3);
1641 }
1642 else
1643 tmp = copy;
0e2a896c 1644 if (tmp[0] == '~')
f70be3e4 1645 warning ("the class `%s' does not have destructor defined",
2e4964ad 1646 SYMBOL_SOURCE_NAME(sym_class));
0e2a896c 1647 else
f70be3e4 1648 warning ("the class %s does not have any method named %s",
2e4964ad 1649 SYMBOL_SOURCE_NAME(sym_class), tmp);
f70be3e4
JG
1650 cplusplus_hint (saved_arg);
1651 return_to_top_level ();
d96b54ea 1652 }
bd5635a1
RP
1653 }
1654 else
f70be3e4
JG
1655 {
1656 /* The quotes are important if copy is empty. */
1657 warning ("can't find class, struct, or union named \"%s\"",
1658 copy);
1659 cplusplus_hint (saved_arg);
1660 return_to_top_level ();
1661 }
bd5635a1
RP
1662 }
1663 /* end of C++ */
1664
1665
1666 /* Extract the file name. */
1667 p1 = p;
1668 while (p != *argptr && p[-1] == ' ') --p;
58050209 1669 copy = (char *) alloca (p - *argptr + 1);
4ed3a9ea 1670 memcpy (copy, *argptr, p - *argptr);
58050209 1671 copy[p - *argptr] = 0;
bd5635a1
RP
1672
1673 /* Find that file's data. */
1674 s = lookup_symtab (copy);
1675 if (s == 0)
1676 {
cba0d141 1677 if (!have_full_symbols () && !have_partial_symbols ())
bd5635a1
RP
1678 error (no_symtab_msg);
1679 error ("No source file named %s.", copy);
1680 }
1681
1682 /* Discard the file name from the arg. */
1683 p = p1 + 1;
1684 while (*p == ' ' || *p == '\t') p++;
1685 *argptr = p;
1686 }
1687
1688 /* S is specified file's symtab, or 0 if no file specified.
1689 arg no longer contains the file name. */
1690
1691 /* Check whether arg is all digits (and sign) */
1692
1693 p = *argptr;
1694 if (*p == '-' || *p == '+') p++;
1695 while (*p >= '0' && *p <= '9')
1696 p++;
1697
1698 if (p != *argptr && (*p == 0 || *p == ' ' || *p == '\t' || *p == ','))
1699 {
1700 /* We found a token consisting of all digits -- at least one digit. */
1701 enum sign {none, plus, minus} sign = none;
1702
1703 /* This is where we need to make sure that we have good defaults.
1704 We must guarantee that this section of code is never executed
1705 when we are called with just a function name, since
1706 select_source_symtab calls us with such an argument */
1707
1708 if (s == 0 && default_symtab == 0)
1709 {
bd5635a1
RP
1710 select_source_symtab (0);
1711 default_symtab = current_source_symtab;
1712 default_line = current_source_line;
1713 }
1714
1715 if (**argptr == '+')
1716 sign = plus, (*argptr)++;
1717 else if (**argptr == '-')
1718 sign = minus, (*argptr)++;
1719 val.line = atoi (*argptr);
1720 switch (sign)
1721 {
1722 case plus:
1723 if (p == *argptr)
1724 val.line = 5;
1725 if (s == 0)
1726 val.line = default_line + val.line;
1727 break;
1728 case minus:
1729 if (p == *argptr)
1730 val.line = 15;
1731 if (s == 0)
1732 val.line = default_line - val.line;
1733 else
1734 val.line = 1;
1735 break;
1736 case none:
1737 break; /* No need to adjust val.line. */
1738 }
1739
1740 while (*p == ' ' || *p == '\t') p++;
1741 *argptr = p;
1742 if (s == 0)
1743 s = default_symtab;
1744 val.symtab = s;
1745 val.pc = 0;
1746 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1747 values.sals[0] = val;
1748 values.nelts = 1;
1749 return values;
1750 }
1751
1752 /* Arg token is not digits => try it as a variable name
1753 Find the next token (everything up to end or next whitespace). */
2cd99985 1754
f70be3e4 1755 p = skip_quoted (*argptr);
bd5635a1 1756 copy = (char *) alloca (p - *argptr + 1);
4ed3a9ea 1757 memcpy (copy, *argptr, p - *argptr);
f70be3e4
JG
1758 copy[p - *argptr] = '\0';
1759 if ((copy[0] == copy [p - *argptr - 1])
1760 && strchr (gdb_completer_quote_characters, copy[0]) != NULL)
1761 {
1762 char *temp;
1763 copy [p - *argptr - 1] = '\0';
1764 copy++;
f70be3e4 1765 }
bd5635a1
RP
1766 while (*p == ' ' || *p == '\t') p++;
1767 *argptr = p;
1768
1769 /* Look up that token as a variable.
1770 If file specified, use that file's per-file block to start with. */
1771
1772 sym = lookup_symbol (copy,
3ba6a043 1773 (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
bd5635a1
RP
1774 : get_selected_block ()),
1775 VAR_NAMESPACE, 0, &sym_symtab);
1776
1777 if (sym != NULL)
1778 {
1779 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
1780 {
1781 /* Arg is the name of a function */
1782 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1783 if (funfirstline)
1784 SKIP_PROLOGUE (pc);
1785 val = find_pc_line (pc, 0);
1786#ifdef PROLOGUE_FIRSTLINE_OVERLAP
1787 /* Convex: no need to suppress code on first line, if any */
1788 val.pc = pc;
1789#else
7b2a87ca
JG
1790 /* If SKIP_PROLOGUE left us in mid-line, and the next line is still
1791 part of the same function:
1792 advance to next line,
1793 recalculate its line number (might not be N+1). */
1794 if (val.pc != pc && val.end &&
cba0d141 1795 lookup_minimal_symbol_by_pc (pc) == lookup_minimal_symbol_by_pc (val.end)) {
7b2a87ca
JG
1796 pc = val.end; /* First pc of next line */
1797 val = find_pc_line (pc, 0);
1798 }
1799 val.pc = pc;
bd5635a1
RP
1800#endif
1801 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1802 values.sals[0] = val;
1803 values.nelts = 1;
1804
1805 /* I think this is always the same as the line that
1806 we calculate above, but the general principle is
1807 "trust the symbols more than stuff like
1808 SKIP_PROLOGUE". */
1809 if (SYMBOL_LINE (sym) != 0)
1810 values.sals[0].line = SYMBOL_LINE (sym);
1811
1812 return values;
1813 }
1814 else if (SYMBOL_LINE (sym) != 0)
1815 {
1816 /* We know its line number. */
1817 values.sals = (struct symtab_and_line *)
1818 xmalloc (sizeof (struct symtab_and_line));
1819 values.nelts = 1;
4ed3a9ea 1820 memset (&values.sals[0], 0, sizeof (values.sals[0]));
bd5635a1
RP
1821 values.sals[0].symtab = sym_symtab;
1822 values.sals[0].line = SYMBOL_LINE (sym);
1823 return values;
1824 }
1825 else
1826 /* This can happen if it is compiled with a compiler which doesn't
1827 put out line numbers for variables. */
1828 error ("Line number not known for symbol \"%s\"", copy);
1829 }
1830
cba0d141
JG
1831 msymbol = lookup_minimal_symbol (copy, (struct objfile *) NULL);
1832 if (msymbol != NULL)
bd5635a1
RP
1833 {
1834 val.symtab = 0;
1835 val.line = 0;
2e4964ad 1836 val.pc = SYMBOL_VALUE_ADDRESS (msymbol) + FUNCTION_START_OFFSET;
bd5635a1
RP
1837 if (funfirstline)
1838 SKIP_PROLOGUE (val.pc);
1839 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1840 values.sals[0] = val;
1841 values.nelts = 1;
1842 return values;
1843 }
1844
cba0d141
JG
1845 if (!have_full_symbols () &&
1846 !have_partial_symbols () && !have_minimal_symbols ())
997a978c
JG
1847 error (no_symtab_msg);
1848
f70be3e4 1849 error ("Function \"%s\" not defined.", copy);
bd5635a1
RP
1850 return values; /* for lint */
1851}
1852
1853struct symtabs_and_lines
1854decode_line_spec (string, funfirstline)
1855 char *string;
1856 int funfirstline;
1857{
1858 struct symtabs_and_lines sals;
1859 if (string == 0)
1860 error ("Empty line specification.");
1861 sals = decode_line_1 (&string, funfirstline,
1862 current_source_symtab, current_source_line);
1863 if (*string)
1864 error ("Junk at end of line specification: %s", string);
1865 return sals;
1866}
1867
2e4964ad
FF
1868/* Given a list of NELTS symbols in sym_arr, return a list of lines to
1869 operate on (ask user if necessary). */
1870
cba0d141 1871static struct symtabs_and_lines
bd5635a1
RP
1872decode_line_2 (sym_arr, nelts, funfirstline)
1873 struct symbol *sym_arr[];
1874 int nelts;
1875 int funfirstline;
1876{
bd5635a1
RP
1877 struct symtabs_and_lines values, return_values;
1878 register CORE_ADDR pc;
cba0d141 1879 char *args, *arg1;
bd5635a1
RP
1880 int i;
1881 char *prompt;
2e4964ad 1882 char *symname;
bd5635a1
RP
1883
1884 values.sals = (struct symtab_and_line *) alloca (nelts * sizeof(struct symtab_and_line));
1885 return_values.sals = (struct symtab_and_line *) xmalloc (nelts * sizeof(struct symtab_and_line));
1886
1887 i = 0;
1888 printf("[0] cancel\n[1] all\n");
1889 while (i < nelts)
1890 {
1891 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
1892 {
1893 /* Arg is the name of a function */
1894 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym_arr[i]))
1895 + FUNCTION_START_OFFSET;
1896 if (funfirstline)
1897 SKIP_PROLOGUE (pc);
1898 values.sals[i] = find_pc_line (pc, 0);
1899 values.sals[i].pc = (values.sals[i].end && values.sals[i].pc != pc) ?
1900 values.sals[i].end : pc;
2e4964ad 1901 printf("[%d] %s at %s:%d\n", (i+2), SYMBOL_SOURCE_NAME (sym_arr[i]),
8050a57b 1902 values.sals[i].symtab->filename, values.sals[i].line);
bd5635a1
RP
1903 }
1904 else printf ("?HERE\n");
1905 i++;
1906 }
1907
1908 if ((prompt = getenv ("PS2")) == NULL)
1909 {
1910 prompt = ">";
1911 }
1912 printf("%s ",prompt);
1913 fflush(stdout);
1914
cba0d141 1915 args = command_line_input ((char *) NULL, 0);
bd5635a1
RP
1916
1917 if (args == 0)
1918 error_no_arg ("one or more choice numbers");
1919
1920 i = 0;
1921 while (*args)
1922 {
1923 int num;
1924
1925 arg1 = args;
1926 while (*arg1 >= '0' && *arg1 <= '9') arg1++;
1927 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
1928 error ("Arguments must be choice numbers.");
1929
1930 num = atoi (args);
1931
1932 if (num == 0)
1933 error ("cancelled");
1934 else if (num == 1)
1935 {
4ed3a9ea
FF
1936 memcpy (return_values.sals, values.sals,
1937 (nelts * sizeof(struct symtab_and_line)));
bd5635a1
RP
1938 return_values.nelts = nelts;
1939 return return_values;
1940 }
1941
1942 if (num > nelts + 2)
1943 {
1944 printf ("No choice number %d.\n", num);
1945 }
1946 else
1947 {
1948 num -= 2;
1949 if (values.sals[num].pc)
1950 {
1951 return_values.sals[i++] = values.sals[num];
1952 values.sals[num].pc = 0;
1953 }
1954 else
1955 {
1956 printf ("duplicate request for %d ignored.\n", num);
1957 }
1958 }
1959
1960 args = arg1;
1961 while (*args == ' ' || *args == '\t') args++;
1962 }
1963 return_values.nelts = i;
1964 return return_values;
1965}
1966
bd5635a1
RP
1967\f
1968/* Slave routine for sources_info. Force line breaks at ,'s.
1969 NAME is the name to print and *FIRST is nonzero if this is the first
1970 name printed. Set *FIRST to zero. */
1971static void
1972output_source_filename (name, first)
1973 char *name;
1974 int *first;
1975{
bd5635a1
RP
1976 /* Table of files printed so far. Since a single source file can
1977 result in several partial symbol tables, we need to avoid printing
1978 it more than once. Note: if some of the psymtabs are read in and
1979 some are not, it gets printed both under "Source files for which
1980 symbols have been read" and "Source files for which symbols will
1981 be read in on demand". I consider this a reasonable way to deal
1982 with the situation. I'm not sure whether this can also happen for
1983 symtabs; it doesn't hurt to check. */
1984 static char **tab = NULL;
1985 /* Allocated size of tab in elements.
1986 Start with one 256-byte block (when using GNU malloc.c).
1987 24 is the malloc overhead when range checking is in effect. */
1988 static int tab_alloc_size = (256 - 24) / sizeof (char *);
1989 /* Current size of tab in elements. */
1990 static int tab_cur_size;
1991
1992 char **p;
1993
1994 if (*first)
1995 {
1996 if (tab == NULL)
1997 tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
1998 tab_cur_size = 0;
1999 }
2000
2001 /* Is NAME in tab? */
2002 for (p = tab; p < tab + tab_cur_size; p++)
2e4964ad 2003 if (STREQ (*p, name))
bd5635a1
RP
2004 /* Yes; don't print it again. */
2005 return;
2006 /* No; add it to tab. */
2007 if (tab_cur_size == tab_alloc_size)
2008 {
2009 tab_alloc_size *= 2;
cba0d141 2010 tab = (char **) xrealloc ((char *) tab, tab_alloc_size * sizeof (*tab));
bd5635a1
RP
2011 }
2012 tab[tab_cur_size++] = name;
2013
2014 if (*first)
2015 {
bd5635a1
RP
2016 *first = 0;
2017 }
2018 else
2019 {
f70be3e4 2020 printf_filtered (", ");
bd5635a1
RP
2021 }
2022
f70be3e4 2023 wrap_here ("");
bd5635a1 2024 fputs_filtered (name, stdout);
bd5635a1
RP
2025}
2026
2027static void
35a25840
SG
2028sources_info (ignore, from_tty)
2029 char *ignore;
2030 int from_tty;
bd5635a1
RP
2031{
2032 register struct symtab *s;
2033 register struct partial_symtab *ps;
cba0d141 2034 register struct objfile *objfile;
bd5635a1
RP
2035 int first;
2036
cba0d141 2037 if (!have_full_symbols () && !have_partial_symbols ())
bd5635a1 2038 {
3053b9f2 2039 error (no_symtab_msg);
bd5635a1
RP
2040 }
2041
2042 printf_filtered ("Source files for which symbols have been read in:\n\n");
2043
2044 first = 1;
35a25840 2045 ALL_SYMTABS (objfile, s)
cba0d141 2046 {
35a25840 2047 output_source_filename (s -> filename, &first);
cba0d141 2048 }
bd5635a1
RP
2049 printf_filtered ("\n\n");
2050
2051 printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2052
2053 first = 1;
35a25840 2054 ALL_PSYMTABS (objfile, ps)
cba0d141 2055 {
35a25840 2056 if (!ps->readin)
cba0d141 2057 {
35a25840 2058 output_source_filename (ps -> filename, &first);
cba0d141
JG
2059 }
2060 }
bd5635a1
RP
2061 printf_filtered ("\n");
2062}
2063
2e4964ad 2064/* List all symbols (if REGEXP is NULL) or all symbols matching REGEXP.
3a16d640
JG
2065 If CLASS is zero, list all symbols except functions, type names, and
2066 constants (enums).
bd5635a1
RP
2067 If CLASS is 1, list only functions.
2068 If CLASS is 2, list only type names.
997a978c 2069 If CLASS is 3, list only method names.
bd5635a1
RP
2070
2071 BPT is non-zero if we should set a breakpoint at the functions
2072 we find. */
2073
2074static void
2075list_symbols (regexp, class, bpt)
2076 char *regexp;
2077 int class;
2078 int bpt;
2079{
2080 register struct symtab *s;
2081 register struct partial_symtab *ps;
2082 register struct blockvector *bv;
2083 struct blockvector *prev_bv = 0;
2084 register struct block *b;
2085 register int i, j;
2086 register struct symbol *sym;
2087 struct partial_symbol *psym;
cba0d141
JG
2088 struct objfile *objfile;
2089 struct minimal_symbol *msymbol;
35a25840 2090 char *val;
bd5635a1
RP
2091 static char *classnames[]
2092 = {"variable", "function", "type", "method"};
2093 int found_in_file = 0;
997a978c 2094 int found_misc = 0;
cba0d141
JG
2095 static enum minimal_symbol_type types[]
2096 = {mst_data, mst_text, mst_abs, mst_unknown};
2097 static enum minimal_symbol_type types2[]
2098 = {mst_bss, mst_text, mst_abs, mst_unknown};
2099 enum minimal_symbol_type ourtype = types[class];
2100 enum minimal_symbol_type ourtype2 = types2[class];
bd5635a1 2101
2e4964ad 2102 if (regexp != NULL)
2cd99985
PB
2103 {
2104 /* Make sure spacing is right for C++ operators.
2105 This is just a courtesy to make the matching less sensitive
2106 to how many spaces the user leaves between 'operator'
2107 and <TYPENAME> or <OPERATOR>. */
2108 char *opend;
2109 char *opname = operator_chars (regexp, &opend);
2110 if (*opname)
2111 {
2112 int fix = -1; /* -1 means ok; otherwise number of spaces needed. */
2113 if (isalpha(*opname) || *opname == '_' || *opname == '$')
2114 {
2115 /* There should 1 space between 'operator' and 'TYPENAME'. */
2116 if (opname[-1] != ' ' || opname[-2] == ' ')
2117 fix = 1;
2118 }
2119 else
2120 {
2121 /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2122 if (opname[-1] == ' ')
2123 fix = 0;
2124 }
2125 /* If wrong number of spaces, fix it. */
2126 if (fix >= 0)
2127 {
2128 char *tmp = (char*) alloca(opend-opname+10);
2129 sprintf(tmp, "operator%.*s%s", fix, " ", opname);
2130 regexp = tmp;
2131 }
2132 }
2133
2134 if (0 != (val = re_comp (regexp)))
2135 error ("Invalid regexp (%s): %s", val, regexp);
2136 }
bd5635a1 2137
cba0d141 2138 /* Search through the partial symtabs *first* for all symbols
bd5635a1
RP
2139 matching the regexp. That way we don't have to reproduce all of
2140 the machinery below. */
bd5635a1 2141
35a25840 2142 ALL_PSYMTABS (objfile, ps)
cba0d141 2143 {
35a25840
SG
2144 struct partial_symbol *bound, *gbound, *sbound;
2145 int keep_going = 1;
2146
2147 if (ps->readin) continue;
2148
2149 gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2150 sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2151 bound = gbound;
2152
2153 /* Go through all of the symbols stored in a partial
2154 symtab in one loop. */
2155 psym = objfile->global_psymbols.list + ps->globals_offset;
2156 while (keep_going)
bd5635a1 2157 {
35a25840 2158 if (psym >= bound)
bd5635a1 2159 {
35a25840 2160 if (bound == gbound && ps->n_static_syms != 0)
bd5635a1 2161 {
35a25840
SG
2162 psym = objfile->static_psymbols.list + ps->statics_offset;
2163 bound = sbound;
bd5635a1
RP
2164 }
2165 else
35a25840
SG
2166 keep_going = 0;
2167 continue;
2168 }
2169 else
2170 {
2171 QUIT;
2172
2173 /* If it would match (logic taken from loop below)
2174 load the file and go on to the next one */
2e4964ad 2175 if ((regexp == NULL || SYMBOL_MATCHES_REGEXP (psym))
35a25840
SG
2176 && ((class == 0 && SYMBOL_CLASS (psym) != LOC_TYPEDEF
2177 && SYMBOL_CLASS (psym) != LOC_BLOCK)
2178 || (class == 1 && SYMBOL_CLASS (psym) == LOC_BLOCK)
2179 || (class == 2 && SYMBOL_CLASS (psym) == LOC_TYPEDEF)
2180 || (class == 3 && SYMBOL_CLASS (psym) == LOC_BLOCK)))
bd5635a1 2181 {
4ed3a9ea 2182 PSYMTAB_TO_SYMTAB(ps);
35a25840 2183 keep_going = 0;
bd5635a1
RP
2184 }
2185 }
35a25840 2186 psym++;
bd5635a1
RP
2187 }
2188 }
2189
cba0d141 2190 /* Here, we search through the minimal symbol tables for functions that
bd5635a1
RP
2191 match, and call find_pc_symtab on them to force their symbols to
2192 be read. The symbol will then be found during the scan of symtabs
997a978c
JG
2193 below. If find_pc_symtab fails, set found_misc so that we will
2194 rescan to print any matching symbols without debug info. */
2195
cba0d141
JG
2196 if (class == 1)
2197 {
35a25840 2198 ALL_MSYMBOLS (objfile, msymbol)
cba0d141 2199 {
2e4964ad
FF
2200 if (MSYMBOL_TYPE (msymbol) == ourtype ||
2201 MSYMBOL_TYPE (msymbol) == ourtype2)
cba0d141 2202 {
2e4964ad 2203 if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
cba0d141 2204 {
2e4964ad 2205 if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
cba0d141 2206 {
35a25840 2207 found_misc = 1;
cba0d141
JG
2208 }
2209 }
2210 }
2211 }
bd5635a1
RP
2212 }
2213
2214 /* Printout here so as to get after the "Reading in symbols"
2215 messages which will be generated above. */
2216 if (!bpt)
2217 printf_filtered (regexp
2218 ? "All %ss matching regular expression \"%s\":\n"
2219 : "All defined %ss:\n",
2220 classnames[class],
2221 regexp);
2222
35a25840 2223 ALL_SYMTABS (objfile, s)
bd5635a1 2224 {
35a25840
SG
2225 found_in_file = 0;
2226 bv = BLOCKVECTOR (s);
2227 /* Often many files share a blockvector.
2228 Scan each blockvector only once so that
2229 we don't get every symbol many times.
2230 It happens that the first symtab in the list
2231 for any given blockvector is the main file. */
2232 if (bv != prev_bv)
2233 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
2234 {
2235 b = BLOCKVECTOR_BLOCK (bv, i);
2236 /* Skip the sort if this block is always sorted. */
2237 if (!BLOCK_SHOULD_SORT (b))
2238 sort_block_syms (b);
2239 for (j = 0; j < BLOCK_NSYMS (b); j++)
bd5635a1 2240 {
35a25840
SG
2241 QUIT;
2242 sym = BLOCK_SYM (b, j);
2e4964ad 2243 if ((regexp == NULL || SYMBOL_MATCHES_REGEXP (sym))
35a25840 2244 && ((class == 0 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
3a16d640
JG
2245 && SYMBOL_CLASS (sym) != LOC_BLOCK
2246 && SYMBOL_CLASS (sym) != LOC_CONST)
35a25840
SG
2247 || (class == 1 && SYMBOL_CLASS (sym) == LOC_BLOCK)
2248 || (class == 2 && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2249 || (class == 3 && SYMBOL_CLASS (sym) == LOC_BLOCK)))
bd5635a1 2250 {
35a25840 2251 if (bpt)
bd5635a1 2252 {
35a25840
SG
2253 /* Set a breakpoint here, if it's a function */
2254 if (class == 1)
2255 break_command (SYMBOL_NAME(sym), 0);
2256 }
2257 else if (!found_in_file)
2258 {
2259 fputs_filtered ("\nFile ", stdout);
2260 fputs_filtered (s->filename, stdout);
2261 fputs_filtered (":\n", stdout);
2262 }
2263 found_in_file = 1;
2264
2265 if (class != 2 && i == STATIC_BLOCK)
2266 printf_filtered ("static ");
2267
2268 /* Typedef that is not a C++ class */
2269 if (class == 2
2270 && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
a8a69e63 2271 c_typedef_print (SYMBOL_TYPE(sym), sym, stdout);
35a25840
SG
2272 /* variable, func, or typedef-that-is-c++-class */
2273 else if (class < 2 ||
2274 (class == 2 &&
2275 SYMBOL_NAMESPACE(sym) == STRUCT_NAMESPACE))
2276 {
2277 type_print (SYMBOL_TYPE (sym),
2278 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2e4964ad 2279 ? "" : SYMBOL_SOURCE_NAME (sym)),
35a25840 2280 stdout, 0);
cba0d141 2281
35a25840
SG
2282 printf_filtered (";\n");
2283 }
2284 else
2285 {
a8a69e63 2286# if 0 /* FIXME, why is this zapped out? */
35a25840 2287 char buf[1024];
a8a69e63
FF
2288 c_type_print_base (TYPE_FN_FIELD_TYPE(t, i),
2289 stdout, 0, 0);
2290 c_type_print_varspec_prefix (TYPE_FN_FIELD_TYPE(t, i),
2291 stdout, 0);
35a25840 2292 sprintf (buf, " %s::", type_name_no_tag (t));
a8a69e63
FF
2293 cp_type_print_method_args (TYPE_FN_FIELD_ARGS (t, i),
2294 buf, name, stdout);
bd5635a1
RP
2295# endif
2296 }
2297 }
2298 }
35a25840
SG
2299 }
2300 prev_bv = bv;
bd5635a1 2301 }
997a978c 2302
997a978c 2303 /* If there are no eyes, avoid all contact. I mean, if there are
cba0d141
JG
2304 no debug symbols, then print directly from the msymbol_vector. */
2305
2306 if (found_misc || class != 1)
2307 {
2308 found_in_file = 0;
35a25840 2309 ALL_MSYMBOLS (objfile, msymbol)
cba0d141 2310 {
2e4964ad
FF
2311 if (MSYMBOL_TYPE (msymbol) == ourtype ||
2312 MSYMBOL_TYPE (msymbol) == ourtype2)
cba0d141 2313 {
2e4964ad 2314 if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
cba0d141 2315 {
35a25840 2316 /* Functions: Look up by address. */
f70be3e4 2317 if (class != 1 ||
2e4964ad 2318 (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
cba0d141 2319 {
35a25840 2320 /* Variables/Absolutes: Look up by name */
2e4964ad
FF
2321 if (lookup_symbol (SYMBOL_NAME (msymbol),
2322 (struct block *) NULL, VAR_NAMESPACE,
2323 0, (struct symtab **) NULL) == NULL)
cba0d141 2324 {
35a25840 2325 if (!found_in_file)
cba0d141 2326 {
35a25840
SG
2327 printf_filtered ("\nNon-debugging symbols:\n");
2328 found_in_file = 1;
cba0d141 2329 }
35a25840 2330 printf_filtered (" %08x %s\n",
2e4964ad
FF
2331 SYMBOL_VALUE_ADDRESS (msymbol),
2332 SYMBOL_SOURCE_NAME (msymbol));
cba0d141
JG
2333 }
2334 }
2335 }
2336 }
997a978c 2337 }
997a978c 2338 }
bd5635a1
RP
2339}
2340
2341static void
35a25840 2342variables_info (regexp, from_tty)
bd5635a1 2343 char *regexp;
35a25840 2344 int from_tty;
bd5635a1
RP
2345{
2346 list_symbols (regexp, 0, 0);
2347}
2348
2349static void
35a25840 2350functions_info (regexp, from_tty)
bd5635a1 2351 char *regexp;
35a25840 2352 int from_tty;
bd5635a1
RP
2353{
2354 list_symbols (regexp, 1, 0);
2355}
2356
bd5635a1 2357static void
35a25840 2358types_info (regexp, from_tty)
bd5635a1 2359 char *regexp;
35a25840 2360 int from_tty;
bd5635a1
RP
2361{
2362 list_symbols (regexp, 2, 0);
2363}
bd5635a1
RP
2364
2365#if 0
2366/* Tiemann says: "info methods was never implemented." */
2367static void
2368methods_info (regexp)
2369 char *regexp;
2370{
2371 list_symbols (regexp, 3, 0);
2372}
2373#endif /* 0 */
2374
2375/* Breakpoint all functions matching regular expression. */
2376static void
35a25840 2377rbreak_command (regexp, from_tty)
bd5635a1 2378 char *regexp;
35a25840 2379 int from_tty;
bd5635a1
RP
2380{
2381 list_symbols (regexp, 1, 1);
2382}
2383\f
bd5635a1
RP
2384
2385/* Return Nonzero if block a is lexically nested within block b,
2386 or if a and b have the same pc range.
2387 Return zero otherwise. */
2388int
2389contained_in (a, b)
2390 struct block *a, *b;
2391{
2392 if (!a || !b)
2393 return 0;
2394 return BLOCK_START (a) >= BLOCK_START (b)
2395 && BLOCK_END (a) <= BLOCK_END (b);
2396}
2397
2398\f
2399/* Helper routine for make_symbol_completion_list. */
2400
f70be3e4
JG
2401static int return_val_size;
2402static int return_val_index;
2403static char **return_val;
2404
2e4964ad
FF
2405#define COMPLETION_LIST_ADD_SYMBOL(symbol, text, len) \
2406 do { \
2407 completion_list_add_name (SYMBOL_NAME (symbol), text, len); \
2408 if (SYMBOL_LANGUAGE (symbol) == language_cplus && \
2409 SYMBOL_DEMANGLED_NAME (symbol) != NULL) \
2410 completion_list_add_name (SYMBOL_DEMANGLED_NAME (symbol), text, len); \
2411 } while (0)
2412
2413/* Test to see if the symbol specified by SYMNAME (which is already
2414 demangled for C++ symbols) matches TEXT in the first TEXT_LEN
2415 characters. If so, add it to the current completion list. */
bd5635a1 2416
cba0d141 2417static void
2e4964ad 2418completion_list_add_name (symname, text, text_len)
bd5635a1 2419 char *symname;
f70be3e4
JG
2420 char *text;
2421 int text_len;
bd5635a1 2422{
f70be3e4 2423 int newsize;
8005788c
RP
2424 int i;
2425
2426 /* clip symbols that cannot match */
2427
2e4964ad
FF
2428 if (strncmp (symname, text, text_len) != 0)
2429 {
8005788c
RP
2430 return;
2431 }
f70be3e4 2432
2e4964ad
FF
2433 /* Clip any symbol names that we've already considered. (This is a
2434 time optimization) */
8005788c 2435
2e4964ad
FF
2436 for (i = 0; i < return_val_index; ++i)
2437 {
2438 if (STREQ (symname, return_val[i]))
2439 {
2440 return;
2441 }
f70be3e4 2442 }
2e4964ad
FF
2443
2444 /* We have a match for a completion, so add SYMNAME to the current list
2445 of matches. Note that the name is moved to freshly malloc'd space. */
f70be3e4 2446
2e4964ad 2447 symname = savestring (symname, strlen (symname));
8005788c 2448 if (return_val_index + 3 > return_val_size)
f70be3e4 2449 {
8005788c
RP
2450 newsize = (return_val_size *= 2) * sizeof (char *);
2451 return_val = (char **) xrealloc ((char *) return_val, newsize);
f70be3e4 2452 }
8005788c
RP
2453 return_val[return_val_index++] = symname;
2454 return_val[return_val_index] = NULL;
bd5635a1
RP
2455}
2456
2457/* Return a NULL terminated array of all symbols (regardless of class) which
2458 begin by matching TEXT. If the answer is no symbols, then the return value
2459 is an array which contains only a NULL pointer.
2460
f70be3e4
JG
2461 Problem: All of the symbols have to be copied because readline frees them.
2462 I'm not going to worry about this; hopefully there won't be that many. */
bd5635a1
RP
2463
2464char **
2465make_symbol_completion_list (text)
2466 char *text;
2467{
f70be3e4 2468 register struct symbol *sym;
bd5635a1
RP
2469 register struct symtab *s;
2470 register struct partial_symtab *ps;
cba0d141
JG
2471 register struct minimal_symbol *msymbol;
2472 register struct objfile *objfile;
bd5635a1 2473 register struct block *b, *surrounding_static_block = 0;
bd5635a1 2474 register int i, j;
f70be3e4 2475 int text_len;
bd5635a1
RP
2476 struct partial_symbol *psym;
2477
f70be3e4 2478 text_len = strlen (text);
bd5635a1
RP
2479 return_val_size = 100;
2480 return_val_index = 0;
f70be3e4
JG
2481 return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
2482 return_val[0] = NULL;
bd5635a1
RP
2483
2484 /* Look through the partial symtabs for all symbols which begin
2485 by matching TEXT. Add each one that you find to the list. */
2486
35a25840 2487 ALL_PSYMTABS (objfile, ps)
bd5635a1 2488 {
35a25840
SG
2489 /* If the psymtab's been read in we'll get it when we search
2490 through the blockvector. */
2491 if (ps->readin) continue;
2492
2493 for (psym = objfile->global_psymbols.list + ps->globals_offset;
2494 psym < (objfile->global_psymbols.list + ps->globals_offset
2495 + ps->n_global_syms);
2496 psym++)
bd5635a1 2497 {
f70be3e4
JG
2498 /* If interrupted, then quit. */
2499 QUIT;
2e4964ad 2500 COMPLETION_LIST_ADD_SYMBOL (psym, text, text_len);
35a25840
SG
2501 }
2502
2503 for (psym = objfile->static_psymbols.list + ps->statics_offset;
2504 psym < (objfile->static_psymbols.list + ps->statics_offset
2505 + ps->n_static_syms);
2506 psym++)
2507 {
2508 QUIT;
2e4964ad 2509 COMPLETION_LIST_ADD_SYMBOL (psym, text, text_len);
bd5635a1
RP
2510 }
2511 }
2512
cba0d141 2513 /* At this point scan through the misc symbol vectors and add each
bd5635a1
RP
2514 symbol you find to the list. Eventually we want to ignore
2515 anything that isn't a text symbol (everything else will be
2516 handled by the psymtab code above). */
2517
35a25840 2518 ALL_MSYMBOLS (objfile, msymbol)
cba0d141 2519 {
f70be3e4 2520 QUIT;
2e4964ad 2521 COMPLETION_LIST_ADD_SYMBOL (msymbol, text, text_len);
cba0d141 2522 }
bd5635a1
RP
2523
2524 /* Search upwards from currently selected frame (so that we can
2525 complete on local vars. */
f70be3e4
JG
2526
2527 for (b = get_selected_block (); b != NULL; b = BLOCK_SUPERBLOCK (b))
2528 {
2529 if (!BLOCK_SUPERBLOCK (b))
2530 {
2531 surrounding_static_block = b; /* For elmin of dups */
2532 }
2533
2534 /* Also catch fields of types defined in this places which match our
2535 text string. Only complete on types visible from current context. */
2536
2537 for (i = 0; i < BLOCK_NSYMS (b); i++)
2538 {
2539 sym = BLOCK_SYM (b, i);
2e4964ad 2540 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
f70be3e4
JG
2541 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2542 {
2543 struct type *t = SYMBOL_TYPE (sym);
2544 enum type_code c = TYPE_CODE (t);
2545
2546 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2547 {
2548 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2549 {
2550 if (TYPE_FIELD_NAME (t, j))
2551 {
2e4964ad 2552 completion_list_add_name (TYPE_FIELD_NAME (t, j),
f70be3e4
JG
2553 text, text_len);
2554 }
2555 }
2556 }
2557 }
2558 }
2559 }
2560
2561 /* Go through the symtabs and check the externs and statics for
2562 symbols which match. */
2563
2564 ALL_SYMTABS (objfile, s)
2565 {
2566 QUIT;
2567 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2568 for (i = 0; i < BLOCK_NSYMS (b); i++)
2569 {
2570 sym = BLOCK_SYM (b, i);
2e4964ad 2571 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
f70be3e4
JG
2572 }
2573 }
2574
2575 ALL_SYMTABS (objfile, s)
2576 {
2577 QUIT;
2578 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
2579 /* Don't do this block twice. */
2580 if (b == surrounding_static_block) continue;
2581 for (i = 0; i < BLOCK_NSYMS (b); i++)
2582 {
2583 sym = BLOCK_SYM (b, i);
2e4964ad 2584 COMPLETION_LIST_ADD_SYMBOL (sym, text, text_len);
f70be3e4
JG
2585 }
2586 }
2587
2588 return (return_val);
2589}
2590
bd5635a1 2591\f
997a978c
JG
2592#if 0
2593/* Add the type of the symbol sym to the type of the current
2594 function whose block we are in (assumed). The type of
2595 this current function is contained in *TYPE.
2596
2597 This basically works as follows: When we find a function
2598 symbol (N_FUNC with a 'f' or 'F' in the symbol name), we record
2599 a pointer to its type in the global in_function_type. Every
2600 time we come across a parameter symbol ('p' in its name), then
2601 this procedure adds the name and type of that parameter
2602 to the function type pointed to by *TYPE. (Which should correspond
2603 to in_function_type if it was called correctly).
2604
2605 Note that since we are modifying a type, the result of
51b57ded 2606 lookup_function_type() should be memcpy()ed before calling
997a978c
JG
2607 this. When not in strict typing mode, the expression
2608 evaluator can choose to ignore this.
2609
2610 Assumption: All of a function's parameter symbols will
2611 appear before another function symbol is found. The parameters
2612 appear in the same order in the argument list as they do in the
2613 symbol table. */
2614
2615void
2616add_param_to_type (type,sym)
2617 struct type **type;
2618 struct symbol *sym;
2619{
2620 int num = ++(TYPE_NFIELDS(*type));
2621
2622 if(TYPE_NFIELDS(*type)-1)
cba0d141
JG
2623 TYPE_FIELDS(*type) = (struct field *)
2624 (*current_objfile->xrealloc) ((char *)(TYPE_FIELDS(*type)),
2625 num*sizeof(struct field));
997a978c 2626 else
cba0d141
JG
2627 TYPE_FIELDS(*type) = (struct field *)
2628 (*current_objfile->xmalloc) (num*sizeof(struct field));
997a978c
JG
2629
2630 TYPE_FIELD_BITPOS(*type,num-1) = num-1;
2631 TYPE_FIELD_BITSIZE(*type,num-1) = 0;
2632 TYPE_FIELD_TYPE(*type,num-1) = SYMBOL_TYPE(sym);
2633 TYPE_FIELD_NAME(*type,num-1) = SYMBOL_NAME(sym);
2634}
2635#endif
2636\f
bd5635a1
RP
2637void
2638_initialize_symtab ()
2639{
2640 add_info ("variables", variables_info,
2641 "All global and static variable names, or those matching REGEXP.");
2642 add_info ("functions", functions_info,
2643 "All function names, or those matching REGEXP.");
3ba6a043
JG
2644
2645 /* FIXME: This command has at least the following problems:
bd5635a1
RP
2646 1. It prints builtin types (in a very strange and confusing fashion).
2647 2. It doesn't print right, e.g. with
2648 typedef struct foo *FOO
2649 type_print prints "FOO" when we want to make it (in this situation)
2650 print "struct foo *".
2651 I also think "ptype" or "whatis" is more likely to be useful (but if
2652 there is much disagreement "info types" can be fixed). */
2653 add_info ("types", types_info,
a0a6174a 2654 "All type names, or those matching REGEXP.");
3ba6a043 2655
bd5635a1
RP
2656#if 0
2657 add_info ("methods", methods_info,
2658 "All method names, or those matching REGEXP::REGEXP.\n\
50e0dc41 2659If the class qualifier is omitted, it is assumed to be the current scope.\n\
cba0d141 2660If the first REGEXP is omitted, then all methods matching the second REGEXP\n\
bd5635a1
RP
2661are listed.");
2662#endif
2663 add_info ("sources", sources_info,
2664 "Source files in the program.");
2665
2666 add_com ("rbreak", no_class, rbreak_command,
2667 "Set a breakpoint for all functions matching REGEXP.");
2668
997a978c 2669 /* Initialize the one built-in type that isn't language dependent... */
cba0d141
JG
2670 builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
2671 "<unknown type>", (struct objfile *) NULL);
bd5635a1 2672}
This page took 0.307382 seconds and 4 git commands to generate.