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