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