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