2003-04-14 David Carlton <carlton@math.stanford.edu>
[external/binutils.git] / gdb / symtab.c
1 /* Symbol table lookup for the GNU debugger, GDB.
2
3    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
4    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "gdbcore.h"
28 #include "frame.h"
29 #include "target.h"
30 #include "value.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "gdbcmd.h"
34 #include "call-cmds.h"
35 #include "gdb_regex.h"
36 #include "expression.h"
37 #include "language.h"
38 #include "demangle.h"
39 #include "inferior.h"
40 #include "linespec.h"
41 #include "source.h"
42 #include "filenames.h"          /* for FILENAME_CMP */
43
44 #include "hashtab.h"
45
46 #include "gdb_obstack.h"
47 #include "block.h"
48
49 #include <sys/types.h>
50 #include <fcntl.h>
51 #include "gdb_string.h"
52 #include "gdb_stat.h"
53 #include <ctype.h>
54 #include "cp-abi.h"
55
56 /* Prototypes for local functions */
57
58 static void completion_list_add_name (char *, char *, int, char *, char *);
59
60 static void rbreak_command (char *, int);
61
62 static void types_info (char *, int);
63
64 static void functions_info (char *, int);
65
66 static void variables_info (char *, int);
67
68 static void sources_info (char *, int);
69
70 static void output_source_filename (char *, int *);
71
72 static int find_line_common (struct linetable *, int, int *);
73
74 /* This one is used by linespec.c */
75
76 char *operator_chars (char *p, char **end);
77
78 static struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
79                                                      const char *,
80                                                      const char *, int,
81                                                      namespace_enum);
82
83 static struct symbol *lookup_symbol_aux (const char *name,
84                                          const char *mangled_name,
85                                          const struct block *block,
86                                          const namespace_enum namespace,
87                                          int *is_a_field_of_this,
88                                          struct symtab **symtab);
89
90 static
91 struct symbol *lookup_symbol_aux_local (const char *name,
92                                         const char *mangled_name,
93                                         const struct block *block,
94                                         const namespace_enum namespace,
95                                         struct symtab **symtab,
96                                         const struct block **static_block);
97
98 static
99 struct symbol *lookup_symbol_aux_block (const char *name,
100                                         const char *mangled_name,
101                                         const struct block *block,
102                                         const namespace_enum namespace,
103                                         struct symtab **symtab);
104
105 static
106 struct symbol *lookup_symbol_aux_symtabs (int block_index,
107                                           const char *name,
108                                           const char *mangled_name,
109                                           const namespace_enum namespace,
110                                           struct symtab **symtab);
111
112 static
113 struct symbol *lookup_symbol_aux_psymtabs (int block_index,
114                                            const char *name,
115                                            const char *mangled_name,
116                                            const namespace_enum namespace,
117                                            struct symtab **symtab);
118
119 static
120 struct symbol *lookup_symbol_aux_minsyms (const char *name,
121                                           const char *mangled_name,
122                                           const namespace_enum namespace,
123                                           int *is_a_field_of_this,
124                                           struct symtab **symtab);
125
126 static struct symbol *find_active_alias (struct symbol *sym, CORE_ADDR addr);
127
128 /* This flag is used in hppa-tdep.c, and set in hp-symtab-read.c */
129 /* Signals the presence of objects compiled by HP compilers */
130 int hp_som_som_object_present = 0;
131
132 static void fixup_section (struct general_symbol_info *, struct objfile *);
133
134 static int file_matches (char *, char **, int);
135
136 static void print_symbol_info (namespace_enum,
137                                struct symtab *, struct symbol *, int, char *);
138
139 static void print_msymbol_info (struct minimal_symbol *);
140
141 static void symtab_symbol_info (char *, namespace_enum, int);
142
143 static void overload_list_add_symbol (struct symbol *sym, char *oload_name);
144
145 void _initialize_symtab (void);
146
147 /* */
148
149 /* The single non-language-specific builtin type */
150 struct type *builtin_type_error;
151
152 /* Block in which the most recently searched-for symbol was found.
153    Might be better to make this a parameter to lookup_symbol and 
154    value_of_this. */
155
156 const struct block *block_found;
157
158 /* Check for a symtab of a specific name; first in symtabs, then in
159    psymtabs.  *If* there is no '/' in the name, a match after a '/'
160    in the symtab filename will also work.  */
161
162 struct symtab *
163 lookup_symtab (const char *name)
164 {
165   register struct symtab *s;
166   register struct partial_symtab *ps;
167   register struct objfile *objfile;
168   char *real_path = NULL;
169   char *full_path = NULL;
170
171   /* Here we are interested in canonicalizing an absolute path, not
172      absolutizing a relative path.  */
173   if (IS_ABSOLUTE_PATH (name))
174     {
175       full_path = xfullpath (name);
176       make_cleanup (xfree, full_path);
177       real_path = gdb_realpath (name);
178       make_cleanup (xfree, real_path);
179     }
180
181 got_symtab:
182
183   /* First, search for an exact match */
184
185   ALL_SYMTABS (objfile, s)
186   {
187     if (FILENAME_CMP (name, s->filename) == 0)
188       {
189         return s;
190       }
191       
192     /* If the user gave us an absolute path, try to find the file in
193        this symtab and use its absolute path.  */
194     
195     if (full_path != NULL)
196       {
197         const char *fp = symtab_to_filename (s);
198         if (FILENAME_CMP (full_path, fp) == 0)
199           {
200             return s;
201           }
202       }
203
204     if (real_path != NULL)
205       {
206         char *rp = gdb_realpath (symtab_to_filename (s));
207         make_cleanup (xfree, rp);
208         if (FILENAME_CMP (real_path, rp) == 0)
209           {
210             return s;
211           }
212       }
213   }
214
215   /* Now, search for a matching tail (only if name doesn't have any dirs) */
216
217   if (lbasename (name) == name)
218     ALL_SYMTABS (objfile, s)
219     {
220       if (FILENAME_CMP (lbasename (s->filename), name) == 0)
221         return s;
222     }
223
224   /* Same search rules as above apply here, but now we look thru the
225      psymtabs.  */
226
227   ps = lookup_partial_symtab (name);
228   if (!ps)
229     return (NULL);
230
231   if (ps->readin)
232     error ("Internal: readin %s pst for `%s' found when no symtab found.",
233            ps->filename, name);
234
235   s = PSYMTAB_TO_SYMTAB (ps);
236
237   if (s)
238     return s;
239
240   /* At this point, we have located the psymtab for this file, but
241      the conversion to a symtab has failed.  This usually happens
242      when we are looking up an include file.  In this case,
243      PSYMTAB_TO_SYMTAB doesn't return a symtab, even though one has
244      been created.  So, we need to run through the symtabs again in
245      order to find the file.
246      XXX - This is a crock, and should be fixed inside of the the
247      symbol parsing routines. */
248   goto got_symtab;
249 }
250
251 /* Lookup the partial symbol table of a source file named NAME.
252    *If* there is no '/' in the name, a match after a '/'
253    in the psymtab filename will also work.  */
254
255 struct partial_symtab *
256 lookup_partial_symtab (const char *name)
257 {
258   register struct partial_symtab *pst;
259   register struct objfile *objfile;
260   char *full_path = NULL;
261   char *real_path = NULL;
262
263   /* Here we are interested in canonicalizing an absolute path, not
264      absolutizing a relative path.  */
265   if (IS_ABSOLUTE_PATH (name))
266     {
267       full_path = xfullpath (name);
268       make_cleanup (xfree, full_path);
269       real_path = gdb_realpath (name);
270       make_cleanup (xfree, real_path);
271     }
272
273   ALL_PSYMTABS (objfile, pst)
274   {
275     if (FILENAME_CMP (name, pst->filename) == 0)
276       {
277         return (pst);
278       }
279
280     /* If the user gave us an absolute path, try to find the file in
281        this symtab and use its absolute path.  */
282     if (full_path != NULL)
283       {
284         if (pst->fullname == NULL)
285           source_full_path_of (pst->filename, &pst->fullname);
286         if (pst->fullname != NULL
287             && FILENAME_CMP (full_path, pst->fullname) == 0)
288           {
289             return pst;
290           }
291       }
292
293     if (real_path != NULL)
294       {
295         char *rp = NULL;
296         if (pst->fullname == NULL)
297           source_full_path_of (pst->filename, &pst->fullname);
298         if (pst->fullname != NULL)
299           {
300             rp = gdb_realpath (pst->fullname);
301             make_cleanup (xfree, rp);
302           }
303         if (rp != NULL && FILENAME_CMP (real_path, rp) == 0)
304           {
305             return pst;
306           }
307       }
308   }
309
310   /* Now, search for a matching tail (only if name doesn't have any dirs) */
311
312   if (lbasename (name) == name)
313     ALL_PSYMTABS (objfile, pst)
314     {
315       if (FILENAME_CMP (lbasename (pst->filename), name) == 0)
316         return (pst);
317     }
318
319   return (NULL);
320 }
321 \f
322 /* Mangle a GDB method stub type.  This actually reassembles the pieces of the
323    full method name, which consist of the class name (from T), the unadorned
324    method name from METHOD_ID, and the signature for the specific overload,
325    specified by SIGNATURE_ID.  Note that this function is g++ specific. */
326
327 char *
328 gdb_mangle_name (struct type *type, int method_id, int signature_id)
329 {
330   int mangled_name_len;
331   char *mangled_name;
332   struct fn_field *f = TYPE_FN_FIELDLIST1 (type, method_id);
333   struct fn_field *method = &f[signature_id];
334   char *field_name = TYPE_FN_FIELDLIST_NAME (type, method_id);
335   char *physname = TYPE_FN_FIELD_PHYSNAME (f, signature_id);
336   char *newname = type_name_no_tag (type);
337
338   /* Does the form of physname indicate that it is the full mangled name
339      of a constructor (not just the args)?  */
340   int is_full_physname_constructor;
341
342   int is_constructor;
343   int is_destructor = is_destructor_name (physname);
344   /* Need a new type prefix.  */
345   char *const_prefix = method->is_const ? "C" : "";
346   char *volatile_prefix = method->is_volatile ? "V" : "";
347   char buf[20];
348   int len = (newname == NULL ? 0 : strlen (newname));
349
350   /* Nothing to do if physname already contains a fully mangled v3 abi name
351      or an operator name.  */
352   if ((physname[0] == '_' && physname[1] == 'Z')
353       || is_operator_name (field_name))
354     return xstrdup (physname);
355
356   is_full_physname_constructor = is_constructor_name (physname);
357
358   is_constructor =
359     is_full_physname_constructor || (newname && STREQ (field_name, newname));
360
361   if (!is_destructor)
362     is_destructor = (strncmp (physname, "__dt", 4) == 0);
363
364   if (is_destructor || is_full_physname_constructor)
365     {
366       mangled_name = (char *) xmalloc (strlen (physname) + 1);
367       strcpy (mangled_name, physname);
368       return mangled_name;
369     }
370
371   if (len == 0)
372     {
373       sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
374     }
375   else if (physname[0] == 't' || physname[0] == 'Q')
376     {
377       /* The physname for template and qualified methods already includes
378          the class name.  */
379       sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
380       newname = NULL;
381       len = 0;
382     }
383   else
384     {
385       sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
386     }
387   mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
388                       + strlen (buf) + len + strlen (physname) + 1);
389
390     {
391       mangled_name = (char *) xmalloc (mangled_name_len);
392       if (is_constructor)
393         mangled_name[0] = '\0';
394       else
395         strcpy (mangled_name, field_name);
396     }
397   strcat (mangled_name, buf);
398   /* If the class doesn't have a name, i.e. newname NULL, then we just
399      mangle it using 0 for the length of the class.  Thus it gets mangled
400      as something starting with `::' rather than `classname::'. */
401   if (newname != NULL)
402     strcat (mangled_name, newname);
403
404   strcat (mangled_name, physname);
405   return (mangled_name);
406 }
407
408 \f
409 /* Initialize the language dependent portion of a symbol
410    depending upon the language for the symbol. */
411 void
412 symbol_init_language_specific (struct general_symbol_info *gsymbol,
413                                enum language language)
414 {
415   gsymbol->language = language;
416   if (gsymbol->language == language_cplus
417       || gsymbol->language == language_java
418       || gsymbol->language == language_objc)
419     {
420       gsymbol->language_specific.cplus_specific.demangled_name = NULL;
421     }
422   else
423     {
424       memset (&gsymbol->language_specific, 0,
425               sizeof (gsymbol->language_specific));
426     }
427 }
428
429 /* Functions to initialize a symbol's mangled name.  */
430
431 /* Create the hash table used for demangled names.  Each hash entry is
432    a pair of strings; one for the mangled name and one for the demangled
433    name.  The entry is hashed via just the mangled name.  */
434
435 static void
436 create_demangled_names_hash (struct objfile *objfile)
437 {
438   /* Choose 256 as the starting size of the hash table, somewhat arbitrarily.
439      The hash table code will round this up to the next prime number. 
440      Choosing a much larger table size wastes memory, and saves only about
441      1% in symbol reading.  */
442
443   objfile->demangled_names_hash = htab_create_alloc_ex
444     (256, htab_hash_string, (int (*) (const void *, const void *)) streq,
445      NULL, objfile->md, xmcalloc, xmfree);
446 }
447
448 /* Try to determine the demangled name for a symbol, based on the
449    language of that symbol.  If the language is set to language_auto,
450    it will attempt to find any demangling algorithm that works and
451    then set the language appropriately.  The returned name is allocated
452    by the demangler and should be xfree'd.  */
453
454 static char *
455 symbol_find_demangled_name (struct general_symbol_info *gsymbol,
456                             const char *mangled)
457 {
458   char *demangled = NULL;
459
460   if (gsymbol->language == language_unknown)
461     gsymbol->language = language_auto;
462   if (gsymbol->language == language_cplus
463       || gsymbol->language == language_auto)
464     {
465       demangled =
466         cplus_demangle (mangled, DMGL_PARAMS | DMGL_ANSI);
467       if (demangled != NULL)
468         {
469           gsymbol->language = language_cplus;
470           return demangled;
471         }
472     }
473   if (gsymbol->language == language_java)
474     {
475       demangled =
476         cplus_demangle (mangled,
477                         DMGL_PARAMS | DMGL_ANSI | DMGL_JAVA);
478       if (demangled != NULL)
479         {
480           gsymbol->language = language_java;
481           return demangled;
482         }
483     }
484   return NULL;
485 }
486
487 /* Set both the mangled and demangled (if any) names for GSYMBOL based
488    on LINKAGE_NAME and LEN.  The hash table corresponding to OBJFILE
489    is used, and the memory comes from that objfile's symbol_obstack.
490    LINKAGE_NAME is copied, so the pointer can be discarded after
491    calling this function.  */
492
493 void
494 symbol_set_names (struct general_symbol_info *gsymbol,
495                   const char *linkage_name, int len, struct objfile *objfile)
496 {
497   char **slot;
498   /* A 0-terminated copy of the linkage name.  */
499   const char *linkage_name_copy;
500
501   if (objfile->demangled_names_hash == NULL)
502     create_demangled_names_hash (objfile);
503
504   /* The stabs reader generally provides names that are not
505      NUL-terminated; most of the other readers don't do this, so we
506      can just use the given copy.  */
507   if (linkage_name[len] != '\0')
508     {
509       char *alloc_name;
510
511       alloc_name = alloca (len + 1);
512       memcpy (alloc_name, linkage_name, len);
513       alloc_name[len] = '\0';
514
515       linkage_name_copy = alloc_name;
516     }
517   else
518     {
519       linkage_name_copy = linkage_name;
520     }
521
522   slot = (char **) htab_find_slot (objfile->demangled_names_hash,
523                                    linkage_name_copy, INSERT);
524
525   /* If this name is not in the hash table, add it.  */
526   if (*slot == NULL)
527     {
528       char *demangled_name = symbol_find_demangled_name (gsymbol,
529                                                          linkage_name_copy);
530       int demangled_len = demangled_name ? strlen (demangled_name) : 0;
531
532       /* If there is a demangled name, place it right after the mangled name.
533          Otherwise, just place a second zero byte after the end of the mangled
534          name.  */
535       *slot = obstack_alloc (&objfile->symbol_obstack,
536                              len + demangled_len + 2);
537       memcpy (*slot, linkage_name_copy, len + 1);
538       if (demangled_name != NULL)
539         {
540           memcpy (*slot + len + 1, demangled_name, demangled_len + 1);
541           xfree (demangled_name);
542         }
543       else
544         (*slot)[len + 1] = '\0';
545     }
546
547   gsymbol->name = *slot;
548   if ((*slot)[len + 1] != '\0')
549     gsymbol->language_specific.cplus_specific.demangled_name
550       = &(*slot)[len + 1];
551   else
552     gsymbol->language_specific.cplus_specific.demangled_name = NULL;
553 }
554
555 /* Initialize the demangled name of GSYMBOL if possible.  Any required space
556    to store the name is obtained from the specified obstack.  The function
557    symbol_set_names, above, should be used instead where possible for more
558    efficient memory usage.  */
559
560 void
561 symbol_init_demangled_name (struct general_symbol_info *gsymbol,
562                             struct obstack *obstack)
563 {
564   char *mangled = gsymbol->name;
565   char *demangled = NULL;
566
567   demangled = symbol_find_demangled_name (gsymbol, mangled);
568   if (gsymbol->language == language_cplus
569       || gsymbol->language == language_java)
570     {
571       if (demangled)
572         {
573           gsymbol->language_specific.cplus_specific.demangled_name
574             = obsavestring (demangled, strlen (demangled), obstack);
575           xfree (demangled);
576         }
577       else
578         gsymbol->language_specific.cplus_specific.demangled_name = NULL;
579     }
580   else
581     {
582       /* Unknown language; just clean up quietly.  */
583       if (demangled)
584         xfree (demangled);
585     }
586 }
587
588 /* Return the source code name of a symbol.  In languages where
589    demangling is necessary, this is the demangled name.  */
590
591 char *
592 symbol_natural_name (const struct general_symbol_info *gsymbol)
593 {
594   if ((gsymbol->language == language_cplus
595        || gsymbol->language == language_java
596        || gsymbol->language == language_objc)
597       && (gsymbol->language_specific.cplus_specific.demangled_name != NULL))
598     {
599       return gsymbol->language_specific.cplus_specific.demangled_name;
600     }
601   else
602     {
603       return gsymbol->name;
604     }
605 }
606
607 /* Return the demangled name for a symbol based on the language for
608    that symbol.  If no demangled name exists, return NULL. */
609 char *
610 symbol_demangled_name (struct general_symbol_info *gsymbol)
611 {
612   if (gsymbol->language == language_cplus
613       || gsymbol->language == language_java
614       || gsymbol->language == language_objc)
615     return gsymbol->language_specific.cplus_specific.demangled_name;
616
617   else 
618     return NULL;
619 }
620
621 /* Initialize the structure fields to zero values.  */
622 void
623 init_sal (struct symtab_and_line *sal)
624 {
625   sal->symtab = 0;
626   sal->section = 0;
627   sal->line = 0;
628   sal->pc = 0;
629   sal->end = 0;
630 }
631 \f
632
633
634 /* Find which partial symtab on contains PC and SECTION.  Return 0 if none.  */
635
636 struct partial_symtab *
637 find_pc_sect_psymtab (CORE_ADDR pc, asection *section)
638 {
639   register struct partial_symtab *pst;
640   register struct objfile *objfile;
641   struct minimal_symbol *msymbol;
642
643   /* If we know that this is not a text address, return failure.  This is
644      necessary because we loop based on texthigh and textlow, which do
645      not include the data ranges.  */
646   msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
647   if (msymbol
648       && (msymbol->type == mst_data
649           || msymbol->type == mst_bss
650           || msymbol->type == mst_abs
651           || msymbol->type == mst_file_data
652           || msymbol->type == mst_file_bss))
653     return NULL;
654
655   ALL_PSYMTABS (objfile, pst)
656   {
657     if (pc >= pst->textlow && pc < pst->texthigh)
658       {
659         struct partial_symtab *tpst;
660
661         /* An objfile that has its functions reordered might have
662            many partial symbol tables containing the PC, but
663            we want the partial symbol table that contains the
664            function containing the PC.  */
665         if (!(objfile->flags & OBJF_REORDERED) &&
666             section == 0)       /* can't validate section this way */
667           return (pst);
668
669         if (msymbol == NULL)
670           return (pst);
671
672         for (tpst = pst; tpst != NULL; tpst = tpst->next)
673           {
674             if (pc >= tpst->textlow && pc < tpst->texthigh)
675               {
676                 struct partial_symbol *p;
677
678                 p = find_pc_sect_psymbol (tpst, pc, section);
679                 if (p != NULL
680                     && SYMBOL_VALUE_ADDRESS (p)
681                     == SYMBOL_VALUE_ADDRESS (msymbol))
682                   return (tpst);
683               }
684           }
685         return (pst);
686       }
687   }
688   return (NULL);
689 }
690
691 /* Find which partial symtab contains PC.  Return 0 if none. 
692    Backward compatibility, no section */
693
694 struct partial_symtab *
695 find_pc_psymtab (CORE_ADDR pc)
696 {
697   return find_pc_sect_psymtab (pc, find_pc_mapped_section (pc));
698 }
699
700 /* Find which partial symbol within a psymtab matches PC and SECTION.  
701    Return 0 if none.  Check all psymtabs if PSYMTAB is 0.  */
702
703 struct partial_symbol *
704 find_pc_sect_psymbol (struct partial_symtab *psymtab, CORE_ADDR pc,
705                       asection *section)
706 {
707   struct partial_symbol *best = NULL, *p, **pp;
708   CORE_ADDR best_pc;
709
710   if (!psymtab)
711     psymtab = find_pc_sect_psymtab (pc, section);
712   if (!psymtab)
713     return 0;
714
715   /* Cope with programs that start at address 0 */
716   best_pc = (psymtab->textlow != 0) ? psymtab->textlow - 1 : 0;
717
718   /* Search the global symbols as well as the static symbols, so that
719      find_pc_partial_function doesn't use a minimal symbol and thus
720      cache a bad endaddr.  */
721   for (pp = psymtab->objfile->global_psymbols.list + psymtab->globals_offset;
722     (pp - (psymtab->objfile->global_psymbols.list + psymtab->globals_offset)
723      < psymtab->n_global_syms);
724        pp++)
725     {
726       p = *pp;
727       if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
728           && SYMBOL_CLASS (p) == LOC_BLOCK
729           && pc >= SYMBOL_VALUE_ADDRESS (p)
730           && (SYMBOL_VALUE_ADDRESS (p) > best_pc
731               || (psymtab->textlow == 0
732                   && best_pc == 0 && SYMBOL_VALUE_ADDRESS (p) == 0)))
733         {
734           if (section)          /* match on a specific section */
735             {
736               fixup_psymbol_section (p, psymtab->objfile);
737               if (SYMBOL_BFD_SECTION (p) != section)
738                 continue;
739             }
740           best_pc = SYMBOL_VALUE_ADDRESS (p);
741           best = p;
742         }
743     }
744
745   for (pp = psymtab->objfile->static_psymbols.list + psymtab->statics_offset;
746     (pp - (psymtab->objfile->static_psymbols.list + psymtab->statics_offset)
747      < psymtab->n_static_syms);
748        pp++)
749     {
750       p = *pp;
751       if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
752           && SYMBOL_CLASS (p) == LOC_BLOCK
753           && pc >= SYMBOL_VALUE_ADDRESS (p)
754           && (SYMBOL_VALUE_ADDRESS (p) > best_pc
755               || (psymtab->textlow == 0
756                   && best_pc == 0 && SYMBOL_VALUE_ADDRESS (p) == 0)))
757         {
758           if (section)          /* match on a specific section */
759             {
760               fixup_psymbol_section (p, psymtab->objfile);
761               if (SYMBOL_BFD_SECTION (p) != section)
762                 continue;
763             }
764           best_pc = SYMBOL_VALUE_ADDRESS (p);
765           best = p;
766         }
767     }
768
769   return best;
770 }
771
772 /* Find which partial symbol within a psymtab matches PC.  Return 0 if none.  
773    Check all psymtabs if PSYMTAB is 0.  Backwards compatibility, no section. */
774
775 struct partial_symbol *
776 find_pc_psymbol (struct partial_symtab *psymtab, CORE_ADDR pc)
777 {
778   return find_pc_sect_psymbol (psymtab, pc, find_pc_mapped_section (pc));
779 }
780 \f
781 /* Debug symbols usually don't have section information.  We need to dig that
782    out of the minimal symbols and stash that in the debug symbol.  */
783
784 static void
785 fixup_section (struct general_symbol_info *ginfo, struct objfile *objfile)
786 {
787   struct minimal_symbol *msym;
788   msym = lookup_minimal_symbol (ginfo->name, NULL, objfile);
789
790   if (msym)
791     {
792       ginfo->bfd_section = SYMBOL_BFD_SECTION (msym);
793       ginfo->section = SYMBOL_SECTION (msym);
794     }
795 }
796
797 struct symbol *
798 fixup_symbol_section (struct symbol *sym, struct objfile *objfile)
799 {
800   if (!sym)
801     return NULL;
802
803   if (SYMBOL_BFD_SECTION (sym))
804     return sym;
805
806   fixup_section (&sym->ginfo, objfile);
807
808   return sym;
809 }
810
811 struct partial_symbol *
812 fixup_psymbol_section (struct partial_symbol *psym, struct objfile *objfile)
813 {
814   if (!psym)
815     return NULL;
816
817   if (SYMBOL_BFD_SECTION (psym))
818     return psym;
819
820   fixup_section (&psym->ginfo, objfile);
821
822   return psym;
823 }
824
825 /* Find the definition for a specified symbol name NAME
826    in namespace NAMESPACE, visible from lexical block BLOCK.
827    Returns the struct symbol pointer, or zero if no symbol is found.
828    If SYMTAB is non-NULL, store the symbol table in which the
829    symbol was found there, or NULL if not found.
830    C++: if IS_A_FIELD_OF_THIS is nonzero on entry, check to see if
831    NAME is a field of the current implied argument `this'.  If so set
832    *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero. 
833    BLOCK_FOUND is set to the block in which NAME is found (in the case of
834    a field of `this', value_of_this sets BLOCK_FOUND to the proper value.) */
835
836 /* This function has a bunch of loops in it and it would seem to be
837    attractive to put in some QUIT's (though I'm not really sure
838    whether it can run long enough to be really important).  But there
839    are a few calls for which it would appear to be bad news to quit
840    out of here: find_proc_desc in alpha-tdep.c and mips-tdep.c.  (Note
841    that there is C++ code below which can error(), but that probably
842    doesn't affect these calls since they are looking for a known
843    variable and thus can probably assume it will never hit the C++
844    code).  */
845
846 struct symbol *
847 lookup_symbol (const char *name, const struct block *block,
848                const namespace_enum namespace, int *is_a_field_of_this,
849                struct symtab **symtab)
850 {
851   char *demangled_name = NULL;
852   const char *modified_name = NULL;
853   const char *mangled_name = NULL;
854   int needtofreename = 0;
855   struct symbol *returnval;
856
857   modified_name = name;
858
859   /* If we are using C++ language, demangle the name before doing a lookup, so
860      we can always binary search. */
861   if (current_language->la_language == language_cplus)
862     {
863       demangled_name = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS);
864       if (demangled_name)
865         {
866           mangled_name = name;
867           modified_name = demangled_name;
868           needtofreename = 1;
869         }
870     }
871
872   if (case_sensitivity == case_sensitive_off)
873     {
874       char *copy;
875       int len, i;
876
877       len = strlen (name);
878       copy = (char *) alloca (len + 1);
879       for (i= 0; i < len; i++)
880         copy[i] = tolower (name[i]);
881       copy[len] = 0;
882       modified_name = copy;
883     }
884
885   returnval = lookup_symbol_aux (modified_name, mangled_name, block,
886                                  namespace, is_a_field_of_this, symtab);
887   if (needtofreename)
888     xfree (demangled_name);
889
890   return returnval;      
891 }
892
893 static struct symbol *
894 lookup_symbol_aux (const char *name, const char *mangled_name,
895                    const struct block *block, const namespace_enum namespace,
896                    int *is_a_field_of_this, struct symtab **symtab)
897 {
898   struct symbol *sym;
899   const struct block *static_block;
900
901   /* Search specified block and its superiors.  Don't search
902      STATIC_BLOCK or GLOBAL_BLOCK.  */
903
904   sym = lookup_symbol_aux_local (name, mangled_name, block, namespace,
905                                  symtab, &static_block);
906   if (sym != NULL)
907     return sym;
908
909 #if 0
910   /* NOTE: carlton/2002-11-05: At the time that this code was
911      #ifdeffed out, the value of 'block' was always NULL at this
912      point, hence the bemused comments below.  */
913
914   /* FIXME: this code is never executed--block is always NULL at this
915      point.  What is it trying to do, anyway?  We already should have
916      checked the STATIC_BLOCK above (it is the superblock of top-level
917      blocks).  Why is VAR_NAMESPACE special-cased?  */
918   /* Don't need to mess with the psymtabs; if we have a block,
919      that file is read in.  If we don't, then we deal later with
920      all the psymtab stuff that needs checking.  */
921   /* Note (RT): The following never-executed code looks unnecessary to me also.
922    * If we change the code to use the original (passed-in)
923    * value of 'block', we could cause it to execute, but then what
924    * would it do? The STATIC_BLOCK of the symtab containing the passed-in
925    * 'block' was already searched by the above code. And the STATIC_BLOCK's
926    * of *other* symtabs (those files not containing 'block' lexically)
927    * should not contain 'block' address-wise. So we wouldn't expect this
928    * code to find any 'sym''s that were not found above. I vote for 
929    * deleting the following paragraph of code.
930    */
931   if (namespace == VAR_NAMESPACE && block != NULL)
932     {
933       struct block *b;
934       /* Find the right symtab.  */
935       ALL_SYMTABS (objfile, s)
936       {
937         bv = BLOCKVECTOR (s);
938         b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
939         if (BLOCK_START (b) <= BLOCK_START (block)
940             && BLOCK_END (b) > BLOCK_START (block))
941           {
942             sym = lookup_block_symbol (b, name, mangled_name, VAR_NAMESPACE);
943             if (sym)
944               {
945                 block_found = b;
946                 if (symtab != NULL)
947                   *symtab = s;
948                 return fixup_symbol_section (sym, objfile);
949               }
950           }
951       }
952     }
953 #endif /* 0 */
954
955   /* C++: If requested to do so by the caller, 
956      check to see if NAME is a field of `this'. */
957   if (is_a_field_of_this)
958     {
959       struct value *v = value_of_this (0);
960
961       *is_a_field_of_this = 0;
962       if (v && check_field (v, name))
963         {
964           *is_a_field_of_this = 1;
965           if (symtab != NULL)
966             *symtab = NULL;
967           return NULL;
968         }
969     }
970
971   /* If there's a static block to search, search it next.  */
972
973   /* NOTE: carlton/2002-12-05: There is a question as to whether or
974      not it would be appropriate to search the current global block
975      here as well.  (That's what this code used to do before the
976      is_a_field_of_this check was moved up.)  On the one hand, it's
977      redundant with the lookup_symbol_aux_symtabs search that happens
978      next.  On the other hand, if decode_line_1 is passed an argument
979      like filename:var, then the user presumably wants 'var' to be
980      searched for in filename.  On the third hand, there shouldn't be
981      multiple global variables all of which are named 'var', and it's
982      not like decode_line_1 has ever restricted its search to only
983      global variables in a single filename.  All in all, only
984      searching the static block here seems best: it's correct and it's
985      cleanest.  */
986
987   /* NOTE: carlton/2002-12-05: There's also a possible performance
988      issue here: if you usually search for global symbols in the
989      current file, then it would be slightly better to search the
990      current global block before searching all the symtabs.  But there
991      are other factors that have a much greater effect on performance
992      than that one, so I don't think we should worry about that for
993      now.  */
994
995   if (static_block != NULL)
996     {
997       sym = lookup_symbol_aux_block (name, mangled_name, static_block,
998                                      namespace, symtab);
999       if (sym != NULL)
1000         return sym;
1001     }
1002
1003   /* Now search all global blocks.  Do the symtab's first, then
1004      check the psymtab's. If a psymtab indicates the existence
1005      of the desired name as a global, then do psymtab-to-symtab
1006      conversion on the fly and return the found symbol. */
1007
1008   sym = lookup_symbol_aux_symtabs (GLOBAL_BLOCK, name, mangled_name,
1009                                    namespace, symtab);
1010   if (sym != NULL)
1011     return sym;
1012
1013 #ifndef HPUXHPPA
1014
1015   /* Check for the possibility of the symbol being a function or
1016      a mangled variable that is stored in one of the minimal symbol tables.
1017      Eventually, all global symbols might be resolved in this way.  */
1018
1019   sym = lookup_symbol_aux_minsyms (name, mangled_name,
1020                                    namespace, is_a_field_of_this,
1021                                    symtab);
1022   
1023   if (sym != NULL)
1024     return sym;
1025
1026 #endif
1027
1028   sym = lookup_symbol_aux_psymtabs (GLOBAL_BLOCK, name, mangled_name,
1029                                     namespace, symtab);
1030   if (sym != NULL)
1031     return sym;
1032
1033   /* Now search all static file-level symbols.  Not strictly correct,
1034      but more useful than an error.  Do the symtabs first, then check
1035      the psymtabs.  If a psymtab indicates the existence of the
1036      desired name as a file-level static, then do psymtab-to-symtab
1037      conversion on the fly and return the found symbol. */
1038
1039   sym = lookup_symbol_aux_symtabs (STATIC_BLOCK, name, mangled_name,
1040                                    namespace, symtab);
1041   if (sym != NULL)
1042     return sym;
1043   
1044   sym = lookup_symbol_aux_psymtabs (STATIC_BLOCK, name, mangled_name,
1045                                     namespace, symtab);
1046   if (sym != NULL)
1047     return sym;
1048
1049 #ifdef HPUXHPPA
1050
1051   /* Check for the possibility of the symbol being a function or
1052      a global variable that is stored in one of the minimal symbol tables.
1053      The "minimal symbol table" is built from linker-supplied info.
1054
1055      RT: I moved this check to last, after the complete search of
1056      the global (p)symtab's and static (p)symtab's. For HP-generated
1057      symbol tables, this check was causing a premature exit from
1058      lookup_symbol with NULL return, and thus messing up symbol lookups
1059      of things like "c::f". It seems to me a check of the minimal
1060      symbol table ought to be a last resort in any case. I'm vaguely
1061      worried about the comment below which talks about FORTRAN routines "foo_"
1062      though... is it saying we need to do the "minsym" check before
1063      the static check in this case? 
1064    */
1065
1066
1067   sym = lookup_symbol_aux_minsyms (name, mangled_name,
1068                                    namespace, is_a_field_of_this,
1069                                    symtab);
1070   
1071   if (sym != NULL)
1072     return sym;
1073
1074 #endif
1075
1076   if (symtab != NULL)
1077     *symtab = NULL;
1078   return NULL;
1079 }
1080
1081 /* Check to see if the symbol is defined in BLOCK or its superiors.
1082    Don't search STATIC_BLOCK or GLOBAL_BLOCK.  If we don't find a
1083    match, store the address of STATIC_BLOCK in static_block.  */
1084
1085 static struct symbol *
1086 lookup_symbol_aux_local (const char *name, const char *mangled_name,
1087                          const struct block *block,
1088                          const namespace_enum namespace,
1089                          struct symtab **symtab,
1090                          const struct block **static_block)
1091 {
1092   struct symbol *sym;
1093   
1094   /* Check if either no block is specified or it's a global block.  */
1095
1096   if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL)
1097     {
1098       *static_block = NULL;
1099       return NULL;
1100     }
1101
1102   while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL)
1103     {
1104       sym = lookup_symbol_aux_block (name, mangled_name, block, namespace,
1105                                      symtab);
1106       if (sym != NULL)
1107         return sym;
1108       block = BLOCK_SUPERBLOCK (block);
1109     }
1110
1111   /* We've reached the static block.  */
1112
1113   *static_block = block;
1114   return NULL;
1115 }
1116
1117 /* Look up a symbol in a block; if found, locate its symtab, fixup the
1118    symbol, and set block_found appropriately.  */
1119
1120 static struct symbol *
1121 lookup_symbol_aux_block (const char *name, const char *mangled_name,
1122                          const struct block *block,
1123                          const namespace_enum namespace,
1124                          struct symtab **symtab)
1125 {
1126   struct symbol *sym;
1127   struct objfile *objfile = NULL;
1128   struct blockvector *bv;
1129   struct block *b;
1130   struct symtab *s = NULL;
1131
1132   sym = lookup_block_symbol (block, name, mangled_name, namespace);
1133   if (sym)
1134     {
1135       block_found = block;
1136       if (symtab != NULL)
1137         {
1138           /* Search the list of symtabs for one which contains the
1139              address of the start of this block.  */
1140           ALL_SYMTABS (objfile, s)
1141             {
1142               bv = BLOCKVECTOR (s);
1143               b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1144               if (BLOCK_START (b) <= BLOCK_START (block)
1145                   && BLOCK_END (b) > BLOCK_START (block))
1146                 goto found;
1147             }
1148         found:
1149           *symtab = s;
1150         }
1151       
1152       return fixup_symbol_section (sym, objfile);
1153     }
1154
1155   return NULL;
1156 }
1157
1158 /* Check to see if the symbol is defined in one of the symtabs.
1159    BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
1160    depending on whether or not we want to search global symbols or
1161    static symbols.  */
1162
1163 static struct symbol *
1164 lookup_symbol_aux_symtabs (int block_index,
1165                            const char *name, const char *mangled_name,
1166                            const namespace_enum namespace,
1167                            struct symtab **symtab)
1168 {
1169   struct symbol *sym;
1170   struct objfile *objfile;
1171   struct blockvector *bv;
1172   const struct block *block;
1173   struct symtab *s;
1174
1175   ALL_SYMTABS (objfile, s)
1176   {
1177     bv = BLOCKVECTOR (s);
1178     block = BLOCKVECTOR_BLOCK (bv, block_index);
1179     sym = lookup_block_symbol (block, name, mangled_name, namespace);
1180     if (sym)
1181       {
1182         block_found = block;
1183         if (symtab != NULL)
1184           *symtab = s;
1185         return fixup_symbol_section (sym, objfile);
1186       }
1187   }
1188
1189   return NULL;
1190 }
1191
1192 /* Check to see if the symbol is defined in one of the partial
1193    symtabs.  BLOCK_INDEX should be either GLOBAL_BLOCK or
1194    STATIC_BLOCK, depending on whether or not we want to search global
1195    symbols or static symbols.  */
1196
1197 static struct symbol *
1198 lookup_symbol_aux_psymtabs (int block_index, const char *name,
1199                             const char *mangled_name,
1200                             const namespace_enum namespace,
1201                             struct symtab **symtab)
1202 {
1203   struct symbol *sym;
1204   struct objfile *objfile;
1205   struct blockvector *bv;
1206   const struct block *block;
1207   struct partial_symtab *ps;
1208   struct symtab *s;
1209   const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
1210
1211   ALL_PSYMTABS (objfile, ps)
1212   {
1213     if (!ps->readin
1214         && lookup_partial_symbol (ps, name, mangled_name,
1215                                   psymtab_index, namespace))
1216       {
1217         s = PSYMTAB_TO_SYMTAB (ps);
1218         bv = BLOCKVECTOR (s);
1219         block = BLOCKVECTOR_BLOCK (bv, block_index);
1220         sym = lookup_block_symbol (block, name, mangled_name, namespace);
1221         if (!sym)
1222           {
1223             /* This shouldn't be necessary, but as a last resort try
1224                looking in the statics even though the psymtab claimed
1225                the symbol was global, or vice-versa. It's possible
1226                that the psymtab gets it wrong in some cases.  */
1227
1228             /* FIXME: carlton/2002-09-30: Should we really do that?
1229                If that happens, isn't it likely to be a GDB error, in
1230                which case we should fix the GDB error rather than
1231                silently dealing with it here?  So I'd vote for
1232                removing the check for the symbol in the other
1233                block.  */
1234             block = BLOCKVECTOR_BLOCK (bv,
1235                                        block_index == GLOBAL_BLOCK ?
1236                                        STATIC_BLOCK : GLOBAL_BLOCK);
1237             sym = lookup_block_symbol (block, name, mangled_name, namespace);
1238             if (!sym)
1239               error ("Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n%s may be an inlined function, or may be a template function\n(if a template, try specifying an instantiation: %s<type>).",
1240                      block_index == GLOBAL_BLOCK ? "global" : "static",
1241                      name, ps->filename, name, name);
1242           }
1243         if (symtab != NULL)
1244           *symtab = s;
1245         return fixup_symbol_section (sym, objfile);
1246       }
1247   }
1248
1249   return NULL;
1250 }
1251
1252 /* Check for the possibility of the symbol being a function or a
1253    mangled variable that is stored in one of the minimal symbol
1254    tables.  Eventually, all global symbols might be resolved in this
1255    way.  */
1256
1257 /* NOTE: carlton/2002-12-05: At one point, this function was part of
1258    lookup_symbol_aux, and what are now 'return' statements within
1259    lookup_symbol_aux_minsyms returned from lookup_symbol_aux, even if
1260    sym was NULL.  As far as I can tell, this was basically accidental;
1261    it didn't happen every time that msymbol was non-NULL, but only if
1262    some additional conditions held as well, and it caused problems
1263    with HP-generated symbol tables.  */
1264
1265 static struct symbol *
1266 lookup_symbol_aux_minsyms (const char *name,
1267                            const char *mangled_name,
1268                            const namespace_enum namespace,
1269                            int *is_a_field_of_this,
1270                            struct symtab **symtab)
1271 {
1272   struct symbol *sym;
1273   struct blockvector *bv;
1274   const struct block *block;
1275   struct minimal_symbol *msymbol;
1276   struct symtab *s;
1277
1278   if (namespace == VAR_NAMESPACE)
1279     {
1280       msymbol = lookup_minimal_symbol (name, NULL, NULL);
1281
1282       if (msymbol != NULL)
1283         {
1284           /* OK, we found a minimal symbol in spite of not finding any
1285              symbol. There are various possible explanations for
1286              this. One possibility is the symbol exists in code not
1287              compiled -g. Another possibility is that the 'psymtab'
1288              isn't doing its job.  A third possibility, related to #2,
1289              is that we were confused by name-mangling. For instance,
1290              maybe the psymtab isn't doing its job because it only
1291              know about demangled names, but we were given a mangled
1292              name...  */
1293
1294           /* We first use the address in the msymbol to try to locate
1295              the appropriate symtab. Note that find_pc_sect_symtab()
1296              has a side-effect of doing psymtab-to-symtab expansion,
1297              for the found symtab.  */
1298           s = find_pc_sect_symtab (SYMBOL_VALUE_ADDRESS (msymbol),
1299                                    SYMBOL_BFD_SECTION (msymbol));
1300           if (s != NULL)
1301             {
1302               /* This is a function which has a symtab for its address.  */
1303               bv = BLOCKVECTOR (s);
1304               block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1305
1306               /* This call used to pass `DEPRECATED_SYMBOL_NAME (msymbol)' as the
1307                  `name' argument to lookup_block_symbol.  But the name
1308                  of a minimal symbol is always mangled, so that seems
1309                  to be clearly the wrong thing to pass as the
1310                  unmangled name.  */
1311               sym =
1312                 lookup_block_symbol (block, name, mangled_name, namespace);
1313               /* We kept static functions in minimal symbol table as well as
1314                  in static scope. We want to find them in the symbol table. */
1315               if (!sym)
1316                 {
1317                   block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1318                   sym = lookup_block_symbol (block, name,
1319                                              mangled_name, namespace);
1320                 }
1321
1322               /* NOTE: carlton/2002-12-04: The following comment was
1323                  taken from a time when two versions of this function
1324                  were part of the body of lookup_symbol_aux: this
1325                  comment was taken from the version of the function
1326                  that was #ifdef HPUXHPPA, and the comment was right
1327                  before the 'return NULL' part of lookup_symbol_aux.
1328                  (Hence the "Fall through and return 0" comment.)
1329                  Elena did some digging into the situation for
1330                  Fortran, and she reports:
1331
1332                  "I asked around (thanks to Jeff Knaggs), and I think
1333                  the story for Fortran goes like this:
1334
1335                  "Apparently, in older Fortrans, '_' was not part of
1336                  the user namespace.  g77 attached a final '_' to
1337                  procedure names as the exported symbols for linkage
1338                  (foo_) , but the symbols went in the debug info just
1339                  like 'foo'. The rationale behind this is not
1340                  completely clear, and maybe it was done to other
1341                  symbols as well, not just procedures."  */
1342
1343               /* If we get here with sym == 0, the symbol was 
1344                  found in the minimal symbol table
1345                  but not in the symtab.
1346                  Fall through and return 0 to use the msymbol 
1347                  definition of "foo_".
1348                  (Note that outer code generally follows up a call
1349                  to this routine with a call to lookup_minimal_symbol(),
1350                  so a 0 return means we'll just flow into that other routine).
1351
1352                  This happens for Fortran  "foo_" symbols,
1353                  which are "foo" in the symtab.
1354
1355                  This can also happen if "asm" is used to make a
1356                  regular symbol but not a debugging symbol, e.g.
1357                  asm(".globl _main");
1358                  asm("_main:");
1359                */
1360
1361               if (symtab != NULL && sym != NULL)
1362                 *symtab = s;
1363               return fixup_symbol_section (sym, s->objfile);
1364             }
1365           else if (MSYMBOL_TYPE (msymbol) != mst_text
1366                    && MSYMBOL_TYPE (msymbol) != mst_file_text
1367                    && !STREQ (name, DEPRECATED_SYMBOL_NAME (msymbol)))
1368             {
1369               /* This is a mangled variable, look it up by its
1370                  mangled name.  */
1371               return lookup_symbol_aux (DEPRECATED_SYMBOL_NAME (msymbol), mangled_name,
1372                                         NULL, namespace, is_a_field_of_this,
1373                                         symtab);
1374             }
1375         }
1376     }
1377
1378   return NULL;
1379 }
1380
1381 /* Look, in partial_symtab PST, for symbol whose natural name is NAME.
1382    If LINKAGE_NAME is non-NULL, check in addition that the symbol's
1383    linkage name matches it.  Check the global symbols if GLOBAL, the
1384    static symbols if not */
1385
1386 static struct partial_symbol *
1387 lookup_partial_symbol (struct partial_symtab *pst, const char *name,
1388                        const char *linkage_name, int global,
1389                        namespace_enum namespace)
1390 {
1391   struct partial_symbol *temp;
1392   struct partial_symbol **start, **psym;
1393   struct partial_symbol **top, **real_top, **bottom, **center;
1394   int length = (global ? pst->n_global_syms : pst->n_static_syms);
1395   int do_linear_search = 1;
1396   
1397   if (length == 0)
1398     {
1399       return (NULL);
1400     }
1401   start = (global ?
1402            pst->objfile->global_psymbols.list + pst->globals_offset :
1403            pst->objfile->static_psymbols.list + pst->statics_offset);
1404   
1405   if (global)                   /* This means we can use a binary search. */
1406     {
1407       do_linear_search = 0;
1408
1409       /* Binary search.  This search is guaranteed to end with center
1410          pointing at the earliest partial symbol whose name might be
1411          correct.  At that point *all* partial symbols with an
1412          appropriate name will be checked against the correct
1413          namespace.  */
1414
1415       bottom = start;
1416       top = start + length - 1;
1417       real_top = top;
1418       while (top > bottom)
1419         {
1420           center = bottom + (top - bottom) / 2;
1421           if (!(center < top))
1422             internal_error (__FILE__, __LINE__, "failed internal consistency check");
1423           if (!do_linear_search
1424               && (SYMBOL_LANGUAGE (*center) == language_java))
1425             {
1426               do_linear_search = 1;
1427             }
1428           if (strcmp_iw_ordered (SYMBOL_NATURAL_NAME (*center), name) >= 0)
1429             {
1430               top = center;
1431             }
1432           else
1433             {
1434               bottom = center + 1;
1435             }
1436         }
1437       if (!(top == bottom))
1438         internal_error (__FILE__, __LINE__, "failed internal consistency check");
1439
1440       while (top <= real_top
1441              && (linkage_name != NULL
1442                  ? strcmp (SYMBOL_LINKAGE_NAME (*top), linkage_name) == 0
1443                  : SYMBOL_MATCHES_NATURAL_NAME (*top,name)))
1444         {
1445           if (SYMBOL_NAMESPACE (*top) == namespace)
1446             {
1447                   return (*top);
1448             }
1449           top++;
1450         }
1451     }
1452
1453   /* Can't use a binary search or else we found during the binary search that
1454      we should also do a linear search. */
1455
1456   if (do_linear_search)
1457     {                   
1458       for (psym = start; psym < start + length; psym++)
1459         {
1460           if (namespace == SYMBOL_NAMESPACE (*psym))
1461             {
1462               if (linkage_name != NULL
1463                   ? strcmp (SYMBOL_LINKAGE_NAME (*psym), linkage_name) == 0
1464                   : SYMBOL_MATCHES_NATURAL_NAME (*psym, name))
1465                 {
1466                   return (*psym);
1467                 }
1468             }
1469         }
1470     }
1471
1472   return (NULL);
1473 }
1474
1475 /* Look up a type named NAME in the struct_namespace.  The type returned
1476    must not be opaque -- i.e., must have at least one field defined
1477
1478    This code was modelled on lookup_symbol -- the parts not relevant to looking
1479    up types were just left out.  In particular it's assumed here that types
1480    are available in struct_namespace and only at file-static or global blocks. */
1481
1482
1483 struct type *
1484 lookup_transparent_type (const char *name)
1485 {
1486   register struct symbol *sym;
1487   register struct symtab *s = NULL;
1488   register struct partial_symtab *ps;
1489   struct blockvector *bv;
1490   register struct objfile *objfile;
1491   register struct block *block;
1492
1493   /* Now search all the global symbols.  Do the symtab's first, then
1494      check the psymtab's. If a psymtab indicates the existence
1495      of the desired name as a global, then do psymtab-to-symtab
1496      conversion on the fly and return the found symbol.  */
1497
1498   ALL_SYMTABS (objfile, s)
1499   {
1500     bv = BLOCKVECTOR (s);
1501     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1502     sym = lookup_block_symbol (block, name, NULL, STRUCT_NAMESPACE);
1503     if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1504       {
1505         return SYMBOL_TYPE (sym);
1506       }
1507   }
1508
1509   ALL_PSYMTABS (objfile, ps)
1510   {
1511     if (!ps->readin && lookup_partial_symbol (ps, name, NULL,
1512                                               1, STRUCT_NAMESPACE))
1513       {
1514         s = PSYMTAB_TO_SYMTAB (ps);
1515         bv = BLOCKVECTOR (s);
1516         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1517         sym = lookup_block_symbol (block, name, NULL, STRUCT_NAMESPACE);
1518         if (!sym)
1519           {
1520             /* This shouldn't be necessary, but as a last resort
1521              * try looking in the statics even though the psymtab
1522              * claimed the symbol was global. It's possible that
1523              * the psymtab gets it wrong in some cases.
1524              */
1525             block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1526             sym = lookup_block_symbol (block, name, NULL, STRUCT_NAMESPACE);
1527             if (!sym)
1528               error ("Internal: global symbol `%s' found in %s psymtab but not in symtab.\n\
1529 %s may be an inlined function, or may be a template function\n\
1530 (if a template, try specifying an instantiation: %s<type>).",
1531                      name, ps->filename, name, name);
1532           }
1533         if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1534           return SYMBOL_TYPE (sym);
1535       }
1536   }
1537
1538   /* Now search the static file-level symbols.
1539      Not strictly correct, but more useful than an error.
1540      Do the symtab's first, then
1541      check the psymtab's. If a psymtab indicates the existence
1542      of the desired name as a file-level static, then do psymtab-to-symtab
1543      conversion on the fly and return the found symbol.
1544    */
1545
1546   ALL_SYMTABS (objfile, s)
1547   {
1548     bv = BLOCKVECTOR (s);
1549     block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1550     sym = lookup_block_symbol (block, name, NULL, STRUCT_NAMESPACE);
1551     if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1552       {
1553         return SYMBOL_TYPE (sym);
1554       }
1555   }
1556
1557   ALL_PSYMTABS (objfile, ps)
1558   {
1559     if (!ps->readin && lookup_partial_symbol (ps, name, NULL, 0, STRUCT_NAMESPACE))
1560       {
1561         s = PSYMTAB_TO_SYMTAB (ps);
1562         bv = BLOCKVECTOR (s);
1563         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1564         sym = lookup_block_symbol (block, name, NULL, STRUCT_NAMESPACE);
1565         if (!sym)
1566           {
1567             /* This shouldn't be necessary, but as a last resort
1568              * try looking in the globals even though the psymtab
1569              * claimed the symbol was static. It's possible that
1570              * the psymtab gets it wrong in some cases.
1571              */
1572             block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1573             sym = lookup_block_symbol (block, name, NULL, STRUCT_NAMESPACE);
1574             if (!sym)
1575               error ("Internal: static symbol `%s' found in %s psymtab but not in symtab.\n\
1576 %s may be an inlined function, or may be a template function\n\
1577 (if a template, try specifying an instantiation: %s<type>).",
1578                      name, ps->filename, name, name);
1579           }
1580         if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1581           return SYMBOL_TYPE (sym);
1582       }
1583   }
1584   return (struct type *) 0;
1585 }
1586
1587
1588 /* Find the psymtab containing main(). */
1589 /* FIXME:  What about languages without main() or specially linked
1590    executables that have no main() ? */
1591
1592 struct partial_symtab *
1593 find_main_psymtab (void)
1594 {
1595   register struct partial_symtab *pst;
1596   register struct objfile *objfile;
1597
1598   ALL_PSYMTABS (objfile, pst)
1599   {
1600     if (lookup_partial_symbol (pst, main_name (), NULL, 1, VAR_NAMESPACE))
1601       {
1602         return (pst);
1603       }
1604   }
1605   return (NULL);
1606 }
1607
1608 /* Search BLOCK for symbol NAME in NAMESPACE.
1609
1610    Note that if NAME is the demangled form of a C++ symbol, we will fail
1611    to find a match during the binary search of the non-encoded names, but
1612    for now we don't worry about the slight inefficiency of looking for
1613    a match we'll never find, since it will go pretty quick.  Once the
1614    binary search terminates, we drop through and do a straight linear
1615    search on the symbols.  Each symbol which is marked as being a C++
1616    symbol (language_cplus set) has both the encoded and non-encoded names
1617    tested for a match.
1618
1619    If MANGLED_NAME is non-NULL, verify that any symbol we find has this
1620    particular mangled name.
1621 */
1622
1623 struct symbol *
1624 lookup_block_symbol (register const struct block *block, const char *name,
1625                      const char *mangled_name,
1626                      const namespace_enum namespace)
1627 {
1628   register int bot, top, inc;
1629   register struct symbol *sym;
1630   register struct symbol *sym_found = NULL;
1631   register int do_linear_search = 1;
1632
1633   if (BLOCK_HASHTABLE (block))
1634     {
1635       unsigned int hash_index;
1636       hash_index = msymbol_hash_iw (name);
1637       hash_index = hash_index % BLOCK_BUCKETS (block);
1638       for (sym = BLOCK_BUCKET (block, hash_index); sym; sym = sym->hash_next)
1639         {
1640           if (SYMBOL_NAMESPACE (sym) == namespace 
1641               && (mangled_name
1642                   ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
1643                   : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
1644             return sym;
1645         }
1646       return NULL;
1647     }
1648
1649   /* If the blocks's symbols were sorted, start with a binary search.  */
1650
1651   if (BLOCK_SHOULD_SORT (block))
1652     {
1653       /* Reset the linear search flag so if the binary search fails, we
1654          won't do the linear search once unless we find some reason to
1655          do so */
1656
1657       do_linear_search = 0;
1658       top = BLOCK_NSYMS (block);
1659       bot = 0;
1660
1661       /* Advance BOT to not far before the first symbol whose name is NAME. */
1662
1663       while (1)
1664         {
1665           inc = (top - bot + 1);
1666           /* No need to keep binary searching for the last few bits worth.  */
1667           if (inc < 4)
1668             {
1669               break;
1670             }
1671           inc = (inc >> 1) + bot;
1672           sym = BLOCK_SYM (block, inc);
1673           if (!do_linear_search && (SYMBOL_LANGUAGE (sym) == language_java))
1674             {
1675               do_linear_search = 1;
1676             }
1677           if (SYMBOL_NATURAL_NAME (sym)[0] < name[0])
1678             {
1679               bot = inc;
1680             }
1681           else if (SYMBOL_NATURAL_NAME (sym)[0] > name[0])
1682             {
1683               top = inc;
1684             }
1685           else if (strcmp (SYMBOL_NATURAL_NAME (sym), name) < 0)
1686             {
1687               bot = inc;
1688             }
1689           else
1690             {
1691               top = inc;
1692             }
1693         }
1694
1695       /* Now scan forward until we run out of symbols, find one whose
1696          name is greater than NAME, or find one we want.  If there is
1697          more than one symbol with the right name and namespace, we
1698          return the first one; I believe it is now impossible for us
1699          to encounter two symbols with the same name and namespace
1700          here, because blocks containing argument symbols are no
1701          longer sorted.  The exception is for C++, where multiple functions
1702          (cloned constructors / destructors, in particular) can have
1703          the same demangled name.  So if we have a particular
1704          mangled name to match, try to do so.  */
1705
1706       top = BLOCK_NSYMS (block);
1707       while (bot < top)
1708         {
1709           sym = BLOCK_SYM (block, bot);
1710           if (SYMBOL_NAMESPACE (sym) == namespace
1711               && (mangled_name
1712                   ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
1713                   : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
1714             {
1715               return sym;
1716             }
1717           if (SYMBOL_PRINT_NAME (sym)[0] > name[0])
1718             {
1719               break;
1720             }
1721           bot++;
1722         }
1723     }
1724
1725   /* Here if block isn't sorted, or we fail to find a match during the
1726      binary search above.  If during the binary search above, we find a
1727      symbol which is a Java symbol, then we have re-enabled the linear
1728      search flag which was reset when starting the binary search.
1729
1730      This loop is equivalent to the loop above, but hacked greatly for speed.
1731
1732      Note that parameter symbols do not always show up last in the
1733      list; this loop makes sure to take anything else other than
1734      parameter symbols first; it only uses parameter symbols as a
1735      last resort.  Note that this only takes up extra computation
1736      time on a match.  */
1737
1738   if (do_linear_search)
1739     {
1740       top = BLOCK_NSYMS (block);
1741       bot = 0;
1742       while (bot < top)
1743         {
1744           sym = BLOCK_SYM (block, bot);
1745           if (SYMBOL_NAMESPACE (sym) == namespace
1746               && (mangled_name
1747                   ? strcmp (DEPRECATED_SYMBOL_NAME (sym), mangled_name) == 0
1748                   : SYMBOL_MATCHES_NATURAL_NAME (sym, name)))
1749             {
1750               /* If SYM has aliases, then use any alias that is active
1751                  at the current PC.  If no alias is active at the current
1752                  PC, then use the main symbol.
1753
1754                  ?!? Is checking the current pc correct?  Is this routine
1755                  ever called to look up a symbol from another context?
1756
1757                  FIXME: No, it's not correct.  If someone sets a
1758                  conditional breakpoint at an address, then the
1759                  breakpoint's `struct expression' should refer to the
1760                  `struct symbol' appropriate for the breakpoint's
1761                  address, which may not be the PC.
1762
1763                  Even if it were never called from another context,
1764                  it's totally bizarre for lookup_symbol's behavior to
1765                  depend on the value of the inferior's current PC.  We
1766                  should pass in the appropriate PC as well as the
1767                  block.  The interface to lookup_symbol should change
1768                  to require the caller to provide a PC.  */
1769
1770               if (SYMBOL_ALIASES (sym))
1771                 sym = find_active_alias (sym, read_pc ());
1772
1773               sym_found = sym;
1774               if (SYMBOL_CLASS (sym) != LOC_ARG &&
1775                   SYMBOL_CLASS (sym) != LOC_LOCAL_ARG &&
1776                   SYMBOL_CLASS (sym) != LOC_REF_ARG &&
1777                   SYMBOL_CLASS (sym) != LOC_REGPARM &&
1778                   SYMBOL_CLASS (sym) != LOC_REGPARM_ADDR &&
1779                   SYMBOL_CLASS (sym) != LOC_BASEREG_ARG &&
1780                   SYMBOL_CLASS (sym) != LOC_COMPUTED_ARG)
1781                 {
1782                   break;
1783                 }
1784             }
1785           bot++;
1786         }
1787     }
1788   return (sym_found);           /* Will be NULL if not found. */
1789 }
1790
1791 /* Given a main symbol SYM and ADDR, search through the alias
1792    list to determine if an alias is active at ADDR and return
1793    the active alias.
1794
1795    If no alias is active, then return SYM.  */
1796
1797 static struct symbol *
1798 find_active_alias (struct symbol *sym, CORE_ADDR addr)
1799 {
1800   struct range_list *r;
1801   struct alias_list *aliases;
1802
1803   /* If we have aliases, check them first.  */
1804   aliases = SYMBOL_ALIASES (sym);
1805
1806   while (aliases)
1807     {
1808       if (!SYMBOL_RANGES (aliases->sym))
1809         return aliases->sym;
1810       for (r = SYMBOL_RANGES (aliases->sym); r; r = r->next)
1811         {
1812           if (r->start <= addr && r->end > addr)
1813             return aliases->sym;
1814         }
1815       aliases = aliases->next;
1816     }
1817
1818   /* Nothing found, return the main symbol.  */
1819   return sym;
1820 }
1821 \f
1822
1823 /* Find the symtab associated with PC and SECTION.  Look through the
1824    psymtabs and read in another symtab if necessary. */
1825
1826 struct symtab *
1827 find_pc_sect_symtab (CORE_ADDR pc, asection *section)
1828 {
1829   register struct block *b;
1830   struct blockvector *bv;
1831   register struct symtab *s = NULL;
1832   register struct symtab *best_s = NULL;
1833   register struct partial_symtab *ps;
1834   register struct objfile *objfile;
1835   CORE_ADDR distance = 0;
1836   struct minimal_symbol *msymbol;
1837
1838   /* If we know that this is not a text address, return failure.  This is
1839      necessary because we loop based on the block's high and low code
1840      addresses, which do not include the data ranges, and because
1841      we call find_pc_sect_psymtab which has a similar restriction based
1842      on the partial_symtab's texthigh and textlow.  */
1843   msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
1844   if (msymbol
1845       && (msymbol->type == mst_data
1846           || msymbol->type == mst_bss
1847           || msymbol->type == mst_abs
1848           || msymbol->type == mst_file_data
1849           || msymbol->type == mst_file_bss))
1850     return NULL;
1851
1852   /* Search all symtabs for the one whose file contains our address, and which
1853      is the smallest of all the ones containing the address.  This is designed
1854      to deal with a case like symtab a is at 0x1000-0x2000 and 0x3000-0x4000
1855      and symtab b is at 0x2000-0x3000.  So the GLOBAL_BLOCK for a is from
1856      0x1000-0x4000, but for address 0x2345 we want to return symtab b.
1857
1858      This happens for native ecoff format, where code from included files
1859      gets its own symtab. The symtab for the included file should have
1860      been read in already via the dependency mechanism.
1861      It might be swifter to create several symtabs with the same name
1862      like xcoff does (I'm not sure).
1863
1864      It also happens for objfiles that have their functions reordered.
1865      For these, the symtab we are looking for is not necessarily read in.  */
1866
1867   ALL_SYMTABS (objfile, s)
1868   {
1869     bv = BLOCKVECTOR (s);
1870     b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1871
1872     if (BLOCK_START (b) <= pc
1873         && BLOCK_END (b) > pc
1874         && (distance == 0
1875             || BLOCK_END (b) - BLOCK_START (b) < distance))
1876       {
1877         /* For an objfile that has its functions reordered,
1878            find_pc_psymtab will find the proper partial symbol table
1879            and we simply return its corresponding symtab.  */
1880         /* In order to better support objfiles that contain both
1881            stabs and coff debugging info, we continue on if a psymtab
1882            can't be found. */
1883         if ((objfile->flags & OBJF_REORDERED) && objfile->psymtabs)
1884           {
1885             ps = find_pc_sect_psymtab (pc, section);
1886             if (ps)
1887               return PSYMTAB_TO_SYMTAB (ps);
1888           }
1889         if (section != 0)
1890           {
1891             int i;
1892             struct symbol *sym = NULL;
1893
1894             ALL_BLOCK_SYMBOLS (b, i, sym)
1895               {
1896                 fixup_symbol_section (sym, objfile);
1897                 if (section == SYMBOL_BFD_SECTION (sym))
1898                   break;
1899               }
1900             if ((i >= BLOCK_BUCKETS (b)) && (sym == NULL))
1901               continue;         /* no symbol in this symtab matches section */
1902           }
1903         distance = BLOCK_END (b) - BLOCK_START (b);
1904         best_s = s;
1905       }
1906   }
1907
1908   if (best_s != NULL)
1909     return (best_s);
1910
1911   s = NULL;
1912   ps = find_pc_sect_psymtab (pc, section);
1913   if (ps)
1914     {
1915       if (ps->readin)
1916         /* Might want to error() here (in case symtab is corrupt and
1917            will cause a core dump), but maybe we can successfully
1918            continue, so let's not.  */
1919         warning ("\
1920 (Internal error: pc 0x%s in read in psymtab, but not in symtab.)\n",
1921                  paddr_nz (pc));
1922       s = PSYMTAB_TO_SYMTAB (ps);
1923     }
1924   return (s);
1925 }
1926
1927 /* Find the symtab associated with PC.  Look through the psymtabs and
1928    read in another symtab if necessary.  Backward compatibility, no section */
1929
1930 struct symtab *
1931 find_pc_symtab (CORE_ADDR pc)
1932 {
1933   return find_pc_sect_symtab (pc, find_pc_mapped_section (pc));
1934 }
1935 \f
1936
1937 /* Find the source file and line number for a given PC value and SECTION.
1938    Return a structure containing a symtab pointer, a line number,
1939    and a pc range for the entire source line.
1940    The value's .pc field is NOT the specified pc.
1941    NOTCURRENT nonzero means, if specified pc is on a line boundary,
1942    use the line that ends there.  Otherwise, in that case, the line
1943    that begins there is used.  */
1944
1945 /* The big complication here is that a line may start in one file, and end just
1946    before the start of another file.  This usually occurs when you #include
1947    code in the middle of a subroutine.  To properly find the end of a line's PC
1948    range, we must search all symtabs associated with this compilation unit, and
1949    find the one whose first PC is closer than that of the next line in this
1950    symtab.  */
1951
1952 /* If it's worth the effort, we could be using a binary search.  */
1953
1954 struct symtab_and_line
1955 find_pc_sect_line (CORE_ADDR pc, struct sec *section, int notcurrent)
1956 {
1957   struct symtab *s;
1958   register struct linetable *l;
1959   register int len;
1960   register int i;
1961   register struct linetable_entry *item;
1962   struct symtab_and_line val;
1963   struct blockvector *bv;
1964   struct minimal_symbol *msymbol;
1965   struct minimal_symbol *mfunsym;
1966
1967   /* Info on best line seen so far, and where it starts, and its file.  */
1968
1969   struct linetable_entry *best = NULL;
1970   CORE_ADDR best_end = 0;
1971   struct symtab *best_symtab = 0;
1972
1973   /* Store here the first line number
1974      of a file which contains the line at the smallest pc after PC.
1975      If we don't find a line whose range contains PC,
1976      we will use a line one less than this,
1977      with a range from the start of that file to the first line's pc.  */
1978   struct linetable_entry *alt = NULL;
1979   struct symtab *alt_symtab = 0;
1980
1981   /* Info on best line seen in this file.  */
1982
1983   struct linetable_entry *prev;
1984
1985   /* If this pc is not from the current frame,
1986      it is the address of the end of a call instruction.
1987      Quite likely that is the start of the following statement.
1988      But what we want is the statement containing the instruction.
1989      Fudge the pc to make sure we get that.  */
1990
1991   init_sal (&val);              /* initialize to zeroes */
1992
1993   /* It's tempting to assume that, if we can't find debugging info for
1994      any function enclosing PC, that we shouldn't search for line
1995      number info, either.  However, GAS can emit line number info for
1996      assembly files --- very helpful when debugging hand-written
1997      assembly code.  In such a case, we'd have no debug info for the
1998      function, but we would have line info.  */
1999
2000   if (notcurrent)
2001     pc -= 1;
2002
2003   /* elz: added this because this function returned the wrong
2004      information if the pc belongs to a stub (import/export)
2005      to call a shlib function. This stub would be anywhere between
2006      two functions in the target, and the line info was erroneously 
2007      taken to be the one of the line before the pc. 
2008    */
2009   /* RT: Further explanation:
2010
2011    * We have stubs (trampolines) inserted between procedures.
2012    *
2013    * Example: "shr1" exists in a shared library, and a "shr1" stub also
2014    * exists in the main image.
2015    *
2016    * In the minimal symbol table, we have a bunch of symbols
2017    * sorted by start address. The stubs are marked as "trampoline",
2018    * the others appear as text. E.g.:
2019    *
2020    *  Minimal symbol table for main image 
2021    *     main:  code for main (text symbol)
2022    *     shr1: stub  (trampoline symbol)
2023    *     foo:   code for foo (text symbol)
2024    *     ...
2025    *  Minimal symbol table for "shr1" image:
2026    *     ...
2027    *     shr1: code for shr1 (text symbol)
2028    *     ...
2029    *
2030    * So the code below is trying to detect if we are in the stub
2031    * ("shr1" stub), and if so, find the real code ("shr1" trampoline),
2032    * and if found,  do the symbolization from the real-code address
2033    * rather than the stub address.
2034    *
2035    * Assumptions being made about the minimal symbol table:
2036    *   1. lookup_minimal_symbol_by_pc() will return a trampoline only
2037    *      if we're really in the trampoline. If we're beyond it (say
2038    *      we're in "foo" in the above example), it'll have a closer 
2039    *      symbol (the "foo" text symbol for example) and will not
2040    *      return the trampoline.
2041    *   2. lookup_minimal_symbol_text() will find a real text symbol
2042    *      corresponding to the trampoline, and whose address will
2043    *      be different than the trampoline address. I put in a sanity
2044    *      check for the address being the same, to avoid an
2045    *      infinite recursion.
2046    */
2047   msymbol = lookup_minimal_symbol_by_pc (pc);
2048   if (msymbol != NULL)
2049     if (MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
2050       {
2051         mfunsym = lookup_minimal_symbol_text (DEPRECATED_SYMBOL_NAME (msymbol), NULL, NULL);
2052         if (mfunsym == NULL)
2053           /* I eliminated this warning since it is coming out
2054            * in the following situation:
2055            * gdb shmain // test program with shared libraries
2056            * (gdb) break shr1  // function in shared lib
2057            * Warning: In stub for ...
2058            * In the above situation, the shared lib is not loaded yet, 
2059            * so of course we can't find the real func/line info,
2060            * but the "break" still works, and the warning is annoying.
2061            * So I commented out the warning. RT */
2062           /* warning ("In stub for %s; unable to find real function/line info", DEPRECATED_SYMBOL_NAME (msymbol)) */ ;
2063         /* fall through */
2064         else if (SYMBOL_VALUE (mfunsym) == SYMBOL_VALUE (msymbol))
2065           /* Avoid infinite recursion */
2066           /* See above comment about why warning is commented out */
2067           /* warning ("In stub for %s; unable to find real function/line info", DEPRECATED_SYMBOL_NAME (msymbol)) */ ;
2068         /* fall through */
2069         else
2070           return find_pc_line (SYMBOL_VALUE (mfunsym), 0);
2071       }
2072
2073
2074   s = find_pc_sect_symtab (pc, section);
2075   if (!s)
2076     {
2077       /* if no symbol information, return previous pc */
2078       if (notcurrent)
2079         pc++;
2080       val.pc = pc;
2081       return val;
2082     }
2083
2084   bv = BLOCKVECTOR (s);
2085
2086   /* Look at all the symtabs that share this blockvector.
2087      They all have the same apriori range, that we found was right;
2088      but they have different line tables.  */
2089
2090   for (; s && BLOCKVECTOR (s) == bv; s = s->next)
2091     {
2092       /* Find the best line in this symtab.  */
2093       l = LINETABLE (s);
2094       if (!l)
2095         continue;
2096       len = l->nitems;
2097       if (len <= 0)
2098         {
2099           /* I think len can be zero if the symtab lacks line numbers
2100              (e.g. gcc -g1).  (Either that or the LINETABLE is NULL;
2101              I'm not sure which, and maybe it depends on the symbol
2102              reader).  */
2103           continue;
2104         }
2105
2106       prev = NULL;
2107       item = l->item;           /* Get first line info */
2108
2109       /* Is this file's first line closer than the first lines of other files?
2110          If so, record this file, and its first line, as best alternate.  */
2111       if (item->pc > pc && (!alt || item->pc < alt->pc))
2112         {
2113           alt = item;
2114           alt_symtab = s;
2115         }
2116
2117       for (i = 0; i < len; i++, item++)
2118         {
2119           /* Leave prev pointing to the linetable entry for the last line
2120              that started at or before PC.  */
2121           if (item->pc > pc)
2122             break;
2123
2124           prev = item;
2125         }
2126
2127       /* At this point, prev points at the line whose start addr is <= pc, and
2128          item points at the next line.  If we ran off the end of the linetable
2129          (pc >= start of the last line), then prev == item.  If pc < start of
2130          the first line, prev will not be set.  */
2131
2132       /* Is this file's best line closer than the best in the other files?
2133          If so, record this file, and its best line, as best so far.  Don't
2134          save prev if it represents the end of a function (i.e. line number
2135          0) instead of a real line.  */
2136
2137       if (prev && prev->line && (!best || prev->pc > best->pc))
2138         {
2139           best = prev;
2140           best_symtab = s;
2141
2142           /* Discard BEST_END if it's before the PC of the current BEST.  */
2143           if (best_end <= best->pc)
2144             best_end = 0;
2145         }
2146
2147       /* If another line (denoted by ITEM) is in the linetable and its
2148          PC is after BEST's PC, but before the current BEST_END, then
2149          use ITEM's PC as the new best_end.  */
2150       if (best && i < len && item->pc > best->pc
2151           && (best_end == 0 || best_end > item->pc))
2152         best_end = item->pc;
2153     }
2154
2155   if (!best_symtab)
2156     {
2157       if (!alt_symtab)
2158         {                       /* If we didn't find any line # info, just
2159                                    return zeros.  */
2160           val.pc = pc;
2161         }
2162       else
2163         {
2164           val.symtab = alt_symtab;
2165           val.line = alt->line - 1;
2166
2167           /* Don't return line 0, that means that we didn't find the line.  */
2168           if (val.line == 0)
2169             ++val.line;
2170
2171           val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
2172           val.end = alt->pc;
2173         }
2174     }
2175   else if (best->line == 0)
2176     {
2177       /* If our best fit is in a range of PC's for which no line
2178          number info is available (line number is zero) then we didn't
2179          find any valid line information. */
2180       val.pc = pc;
2181     }
2182   else
2183     {
2184       val.symtab = best_symtab;
2185       val.line = best->line;
2186       val.pc = best->pc;
2187       if (best_end && (!alt || best_end < alt->pc))
2188         val.end = best_end;
2189       else if (alt)
2190         val.end = alt->pc;
2191       else
2192         val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
2193     }
2194   val.section = section;
2195   return val;
2196 }
2197
2198 /* Backward compatibility (no section) */
2199
2200 struct symtab_and_line
2201 find_pc_line (CORE_ADDR pc, int notcurrent)
2202 {
2203   asection *section;
2204
2205   section = find_pc_overlay (pc);
2206   if (pc_in_unmapped_range (pc, section))
2207     pc = overlay_mapped_address (pc, section);
2208   return find_pc_sect_line (pc, section, notcurrent);
2209 }
2210 \f
2211 /* Find line number LINE in any symtab whose name is the same as
2212    SYMTAB.
2213
2214    If found, return the symtab that contains the linetable in which it was
2215    found, set *INDEX to the index in the linetable of the best entry
2216    found, and set *EXACT_MATCH nonzero if the value returned is an
2217    exact match.
2218
2219    If not found, return NULL.  */
2220
2221 struct symtab *
2222 find_line_symtab (struct symtab *symtab, int line, int *index, int *exact_match)
2223 {
2224   int exact;
2225
2226   /* BEST_INDEX and BEST_LINETABLE identify the smallest linenumber > LINE
2227      so far seen.  */
2228
2229   int best_index;
2230   struct linetable *best_linetable;
2231   struct symtab *best_symtab;
2232
2233   /* First try looking it up in the given symtab.  */
2234   best_linetable = LINETABLE (symtab);
2235   best_symtab = symtab;
2236   best_index = find_line_common (best_linetable, line, &exact);
2237   if (best_index < 0 || !exact)
2238     {
2239       /* Didn't find an exact match.  So we better keep looking for
2240          another symtab with the same name.  In the case of xcoff,
2241          multiple csects for one source file (produced by IBM's FORTRAN
2242          compiler) produce multiple symtabs (this is unavoidable
2243          assuming csects can be at arbitrary places in memory and that
2244          the GLOBAL_BLOCK of a symtab has a begin and end address).  */
2245
2246       /* BEST is the smallest linenumber > LINE so far seen,
2247          or 0 if none has been seen so far.
2248          BEST_INDEX and BEST_LINETABLE identify the item for it.  */
2249       int best;
2250
2251       struct objfile *objfile;
2252       struct symtab *s;
2253
2254       if (best_index >= 0)
2255         best = best_linetable->item[best_index].line;
2256       else
2257         best = 0;
2258
2259       ALL_SYMTABS (objfile, s)
2260       {
2261         struct linetable *l;
2262         int ind;
2263
2264         if (!STREQ (symtab->filename, s->filename))
2265           continue;
2266         l = LINETABLE (s);
2267         ind = find_line_common (l, line, &exact);
2268         if (ind >= 0)
2269           {
2270             if (exact)
2271               {
2272                 best_index = ind;
2273                 best_linetable = l;
2274                 best_symtab = s;
2275                 goto done;
2276               }
2277             if (best == 0 || l->item[ind].line < best)
2278               {
2279                 best = l->item[ind].line;
2280                 best_index = ind;
2281                 best_linetable = l;
2282                 best_symtab = s;
2283               }
2284           }
2285       }
2286     }
2287 done:
2288   if (best_index < 0)
2289     return NULL;
2290
2291   if (index)
2292     *index = best_index;
2293   if (exact_match)
2294     *exact_match = exact;
2295
2296   return best_symtab;
2297 }
2298 \f
2299 /* Set the PC value for a given source file and line number and return true.
2300    Returns zero for invalid line number (and sets the PC to 0).
2301    The source file is specified with a struct symtab.  */
2302
2303 int
2304 find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
2305 {
2306   struct linetable *l;
2307   int ind;
2308
2309   *pc = 0;
2310   if (symtab == 0)
2311     return 0;
2312
2313   symtab = find_line_symtab (symtab, line, &ind, NULL);
2314   if (symtab != NULL)
2315     {
2316       l = LINETABLE (symtab);
2317       *pc = l->item[ind].pc;
2318       return 1;
2319     }
2320   else
2321     return 0;
2322 }
2323
2324 /* Find the range of pc values in a line.
2325    Store the starting pc of the line into *STARTPTR
2326    and the ending pc (start of next line) into *ENDPTR.
2327    Returns 1 to indicate success.
2328    Returns 0 if could not find the specified line.  */
2329
2330 int
2331 find_line_pc_range (struct symtab_and_line sal, CORE_ADDR *startptr,
2332                     CORE_ADDR *endptr)
2333 {
2334   CORE_ADDR startaddr;
2335   struct symtab_and_line found_sal;
2336
2337   startaddr = sal.pc;
2338   if (startaddr == 0 && !find_line_pc (sal.symtab, sal.line, &startaddr))
2339     return 0;
2340
2341   /* This whole function is based on address.  For example, if line 10 has
2342      two parts, one from 0x100 to 0x200 and one from 0x300 to 0x400, then
2343      "info line *0x123" should say the line goes from 0x100 to 0x200
2344      and "info line *0x355" should say the line goes from 0x300 to 0x400.
2345      This also insures that we never give a range like "starts at 0x134
2346      and ends at 0x12c".  */
2347
2348   found_sal = find_pc_sect_line (startaddr, sal.section, 0);
2349   if (found_sal.line != sal.line)
2350     {
2351       /* The specified line (sal) has zero bytes.  */
2352       *startptr = found_sal.pc;
2353       *endptr = found_sal.pc;
2354     }
2355   else
2356     {
2357       *startptr = found_sal.pc;
2358       *endptr = found_sal.end;
2359     }
2360   return 1;
2361 }
2362
2363 /* Given a line table and a line number, return the index into the line
2364    table for the pc of the nearest line whose number is >= the specified one.
2365    Return -1 if none is found.  The value is >= 0 if it is an index.
2366
2367    Set *EXACT_MATCH nonzero if the value returned is an exact match.  */
2368
2369 static int
2370 find_line_common (register struct linetable *l, register int lineno,
2371                   int *exact_match)
2372 {
2373   register int i;
2374   register int len;
2375
2376   /* BEST is the smallest linenumber > LINENO so far seen,
2377      or 0 if none has been seen so far.
2378      BEST_INDEX identifies the item for it.  */
2379
2380   int best_index = -1;
2381   int best = 0;
2382
2383   if (lineno <= 0)
2384     return -1;
2385   if (l == 0)
2386     return -1;
2387
2388   len = l->nitems;
2389   for (i = 0; i < len; i++)
2390     {
2391       register struct linetable_entry *item = &(l->item[i]);
2392
2393       if (item->line == lineno)
2394         {
2395           /* Return the first (lowest address) entry which matches.  */
2396           *exact_match = 1;
2397           return i;
2398         }
2399
2400       if (item->line > lineno && (best == 0 || item->line < best))
2401         {
2402           best = item->line;
2403           best_index = i;
2404         }
2405     }
2406
2407   /* If we got here, we didn't get an exact match.  */
2408
2409   *exact_match = 0;
2410   return best_index;
2411 }
2412
2413 int
2414 find_pc_line_pc_range (CORE_ADDR pc, CORE_ADDR *startptr, CORE_ADDR *endptr)
2415 {
2416   struct symtab_and_line sal;
2417   sal = find_pc_line (pc, 0);
2418   *startptr = sal.pc;
2419   *endptr = sal.end;
2420   return sal.symtab != 0;
2421 }
2422
2423 /* Given a function symbol SYM, find the symtab and line for the start
2424    of the function.
2425    If the argument FUNFIRSTLINE is nonzero, we want the first line
2426    of real code inside the function.  */
2427
2428 struct symtab_and_line
2429 find_function_start_sal (struct symbol *sym, int funfirstline)
2430 {
2431   CORE_ADDR pc;
2432   struct symtab_and_line sal;
2433
2434   pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
2435   fixup_symbol_section (sym, NULL);
2436   if (funfirstline)
2437     {                           /* skip "first line" of function (which is actually its prologue) */
2438       asection *section = SYMBOL_BFD_SECTION (sym);
2439       /* If function is in an unmapped overlay, use its unmapped LMA
2440          address, so that SKIP_PROLOGUE has something unique to work on */
2441       if (section_is_overlay (section) &&
2442           !section_is_mapped (section))
2443         pc = overlay_unmapped_address (pc, section);
2444
2445       pc += FUNCTION_START_OFFSET;
2446       pc = SKIP_PROLOGUE (pc);
2447
2448       /* For overlays, map pc back into its mapped VMA range */
2449       pc = overlay_mapped_address (pc, section);
2450     }
2451   sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
2452
2453 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
2454   /* Convex: no need to suppress code on first line, if any */
2455   sal.pc = pc;
2456 #else
2457   /* Check if SKIP_PROLOGUE left us in mid-line, and the next
2458      line is still part of the same function.  */
2459   if (sal.pc != pc
2460       && BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) <= sal.end
2461       && sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
2462     {
2463       /* First pc of next line */
2464       pc = sal.end;
2465       /* Recalculate the line number (might not be N+1).  */
2466       sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
2467     }
2468   sal.pc = pc;
2469 #endif
2470
2471   return sal;
2472 }
2473
2474 /* If P is of the form "operator[ \t]+..." where `...' is
2475    some legitimate operator text, return a pointer to the
2476    beginning of the substring of the operator text.
2477    Otherwise, return "".  */
2478 char *
2479 operator_chars (char *p, char **end)
2480 {
2481   *end = "";
2482   if (strncmp (p, "operator", 8))
2483     return *end;
2484   p += 8;
2485
2486   /* Don't get faked out by `operator' being part of a longer
2487      identifier.  */
2488   if (isalpha (*p) || *p == '_' || *p == '$' || *p == '\0')
2489     return *end;
2490
2491   /* Allow some whitespace between `operator' and the operator symbol.  */
2492   while (*p == ' ' || *p == '\t')
2493     p++;
2494
2495   /* Recognize 'operator TYPENAME'. */
2496
2497   if (isalpha (*p) || *p == '_' || *p == '$')
2498     {
2499       register char *q = p + 1;
2500       while (isalnum (*q) || *q == '_' || *q == '$')
2501         q++;
2502       *end = q;
2503       return p;
2504     }
2505
2506   while (*p)
2507     switch (*p)
2508       {
2509       case '\\':                        /* regexp quoting */
2510         if (p[1] == '*')
2511           {
2512             if (p[2] == '=')    /* 'operator\*=' */
2513               *end = p + 3;
2514             else                        /* 'operator\*'  */
2515               *end = p + 2;
2516             return p;
2517           }
2518         else if (p[1] == '[')
2519           {
2520             if (p[2] == ']')
2521               error ("mismatched quoting on brackets, try 'operator\\[\\]'");
2522             else if (p[2] == '\\' && p[3] == ']')
2523               {
2524                 *end = p + 4;   /* 'operator\[\]' */
2525                 return p;
2526               }
2527             else
2528               error ("nothing is allowed between '[' and ']'");
2529           }
2530         else 
2531           {
2532             /* Gratuitous qoute: skip it and move on. */
2533             p++;
2534             continue;
2535           }
2536         break;
2537       case '!':
2538       case '=':
2539       case '*':
2540       case '/':
2541       case '%':
2542       case '^':
2543         if (p[1] == '=')
2544           *end = p + 2;
2545         else
2546           *end = p + 1;
2547         return p;
2548       case '<':
2549       case '>':
2550       case '+':
2551       case '-':
2552       case '&':
2553       case '|':
2554         if (p[0] == '-' && p[1] == '>')
2555           {
2556             /* Struct pointer member operator 'operator->'. */
2557             if (p[2] == '*')
2558               {
2559                 *end = p + 3;   /* 'operator->*' */
2560                 return p;
2561               }
2562             else if (p[2] == '\\')
2563               {
2564                 *end = p + 4;   /* Hopefully 'operator->\*' */
2565                 return p;
2566               }
2567             else
2568               {
2569                 *end = p + 2;   /* 'operator->' */
2570                 return p;
2571               }
2572           }
2573         if (p[1] == '=' || p[1] == p[0])
2574           *end = p + 2;
2575         else
2576           *end = p + 1;
2577         return p;
2578       case '~':
2579       case ',':
2580         *end = p + 1;
2581         return p;
2582       case '(':
2583         if (p[1] != ')')
2584           error ("`operator ()' must be specified without whitespace in `()'");
2585         *end = p + 2;
2586         return p;
2587       case '?':
2588         if (p[1] != ':')
2589           error ("`operator ?:' must be specified without whitespace in `?:'");
2590         *end = p + 2;
2591         return p;
2592       case '[':
2593         if (p[1] != ']')
2594           error ("`operator []' must be specified without whitespace in `[]'");
2595         *end = p + 2;
2596         return p;
2597       default:
2598         error ("`operator %s' not supported", p);
2599         break;
2600       }
2601
2602   *end = "";
2603   return *end;
2604 }
2605 \f
2606
2607 /* If FILE is not already in the table of files, return zero;
2608    otherwise return non-zero.  Optionally add FILE to the table if ADD
2609    is non-zero.  If *FIRST is non-zero, forget the old table
2610    contents.  */
2611 static int
2612 filename_seen (const char *file, int add, int *first)
2613 {
2614   /* Table of files seen so far.  */
2615   static const char **tab = NULL;
2616   /* Allocated size of tab in elements.
2617      Start with one 256-byte block (when using GNU malloc.c).
2618      24 is the malloc overhead when range checking is in effect.  */
2619   static int tab_alloc_size = (256 - 24) / sizeof (char *);
2620   /* Current size of tab in elements.  */
2621   static int tab_cur_size;
2622   const char **p;
2623
2624   if (*first)
2625     {
2626       if (tab == NULL)
2627         tab = (const char **) xmalloc (tab_alloc_size * sizeof (*tab));
2628       tab_cur_size = 0;
2629     }
2630
2631   /* Is FILE in tab?  */
2632   for (p = tab; p < tab + tab_cur_size; p++)
2633     if (strcmp (*p, file) == 0)
2634       return 1;
2635
2636   /* No; maybe add it to tab.  */
2637   if (add)
2638     {
2639       if (tab_cur_size == tab_alloc_size)
2640         {
2641           tab_alloc_size *= 2;
2642           tab = (const char **) xrealloc ((char *) tab,
2643                                           tab_alloc_size * sizeof (*tab));
2644         }
2645       tab[tab_cur_size++] = file;
2646     }
2647
2648   return 0;
2649 }
2650
2651 /* Slave routine for sources_info.  Force line breaks at ,'s.
2652    NAME is the name to print and *FIRST is nonzero if this is the first
2653    name printed.  Set *FIRST to zero.  */
2654 static void
2655 output_source_filename (char *name, int *first)
2656 {
2657   /* Since a single source file can result in several partial symbol
2658      tables, we need to avoid printing it more than once.  Note: if
2659      some of the psymtabs are read in and some are not, it gets
2660      printed both under "Source files for which symbols have been
2661      read" and "Source files for which symbols will be read in on
2662      demand".  I consider this a reasonable way to deal with the
2663      situation.  I'm not sure whether this can also happen for
2664      symtabs; it doesn't hurt to check.  */
2665
2666   /* Was NAME already seen?  */
2667   if (filename_seen (name, 1, first))
2668     {
2669       /* Yes; don't print it again.  */
2670       return;
2671     }
2672   /* No; print it and reset *FIRST.  */
2673   if (*first)
2674     {
2675       *first = 0;
2676     }
2677   else
2678     {
2679       printf_filtered (", ");
2680     }
2681
2682   wrap_here ("");
2683   fputs_filtered (name, gdb_stdout);
2684 }
2685
2686 static void
2687 sources_info (char *ignore, int from_tty)
2688 {
2689   register struct symtab *s;
2690   register struct partial_symtab *ps;
2691   register struct objfile *objfile;
2692   int first;
2693
2694   if (!have_full_symbols () && !have_partial_symbols ())
2695     {
2696       error ("No symbol table is loaded.  Use the \"file\" command.");
2697     }
2698
2699   printf_filtered ("Source files for which symbols have been read in:\n\n");
2700
2701   first = 1;
2702   ALL_SYMTABS (objfile, s)
2703   {
2704     output_source_filename (s->filename, &first);
2705   }
2706   printf_filtered ("\n\n");
2707
2708   printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2709
2710   first = 1;
2711   ALL_PSYMTABS (objfile, ps)
2712   {
2713     if (!ps->readin)
2714       {
2715         output_source_filename (ps->filename, &first);
2716       }
2717   }
2718   printf_filtered ("\n");
2719 }
2720
2721 static int
2722 file_matches (char *file, char *files[], int nfiles)
2723 {
2724   int i;
2725
2726   if (file != NULL && nfiles != 0)
2727     {
2728       for (i = 0; i < nfiles; i++)
2729         {
2730           if (strcmp (files[i], lbasename (file)) == 0)
2731             return 1;
2732         }
2733     }
2734   else if (nfiles == 0)
2735     return 1;
2736   return 0;
2737 }
2738
2739 /* Free any memory associated with a search. */
2740 void
2741 free_search_symbols (struct symbol_search *symbols)
2742 {
2743   struct symbol_search *p;
2744   struct symbol_search *next;
2745
2746   for (p = symbols; p != NULL; p = next)
2747     {
2748       next = p->next;
2749       xfree (p);
2750     }
2751 }
2752
2753 static void
2754 do_free_search_symbols_cleanup (void *symbols)
2755 {
2756   free_search_symbols (symbols);
2757 }
2758
2759 struct cleanup *
2760 make_cleanup_free_search_symbols (struct symbol_search *symbols)
2761 {
2762   return make_cleanup (do_free_search_symbols_cleanup, symbols);
2763 }
2764
2765 /* Helper function for sort_search_symbols and qsort.  Can only
2766    sort symbols, not minimal symbols.  */
2767 static int
2768 compare_search_syms (const void *sa, const void *sb)
2769 {
2770   struct symbol_search **sym_a = (struct symbol_search **) sa;
2771   struct symbol_search **sym_b = (struct symbol_search **) sb;
2772
2773   return strcmp (SYMBOL_PRINT_NAME ((*sym_a)->symbol),
2774                  SYMBOL_PRINT_NAME ((*sym_b)->symbol));
2775 }
2776
2777 /* Sort the ``nfound'' symbols in the list after prevtail.  Leave
2778    prevtail where it is, but update its next pointer to point to
2779    the first of the sorted symbols.  */
2780 static struct symbol_search *
2781 sort_search_symbols (struct symbol_search *prevtail, int nfound)
2782 {
2783   struct symbol_search **symbols, *symp, *old_next;
2784   int i;
2785
2786   symbols = (struct symbol_search **) xmalloc (sizeof (struct symbol_search *)
2787                                                * nfound);
2788   symp = prevtail->next;
2789   for (i = 0; i < nfound; i++)
2790     {
2791       symbols[i] = symp;
2792       symp = symp->next;
2793     }
2794   /* Generally NULL.  */
2795   old_next = symp;
2796
2797   qsort (symbols, nfound, sizeof (struct symbol_search *),
2798          compare_search_syms);
2799
2800   symp = prevtail;
2801   for (i = 0; i < nfound; i++)
2802     {
2803       symp->next = symbols[i];
2804       symp = symp->next;
2805     }
2806   symp->next = old_next;
2807
2808   xfree (symbols);
2809   return symp;
2810 }
2811
2812 /* Search the symbol table for matches to the regular expression REGEXP,
2813    returning the results in *MATCHES.
2814
2815    Only symbols of KIND are searched:
2816    FUNCTIONS_NAMESPACE - search all functions
2817    TYPES_NAMESPACE     - search all type names
2818    METHODS_NAMESPACE   - search all methods NOT IMPLEMENTED
2819    VARIABLES_NAMESPACE - search all symbols, excluding functions, type names,
2820    and constants (enums)
2821
2822    free_search_symbols should be called when *MATCHES is no longer needed.
2823
2824    The results are sorted locally; each symtab's global and static blocks are
2825    separately alphabetized.
2826  */
2827 void
2828 search_symbols (char *regexp, namespace_enum kind, int nfiles, char *files[],
2829                 struct symbol_search **matches)
2830 {
2831   register struct symtab *s;
2832   register struct partial_symtab *ps;
2833   register struct blockvector *bv;
2834   struct blockvector *prev_bv = 0;
2835   register struct block *b;
2836   register int i = 0;
2837   register int j;
2838   register struct symbol *sym;
2839   struct partial_symbol **psym;
2840   struct objfile *objfile;
2841   struct minimal_symbol *msymbol;
2842   char *val;
2843   int found_misc = 0;
2844   static enum minimal_symbol_type types[]
2845   =
2846   {mst_data, mst_text, mst_abs, mst_unknown};
2847   static enum minimal_symbol_type types2[]
2848   =
2849   {mst_bss, mst_file_text, mst_abs, mst_unknown};
2850   static enum minimal_symbol_type types3[]
2851   =
2852   {mst_file_data, mst_solib_trampoline, mst_abs, mst_unknown};
2853   static enum minimal_symbol_type types4[]
2854   =
2855   {mst_file_bss, mst_text, mst_abs, mst_unknown};
2856   enum minimal_symbol_type ourtype;
2857   enum minimal_symbol_type ourtype2;
2858   enum minimal_symbol_type ourtype3;
2859   enum minimal_symbol_type ourtype4;
2860   struct symbol_search *sr;
2861   struct symbol_search *psr;
2862   struct symbol_search *tail;
2863   struct cleanup *old_chain = NULL;
2864
2865   if (kind < VARIABLES_NAMESPACE)
2866     error ("must search on specific namespace");
2867
2868   ourtype = types[(int) (kind - VARIABLES_NAMESPACE)];
2869   ourtype2 = types2[(int) (kind - VARIABLES_NAMESPACE)];
2870   ourtype3 = types3[(int) (kind - VARIABLES_NAMESPACE)];
2871   ourtype4 = types4[(int) (kind - VARIABLES_NAMESPACE)];
2872
2873   sr = *matches = NULL;
2874   tail = NULL;
2875
2876   if (regexp != NULL)
2877     {
2878       /* Make sure spacing is right for C++ operators.
2879          This is just a courtesy to make the matching less sensitive
2880          to how many spaces the user leaves between 'operator'
2881          and <TYPENAME> or <OPERATOR>. */
2882       char *opend;
2883       char *opname = operator_chars (regexp, &opend);
2884       if (*opname)
2885         {
2886           int fix = -1;         /* -1 means ok; otherwise number of spaces needed. */
2887           if (isalpha (*opname) || *opname == '_' || *opname == '$')
2888             {
2889               /* There should 1 space between 'operator' and 'TYPENAME'. */
2890               if (opname[-1] != ' ' || opname[-2] == ' ')
2891                 fix = 1;
2892             }
2893           else
2894             {
2895               /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2896               if (opname[-1] == ' ')
2897                 fix = 0;
2898             }
2899           /* If wrong number of spaces, fix it. */
2900           if (fix >= 0)
2901             {
2902               char *tmp = (char *) alloca (8 + fix + strlen (opname) + 1);
2903               sprintf (tmp, "operator%.*s%s", fix, " ", opname);
2904               regexp = tmp;
2905             }
2906         }
2907
2908       if (0 != (val = re_comp (regexp)))
2909         error ("Invalid regexp (%s): %s", val, regexp);
2910     }
2911
2912   /* Search through the partial symtabs *first* for all symbols
2913      matching the regexp.  That way we don't have to reproduce all of
2914      the machinery below. */
2915
2916   ALL_PSYMTABS (objfile, ps)
2917   {
2918     struct partial_symbol **bound, **gbound, **sbound;
2919     int keep_going = 1;
2920
2921     if (ps->readin)
2922       continue;
2923
2924     gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2925     sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2926     bound = gbound;
2927
2928     /* Go through all of the symbols stored in a partial
2929        symtab in one loop. */
2930     psym = objfile->global_psymbols.list + ps->globals_offset;
2931     while (keep_going)
2932       {
2933         if (psym >= bound)
2934           {
2935             if (bound == gbound && ps->n_static_syms != 0)
2936               {
2937                 psym = objfile->static_psymbols.list + ps->statics_offset;
2938                 bound = sbound;
2939               }
2940             else
2941               keep_going = 0;
2942             continue;
2943           }
2944         else
2945           {
2946             QUIT;
2947
2948             /* If it would match (logic taken from loop below)
2949                load the file and go on to the next one */
2950             if (file_matches (ps->filename, files, nfiles)
2951                 && ((regexp == NULL
2952                      || re_exec (SYMBOL_NATURAL_NAME (*psym)) != 0)
2953                     && ((kind == VARIABLES_NAMESPACE && SYMBOL_CLASS (*psym) != LOC_TYPEDEF
2954                          && SYMBOL_CLASS (*psym) != LOC_BLOCK)
2955                         || (kind == FUNCTIONS_NAMESPACE && SYMBOL_CLASS (*psym) == LOC_BLOCK)
2956                         || (kind == TYPES_NAMESPACE && SYMBOL_CLASS (*psym) == LOC_TYPEDEF)
2957                         || (kind == METHODS_NAMESPACE && SYMBOL_CLASS (*psym) == LOC_BLOCK))))
2958               {
2959                 PSYMTAB_TO_SYMTAB (ps);
2960                 keep_going = 0;
2961               }
2962           }
2963         psym++;
2964       }
2965   }
2966
2967   /* Here, we search through the minimal symbol tables for functions
2968      and variables that match, and force their symbols to be read.
2969      This is in particular necessary for demangled variable names,
2970      which are no longer put into the partial symbol tables.
2971      The symbol will then be found during the scan of symtabs below.
2972
2973      For functions, find_pc_symtab should succeed if we have debug info
2974      for the function, for variables we have to call lookup_symbol
2975      to determine if the variable has debug info.
2976      If the lookup fails, set found_misc so that we will rescan to print
2977      any matching symbols without debug info.
2978    */
2979
2980   if (nfiles == 0 && (kind == VARIABLES_NAMESPACE || kind == FUNCTIONS_NAMESPACE))
2981     {
2982       ALL_MSYMBOLS (objfile, msymbol)
2983       {
2984         if (MSYMBOL_TYPE (msymbol) == ourtype ||
2985             MSYMBOL_TYPE (msymbol) == ourtype2 ||
2986             MSYMBOL_TYPE (msymbol) == ourtype3 ||
2987             MSYMBOL_TYPE (msymbol) == ourtype4)
2988           {
2989             if (regexp == NULL
2990                 || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0)
2991               {
2992                 if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
2993                   {
2994                     /* FIXME: carlton/2003-02-04: Given that the
2995                        semantics of lookup_symbol keeps on changing
2996                        slightly, it would be a nice idea if we had a
2997                        function lookup_symbol_minsym that found the
2998                        symbol associated to a given minimal symbol (if
2999                        any).  */
3000                     if (kind == FUNCTIONS_NAMESPACE
3001                         || lookup_symbol (DEPRECATED_SYMBOL_NAME (msymbol),
3002                                           (struct block *) NULL,
3003                                           VAR_NAMESPACE,
3004                                         0, (struct symtab **) NULL) == NULL)
3005                       found_misc = 1;
3006                   }
3007               }
3008           }
3009       }
3010     }
3011
3012   ALL_SYMTABS (objfile, s)
3013   {
3014     bv = BLOCKVECTOR (s);
3015     /* Often many files share a blockvector.
3016        Scan each blockvector only once so that
3017        we don't get every symbol many times.
3018        It happens that the first symtab in the list
3019        for any given blockvector is the main file.  */
3020     if (bv != prev_bv)
3021       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
3022         {
3023           struct symbol_search *prevtail = tail;
3024           int nfound = 0;
3025           b = BLOCKVECTOR_BLOCK (bv, i);
3026           ALL_BLOCK_SYMBOLS (b, j, sym)
3027             {
3028               QUIT;
3029               if (file_matches (s->filename, files, nfiles)
3030                   && ((regexp == NULL
3031                        || re_exec (SYMBOL_NATURAL_NAME (sym)) != 0)
3032                       && ((kind == VARIABLES_NAMESPACE && SYMBOL_CLASS (sym) != LOC_TYPEDEF
3033                            && SYMBOL_CLASS (sym) != LOC_BLOCK
3034                            && SYMBOL_CLASS (sym) != LOC_CONST)
3035                           || (kind == FUNCTIONS_NAMESPACE && SYMBOL_CLASS (sym) == LOC_BLOCK)
3036                           || (kind == TYPES_NAMESPACE && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
3037                           || (kind == METHODS_NAMESPACE && SYMBOL_CLASS (sym) == LOC_BLOCK))))
3038                 {
3039                   /* match */
3040                   psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
3041                   psr->block = i;
3042                   psr->symtab = s;
3043                   psr->symbol = sym;
3044                   psr->msymbol = NULL;
3045                   psr->next = NULL;
3046                   if (tail == NULL)
3047                     sr = psr;
3048                   else
3049                     tail->next = psr;
3050                   tail = psr;
3051                   nfound ++;
3052                 }
3053             }
3054           if (nfound > 0)
3055             {
3056               if (prevtail == NULL)
3057                 {
3058                   struct symbol_search dummy;
3059
3060                   dummy.next = sr;
3061                   tail = sort_search_symbols (&dummy, nfound);
3062                   sr = dummy.next;
3063
3064                   old_chain = make_cleanup_free_search_symbols (sr);
3065                 }
3066               else
3067                 tail = sort_search_symbols (prevtail, nfound);
3068             }
3069         }
3070     prev_bv = bv;
3071   }
3072
3073   /* If there are no eyes, avoid all contact.  I mean, if there are
3074      no debug symbols, then print directly from the msymbol_vector.  */
3075
3076   if (found_misc || kind != FUNCTIONS_NAMESPACE)
3077     {
3078       ALL_MSYMBOLS (objfile, msymbol)
3079       {
3080         if (MSYMBOL_TYPE (msymbol) == ourtype ||
3081             MSYMBOL_TYPE (msymbol) == ourtype2 ||
3082             MSYMBOL_TYPE (msymbol) == ourtype3 ||
3083             MSYMBOL_TYPE (msymbol) == ourtype4)
3084           {
3085             if (regexp == NULL
3086                 || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0)
3087               {
3088                 /* Functions:  Look up by address. */
3089                 if (kind != FUNCTIONS_NAMESPACE ||
3090                     (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
3091                   {
3092                     /* Variables/Absolutes:  Look up by name */
3093                     if (lookup_symbol (DEPRECATED_SYMBOL_NAME (msymbol),
3094                                        (struct block *) NULL, VAR_NAMESPACE,
3095                                        0, (struct symtab **) NULL) == NULL)
3096                       {
3097                         /* match */
3098                         psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
3099                         psr->block = i;
3100                         psr->msymbol = msymbol;
3101                         psr->symtab = NULL;
3102                         psr->symbol = NULL;
3103                         psr->next = NULL;
3104                         if (tail == NULL)
3105                           {
3106                             sr = psr;
3107                             old_chain = make_cleanup_free_search_symbols (sr);
3108                           }
3109                         else
3110                           tail->next = psr;
3111                         tail = psr;
3112                       }
3113                   }
3114               }
3115           }
3116       }
3117     }
3118
3119   *matches = sr;
3120   if (sr != NULL)
3121     discard_cleanups (old_chain);
3122 }
3123
3124 /* Helper function for symtab_symbol_info, this function uses
3125    the data returned from search_symbols() to print information
3126    regarding the match to gdb_stdout.
3127  */
3128 static void
3129 print_symbol_info (namespace_enum kind, struct symtab *s, struct symbol *sym,
3130                    int block, char *last)
3131 {
3132   if (last == NULL || strcmp (last, s->filename) != 0)
3133     {
3134       fputs_filtered ("\nFile ", gdb_stdout);
3135       fputs_filtered (s->filename, gdb_stdout);
3136       fputs_filtered (":\n", gdb_stdout);
3137     }
3138
3139   if (kind != TYPES_NAMESPACE && block == STATIC_BLOCK)
3140     printf_filtered ("static ");
3141
3142   /* Typedef that is not a C++ class */
3143   if (kind == TYPES_NAMESPACE
3144       && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
3145     typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
3146   /* variable, func, or typedef-that-is-c++-class */
3147   else if (kind < TYPES_NAMESPACE ||
3148            (kind == TYPES_NAMESPACE &&
3149             SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE))
3150     {
3151       type_print (SYMBOL_TYPE (sym),
3152                   (SYMBOL_CLASS (sym) == LOC_TYPEDEF
3153                    ? "" : SYMBOL_PRINT_NAME (sym)),
3154                   gdb_stdout, 0);
3155
3156       printf_filtered (";\n");
3157     }
3158 }
3159
3160 /* This help function for symtab_symbol_info() prints information
3161    for non-debugging symbols to gdb_stdout.
3162  */
3163 static void
3164 print_msymbol_info (struct minimal_symbol *msymbol)
3165 {
3166   char *tmp;
3167
3168   if (TARGET_ADDR_BIT <= 32)
3169     tmp = local_hex_string_custom (SYMBOL_VALUE_ADDRESS (msymbol)
3170                                    & (CORE_ADDR) 0xffffffff,
3171                                    "08l");
3172   else
3173     tmp = local_hex_string_custom (SYMBOL_VALUE_ADDRESS (msymbol),
3174                                    "016l");
3175   printf_filtered ("%s  %s\n",
3176                    tmp, SYMBOL_PRINT_NAME (msymbol));
3177 }
3178
3179 /* This is the guts of the commands "info functions", "info types", and
3180    "info variables". It calls search_symbols to find all matches and then
3181    print_[m]symbol_info to print out some useful information about the
3182    matches.
3183  */
3184 static void
3185 symtab_symbol_info (char *regexp, namespace_enum kind, int from_tty)
3186 {
3187   static char *classnames[]
3188   =
3189   {"variable", "function", "type", "method"};
3190   struct symbol_search *symbols;
3191   struct symbol_search *p;
3192   struct cleanup *old_chain;
3193   char *last_filename = NULL;
3194   int first = 1;
3195
3196   /* must make sure that if we're interrupted, symbols gets freed */
3197   search_symbols (regexp, kind, 0, (char **) NULL, &symbols);
3198   old_chain = make_cleanup_free_search_symbols (symbols);
3199
3200   printf_filtered (regexp
3201                    ? "All %ss matching regular expression \"%s\":\n"
3202                    : "All defined %ss:\n",
3203                    classnames[(int) (kind - VARIABLES_NAMESPACE)], regexp);
3204
3205   for (p = symbols; p != NULL; p = p->next)
3206     {
3207       QUIT;
3208
3209       if (p->msymbol != NULL)
3210         {
3211           if (first)
3212             {
3213               printf_filtered ("\nNon-debugging symbols:\n");
3214               first = 0;
3215             }
3216           print_msymbol_info (p->msymbol);
3217         }
3218       else
3219         {
3220           print_symbol_info (kind,
3221                              p->symtab,
3222                              p->symbol,
3223                              p->block,
3224                              last_filename);
3225           last_filename = p->symtab->filename;
3226         }
3227     }
3228
3229   do_cleanups (old_chain);
3230 }
3231
3232 static void
3233 variables_info (char *regexp, int from_tty)
3234 {
3235   symtab_symbol_info (regexp, VARIABLES_NAMESPACE, from_tty);
3236 }
3237
3238 static void
3239 functions_info (char *regexp, int from_tty)
3240 {
3241   symtab_symbol_info (regexp, FUNCTIONS_NAMESPACE, from_tty);
3242 }
3243
3244
3245 static void
3246 types_info (char *regexp, int from_tty)
3247 {
3248   symtab_symbol_info (regexp, TYPES_NAMESPACE, from_tty);
3249 }
3250
3251 /* Breakpoint all functions matching regular expression. */
3252
3253 void
3254 rbreak_command_wrapper (char *regexp, int from_tty)
3255 {
3256   rbreak_command (regexp, from_tty);
3257 }
3258
3259 static void
3260 rbreak_command (char *regexp, int from_tty)
3261 {
3262   struct symbol_search *ss;
3263   struct symbol_search *p;
3264   struct cleanup *old_chain;
3265
3266   search_symbols (regexp, FUNCTIONS_NAMESPACE, 0, (char **) NULL, &ss);
3267   old_chain = make_cleanup_free_search_symbols (ss);
3268
3269   for (p = ss; p != NULL; p = p->next)
3270     {
3271       if (p->msymbol == NULL)
3272         {
3273           char *string = (char *) alloca (strlen (p->symtab->filename)
3274                                           + strlen (DEPRECATED_SYMBOL_NAME (p->symbol))
3275                                           + 4);
3276           strcpy (string, p->symtab->filename);
3277           strcat (string, ":'");
3278           strcat (string, DEPRECATED_SYMBOL_NAME (p->symbol));
3279           strcat (string, "'");
3280           break_command (string, from_tty);
3281           print_symbol_info (FUNCTIONS_NAMESPACE,
3282                              p->symtab,
3283                              p->symbol,
3284                              p->block,
3285                              p->symtab->filename);
3286         }
3287       else
3288         {
3289           break_command (DEPRECATED_SYMBOL_NAME (p->msymbol), from_tty);
3290           printf_filtered ("<function, no debug info> %s;\n",
3291                            SYMBOL_PRINT_NAME (p->msymbol));
3292         }
3293     }
3294
3295   do_cleanups (old_chain);
3296 }
3297 \f
3298
3299 /* Helper routine for make_symbol_completion_list.  */
3300
3301 static int return_val_size;
3302 static int return_val_index;
3303 static char **return_val;
3304
3305 #define COMPLETION_LIST_ADD_SYMBOL(symbol, sym_text, len, text, word) \
3306   do { \
3307     if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) \
3308       /* Put only the mangled name on the list.  */ \
3309       /* Advantage:  "b foo<TAB>" completes to "b foo(int, int)" */ \
3310       /* Disadvantage:  "b foo__i<TAB>" doesn't complete.  */ \
3311       completion_list_add_name \
3312         (SYMBOL_DEMANGLED_NAME (symbol), (sym_text), (len), (text), (word)); \
3313     else \
3314       completion_list_add_name \
3315         (DEPRECATED_SYMBOL_NAME (symbol), (sym_text), (len), (text), (word)); \
3316   } while (0)
3317
3318 /*  Test to see if the symbol specified by SYMNAME (which is already
3319    demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
3320    characters.  If so, add it to the current completion list. */
3321
3322 static void
3323 completion_list_add_name (char *symname, char *sym_text, int sym_text_len,
3324                           char *text, char *word)
3325 {
3326   int newsize;
3327   int i;
3328
3329   /* clip symbols that cannot match */
3330
3331   if (strncmp (symname, sym_text, sym_text_len) != 0)
3332     {
3333       return;
3334     }
3335
3336   /* We have a match for a completion, so add SYMNAME to the current list
3337      of matches. Note that the name is moved to freshly malloc'd space. */
3338
3339   {
3340     char *new;
3341     if (word == sym_text)
3342       {
3343         new = xmalloc (strlen (symname) + 5);
3344         strcpy (new, symname);
3345       }
3346     else if (word > sym_text)
3347       {
3348         /* Return some portion of symname.  */
3349         new = xmalloc (strlen (symname) + 5);
3350         strcpy (new, symname + (word - sym_text));
3351       }
3352     else
3353       {
3354         /* Return some of SYM_TEXT plus symname.  */
3355         new = xmalloc (strlen (symname) + (sym_text - word) + 5);
3356         strncpy (new, word, sym_text - word);
3357         new[sym_text - word] = '\0';
3358         strcat (new, symname);
3359       }
3360
3361     if (return_val_index + 3 > return_val_size)
3362       {
3363         newsize = (return_val_size *= 2) * sizeof (char *);
3364         return_val = (char **) xrealloc ((char *) return_val, newsize);
3365       }
3366     return_val[return_val_index++] = new;
3367     return_val[return_val_index] = NULL;
3368   }
3369 }
3370
3371 /* Return a NULL terminated array of all symbols (regardless of class)
3372    which begin by matching TEXT.  If the answer is no symbols, then
3373    the return value is an array which contains only a NULL pointer.
3374
3375    Problem: All of the symbols have to be copied because readline frees them.
3376    I'm not going to worry about this; hopefully there won't be that many.  */
3377
3378 char **
3379 make_symbol_completion_list (char *text, char *word)
3380 {
3381   register struct symbol *sym;
3382   register struct symtab *s;
3383   register struct partial_symtab *ps;
3384   register struct minimal_symbol *msymbol;
3385   register struct objfile *objfile;
3386   register struct block *b, *surrounding_static_block = 0;
3387   register int i, j;
3388   struct partial_symbol **psym;
3389   /* The symbol we are completing on.  Points in same buffer as text.  */
3390   char *sym_text;
3391   /* Length of sym_text.  */
3392   int sym_text_len;
3393
3394   /* Now look for the symbol we are supposed to complete on.
3395      FIXME: This should be language-specific.  */
3396   {
3397     char *p;
3398     char quote_found;
3399     char *quote_pos = NULL;
3400
3401     /* First see if this is a quoted string.  */
3402     quote_found = '\0';
3403     for (p = text; *p != '\0'; ++p)
3404       {
3405         if (quote_found != '\0')
3406           {
3407             if (*p == quote_found)
3408               /* Found close quote.  */
3409               quote_found = '\0';
3410             else if (*p == '\\' && p[1] == quote_found)
3411               /* A backslash followed by the quote character
3412                  doesn't end the string.  */
3413               ++p;
3414           }
3415         else if (*p == '\'' || *p == '"')
3416           {
3417             quote_found = *p;
3418             quote_pos = p;
3419           }
3420       }
3421     if (quote_found == '\'')
3422       /* A string within single quotes can be a symbol, so complete on it.  */
3423       sym_text = quote_pos + 1;
3424     else if (quote_found == '"')
3425       /* A double-quoted string is never a symbol, nor does it make sense
3426          to complete it any other way.  */
3427       {
3428         return_val = (char **) xmalloc (sizeof (char *));
3429         return_val[0] = NULL;
3430         return return_val;
3431       }
3432     else
3433       {
3434         /* It is not a quoted string.  Break it based on the characters
3435            which are in symbols.  */
3436         while (p > text)
3437           {
3438             if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
3439               --p;
3440             else
3441               break;
3442           }
3443         sym_text = p;
3444       }
3445   }
3446
3447   sym_text_len = strlen (sym_text);
3448
3449   return_val_size = 100;
3450   return_val_index = 0;
3451   return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
3452   return_val[0] = NULL;
3453
3454   /* Look through the partial symtabs for all symbols which begin
3455      by matching SYM_TEXT.  Add each one that you find to the list.  */
3456
3457   ALL_PSYMTABS (objfile, ps)
3458   {
3459     /* If the psymtab's been read in we'll get it when we search
3460        through the blockvector.  */
3461     if (ps->readin)
3462       continue;
3463
3464     for (psym = objfile->global_psymbols.list + ps->globals_offset;
3465          psym < (objfile->global_psymbols.list + ps->globals_offset
3466                  + ps->n_global_syms);
3467          psym++)
3468       {
3469         /* If interrupted, then quit. */
3470         QUIT;
3471         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
3472       }
3473
3474     for (psym = objfile->static_psymbols.list + ps->statics_offset;
3475          psym < (objfile->static_psymbols.list + ps->statics_offset
3476                  + ps->n_static_syms);
3477          psym++)
3478       {
3479         QUIT;
3480         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
3481       }
3482   }
3483
3484   /* At this point scan through the misc symbol vectors and add each
3485      symbol you find to the list.  Eventually we want to ignore
3486      anything that isn't a text symbol (everything else will be
3487      handled by the psymtab code above).  */
3488
3489   ALL_MSYMBOLS (objfile, msymbol)
3490   {
3491     QUIT;
3492     COMPLETION_LIST_ADD_SYMBOL (msymbol, sym_text, sym_text_len, text, word);
3493   }
3494
3495   /* Search upwards from currently selected frame (so that we can
3496      complete on local vars.  */
3497
3498   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
3499     {
3500       if (!BLOCK_SUPERBLOCK (b))
3501         {
3502           surrounding_static_block = b;         /* For elmin of dups */
3503         }
3504
3505       /* Also catch fields of types defined in this places which match our
3506          text string.  Only complete on types visible from current context. */
3507
3508       ALL_BLOCK_SYMBOLS (b, i, sym)
3509         {
3510           COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3511           if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
3512             {
3513               struct type *t = SYMBOL_TYPE (sym);
3514               enum type_code c = TYPE_CODE (t);
3515
3516               if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
3517                 {
3518                   for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
3519                     {
3520                       if (TYPE_FIELD_NAME (t, j))
3521                         {
3522                           completion_list_add_name (TYPE_FIELD_NAME (t, j),
3523                                         sym_text, sym_text_len, text, word);
3524                         }
3525                     }
3526                 }
3527             }
3528         }
3529     }
3530
3531   /* Go through the symtabs and check the externs and statics for
3532      symbols which match.  */
3533
3534   ALL_SYMTABS (objfile, s)
3535   {
3536     QUIT;
3537     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3538     ALL_BLOCK_SYMBOLS (b, i, sym)
3539       {
3540         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3541       }
3542   }
3543
3544   ALL_SYMTABS (objfile, s)
3545   {
3546     QUIT;
3547     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3548     /* Don't do this block twice.  */
3549     if (b == surrounding_static_block)
3550       continue;
3551     ALL_BLOCK_SYMBOLS (b, i, sym)
3552       {
3553         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3554       }
3555   }
3556
3557   return (return_val);
3558 }
3559
3560 /* Like make_symbol_completion_list, but returns a list of symbols
3561    defined in a source file FILE.  */
3562
3563 char **
3564 make_file_symbol_completion_list (char *text, char *word, char *srcfile)
3565 {
3566   register struct symbol *sym;
3567   register struct symtab *s;
3568   register struct block *b;
3569   register int i;
3570   /* The symbol we are completing on.  Points in same buffer as text.  */
3571   char *sym_text;
3572   /* Length of sym_text.  */
3573   int sym_text_len;
3574
3575   /* Now look for the symbol we are supposed to complete on.
3576      FIXME: This should be language-specific.  */
3577   {
3578     char *p;
3579     char quote_found;
3580     char *quote_pos = NULL;
3581
3582     /* First see if this is a quoted string.  */
3583     quote_found = '\0';
3584     for (p = text; *p != '\0'; ++p)
3585       {
3586         if (quote_found != '\0')
3587           {
3588             if (*p == quote_found)
3589               /* Found close quote.  */
3590               quote_found = '\0';
3591             else if (*p == '\\' && p[1] == quote_found)
3592               /* A backslash followed by the quote character
3593                  doesn't end the string.  */
3594               ++p;
3595           }
3596         else if (*p == '\'' || *p == '"')
3597           {
3598             quote_found = *p;
3599             quote_pos = p;
3600           }
3601       }
3602     if (quote_found == '\'')
3603       /* A string within single quotes can be a symbol, so complete on it.  */
3604       sym_text = quote_pos + 1;
3605     else if (quote_found == '"')
3606       /* A double-quoted string is never a symbol, nor does it make sense
3607          to complete it any other way.  */
3608       {
3609         return_val = (char **) xmalloc (sizeof (char *));
3610         return_val[0] = NULL;
3611         return return_val;
3612       }
3613     else
3614       {
3615         /* It is not a quoted string.  Break it based on the characters
3616            which are in symbols.  */
3617         while (p > text)
3618           {
3619             if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
3620               --p;
3621             else
3622               break;
3623           }
3624         sym_text = p;
3625       }
3626   }
3627
3628   sym_text_len = strlen (sym_text);
3629
3630   return_val_size = 10;
3631   return_val_index = 0;
3632   return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
3633   return_val[0] = NULL;
3634
3635   /* Find the symtab for SRCFILE (this loads it if it was not yet read
3636      in).  */
3637   s = lookup_symtab (srcfile);
3638   if (s == NULL)
3639     {
3640       /* Maybe they typed the file with leading directories, while the
3641          symbol tables record only its basename.  */
3642       const char *tail = lbasename (srcfile);
3643
3644       if (tail > srcfile)
3645         s = lookup_symtab (tail);
3646     }
3647
3648   /* If we have no symtab for that file, return an empty list.  */
3649   if (s == NULL)
3650     return (return_val);
3651
3652   /* Go through this symtab and check the externs and statics for
3653      symbols which match.  */
3654
3655   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3656   ALL_BLOCK_SYMBOLS (b, i, sym)
3657     {
3658       COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3659     }
3660
3661   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3662   ALL_BLOCK_SYMBOLS (b, i, sym)
3663     {
3664       COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3665     }
3666
3667   return (return_val);
3668 }
3669
3670 /* A helper function for make_source_files_completion_list.  It adds
3671    another file name to a list of possible completions, growing the
3672    list as necessary.  */
3673
3674 static void
3675 add_filename_to_list (const char *fname, char *text, char *word,
3676                       char ***list, int *list_used, int *list_alloced)
3677 {
3678   char *new;
3679   size_t fnlen = strlen (fname);
3680
3681   if (*list_used + 1 >= *list_alloced)
3682     {
3683       *list_alloced *= 2;
3684       *list = (char **) xrealloc ((char *) *list,
3685                                   *list_alloced * sizeof (char *));
3686     }
3687
3688   if (word == text)
3689     {
3690       /* Return exactly fname.  */
3691       new = xmalloc (fnlen + 5);
3692       strcpy (new, fname);
3693     }
3694   else if (word > text)
3695     {
3696       /* Return some portion of fname.  */
3697       new = xmalloc (fnlen + 5);
3698       strcpy (new, fname + (word - text));
3699     }
3700   else
3701     {
3702       /* Return some of TEXT plus fname.  */
3703       new = xmalloc (fnlen + (text - word) + 5);
3704       strncpy (new, word, text - word);
3705       new[text - word] = '\0';
3706       strcat (new, fname);
3707     }
3708   (*list)[*list_used] = new;
3709   (*list)[++*list_used] = NULL;
3710 }
3711
3712 static int
3713 not_interesting_fname (const char *fname)
3714 {
3715   static const char *illegal_aliens[] = {
3716     "_globals_",        /* inserted by coff_symtab_read */
3717     NULL
3718   };
3719   int i;
3720
3721   for (i = 0; illegal_aliens[i]; i++)
3722     {
3723       if (strcmp (fname, illegal_aliens[i]) == 0)
3724         return 1;
3725     }
3726   return 0;
3727 }
3728
3729 /* Return a NULL terminated array of all source files whose names
3730    begin with matching TEXT.  The file names are looked up in the
3731    symbol tables of this program.  If the answer is no matchess, then
3732    the return value is an array which contains only a NULL pointer.  */
3733
3734 char **
3735 make_source_files_completion_list (char *text, char *word)
3736 {
3737   register struct symtab *s;
3738   register struct partial_symtab *ps;
3739   register struct objfile *objfile;
3740   int first = 1;
3741   int list_alloced = 1;
3742   int list_used = 0;
3743   size_t text_len = strlen (text);
3744   char **list = (char **) xmalloc (list_alloced * sizeof (char *));
3745   const char *base_name;
3746
3747   list[0] = NULL;
3748
3749   if (!have_full_symbols () && !have_partial_symbols ())
3750     return list;
3751
3752   ALL_SYMTABS (objfile, s)
3753     {
3754       if (not_interesting_fname (s->filename))
3755         continue;
3756       if (!filename_seen (s->filename, 1, &first)
3757 #if HAVE_DOS_BASED_FILE_SYSTEM
3758           && strncasecmp (s->filename, text, text_len) == 0
3759 #else
3760           && strncmp (s->filename, text, text_len) == 0
3761 #endif
3762           )
3763         {
3764           /* This file matches for a completion; add it to the current
3765              list of matches.  */
3766           add_filename_to_list (s->filename, text, word,
3767                                 &list, &list_used, &list_alloced);
3768         }
3769       else
3770         {
3771           /* NOTE: We allow the user to type a base name when the
3772              debug info records leading directories, but not the other
3773              way around.  This is what subroutines of breakpoint
3774              command do when they parse file names.  */
3775           base_name = lbasename (s->filename);
3776           if (base_name != s->filename
3777               && !filename_seen (base_name, 1, &first)
3778 #if HAVE_DOS_BASED_FILE_SYSTEM
3779               && strncasecmp (base_name, text, text_len) == 0
3780 #else
3781               && strncmp (base_name, text, text_len) == 0
3782 #endif
3783               )
3784             add_filename_to_list (base_name, text, word,
3785                                   &list, &list_used, &list_alloced);
3786         }
3787     }
3788
3789   ALL_PSYMTABS (objfile, ps)
3790     {
3791       if (not_interesting_fname (ps->filename))
3792         continue;
3793       if (!ps->readin)
3794         {
3795           if (!filename_seen (ps->filename, 1, &first)
3796 #if HAVE_DOS_BASED_FILE_SYSTEM
3797               && strncasecmp (ps->filename, text, text_len) == 0
3798 #else
3799               && strncmp (ps->filename, text, text_len) == 0
3800 #endif
3801               )
3802             {
3803               /* This file matches for a completion; add it to the
3804                  current list of matches.  */
3805               add_filename_to_list (ps->filename, text, word,
3806                                     &list, &list_used, &list_alloced);
3807
3808             }
3809           else
3810             {
3811               base_name = lbasename (ps->filename);
3812               if (base_name != ps->filename
3813                   && !filename_seen (base_name, 1, &first)
3814 #if HAVE_DOS_BASED_FILE_SYSTEM
3815                   && strncasecmp (base_name, text, text_len) == 0
3816 #else
3817                   && strncmp (base_name, text, text_len) == 0
3818 #endif
3819                   )
3820                 add_filename_to_list (base_name, text, word,
3821                                       &list, &list_used, &list_alloced);
3822             }
3823         }
3824     }
3825
3826   return list;
3827 }
3828
3829 /* Determine if PC is in the prologue of a function.  The prologue is the area
3830    between the first instruction of a function, and the first executable line.
3831    Returns 1 if PC *might* be in prologue, 0 if definately *not* in prologue.
3832
3833    If non-zero, func_start is where we think the prologue starts, possibly
3834    by previous examination of symbol table information.
3835  */
3836
3837 int
3838 in_prologue (CORE_ADDR pc, CORE_ADDR func_start)
3839 {
3840   struct symtab_and_line sal;
3841   CORE_ADDR func_addr, func_end;
3842
3843   /* We have several sources of information we can consult to figure
3844      this out.
3845      - Compilers usually emit line number info that marks the prologue
3846        as its own "source line".  So the ending address of that "line"
3847        is the end of the prologue.  If available, this is the most
3848        reliable method.
3849      - The minimal symbols and partial symbols, which can usually tell
3850        us the starting and ending addresses of a function.
3851      - If we know the function's start address, we can call the
3852        architecture-defined SKIP_PROLOGUE function to analyze the
3853        instruction stream and guess where the prologue ends.
3854      - Our `func_start' argument; if non-zero, this is the caller's
3855        best guess as to the function's entry point.  At the time of
3856        this writing, handle_inferior_event doesn't get this right, so
3857        it should be our last resort.  */
3858
3859   /* Consult the partial symbol table, to find which function
3860      the PC is in.  */
3861   if (! find_pc_partial_function (pc, NULL, &func_addr, &func_end))
3862     {
3863       CORE_ADDR prologue_end;
3864
3865       /* We don't even have minsym information, so fall back to using
3866          func_start, if given.  */
3867       if (! func_start)
3868         return 1;               /* We *might* be in a prologue.  */
3869
3870       prologue_end = SKIP_PROLOGUE (func_start);
3871
3872       return func_start <= pc && pc < prologue_end;
3873     }
3874
3875   /* If we have line number information for the function, that's
3876      usually pretty reliable.  */
3877   sal = find_pc_line (func_addr, 0);
3878
3879   /* Now sal describes the source line at the function's entry point,
3880      which (by convention) is the prologue.  The end of that "line",
3881      sal.end, is the end of the prologue.
3882
3883      Note that, for functions whose source code is all on a single
3884      line, the line number information doesn't always end up this way.
3885      So we must verify that our purported end-of-prologue address is
3886      *within* the function, not at its start or end.  */
3887   if (sal.line == 0
3888       || sal.end <= func_addr
3889       || func_end <= sal.end)
3890     {
3891       /* We don't have any good line number info, so use the minsym
3892          information, together with the architecture-specific prologue
3893          scanning code.  */
3894       CORE_ADDR prologue_end = SKIP_PROLOGUE (func_addr);
3895
3896       return func_addr <= pc && pc < prologue_end;
3897     }
3898
3899   /* We have line number info, and it looks good.  */
3900   return func_addr <= pc && pc < sal.end;
3901 }
3902
3903
3904 /* Begin overload resolution functions */
3905
3906 static char *
3907 remove_params (const char *demangled_name)
3908 {
3909   const char *argp;
3910   char *new_name;
3911   int depth;
3912
3913   if (demangled_name == NULL)
3914     return NULL;
3915
3916   /* First find the end of the arg list.  */
3917   argp = strrchr (demangled_name, ')');
3918   if (argp == NULL)
3919     return NULL;
3920
3921   /* Back up to the beginning.  */
3922   depth = 1;
3923
3924   while (argp-- > demangled_name)
3925     {
3926       if (*argp == ')')
3927         depth ++;
3928       else if (*argp == '(')
3929         {
3930           depth --;
3931
3932           if (depth == 0)
3933             break;
3934         }
3935     }
3936   if (depth != 0)
3937     internal_error (__FILE__, __LINE__,
3938                     "bad demangled name %s\n", demangled_name);
3939   while (argp[-1] == ' ' && argp > demangled_name)
3940     argp --;
3941
3942   new_name = xmalloc (argp - demangled_name + 1);
3943   memcpy (new_name, demangled_name, argp - demangled_name);
3944   new_name[argp - demangled_name] = '\0';
3945   return new_name;
3946 }
3947
3948 /* Helper routine for make_symbol_completion_list.  */
3949
3950 static int sym_return_val_size;
3951 static int sym_return_val_index;
3952 static struct symbol **sym_return_val;
3953
3954 /*  Test to see if the symbol specified by SYMNAME (which is already
3955    demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
3956    characters.  If so, add it to the current completion list. */
3957
3958 static void
3959 overload_list_add_symbol (struct symbol *sym, char *oload_name)
3960 {
3961   int newsize;
3962   int i;
3963   char *sym_name;
3964
3965   /* If there is no type information, we can't do anything, so skip */
3966   if (SYMBOL_TYPE (sym) == NULL)
3967     return;
3968
3969   /* skip any symbols that we've already considered. */
3970   for (i = 0; i < sym_return_val_index; ++i)
3971     if (!strcmp (DEPRECATED_SYMBOL_NAME (sym), DEPRECATED_SYMBOL_NAME (sym_return_val[i])))
3972       return;
3973
3974   /* Get the demangled name without parameters */
3975   sym_name = remove_params (SYMBOL_DEMANGLED_NAME (sym));
3976   if (!sym_name)
3977     return;
3978
3979   /* skip symbols that cannot match */
3980   if (strcmp (sym_name, oload_name) != 0)
3981     {
3982       xfree (sym_name);
3983       return;
3984     }
3985
3986   xfree (sym_name);
3987
3988   /* We have a match for an overload instance, so add SYM to the current list
3989    * of overload instances */
3990   if (sym_return_val_index + 3 > sym_return_val_size)
3991     {
3992       newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
3993       sym_return_val = (struct symbol **) xrealloc ((char *) sym_return_val, newsize);
3994     }
3995   sym_return_val[sym_return_val_index++] = sym;
3996   sym_return_val[sym_return_val_index] = NULL;
3997 }
3998
3999 /* Return a null-terminated list of pointers to function symbols that
4000  * match name of the supplied symbol FSYM.
4001  * This is used in finding all overloaded instances of a function name.
4002  * This has been modified from make_symbol_completion_list.  */
4003
4004
4005 struct symbol **
4006 make_symbol_overload_list (struct symbol *fsym)
4007 {
4008   register struct symbol *sym;
4009   register struct symtab *s;
4010   register struct partial_symtab *ps;
4011   register struct objfile *objfile;
4012   register struct block *b, *surrounding_static_block = 0;
4013   register int i;
4014   /* The name we are completing on. */
4015   char *oload_name = NULL;
4016   /* Length of name.  */
4017   int oload_name_len = 0;
4018
4019   /* Look for the symbol we are supposed to complete on.  */
4020
4021   oload_name = remove_params (SYMBOL_DEMANGLED_NAME (fsym));
4022   if (!oload_name)
4023     {
4024       sym_return_val_size = 1;
4025       sym_return_val = (struct symbol **) xmalloc (2 * sizeof (struct symbol *));
4026       sym_return_val[0] = fsym;
4027       sym_return_val[1] = NULL;
4028
4029       return sym_return_val;
4030     }
4031   oload_name_len = strlen (oload_name);
4032
4033   sym_return_val_size = 100;
4034   sym_return_val_index = 0;
4035   sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *));
4036   sym_return_val[0] = NULL;
4037
4038   /* Read in all partial symtabs containing a partial symbol named
4039      OLOAD_NAME.  */
4040
4041   ALL_PSYMTABS (objfile, ps)
4042   {
4043     struct partial_symbol **psym;
4044
4045     /* If the psymtab's been read in we'll get it when we search
4046        through the blockvector.  */
4047     if (ps->readin)
4048       continue;
4049
4050     if ((lookup_partial_symbol (ps, oload_name, NULL, 1, VAR_NAMESPACE)
4051          != NULL)
4052         || (lookup_partial_symbol (ps, oload_name, NULL, 0, VAR_NAMESPACE)
4053             != NULL))
4054       PSYMTAB_TO_SYMTAB (ps);
4055   }
4056
4057   /* Search upwards from currently selected frame (so that we can
4058      complete on local vars.  */
4059
4060   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
4061     {
4062       if (!BLOCK_SUPERBLOCK (b))
4063         {
4064           surrounding_static_block = b;         /* For elimination of dups */
4065         }
4066
4067       /* Also catch fields of types defined in this places which match our
4068          text string.  Only complete on types visible from current context. */
4069
4070       ALL_BLOCK_SYMBOLS (b, i, sym)
4071         {
4072           overload_list_add_symbol (sym, oload_name);
4073         }
4074     }
4075
4076   /* Go through the symtabs and check the externs and statics for
4077      symbols which match.  */
4078
4079   ALL_SYMTABS (objfile, s)
4080   {
4081     QUIT;
4082     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4083     ALL_BLOCK_SYMBOLS (b, i, sym)
4084       {
4085         overload_list_add_symbol (sym, oload_name);
4086       }
4087   }
4088
4089   ALL_SYMTABS (objfile, s)
4090   {
4091     QUIT;
4092     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4093     /* Don't do this block twice.  */
4094     if (b == surrounding_static_block)
4095       continue;
4096     ALL_BLOCK_SYMBOLS (b, i, sym)
4097       {
4098         overload_list_add_symbol (sym, oload_name);
4099       }
4100   }
4101
4102   xfree (oload_name);
4103
4104   return (sym_return_val);
4105 }
4106
4107 /* End of overload resolution functions */
4108 \f
4109 struct symtabs_and_lines
4110 decode_line_spec (char *string, int funfirstline)
4111 {
4112   struct symtabs_and_lines sals;
4113   struct symtab_and_line cursal;
4114   
4115   if (string == 0)
4116     error ("Empty line specification.");
4117     
4118   /* We use whatever is set as the current source line. We do not try
4119      and get a default  or it will recursively call us! */  
4120   cursal = get_current_source_symtab_and_line ();
4121   
4122   sals = decode_line_1 (&string, funfirstline,
4123                         cursal.symtab, cursal.line,
4124                         (char ***) NULL);
4125
4126   if (*string)
4127     error ("Junk at end of line specification: %s", string);
4128   return sals;
4129 }
4130
4131 /* Track MAIN */
4132 static char *name_of_main;
4133
4134 void
4135 set_main_name (const char *name)
4136 {
4137   if (name_of_main != NULL)
4138     {
4139       xfree (name_of_main);
4140       name_of_main = NULL;
4141     }
4142   if (name != NULL)
4143     {
4144       name_of_main = xstrdup (name);
4145     }
4146 }
4147
4148 char *
4149 main_name (void)
4150 {
4151   if (name_of_main != NULL)
4152     return name_of_main;
4153   else
4154     return "main";
4155 }
4156
4157
4158 void
4159 _initialize_symtab (void)
4160 {
4161   add_info ("variables", variables_info,
4162          "All global and static variable names, or those matching REGEXP.");
4163   if (dbx_commands)
4164     add_com ("whereis", class_info, variables_info,
4165          "All global and static variable names, or those matching REGEXP.");
4166
4167   add_info ("functions", functions_info,
4168             "All function names, or those matching REGEXP.");
4169
4170   
4171   /* FIXME:  This command has at least the following problems:
4172      1.  It prints builtin types (in a very strange and confusing fashion).
4173      2.  It doesn't print right, e.g. with
4174      typedef struct foo *FOO
4175      type_print prints "FOO" when we want to make it (in this situation)
4176      print "struct foo *".
4177      I also think "ptype" or "whatis" is more likely to be useful (but if
4178      there is much disagreement "info types" can be fixed).  */
4179   add_info ("types", types_info,
4180             "All type names, or those matching REGEXP.");
4181
4182   add_info ("sources", sources_info,
4183             "Source files in the program.");
4184
4185   add_com ("rbreak", class_breakpoint, rbreak_command,
4186            "Set a breakpoint for all functions matching REGEXP.");
4187
4188   if (xdb_commands)
4189     {
4190       add_com ("lf", class_info, sources_info, "Source files in the program");
4191       add_com ("lg", class_info, variables_info,
4192          "All global and static variable names, or those matching REGEXP.");
4193     }
4194
4195   /* Initialize the one built-in type that isn't language dependent... */
4196   builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
4197                                   "<unknown type>", (struct objfile *) NULL);
4198 }