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