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