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