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