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