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