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