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