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