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