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