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