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