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