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