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