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