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