* symtab.c (multiple_symbols_ask, multiple_symbols_all)
[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 const multiple_symbols_ask[] = "ask";
132 const char const multiple_symbols_all[] = "all";
133 const char const 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_value_of_this != NULL
1226       && is_a_field_of_this != NULL)
1227     {
1228       struct value *v = langdef->la_value_of_this (0);
1229
1230       if (v && check_field (v, name))
1231         {
1232           *is_a_field_of_this = 1;
1233           if (symtab != NULL)
1234             *symtab = NULL;
1235           return NULL;
1236         }
1237     }
1238
1239   /* Now do whatever is appropriate for LANGUAGE to look
1240      up static and global variables.  */
1241
1242   sym = langdef->la_lookup_symbol_nonlocal (name, linkage_name,
1243                                              block, domain, symtab);
1244   if (sym != NULL)
1245     return sym;
1246
1247   /* Now search all static file-level symbols.  Not strictly correct,
1248      but more useful than an error.  Do the symtabs first, then check
1249      the psymtabs.  If a psymtab indicates the existence of the
1250      desired name as a file-level static, then do psymtab-to-symtab
1251      conversion on the fly and return the found symbol. */
1252
1253   sym = lookup_symbol_aux_symtabs (STATIC_BLOCK, name, linkage_name,
1254                                    domain, symtab);
1255   if (sym != NULL)
1256     return sym;
1257   
1258   sym = lookup_symbol_aux_psymtabs (STATIC_BLOCK, name, linkage_name,
1259                                     domain, symtab);
1260   if (sym != NULL)
1261     return sym;
1262
1263   if (symtab != NULL)
1264     *symtab = NULL;
1265   return NULL;
1266 }
1267
1268 /* Check to see if the symbol is defined in BLOCK or its superiors.
1269    Don't search STATIC_BLOCK or GLOBAL_BLOCK.  */
1270
1271 static struct symbol *
1272 lookup_symbol_aux_local (const char *name, const char *linkage_name,
1273                          const struct block *block,
1274                          const domain_enum domain,
1275                          struct symtab **symtab)
1276 {
1277   struct symbol *sym;
1278   const struct block *static_block = block_static_block (block);
1279
1280   /* Check if either no block is specified or it's a global block.  */
1281
1282   if (static_block == NULL)
1283     return NULL;
1284
1285   while (block != static_block)
1286     {
1287       sym = lookup_symbol_aux_block (name, linkage_name, block, domain,
1288                                      symtab);
1289       if (sym != NULL)
1290         return sym;
1291       block = BLOCK_SUPERBLOCK (block);
1292     }
1293
1294   /* We've reached the static block without finding a result.  */
1295
1296   return NULL;
1297 }
1298
1299 /* Look up OBJFILE to BLOCK.  */
1300
1301 static struct objfile *
1302 lookup_objfile_from_block (const struct block *block)
1303 {
1304   struct objfile *obj;
1305   struct symtab *s;
1306
1307   if (block == NULL)
1308     return NULL;
1309
1310   block = block_global_block (block);
1311   /* Go through SYMTABS.  */
1312   ALL_SYMTABS (obj, s)
1313     if (block == BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK))
1314       return obj;
1315
1316   return NULL;
1317 }
1318
1319 /* Look up a symbol in a block; if found, locate its symtab, fixup the
1320    symbol, and set block_found appropriately.  */
1321
1322 struct symbol *
1323 lookup_symbol_aux_block (const char *name, const char *linkage_name,
1324                          const struct block *block,
1325                          const domain_enum domain,
1326                          struct symtab **symtab)
1327 {
1328   struct symbol *sym;
1329   struct objfile *objfile = NULL;
1330   struct blockvector *bv;
1331   struct block *b;
1332   struct symtab *s = NULL;
1333
1334   sym = lookup_block_symbol (block, name, linkage_name, domain);
1335   if (sym)
1336     {
1337       block_found = block;
1338       if (symtab != NULL)
1339         {
1340           /* Search the list of symtabs for one which contains the
1341              address of the start of this block.  */
1342           ALL_PRIMARY_SYMTABS (objfile, s)
1343             {
1344               bv = BLOCKVECTOR (s);
1345               b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1346               if (BLOCK_START (b) <= BLOCK_START (block)
1347                   && BLOCK_END (b) > BLOCK_START (block))
1348                 goto found;
1349             }
1350         found:
1351           *symtab = s;
1352         }
1353       
1354       return fixup_symbol_section (sym, objfile);
1355     }
1356
1357   return NULL;
1358 }
1359
1360 /* Check all global symbols in OBJFILE in symtabs and
1361    psymtabs.  */
1362
1363 struct symbol *
1364 lookup_global_symbol_from_objfile (const struct objfile *objfile,
1365                                    const char *name,
1366                                    const char *linkage_name,
1367                                    const domain_enum domain,
1368                                    struct symtab **symtab)
1369 {
1370   struct symbol *sym;
1371   struct blockvector *bv;
1372   const struct block *block;
1373   struct symtab *s;
1374   struct partial_symtab *ps;
1375
1376   /* Go through symtabs.  */
1377   ALL_OBJFILE_SYMTABS (objfile, s)
1378   {
1379     bv = BLOCKVECTOR (s);
1380     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1381     sym = lookup_block_symbol (block, name, linkage_name, domain);
1382     if (sym)
1383       {
1384         block_found = block;
1385         if (symtab != NULL)
1386           *symtab = s;
1387         return fixup_symbol_section (sym, (struct objfile *)objfile);
1388       }
1389   }
1390
1391   /* Now go through psymtabs.  */
1392   ALL_OBJFILE_PSYMTABS (objfile, ps)
1393   {
1394     if (!ps->readin
1395         && lookup_partial_symbol (ps, name, linkage_name,
1396                                   1, domain))
1397       {
1398         s = PSYMTAB_TO_SYMTAB (ps);
1399         bv = BLOCKVECTOR (s);
1400         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1401         sym = lookup_block_symbol (block, name, linkage_name, domain);
1402         if (symtab != NULL)
1403           *symtab = s;
1404         return fixup_symbol_section (sym, (struct objfile *)objfile);
1405       }
1406   }
1407
1408   if (objfile->separate_debug_objfile)
1409     return lookup_global_symbol_from_objfile (objfile->separate_debug_objfile,
1410                                               name, linkage_name, domain,
1411                                               symtab);
1412
1413   return NULL;
1414 }
1415
1416 /* Check to see if the symbol is defined in one of the symtabs.
1417    BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
1418    depending on whether or not we want to search global symbols or
1419    static symbols.  */
1420
1421 static struct symbol *
1422 lookup_symbol_aux_symtabs (int block_index,
1423                            const char *name, const char *linkage_name,
1424                            const domain_enum domain,
1425                            struct symtab **symtab)
1426 {
1427   struct symbol *sym;
1428   struct objfile *objfile;
1429   struct blockvector *bv;
1430   const struct block *block;
1431   struct symtab *s;
1432
1433   ALL_PRIMARY_SYMTABS (objfile, s)
1434   {
1435     bv = BLOCKVECTOR (s);
1436     block = BLOCKVECTOR_BLOCK (bv, block_index);
1437     sym = lookup_block_symbol (block, name, linkage_name, domain);
1438     if (sym)
1439       {
1440         block_found = block;
1441         if (symtab != NULL)
1442           *symtab = s;
1443         return fixup_symbol_section (sym, objfile);
1444       }
1445   }
1446
1447   return NULL;
1448 }
1449
1450 /* Check to see if the symbol is defined in one of the partial
1451    symtabs.  BLOCK_INDEX should be either GLOBAL_BLOCK or
1452    STATIC_BLOCK, depending on whether or not we want to search global
1453    symbols or static symbols.  */
1454
1455 static struct symbol *
1456 lookup_symbol_aux_psymtabs (int block_index, const char *name,
1457                             const char *linkage_name,
1458                             const domain_enum domain,
1459                             struct symtab **symtab)
1460 {
1461   struct symbol *sym;
1462   struct objfile *objfile;
1463   struct blockvector *bv;
1464   const struct block *block;
1465   struct partial_symtab *ps;
1466   struct symtab *s;
1467   const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
1468
1469   ALL_PSYMTABS (objfile, ps)
1470   {
1471     if (!ps->readin
1472         && lookup_partial_symbol (ps, name, linkage_name,
1473                                   psymtab_index, domain))
1474       {
1475         s = PSYMTAB_TO_SYMTAB (ps);
1476         bv = BLOCKVECTOR (s);
1477         block = BLOCKVECTOR_BLOCK (bv, block_index);
1478         sym = lookup_block_symbol (block, name, linkage_name, domain);
1479         if (!sym)
1480           {
1481             /* This shouldn't be necessary, but as a last resort try
1482                looking in the statics even though the psymtab claimed
1483                the symbol was global, or vice-versa. It's possible
1484                that the psymtab gets it wrong in some cases.  */
1485
1486             /* FIXME: carlton/2002-09-30: Should we really do that?
1487                If that happens, isn't it likely to be a GDB error, in
1488                which case we should fix the GDB error rather than
1489                silently dealing with it here?  So I'd vote for
1490                removing the check for the symbol in the other
1491                block.  */
1492             block = BLOCKVECTOR_BLOCK (bv,
1493                                        block_index == GLOBAL_BLOCK ?
1494                                        STATIC_BLOCK : GLOBAL_BLOCK);
1495             sym = lookup_block_symbol (block, name, linkage_name, domain);
1496             if (!sym)
1497               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>)."),
1498                      block_index == GLOBAL_BLOCK ? "global" : "static",
1499                      name, ps->filename, name, name);
1500           }
1501         if (symtab != NULL)
1502           *symtab = s;
1503         return fixup_symbol_section (sym, objfile);
1504       }
1505   }
1506
1507   return NULL;
1508 }
1509
1510 /* A default version of lookup_symbol_nonlocal for use by languages
1511    that can't think of anything better to do.  This implements the C
1512    lookup rules.  */
1513
1514 struct symbol *
1515 basic_lookup_symbol_nonlocal (const char *name,
1516                               const char *linkage_name,
1517                               const struct block *block,
1518                               const domain_enum domain,
1519                               struct symtab **symtab)
1520 {
1521   struct symbol *sym;
1522
1523   /* NOTE: carlton/2003-05-19: The comments below were written when
1524      this (or what turned into this) was part of lookup_symbol_aux;
1525      I'm much less worried about these questions now, since these
1526      decisions have turned out well, but I leave these comments here
1527      for posterity.  */
1528
1529   /* NOTE: carlton/2002-12-05: There is a question as to whether or
1530      not it would be appropriate to search the current global block
1531      here as well.  (That's what this code used to do before the
1532      is_a_field_of_this check was moved up.)  On the one hand, it's
1533      redundant with the lookup_symbol_aux_symtabs search that happens
1534      next.  On the other hand, if decode_line_1 is passed an argument
1535      like filename:var, then the user presumably wants 'var' to be
1536      searched for in filename.  On the third hand, there shouldn't be
1537      multiple global variables all of which are named 'var', and it's
1538      not like decode_line_1 has ever restricted its search to only
1539      global variables in a single filename.  All in all, only
1540      searching the static block here seems best: it's correct and it's
1541      cleanest.  */
1542
1543   /* NOTE: carlton/2002-12-05: There's also a possible performance
1544      issue here: if you usually search for global symbols in the
1545      current file, then it would be slightly better to search the
1546      current global block before searching all the symtabs.  But there
1547      are other factors that have a much greater effect on performance
1548      than that one, so I don't think we should worry about that for
1549      now.  */
1550
1551   sym = lookup_symbol_static (name, linkage_name, block, domain, symtab);
1552   if (sym != NULL)
1553     return sym;
1554
1555   return lookup_symbol_global (name, linkage_name, block, domain, symtab);
1556 }
1557
1558 /* Lookup a symbol in the static block associated to BLOCK, if there
1559    is one; do nothing if BLOCK is NULL or a global block.  */
1560
1561 struct symbol *
1562 lookup_symbol_static (const char *name,
1563                       const char *linkage_name,
1564                       const struct block *block,
1565                       const domain_enum domain,
1566                       struct symtab **symtab)
1567 {
1568   const struct block *static_block = block_static_block (block);
1569
1570   if (static_block != NULL)
1571     return lookup_symbol_aux_block (name, linkage_name, static_block,
1572                                     domain, symtab);
1573   else
1574     return NULL;
1575 }
1576
1577 /* Lookup a symbol in all files' global blocks (searching psymtabs if
1578    necessary).  */
1579
1580 struct symbol *
1581 lookup_symbol_global (const char *name,
1582                       const char *linkage_name,
1583                       const struct block *block,
1584                       const domain_enum domain,
1585                       struct symtab **symtab)
1586 {
1587   struct symbol *sym = NULL;
1588   struct objfile *objfile = NULL;
1589
1590   /* Call library-specific lookup procedure.  */
1591   objfile = lookup_objfile_from_block (block);
1592   if (objfile != NULL)
1593     sym = solib_global_lookup (objfile, name, linkage_name, domain, symtab);
1594   if (sym != NULL)
1595     return sym;
1596
1597   sym = lookup_symbol_aux_symtabs (GLOBAL_BLOCK, name, linkage_name,
1598                                    domain, symtab);
1599   if (sym != NULL)
1600     return sym;
1601
1602   return lookup_symbol_aux_psymtabs (GLOBAL_BLOCK, name, linkage_name,
1603                                      domain, symtab);
1604 }
1605
1606 /* Look, in partial_symtab PST, for symbol whose natural name is NAME.
1607    If LINKAGE_NAME is non-NULL, check in addition that the symbol's
1608    linkage name matches it.  Check the global symbols if GLOBAL, the
1609    static symbols if not */
1610
1611 struct partial_symbol *
1612 lookup_partial_symbol (struct partial_symtab *pst, const char *name,
1613                        const char *linkage_name, int global,
1614                        domain_enum domain)
1615 {
1616   struct partial_symbol *temp;
1617   struct partial_symbol **start, **psym;
1618   struct partial_symbol **top, **real_top, **bottom, **center;
1619   int length = (global ? pst->n_global_syms : pst->n_static_syms);
1620   int do_linear_search = 1;
1621   
1622   if (length == 0)
1623     {
1624       return (NULL);
1625     }
1626   start = (global ?
1627            pst->objfile->global_psymbols.list + pst->globals_offset :
1628            pst->objfile->static_psymbols.list + pst->statics_offset);
1629   
1630   if (global)                   /* This means we can use a binary search. */
1631     {
1632       do_linear_search = 0;
1633
1634       /* Binary search.  This search is guaranteed to end with center
1635          pointing at the earliest partial symbol whose name might be
1636          correct.  At that point *all* partial symbols with an
1637          appropriate name will be checked against the correct
1638          domain.  */
1639
1640       bottom = start;
1641       top = start + length - 1;
1642       real_top = top;
1643       while (top > bottom)
1644         {
1645           center = bottom + (top - bottom) / 2;
1646           if (!(center < top))
1647             internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
1648           if (!do_linear_search
1649               && (SYMBOL_LANGUAGE (*center) == language_java))
1650             {
1651               do_linear_search = 1;
1652             }
1653           if (strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*center), name) >= 0)
1654             {
1655               top = center;
1656             }
1657           else
1658             {
1659               bottom = center + 1;
1660             }
1661         }
1662       if (!(top == bottom))
1663         internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
1664
1665       while (top <= real_top
1666              && (linkage_name != NULL
1667                  ? strcmp (SYMBOL_LINKAGE_NAME (*top), linkage_name) == 0
1668                  : SYMBOL_MATCHES_SEARCH_NAME (*top,name)))
1669         {
1670           if (SYMBOL_DOMAIN (*top) == domain)
1671             {
1672                   return (*top);
1673             }
1674           top++;
1675         }
1676     }
1677
1678   /* Can't use a binary search or else we found during the binary search that
1679      we should also do a linear search. */
1680
1681   if (do_linear_search)
1682     {                   
1683       for (psym = start; psym < start + length; psym++)
1684         {
1685           if (domain == SYMBOL_DOMAIN (*psym))
1686             {
1687               if (linkage_name != NULL
1688                   ? strcmp (SYMBOL_LINKAGE_NAME (*psym), linkage_name) == 0
1689                   : SYMBOL_MATCHES_SEARCH_NAME (*psym, name))
1690                 {
1691                   return (*psym);
1692                 }
1693             }
1694         }
1695     }
1696
1697   return (NULL);
1698 }
1699
1700 /* Look up a type named NAME in the struct_domain.  The type returned
1701    must not be opaque -- i.e., must have at least one field
1702    defined.  */
1703
1704 struct type *
1705 lookup_transparent_type (const char *name)
1706 {
1707   return current_language->la_lookup_transparent_type (name);
1708 }
1709
1710 /* The standard implementation of lookup_transparent_type.  This code
1711    was modeled on lookup_symbol -- the parts not relevant to looking
1712    up types were just left out.  In particular it's assumed here that
1713    types are available in struct_domain and only at file-static or
1714    global blocks.  */
1715
1716 struct type *
1717 basic_lookup_transparent_type (const char *name)
1718 {
1719   struct symbol *sym;
1720   struct symtab *s = NULL;
1721   struct partial_symtab *ps;
1722   struct blockvector *bv;
1723   struct objfile *objfile;
1724   struct block *block;
1725
1726   /* Now search all the global symbols.  Do the symtab's first, then
1727      check the psymtab's. If a psymtab indicates the existence
1728      of the desired name as a global, then do psymtab-to-symtab
1729      conversion on the fly and return the found symbol.  */
1730
1731   ALL_PRIMARY_SYMTABS (objfile, s)
1732   {
1733     bv = BLOCKVECTOR (s);
1734     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1735     sym = lookup_block_symbol (block, name, NULL, STRUCT_DOMAIN);
1736     if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1737       {
1738         return SYMBOL_TYPE (sym);
1739       }
1740   }
1741
1742   ALL_PSYMTABS (objfile, ps)
1743   {
1744     if (!ps->readin && lookup_partial_symbol (ps, name, NULL,
1745                                               1, STRUCT_DOMAIN))
1746       {
1747         s = PSYMTAB_TO_SYMTAB (ps);
1748         bv = BLOCKVECTOR (s);
1749         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1750         sym = lookup_block_symbol (block, name, NULL, STRUCT_DOMAIN);
1751         if (!sym)
1752           {
1753             /* This shouldn't be necessary, but as a last resort
1754              * try looking in the statics even though the psymtab
1755              * claimed the symbol was global. It's possible that
1756              * the psymtab gets it wrong in some cases.
1757              */
1758             block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1759             sym = lookup_block_symbol (block, name, NULL, STRUCT_DOMAIN);
1760             if (!sym)
1761               error (_("Internal: global symbol `%s' found in %s psymtab but not in symtab.\n\
1762 %s may be an inlined function, or may be a template function\n\
1763 (if a template, try specifying an instantiation: %s<type>)."),
1764                      name, ps->filename, name, name);
1765           }
1766         if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1767           return SYMBOL_TYPE (sym);
1768       }
1769   }
1770
1771   /* Now search the static file-level symbols.
1772      Not strictly correct, but more useful than an error.
1773      Do the symtab's first, then
1774      check the psymtab's. If a psymtab indicates the existence
1775      of the desired name as a file-level static, then do psymtab-to-symtab
1776      conversion on the fly and return the found symbol.
1777    */
1778
1779   ALL_PRIMARY_SYMTABS (objfile, s)
1780   {
1781     bv = BLOCKVECTOR (s);
1782     block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1783     sym = lookup_block_symbol (block, name, NULL, STRUCT_DOMAIN);
1784     if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1785       {
1786         return SYMBOL_TYPE (sym);
1787       }
1788   }
1789
1790   ALL_PSYMTABS (objfile, ps)
1791   {
1792     if (!ps->readin && lookup_partial_symbol (ps, name, NULL, 0, STRUCT_DOMAIN))
1793       {
1794         s = PSYMTAB_TO_SYMTAB (ps);
1795         bv = BLOCKVECTOR (s);
1796         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1797         sym = lookup_block_symbol (block, name, NULL, STRUCT_DOMAIN);
1798         if (!sym)
1799           {
1800             /* This shouldn't be necessary, but as a last resort
1801              * try looking in the globals even though the psymtab
1802              * claimed the symbol was static. It's possible that
1803              * the psymtab gets it wrong in some cases.
1804              */
1805             block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1806             sym = lookup_block_symbol (block, name, NULL, STRUCT_DOMAIN);
1807             if (!sym)
1808               error (_("Internal: static symbol `%s' found in %s psymtab but not in symtab.\n\
1809 %s may be an inlined function, or may be a template function\n\
1810 (if a template, try specifying an instantiation: %s<type>)."),
1811                      name, ps->filename, name, name);
1812           }
1813         if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1814           return SYMBOL_TYPE (sym);
1815       }
1816   }
1817   return (struct type *) 0;
1818 }
1819
1820
1821 /* Find the psymtab containing main(). */
1822 /* FIXME:  What about languages without main() or specially linked
1823    executables that have no main() ? */
1824
1825 struct partial_symtab *
1826 find_main_psymtab (void)
1827 {
1828   struct partial_symtab *pst;
1829   struct objfile *objfile;
1830
1831   ALL_PSYMTABS (objfile, pst)
1832   {
1833     if (lookup_partial_symbol (pst, main_name (), NULL, 1, VAR_DOMAIN))
1834       {
1835         return (pst);
1836       }
1837   }
1838   return (NULL);
1839 }
1840
1841 /* Search BLOCK for symbol NAME in DOMAIN.
1842
1843    Note that if NAME is the demangled form of a C++ symbol, we will fail
1844    to find a match during the binary search of the non-encoded names, but
1845    for now we don't worry about the slight inefficiency of looking for
1846    a match we'll never find, since it will go pretty quick.  Once the
1847    binary search terminates, we drop through and do a straight linear
1848    search on the symbols.  Each symbol which is marked as being a ObjC/C++
1849    symbol (language_cplus or language_objc set) has both the encoded and 
1850    non-encoded names tested for a match.
1851
1852    If LINKAGE_NAME is non-NULL, verify that any symbol we find has this
1853    particular mangled name.
1854 */
1855
1856 struct symbol *
1857 lookup_block_symbol (const struct block *block, const char *name,
1858                      const char *linkage_name,
1859                      const domain_enum domain)
1860 {
1861   struct dict_iterator iter;
1862   struct symbol *sym;
1863
1864   if (!BLOCK_FUNCTION (block))
1865     {
1866       for (sym = dict_iter_name_first (BLOCK_DICT (block), name, &iter);
1867            sym != NULL;
1868            sym = dict_iter_name_next (name, &iter))
1869         {
1870           if (SYMBOL_DOMAIN (sym) == domain
1871               && (linkage_name != NULL
1872                   ? strcmp (SYMBOL_LINKAGE_NAME (sym), linkage_name) == 0 : 1))
1873             return sym;
1874         }
1875       return NULL;
1876     }
1877   else
1878     {
1879       /* Note that parameter symbols do not always show up last in the
1880          list; this loop makes sure to take anything else other than
1881          parameter symbols first; it only uses parameter symbols as a
1882          last resort.  Note that this only takes up extra computation
1883          time on a match.  */
1884
1885       struct symbol *sym_found = NULL;
1886
1887       for (sym = dict_iter_name_first (BLOCK_DICT (block), name, &iter);
1888            sym != NULL;
1889            sym = dict_iter_name_next (name, &iter))
1890         {
1891           if (SYMBOL_DOMAIN (sym) == domain
1892               && (linkage_name != NULL
1893                   ? strcmp (SYMBOL_LINKAGE_NAME (sym), linkage_name) == 0 : 1))
1894             {
1895               sym_found = sym;
1896               if (SYMBOL_CLASS (sym) != LOC_ARG &&
1897                   SYMBOL_CLASS (sym) != LOC_LOCAL_ARG &&
1898                   SYMBOL_CLASS (sym) != LOC_REF_ARG &&
1899                   SYMBOL_CLASS (sym) != LOC_REGPARM &&
1900                   SYMBOL_CLASS (sym) != LOC_REGPARM_ADDR &&
1901                   SYMBOL_CLASS (sym) != LOC_BASEREG_ARG &&
1902                   SYMBOL_CLASS (sym) != LOC_COMPUTED_ARG)
1903                 {
1904                   break;
1905                 }
1906             }
1907         }
1908       return (sym_found);       /* Will be NULL if not found. */
1909     }
1910 }
1911
1912 /* Find the symtab associated with PC and SECTION.  Look through the
1913    psymtabs and read in another symtab if necessary. */
1914
1915 struct symtab *
1916 find_pc_sect_symtab (CORE_ADDR pc, asection *section)
1917 {
1918   struct block *b;
1919   struct blockvector *bv;
1920   struct symtab *s = NULL;
1921   struct symtab *best_s = NULL;
1922   struct partial_symtab *ps;
1923   struct objfile *objfile;
1924   CORE_ADDR distance = 0;
1925   struct minimal_symbol *msymbol;
1926
1927   /* If we know that this is not a text address, return failure.  This is
1928      necessary because we loop based on the block's high and low code
1929      addresses, which do not include the data ranges, and because
1930      we call find_pc_sect_psymtab which has a similar restriction based
1931      on the partial_symtab's texthigh and textlow.  */
1932   msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
1933   if (msymbol
1934       && (msymbol->type == mst_data
1935           || msymbol->type == mst_bss
1936           || msymbol->type == mst_abs
1937           || msymbol->type == mst_file_data
1938           || msymbol->type == mst_file_bss))
1939     return NULL;
1940
1941   /* Search all symtabs for the one whose file contains our address, and which
1942      is the smallest of all the ones containing the address.  This is designed
1943      to deal with a case like symtab a is at 0x1000-0x2000 and 0x3000-0x4000
1944      and symtab b is at 0x2000-0x3000.  So the GLOBAL_BLOCK for a is from
1945      0x1000-0x4000, but for address 0x2345 we want to return symtab b.
1946
1947      This happens for native ecoff format, where code from included files
1948      gets its own symtab. The symtab for the included file should have
1949      been read in already via the dependency mechanism.
1950      It might be swifter to create several symtabs with the same name
1951      like xcoff does (I'm not sure).
1952
1953      It also happens for objfiles that have their functions reordered.
1954      For these, the symtab we are looking for is not necessarily read in.  */
1955
1956   ALL_PRIMARY_SYMTABS (objfile, s)
1957   {
1958     bv = BLOCKVECTOR (s);
1959     b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1960
1961     if (BLOCK_START (b) <= pc
1962         && BLOCK_END (b) > pc
1963         && (distance == 0
1964             || BLOCK_END (b) - BLOCK_START (b) < distance))
1965       {
1966         /* For an objfile that has its functions reordered,
1967            find_pc_psymtab will find the proper partial symbol table
1968            and we simply return its corresponding symtab.  */
1969         /* In order to better support objfiles that contain both
1970            stabs and coff debugging info, we continue on if a psymtab
1971            can't be found. */
1972         if ((objfile->flags & OBJF_REORDERED) && objfile->psymtabs)
1973           {
1974             ps = find_pc_sect_psymtab (pc, section);
1975             if (ps)
1976               return PSYMTAB_TO_SYMTAB (ps);
1977           }
1978         if (section != 0)
1979           {
1980             struct dict_iterator iter;
1981             struct symbol *sym = NULL;
1982
1983             ALL_BLOCK_SYMBOLS (b, iter, sym)
1984               {
1985                 fixup_symbol_section (sym, objfile);
1986                 if (matching_bfd_sections (SYMBOL_BFD_SECTION (sym), section))
1987                   break;
1988               }
1989             if (sym == NULL)
1990               continue;         /* no symbol in this symtab matches section */
1991           }
1992         distance = BLOCK_END (b) - BLOCK_START (b);
1993         best_s = s;
1994       }
1995   }
1996
1997   if (best_s != NULL)
1998     return (best_s);
1999
2000   s = NULL;
2001   ps = find_pc_sect_psymtab (pc, section);
2002   if (ps)
2003     {
2004       if (ps->readin)
2005         /* Might want to error() here (in case symtab is corrupt and
2006            will cause a core dump), but maybe we can successfully
2007            continue, so let's not.  */
2008         warning (_("\
2009 (Internal error: pc 0x%s in read in psymtab, but not in symtab.)\n"),
2010                  paddr_nz (pc));
2011       s = PSYMTAB_TO_SYMTAB (ps);
2012     }
2013   return (s);
2014 }
2015
2016 /* Find the symtab associated with PC.  Look through the psymtabs and
2017    read in another symtab if necessary.  Backward compatibility, no section */
2018
2019 struct symtab *
2020 find_pc_symtab (CORE_ADDR pc)
2021 {
2022   return find_pc_sect_symtab (pc, find_pc_mapped_section (pc));
2023 }
2024 \f
2025
2026 /* Find the source file and line number for a given PC value and SECTION.
2027    Return a structure containing a symtab pointer, a line number,
2028    and a pc range for the entire source line.
2029    The value's .pc field is NOT the specified pc.
2030    NOTCURRENT nonzero means, if specified pc is on a line boundary,
2031    use the line that ends there.  Otherwise, in that case, the line
2032    that begins there is used.  */
2033
2034 /* The big complication here is that a line may start in one file, and end just
2035    before the start of another file.  This usually occurs when you #include
2036    code in the middle of a subroutine.  To properly find the end of a line's PC
2037    range, we must search all symtabs associated with this compilation unit, and
2038    find the one whose first PC is closer than that of the next line in this
2039    symtab.  */
2040
2041 /* If it's worth the effort, we could be using a binary search.  */
2042
2043 struct symtab_and_line
2044 find_pc_sect_line (CORE_ADDR pc, struct bfd_section *section, int notcurrent)
2045 {
2046   struct symtab *s;
2047   struct linetable *l;
2048   int len;
2049   int i;
2050   struct linetable_entry *item;
2051   struct symtab_and_line val;
2052   struct blockvector *bv;
2053   struct minimal_symbol *msymbol;
2054   struct minimal_symbol *mfunsym;
2055
2056   /* Info on best line seen so far, and where it starts, and its file.  */
2057
2058   struct linetable_entry *best = NULL;
2059   CORE_ADDR best_end = 0;
2060   struct symtab *best_symtab = 0;
2061
2062   /* Store here the first line number
2063      of a file which contains the line at the smallest pc after PC.
2064      If we don't find a line whose range contains PC,
2065      we will use a line one less than this,
2066      with a range from the start of that file to the first line's pc.  */
2067   struct linetable_entry *alt = NULL;
2068   struct symtab *alt_symtab = 0;
2069
2070   /* Info on best line seen in this file.  */
2071
2072   struct linetable_entry *prev;
2073
2074   /* If this pc is not from the current frame,
2075      it is the address of the end of a call instruction.
2076      Quite likely that is the start of the following statement.
2077      But what we want is the statement containing the instruction.
2078      Fudge the pc to make sure we get that.  */
2079
2080   init_sal (&val);              /* initialize to zeroes */
2081
2082   /* It's tempting to assume that, if we can't find debugging info for
2083      any function enclosing PC, that we shouldn't search for line
2084      number info, either.  However, GAS can emit line number info for
2085      assembly files --- very helpful when debugging hand-written
2086      assembly code.  In such a case, we'd have no debug info for the
2087      function, but we would have line info.  */
2088
2089   if (notcurrent)
2090     pc -= 1;
2091
2092   /* elz: added this because this function returned the wrong
2093      information if the pc belongs to a stub (import/export)
2094      to call a shlib function. This stub would be anywhere between
2095      two functions in the target, and the line info was erroneously 
2096      taken to be the one of the line before the pc. 
2097    */
2098   /* RT: Further explanation:
2099
2100    * We have stubs (trampolines) inserted between procedures.
2101    *
2102    * Example: "shr1" exists in a shared library, and a "shr1" stub also
2103    * exists in the main image.
2104    *
2105    * In the minimal symbol table, we have a bunch of symbols
2106    * sorted by start address. The stubs are marked as "trampoline",
2107    * the others appear as text. E.g.:
2108    *
2109    *  Minimal symbol table for main image 
2110    *     main:  code for main (text symbol)
2111    *     shr1: stub  (trampoline symbol)
2112    *     foo:   code for foo (text symbol)
2113    *     ...
2114    *  Minimal symbol table for "shr1" image:
2115    *     ...
2116    *     shr1: code for shr1 (text symbol)
2117    *     ...
2118    *
2119    * So the code below is trying to detect if we are in the stub
2120    * ("shr1" stub), and if so, find the real code ("shr1" trampoline),
2121    * and if found,  do the symbolization from the real-code address
2122    * rather than the stub address.
2123    *
2124    * Assumptions being made about the minimal symbol table:
2125    *   1. lookup_minimal_symbol_by_pc() will return a trampoline only
2126    *      if we're really in the trampoline. If we're beyond it (say
2127    *      we're in "foo" in the above example), it'll have a closer 
2128    *      symbol (the "foo" text symbol for example) and will not
2129    *      return the trampoline.
2130    *   2. lookup_minimal_symbol_text() will find a real text symbol
2131    *      corresponding to the trampoline, and whose address will
2132    *      be different than the trampoline address. I put in a sanity
2133    *      check for the address being the same, to avoid an
2134    *      infinite recursion.
2135    */
2136   msymbol = lookup_minimal_symbol_by_pc (pc);
2137   if (msymbol != NULL)
2138     if (MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
2139       {
2140         mfunsym = lookup_minimal_symbol_text (SYMBOL_LINKAGE_NAME (msymbol),
2141                                               NULL);
2142         if (mfunsym == NULL)
2143           /* I eliminated this warning since it is coming out
2144            * in the following situation:
2145            * gdb shmain // test program with shared libraries
2146            * (gdb) break shr1  // function in shared lib
2147            * Warning: In stub for ...
2148            * In the above situation, the shared lib is not loaded yet, 
2149            * so of course we can't find the real func/line info,
2150            * but the "break" still works, and the warning is annoying.
2151            * So I commented out the warning. RT */
2152           /* warning ("In stub for %s; unable to find real function/line info", SYMBOL_LINKAGE_NAME (msymbol)) */ ;
2153         /* fall through */
2154         else if (SYMBOL_VALUE_ADDRESS (mfunsym) == SYMBOL_VALUE_ADDRESS (msymbol))
2155           /* Avoid infinite recursion */
2156           /* See above comment about why warning is commented out */
2157           /* warning ("In stub for %s; unable to find real function/line info", SYMBOL_LINKAGE_NAME (msymbol)) */ ;
2158         /* fall through */
2159         else
2160           return find_pc_line (SYMBOL_VALUE_ADDRESS (mfunsym), 0);
2161       }
2162
2163
2164   s = find_pc_sect_symtab (pc, section);
2165   if (!s)
2166     {
2167       /* if no symbol information, return previous pc */
2168       if (notcurrent)
2169         pc++;
2170       val.pc = pc;
2171       return val;
2172     }
2173
2174   bv = BLOCKVECTOR (s);
2175
2176   /* Look at all the symtabs that share this blockvector.
2177      They all have the same apriori range, that we found was right;
2178      but they have different line tables.  */
2179
2180   for (; s && BLOCKVECTOR (s) == bv; s = s->next)
2181     {
2182       /* Find the best line in this symtab.  */
2183       l = LINETABLE (s);
2184       if (!l)
2185         continue;
2186       len = l->nitems;
2187       if (len <= 0)
2188         {
2189           /* I think len can be zero if the symtab lacks line numbers
2190              (e.g. gcc -g1).  (Either that or the LINETABLE is NULL;
2191              I'm not sure which, and maybe it depends on the symbol
2192              reader).  */
2193           continue;
2194         }
2195
2196       prev = NULL;
2197       item = l->item;           /* Get first line info */
2198
2199       /* Is this file's first line closer than the first lines of other files?
2200          If so, record this file, and its first line, as best alternate.  */
2201       if (item->pc > pc && (!alt || item->pc < alt->pc))
2202         {
2203           alt = item;
2204           alt_symtab = s;
2205         }
2206
2207       for (i = 0; i < len; i++, item++)
2208         {
2209           /* Leave prev pointing to the linetable entry for the last line
2210              that started at or before PC.  */
2211           if (item->pc > pc)
2212             break;
2213
2214           prev = item;
2215         }
2216
2217       /* At this point, prev points at the line whose start addr is <= pc, and
2218          item points at the next line.  If we ran off the end of the linetable
2219          (pc >= start of the last line), then prev == item.  If pc < start of
2220          the first line, prev will not be set.  */
2221
2222       /* Is this file's best line closer than the best in the other files?
2223          If so, record this file, and its best line, as best so far.  Don't
2224          save prev if it represents the end of a function (i.e. line number
2225          0) instead of a real line.  */
2226
2227       if (prev && prev->line && (!best || prev->pc > best->pc))
2228         {
2229           best = prev;
2230           best_symtab = s;
2231
2232           /* Discard BEST_END if it's before the PC of the current BEST.  */
2233           if (best_end <= best->pc)
2234             best_end = 0;
2235         }
2236
2237       /* If another line (denoted by ITEM) is in the linetable and its
2238          PC is after BEST's PC, but before the current BEST_END, then
2239          use ITEM's PC as the new best_end.  */
2240       if (best && i < len && item->pc > best->pc
2241           && (best_end == 0 || best_end > item->pc))
2242         best_end = item->pc;
2243     }
2244
2245   if (!best_symtab)
2246     {
2247       /* If we didn't find any line number info, just return zeros.
2248          We used to return alt->line - 1 here, but that could be
2249          anywhere; if we don't have line number info for this PC,
2250          don't make some up.  */
2251       val.pc = pc;
2252     }
2253   else if (best->line == 0)
2254     {
2255       /* If our best fit is in a range of PC's for which no line
2256          number info is available (line number is zero) then we didn't
2257          find any valid line information. */
2258       val.pc = pc;
2259     }
2260   else
2261     {
2262       val.symtab = best_symtab;
2263       val.line = best->line;
2264       val.pc = best->pc;
2265       if (best_end && (!alt || best_end < alt->pc))
2266         val.end = best_end;
2267       else if (alt)
2268         val.end = alt->pc;
2269       else
2270         val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
2271     }
2272   val.section = section;
2273   return val;
2274 }
2275
2276 /* Backward compatibility (no section) */
2277
2278 struct symtab_and_line
2279 find_pc_line (CORE_ADDR pc, int notcurrent)
2280 {
2281   asection *section;
2282
2283   section = find_pc_overlay (pc);
2284   if (pc_in_unmapped_range (pc, section))
2285     pc = overlay_mapped_address (pc, section);
2286   return find_pc_sect_line (pc, section, notcurrent);
2287 }
2288 \f
2289 /* Find line number LINE in any symtab whose name is the same as
2290    SYMTAB.
2291
2292    If found, return the symtab that contains the linetable in which it was
2293    found, set *INDEX to the index in the linetable of the best entry
2294    found, and set *EXACT_MATCH nonzero if the value returned is an
2295    exact match.
2296
2297    If not found, return NULL.  */
2298
2299 struct symtab *
2300 find_line_symtab (struct symtab *symtab, int line, int *index, int *exact_match)
2301 {
2302   int exact;
2303
2304   /* BEST_INDEX and BEST_LINETABLE identify the smallest linenumber > LINE
2305      so far seen.  */
2306
2307   int best_index;
2308   struct linetable *best_linetable;
2309   struct symtab *best_symtab;
2310
2311   /* First try looking it up in the given symtab.  */
2312   best_linetable = LINETABLE (symtab);
2313   best_symtab = symtab;
2314   best_index = find_line_common (best_linetable, line, &exact);
2315   if (best_index < 0 || !exact)
2316     {
2317       /* Didn't find an exact match.  So we better keep looking for
2318          another symtab with the same name.  In the case of xcoff,
2319          multiple csects for one source file (produced by IBM's FORTRAN
2320          compiler) produce multiple symtabs (this is unavoidable
2321          assuming csects can be at arbitrary places in memory and that
2322          the GLOBAL_BLOCK of a symtab has a begin and end address).  */
2323
2324       /* BEST is the smallest linenumber > LINE so far seen,
2325          or 0 if none has been seen so far.
2326          BEST_INDEX and BEST_LINETABLE identify the item for it.  */
2327       int best;
2328
2329       struct objfile *objfile;
2330       struct symtab *s;
2331       struct partial_symtab *p;
2332
2333       if (best_index >= 0)
2334         best = best_linetable->item[best_index].line;
2335       else
2336         best = 0;
2337
2338       ALL_PSYMTABS (objfile, p)
2339       {
2340         if (strcmp (symtab->filename, p->filename) != 0)
2341           continue;
2342         PSYMTAB_TO_SYMTAB (p);
2343       }
2344
2345       ALL_SYMTABS (objfile, s)
2346       {
2347         struct linetable *l;
2348         int ind;
2349
2350         if (strcmp (symtab->filename, s->filename) != 0)
2351           continue;
2352         l = LINETABLE (s);
2353         ind = find_line_common (l, line, &exact);
2354         if (ind >= 0)
2355           {
2356             if (exact)
2357               {
2358                 best_index = ind;
2359                 best_linetable = l;
2360                 best_symtab = s;
2361                 goto done;
2362               }
2363             if (best == 0 || l->item[ind].line < best)
2364               {
2365                 best = l->item[ind].line;
2366                 best_index = ind;
2367                 best_linetable = l;
2368                 best_symtab = s;
2369               }
2370           }
2371       }
2372     }
2373 done:
2374   if (best_index < 0)
2375     return NULL;
2376
2377   if (index)
2378     *index = best_index;
2379   if (exact_match)
2380     *exact_match = exact;
2381
2382   return best_symtab;
2383 }
2384 \f
2385 /* Set the PC value for a given source file and line number and return true.
2386    Returns zero for invalid line number (and sets the PC to 0).
2387    The source file is specified with a struct symtab.  */
2388
2389 int
2390 find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
2391 {
2392   struct linetable *l;
2393   int ind;
2394
2395   *pc = 0;
2396   if (symtab == 0)
2397     return 0;
2398
2399   symtab = find_line_symtab (symtab, line, &ind, NULL);
2400   if (symtab != NULL)
2401     {
2402       l = LINETABLE (symtab);
2403       *pc = l->item[ind].pc;
2404       return 1;
2405     }
2406   else
2407     return 0;
2408 }
2409
2410 /* Find the range of pc values in a line.
2411    Store the starting pc of the line into *STARTPTR
2412    and the ending pc (start of next line) into *ENDPTR.
2413    Returns 1 to indicate success.
2414    Returns 0 if could not find the specified line.  */
2415
2416 int
2417 find_line_pc_range (struct symtab_and_line sal, CORE_ADDR *startptr,
2418                     CORE_ADDR *endptr)
2419 {
2420   CORE_ADDR startaddr;
2421   struct symtab_and_line found_sal;
2422
2423   startaddr = sal.pc;
2424   if (startaddr == 0 && !find_line_pc (sal.symtab, sal.line, &startaddr))
2425     return 0;
2426
2427   /* This whole function is based on address.  For example, if line 10 has
2428      two parts, one from 0x100 to 0x200 and one from 0x300 to 0x400, then
2429      "info line *0x123" should say the line goes from 0x100 to 0x200
2430      and "info line *0x355" should say the line goes from 0x300 to 0x400.
2431      This also insures that we never give a range like "starts at 0x134
2432      and ends at 0x12c".  */
2433
2434   found_sal = find_pc_sect_line (startaddr, sal.section, 0);
2435   if (found_sal.line != sal.line)
2436     {
2437       /* The specified line (sal) has zero bytes.  */
2438       *startptr = found_sal.pc;
2439       *endptr = found_sal.pc;
2440     }
2441   else
2442     {
2443       *startptr = found_sal.pc;
2444       *endptr = found_sal.end;
2445     }
2446   return 1;
2447 }
2448
2449 /* Given a line table and a line number, return the index into the line
2450    table for the pc of the nearest line whose number is >= the specified one.
2451    Return -1 if none is found.  The value is >= 0 if it is an index.
2452
2453    Set *EXACT_MATCH nonzero if the value returned is an exact match.  */
2454
2455 static int
2456 find_line_common (struct linetable *l, int lineno,
2457                   int *exact_match)
2458 {
2459   int i;
2460   int len;
2461
2462   /* BEST is the smallest linenumber > LINENO so far seen,
2463      or 0 if none has been seen so far.
2464      BEST_INDEX identifies the item for it.  */
2465
2466   int best_index = -1;
2467   int best = 0;
2468
2469   *exact_match = 0;
2470
2471   if (lineno <= 0)
2472     return -1;
2473   if (l == 0)
2474     return -1;
2475
2476   len = l->nitems;
2477   for (i = 0; i < len; i++)
2478     {
2479       struct linetable_entry *item = &(l->item[i]);
2480
2481       if (item->line == lineno)
2482         {
2483           /* Return the first (lowest address) entry which matches.  */
2484           *exact_match = 1;
2485           return i;
2486         }
2487
2488       if (item->line > lineno && (best == 0 || item->line < best))
2489         {
2490           best = item->line;
2491           best_index = i;
2492         }
2493     }
2494
2495   /* If we got here, we didn't get an exact match.  */
2496   return best_index;
2497 }
2498
2499 int
2500 find_pc_line_pc_range (CORE_ADDR pc, CORE_ADDR *startptr, CORE_ADDR *endptr)
2501 {
2502   struct symtab_and_line sal;
2503   sal = find_pc_line (pc, 0);
2504   *startptr = sal.pc;
2505   *endptr = sal.end;
2506   return sal.symtab != 0;
2507 }
2508
2509 /* Given a function symbol SYM, find the symtab and line for the start
2510    of the function.
2511    If the argument FUNFIRSTLINE is nonzero, we want the first line
2512    of real code inside the function.  */
2513
2514 struct symtab_and_line
2515 find_function_start_sal (struct symbol *sym, int funfirstline)
2516 {
2517   CORE_ADDR pc;
2518   struct symtab_and_line sal;
2519
2520   pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
2521   fixup_symbol_section (sym, NULL);
2522   if (funfirstline)
2523     {                           /* skip "first line" of function (which is actually its prologue) */
2524       asection *section = SYMBOL_BFD_SECTION (sym);
2525       /* If function is in an unmapped overlay, use its unmapped LMA
2526          address, so that gdbarch_skip_prologue has something unique to work
2527          on */
2528       if (section_is_overlay (section) &&
2529           !section_is_mapped (section))
2530         pc = overlay_unmapped_address (pc, section);
2531
2532       pc += gdbarch_deprecated_function_start_offset (current_gdbarch);
2533       pc = gdbarch_skip_prologue (current_gdbarch, pc);
2534
2535       /* For overlays, map pc back into its mapped VMA range */
2536       pc = overlay_mapped_address (pc, section);
2537     }
2538   sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
2539
2540   /* Check if gdbarch_skip_prologue left us in mid-line, and the next
2541      line is still part of the same function.  */
2542   if (sal.pc != pc
2543       && BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) <= sal.end
2544       && sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
2545     {
2546       /* First pc of next line */
2547       pc = sal.end;
2548       /* Recalculate the line number (might not be N+1).  */
2549       sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
2550     }
2551   sal.pc = pc;
2552
2553   return sal;
2554 }
2555
2556 /* If P is of the form "operator[ \t]+..." where `...' is
2557    some legitimate operator text, return a pointer to the
2558    beginning of the substring of the operator text.
2559    Otherwise, return "".  */
2560 char *
2561 operator_chars (char *p, char **end)
2562 {
2563   *end = "";
2564   if (strncmp (p, "operator", 8))
2565     return *end;
2566   p += 8;
2567
2568   /* Don't get faked out by `operator' being part of a longer
2569      identifier.  */
2570   if (isalpha (*p) || *p == '_' || *p == '$' || *p == '\0')
2571     return *end;
2572
2573   /* Allow some whitespace between `operator' and the operator symbol.  */
2574   while (*p == ' ' || *p == '\t')
2575     p++;
2576
2577   /* Recognize 'operator TYPENAME'. */
2578
2579   if (isalpha (*p) || *p == '_' || *p == '$')
2580     {
2581       char *q = p + 1;
2582       while (isalnum (*q) || *q == '_' || *q == '$')
2583         q++;
2584       *end = q;
2585       return p;
2586     }
2587
2588   while (*p)
2589     switch (*p)
2590       {
2591       case '\\':                        /* regexp quoting */
2592         if (p[1] == '*')
2593           {
2594             if (p[2] == '=')    /* 'operator\*=' */
2595               *end = p + 3;
2596             else                        /* 'operator\*'  */
2597               *end = p + 2;
2598             return p;
2599           }
2600         else if (p[1] == '[')
2601           {
2602             if (p[2] == ']')
2603               error (_("mismatched quoting on brackets, try 'operator\\[\\]'"));
2604             else if (p[2] == '\\' && p[3] == ']')
2605               {
2606                 *end = p + 4;   /* 'operator\[\]' */
2607                 return p;
2608               }
2609             else
2610               error (_("nothing is allowed between '[' and ']'"));
2611           }
2612         else 
2613           {
2614             /* Gratuitous qoute: skip it and move on. */
2615             p++;
2616             continue;
2617           }
2618         break;
2619       case '!':
2620       case '=':
2621       case '*':
2622       case '/':
2623       case '%':
2624       case '^':
2625         if (p[1] == '=')
2626           *end = p + 2;
2627         else
2628           *end = p + 1;
2629         return p;
2630       case '<':
2631       case '>':
2632       case '+':
2633       case '-':
2634       case '&':
2635       case '|':
2636         if (p[0] == '-' && p[1] == '>')
2637           {
2638             /* Struct pointer member operator 'operator->'. */
2639             if (p[2] == '*')
2640               {
2641                 *end = p + 3;   /* 'operator->*' */
2642                 return p;
2643               }
2644             else if (p[2] == '\\')
2645               {
2646                 *end = p + 4;   /* Hopefully 'operator->\*' */
2647                 return p;
2648               }
2649             else
2650               {
2651                 *end = p + 2;   /* 'operator->' */
2652                 return p;
2653               }
2654           }
2655         if (p[1] == '=' || p[1] == p[0])
2656           *end = p + 2;
2657         else
2658           *end = p + 1;
2659         return p;
2660       case '~':
2661       case ',':
2662         *end = p + 1;
2663         return p;
2664       case '(':
2665         if (p[1] != ')')
2666           error (_("`operator ()' must be specified without whitespace in `()'"));
2667         *end = p + 2;
2668         return p;
2669       case '?':
2670         if (p[1] != ':')
2671           error (_("`operator ?:' must be specified without whitespace in `?:'"));
2672         *end = p + 2;
2673         return p;
2674       case '[':
2675         if (p[1] != ']')
2676           error (_("`operator []' must be specified without whitespace in `[]'"));
2677         *end = p + 2;
2678         return p;
2679       default:
2680         error (_("`operator %s' not supported"), p);
2681         break;
2682       }
2683
2684   *end = "";
2685   return *end;
2686 }
2687 \f
2688
2689 /* If FILE is not already in the table of files, return zero;
2690    otherwise return non-zero.  Optionally add FILE to the table if ADD
2691    is non-zero.  If *FIRST is non-zero, forget the old table
2692    contents.  */
2693 static int
2694 filename_seen (const char *file, int add, int *first)
2695 {
2696   /* Table of files seen so far.  */
2697   static const char **tab = NULL;
2698   /* Allocated size of tab in elements.
2699      Start with one 256-byte block (when using GNU malloc.c).
2700      24 is the malloc overhead when range checking is in effect.  */
2701   static int tab_alloc_size = (256 - 24) / sizeof (char *);
2702   /* Current size of tab in elements.  */
2703   static int tab_cur_size;
2704   const char **p;
2705
2706   if (*first)
2707     {
2708       if (tab == NULL)
2709         tab = (const char **) xmalloc (tab_alloc_size * sizeof (*tab));
2710       tab_cur_size = 0;
2711     }
2712
2713   /* Is FILE in tab?  */
2714   for (p = tab; p < tab + tab_cur_size; p++)
2715     if (strcmp (*p, file) == 0)
2716       return 1;
2717
2718   /* No; maybe add it to tab.  */
2719   if (add)
2720     {
2721       if (tab_cur_size == tab_alloc_size)
2722         {
2723           tab_alloc_size *= 2;
2724           tab = (const char **) xrealloc ((char *) tab,
2725                                           tab_alloc_size * sizeof (*tab));
2726         }
2727       tab[tab_cur_size++] = file;
2728     }
2729
2730   return 0;
2731 }
2732
2733 /* Slave routine for sources_info.  Force line breaks at ,'s.
2734    NAME is the name to print and *FIRST is nonzero if this is the first
2735    name printed.  Set *FIRST to zero.  */
2736 static void
2737 output_source_filename (const char *name, int *first)
2738 {
2739   /* Since a single source file can result in several partial symbol
2740      tables, we need to avoid printing it more than once.  Note: if
2741      some of the psymtabs are read in and some are not, it gets
2742      printed both under "Source files for which symbols have been
2743      read" and "Source files for which symbols will be read in on
2744      demand".  I consider this a reasonable way to deal with the
2745      situation.  I'm not sure whether this can also happen for
2746      symtabs; it doesn't hurt to check.  */
2747
2748   /* Was NAME already seen?  */
2749   if (filename_seen (name, 1, first))
2750     {
2751       /* Yes; don't print it again.  */
2752       return;
2753     }
2754   /* No; print it and reset *FIRST.  */
2755   if (*first)
2756     {
2757       *first = 0;
2758     }
2759   else
2760     {
2761       printf_filtered (", ");
2762     }
2763
2764   wrap_here ("");
2765   fputs_filtered (name, gdb_stdout);
2766 }
2767
2768 static void
2769 sources_info (char *ignore, int from_tty)
2770 {
2771   struct symtab *s;
2772   struct partial_symtab *ps;
2773   struct objfile *objfile;
2774   int first;
2775
2776   if (!have_full_symbols () && !have_partial_symbols ())
2777     {
2778       error (_("No symbol table is loaded.  Use the \"file\" command."));
2779     }
2780
2781   printf_filtered ("Source files for which symbols have been read in:\n\n");
2782
2783   first = 1;
2784   ALL_SYMTABS (objfile, s)
2785   {
2786     const char *fullname = symtab_to_fullname (s);
2787     output_source_filename (fullname ? fullname : s->filename, &first);
2788   }
2789   printf_filtered ("\n\n");
2790
2791   printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2792
2793   first = 1;
2794   ALL_PSYMTABS (objfile, ps)
2795   {
2796     if (!ps->readin)
2797       {
2798         const char *fullname = psymtab_to_fullname (ps);
2799         output_source_filename (fullname ? fullname : ps->filename, &first);
2800       }
2801   }
2802   printf_filtered ("\n");
2803 }
2804
2805 static int
2806 file_matches (char *file, char *files[], int nfiles)
2807 {
2808   int i;
2809
2810   if (file != NULL && nfiles != 0)
2811     {
2812       for (i = 0; i < nfiles; i++)
2813         {
2814           if (strcmp (files[i], lbasename (file)) == 0)
2815             return 1;
2816         }
2817     }
2818   else if (nfiles == 0)
2819     return 1;
2820   return 0;
2821 }
2822
2823 /* Free any memory associated with a search. */
2824 void
2825 free_search_symbols (struct symbol_search *symbols)
2826 {
2827   struct symbol_search *p;
2828   struct symbol_search *next;
2829
2830   for (p = symbols; p != NULL; p = next)
2831     {
2832       next = p->next;
2833       xfree (p);
2834     }
2835 }
2836
2837 static void
2838 do_free_search_symbols_cleanup (void *symbols)
2839 {
2840   free_search_symbols (symbols);
2841 }
2842
2843 struct cleanup *
2844 make_cleanup_free_search_symbols (struct symbol_search *symbols)
2845 {
2846   return make_cleanup (do_free_search_symbols_cleanup, symbols);
2847 }
2848
2849 /* Helper function for sort_search_symbols and qsort.  Can only
2850    sort symbols, not minimal symbols.  */
2851 static int
2852 compare_search_syms (const void *sa, const void *sb)
2853 {
2854   struct symbol_search **sym_a = (struct symbol_search **) sa;
2855   struct symbol_search **sym_b = (struct symbol_search **) sb;
2856
2857   return strcmp (SYMBOL_PRINT_NAME ((*sym_a)->symbol),
2858                  SYMBOL_PRINT_NAME ((*sym_b)->symbol));
2859 }
2860
2861 /* Sort the ``nfound'' symbols in the list after prevtail.  Leave
2862    prevtail where it is, but update its next pointer to point to
2863    the first of the sorted symbols.  */
2864 static struct symbol_search *
2865 sort_search_symbols (struct symbol_search *prevtail, int nfound)
2866 {
2867   struct symbol_search **symbols, *symp, *old_next;
2868   int i;
2869
2870   symbols = (struct symbol_search **) xmalloc (sizeof (struct symbol_search *)
2871                                                * nfound);
2872   symp = prevtail->next;
2873   for (i = 0; i < nfound; i++)
2874     {
2875       symbols[i] = symp;
2876       symp = symp->next;
2877     }
2878   /* Generally NULL.  */
2879   old_next = symp;
2880
2881   qsort (symbols, nfound, sizeof (struct symbol_search *),
2882          compare_search_syms);
2883
2884   symp = prevtail;
2885   for (i = 0; i < nfound; i++)
2886     {
2887       symp->next = symbols[i];
2888       symp = symp->next;
2889     }
2890   symp->next = old_next;
2891
2892   xfree (symbols);
2893   return symp;
2894 }
2895
2896 /* Search the symbol table for matches to the regular expression REGEXP,
2897    returning the results in *MATCHES.
2898
2899    Only symbols of KIND are searched:
2900    FUNCTIONS_DOMAIN - search all functions
2901    TYPES_DOMAIN     - search all type names
2902    METHODS_DOMAIN   - search all methods NOT IMPLEMENTED
2903    VARIABLES_DOMAIN - search all symbols, excluding functions, type names,
2904    and constants (enums)
2905
2906    free_search_symbols should be called when *MATCHES is no longer needed.
2907
2908    The results are sorted locally; each symtab's global and static blocks are
2909    separately alphabetized.
2910  */
2911 void
2912 search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
2913                 struct symbol_search **matches)
2914 {
2915   struct symtab *s;
2916   struct partial_symtab *ps;
2917   struct blockvector *bv;
2918   struct block *b;
2919   int i = 0;
2920   struct dict_iterator iter;
2921   struct symbol *sym;
2922   struct partial_symbol **psym;
2923   struct objfile *objfile;
2924   struct minimal_symbol *msymbol;
2925   char *val;
2926   int found_misc = 0;
2927   static enum minimal_symbol_type types[]
2928   =
2929   {mst_data, mst_text, mst_abs, mst_unknown};
2930   static enum minimal_symbol_type types2[]
2931   =
2932   {mst_bss, mst_file_text, mst_abs, mst_unknown};
2933   static enum minimal_symbol_type types3[]
2934   =
2935   {mst_file_data, mst_solib_trampoline, mst_abs, mst_unknown};
2936   static enum minimal_symbol_type types4[]
2937   =
2938   {mst_file_bss, mst_text, mst_abs, mst_unknown};
2939   enum minimal_symbol_type ourtype;
2940   enum minimal_symbol_type ourtype2;
2941   enum minimal_symbol_type ourtype3;
2942   enum minimal_symbol_type ourtype4;
2943   struct symbol_search *sr;
2944   struct symbol_search *psr;
2945   struct symbol_search *tail;
2946   struct cleanup *old_chain = NULL;
2947
2948   if (kind < VARIABLES_DOMAIN)
2949     error (_("must search on specific domain"));
2950
2951   ourtype = types[(int) (kind - VARIABLES_DOMAIN)];
2952   ourtype2 = types2[(int) (kind - VARIABLES_DOMAIN)];
2953   ourtype3 = types3[(int) (kind - VARIABLES_DOMAIN)];
2954   ourtype4 = types4[(int) (kind - VARIABLES_DOMAIN)];
2955
2956   sr = *matches = NULL;
2957   tail = NULL;
2958
2959   if (regexp != NULL)
2960     {
2961       /* Make sure spacing is right for C++ operators.
2962          This is just a courtesy to make the matching less sensitive
2963          to how many spaces the user leaves between 'operator'
2964          and <TYPENAME> or <OPERATOR>. */
2965       char *opend;
2966       char *opname = operator_chars (regexp, &opend);
2967       if (*opname)
2968         {
2969           int fix = -1;         /* -1 means ok; otherwise number of spaces needed. */
2970           if (isalpha (*opname) || *opname == '_' || *opname == '$')
2971             {
2972               /* There should 1 space between 'operator' and 'TYPENAME'. */
2973               if (opname[-1] != ' ' || opname[-2] == ' ')
2974                 fix = 1;
2975             }
2976           else
2977             {
2978               /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2979               if (opname[-1] == ' ')
2980                 fix = 0;
2981             }
2982           /* If wrong number of spaces, fix it. */
2983           if (fix >= 0)
2984             {
2985               char *tmp = (char *) alloca (8 + fix + strlen (opname) + 1);
2986               sprintf (tmp, "operator%.*s%s", fix, " ", opname);
2987               regexp = tmp;
2988             }
2989         }
2990
2991       if (0 != (val = re_comp (regexp)))
2992         error (_("Invalid regexp (%s): %s"), val, regexp);
2993     }
2994
2995   /* Search through the partial symtabs *first* for all symbols
2996      matching the regexp.  That way we don't have to reproduce all of
2997      the machinery below. */
2998
2999   ALL_PSYMTABS (objfile, ps)
3000   {
3001     struct partial_symbol **bound, **gbound, **sbound;
3002     int keep_going = 1;
3003
3004     if (ps->readin)
3005       continue;
3006
3007     gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
3008     sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
3009     bound = gbound;
3010
3011     /* Go through all of the symbols stored in a partial
3012        symtab in one loop. */
3013     psym = objfile->global_psymbols.list + ps->globals_offset;
3014     while (keep_going)
3015       {
3016         if (psym >= bound)
3017           {
3018             if (bound == gbound && ps->n_static_syms != 0)
3019               {
3020                 psym = objfile->static_psymbols.list + ps->statics_offset;
3021                 bound = sbound;
3022               }
3023             else
3024               keep_going = 0;
3025             continue;
3026           }
3027         else
3028           {
3029             QUIT;
3030
3031             /* If it would match (logic taken from loop below)
3032                load the file and go on to the next one.  We check the
3033                filename here, but that's a bit bogus: we don't know
3034                what file it really comes from until we have full
3035                symtabs.  The symbol might be in a header file included by
3036                this psymtab.  This only affects Insight.  */
3037             if (file_matches (ps->filename, files, nfiles)
3038                 && ((regexp == NULL
3039                      || re_exec (SYMBOL_NATURAL_NAME (*psym)) != 0)
3040                     && ((kind == VARIABLES_DOMAIN && SYMBOL_CLASS (*psym) != LOC_TYPEDEF
3041                          && SYMBOL_CLASS (*psym) != LOC_BLOCK)
3042                         || (kind == FUNCTIONS_DOMAIN && SYMBOL_CLASS (*psym) == LOC_BLOCK)
3043                         || (kind == TYPES_DOMAIN && SYMBOL_CLASS (*psym) == LOC_TYPEDEF)
3044                         || (kind == METHODS_DOMAIN && SYMBOL_CLASS (*psym) == LOC_BLOCK))))
3045               {
3046                 PSYMTAB_TO_SYMTAB (ps);
3047                 keep_going = 0;
3048               }
3049           }
3050         psym++;
3051       }
3052   }
3053
3054   /* Here, we search through the minimal symbol tables for functions
3055      and variables that match, and force their symbols to be read.
3056      This is in particular necessary for demangled variable names,
3057      which are no longer put into the partial symbol tables.
3058      The symbol will then be found during the scan of symtabs below.
3059
3060      For functions, find_pc_symtab should succeed if we have debug info
3061      for the function, for variables we have to call lookup_symbol
3062      to determine if the variable has debug info.
3063      If the lookup fails, set found_misc so that we will rescan to print
3064      any matching symbols without debug info.
3065    */
3066
3067   if (nfiles == 0 && (kind == VARIABLES_DOMAIN || kind == FUNCTIONS_DOMAIN))
3068     {
3069       ALL_MSYMBOLS (objfile, msymbol)
3070       {
3071         if (MSYMBOL_TYPE (msymbol) == ourtype ||
3072             MSYMBOL_TYPE (msymbol) == ourtype2 ||
3073             MSYMBOL_TYPE (msymbol) == ourtype3 ||
3074             MSYMBOL_TYPE (msymbol) == ourtype4)
3075           {
3076             if (regexp == NULL
3077                 || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0)
3078               {
3079                 if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
3080                   {
3081                     /* FIXME: carlton/2003-02-04: Given that the
3082                        semantics of lookup_symbol keeps on changing
3083                        slightly, it would be a nice idea if we had a
3084                        function lookup_symbol_minsym that found the
3085                        symbol associated to a given minimal symbol (if
3086                        any).  */
3087                     if (kind == FUNCTIONS_DOMAIN
3088                         || lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
3089                                           (struct block *) NULL,
3090                                           VAR_DOMAIN,
3091                                           0, (struct symtab **) NULL)
3092                         == NULL)
3093                       found_misc = 1;
3094                   }
3095               }
3096           }
3097       }
3098     }
3099
3100   ALL_PRIMARY_SYMTABS (objfile, s)
3101   {
3102     bv = BLOCKVECTOR (s);
3103       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
3104         {
3105           struct symbol_search *prevtail = tail;
3106           int nfound = 0;
3107           b = BLOCKVECTOR_BLOCK (bv, i);
3108           ALL_BLOCK_SYMBOLS (b, iter, sym)
3109             {
3110               struct symtab *real_symtab = SYMBOL_SYMTAB (sym);
3111               QUIT;
3112
3113               if (file_matches (real_symtab->filename, files, nfiles)
3114                   && ((regexp == NULL
3115                        || re_exec (SYMBOL_NATURAL_NAME (sym)) != 0)
3116                       && ((kind == VARIABLES_DOMAIN && SYMBOL_CLASS (sym) != LOC_TYPEDEF
3117                            && SYMBOL_CLASS (sym) != LOC_BLOCK
3118                            && SYMBOL_CLASS (sym) != LOC_CONST)
3119                           || (kind == FUNCTIONS_DOMAIN && SYMBOL_CLASS (sym) == LOC_BLOCK)
3120                           || (kind == TYPES_DOMAIN && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
3121                           || (kind == METHODS_DOMAIN && SYMBOL_CLASS (sym) == LOC_BLOCK))))
3122                 {
3123                   /* match */
3124                   psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
3125                   psr->block = i;
3126                   psr->symtab = real_symtab;
3127                   psr->symbol = sym;
3128                   psr->msymbol = NULL;
3129                   psr->next = NULL;
3130                   if (tail == NULL)
3131                     sr = psr;
3132                   else
3133                     tail->next = psr;
3134                   tail = psr;
3135                   nfound ++;
3136                 }
3137             }
3138           if (nfound > 0)
3139             {
3140               if (prevtail == NULL)
3141                 {
3142                   struct symbol_search dummy;
3143
3144                   dummy.next = sr;
3145                   tail = sort_search_symbols (&dummy, nfound);
3146                   sr = dummy.next;
3147
3148                   old_chain = make_cleanup_free_search_symbols (sr);
3149                 }
3150               else
3151                 tail = sort_search_symbols (prevtail, nfound);
3152             }
3153         }
3154   }
3155
3156   /* If there are no eyes, avoid all contact.  I mean, if there are
3157      no debug symbols, then print directly from the msymbol_vector.  */
3158
3159   if (found_misc || kind != FUNCTIONS_DOMAIN)
3160     {
3161       ALL_MSYMBOLS (objfile, msymbol)
3162       {
3163         if (MSYMBOL_TYPE (msymbol) == ourtype ||
3164             MSYMBOL_TYPE (msymbol) == ourtype2 ||
3165             MSYMBOL_TYPE (msymbol) == ourtype3 ||
3166             MSYMBOL_TYPE (msymbol) == ourtype4)
3167           {
3168             if (regexp == NULL
3169                 || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0)
3170               {
3171                 /* Functions:  Look up by address. */
3172                 if (kind != FUNCTIONS_DOMAIN ||
3173                     (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
3174                   {
3175                     /* Variables/Absolutes:  Look up by name */
3176                     if (lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
3177                                        (struct block *) NULL, VAR_DOMAIN,
3178                                        0, (struct symtab **) NULL) == NULL)
3179                       {
3180                         /* match */
3181                         psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
3182                         psr->block = i;
3183                         psr->msymbol = msymbol;
3184                         psr->symtab = NULL;
3185                         psr->symbol = NULL;
3186                         psr->next = NULL;
3187                         if (tail == NULL)
3188                           {
3189                             sr = psr;
3190                             old_chain = make_cleanup_free_search_symbols (sr);
3191                           }
3192                         else
3193                           tail->next = psr;
3194                         tail = psr;
3195                       }
3196                   }
3197               }
3198           }
3199       }
3200     }
3201
3202   *matches = sr;
3203   if (sr != NULL)
3204     discard_cleanups (old_chain);
3205 }
3206
3207 /* Helper function for symtab_symbol_info, this function uses
3208    the data returned from search_symbols() to print information
3209    regarding the match to gdb_stdout.
3210  */
3211 static void
3212 print_symbol_info (domain_enum kind, struct symtab *s, struct symbol *sym,
3213                    int block, char *last)
3214 {
3215   if (last == NULL || strcmp (last, s->filename) != 0)
3216     {
3217       fputs_filtered ("\nFile ", gdb_stdout);
3218       fputs_filtered (s->filename, gdb_stdout);
3219       fputs_filtered (":\n", gdb_stdout);
3220     }
3221
3222   if (kind != TYPES_DOMAIN && block == STATIC_BLOCK)
3223     printf_filtered ("static ");
3224
3225   /* Typedef that is not a C++ class */
3226   if (kind == TYPES_DOMAIN
3227       && SYMBOL_DOMAIN (sym) != STRUCT_DOMAIN)
3228     typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
3229   /* variable, func, or typedef-that-is-c++-class */
3230   else if (kind < TYPES_DOMAIN ||
3231            (kind == TYPES_DOMAIN &&
3232             SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
3233     {
3234       type_print (SYMBOL_TYPE (sym),
3235                   (SYMBOL_CLASS (sym) == LOC_TYPEDEF
3236                    ? "" : SYMBOL_PRINT_NAME (sym)),
3237                   gdb_stdout, 0);
3238
3239       printf_filtered (";\n");
3240     }
3241 }
3242
3243 /* This help function for symtab_symbol_info() prints information
3244    for non-debugging symbols to gdb_stdout.
3245  */
3246 static void
3247 print_msymbol_info (struct minimal_symbol *msymbol)
3248 {
3249   char *tmp;
3250
3251   if (gdbarch_addr_bit (current_gdbarch) <= 32)
3252     tmp = hex_string_custom (SYMBOL_VALUE_ADDRESS (msymbol)
3253                              & (CORE_ADDR) 0xffffffff,
3254                              8);
3255   else
3256     tmp = hex_string_custom (SYMBOL_VALUE_ADDRESS (msymbol),
3257                              16);
3258   printf_filtered ("%s  %s\n",
3259                    tmp, SYMBOL_PRINT_NAME (msymbol));
3260 }
3261
3262 /* This is the guts of the commands "info functions", "info types", and
3263    "info variables". It calls search_symbols to find all matches and then
3264    print_[m]symbol_info to print out some useful information about the
3265    matches.
3266  */
3267 static void
3268 symtab_symbol_info (char *regexp, domain_enum kind, int from_tty)
3269 {
3270   static char *classnames[]
3271   =
3272   {"variable", "function", "type", "method"};
3273   struct symbol_search *symbols;
3274   struct symbol_search *p;
3275   struct cleanup *old_chain;
3276   char *last_filename = NULL;
3277   int first = 1;
3278
3279   /* must make sure that if we're interrupted, symbols gets freed */
3280   search_symbols (regexp, kind, 0, (char **) NULL, &symbols);
3281   old_chain = make_cleanup_free_search_symbols (symbols);
3282
3283   printf_filtered (regexp
3284                    ? "All %ss matching regular expression \"%s\":\n"
3285                    : "All defined %ss:\n",
3286                    classnames[(int) (kind - VARIABLES_DOMAIN)], regexp);
3287
3288   for (p = symbols; p != NULL; p = p->next)
3289     {
3290       QUIT;
3291
3292       if (p->msymbol != NULL)
3293         {
3294           if (first)
3295             {
3296               printf_filtered ("\nNon-debugging symbols:\n");
3297               first = 0;
3298             }
3299           print_msymbol_info (p->msymbol);
3300         }
3301       else
3302         {
3303           print_symbol_info (kind,
3304                              p->symtab,
3305                              p->symbol,
3306                              p->block,
3307                              last_filename);
3308           last_filename = p->symtab->filename;
3309         }
3310     }
3311
3312   do_cleanups (old_chain);
3313 }
3314
3315 static void
3316 variables_info (char *regexp, int from_tty)
3317 {
3318   symtab_symbol_info (regexp, VARIABLES_DOMAIN, from_tty);
3319 }
3320
3321 static void
3322 functions_info (char *regexp, int from_tty)
3323 {
3324   symtab_symbol_info (regexp, FUNCTIONS_DOMAIN, from_tty);
3325 }
3326
3327
3328 static void
3329 types_info (char *regexp, int from_tty)
3330 {
3331   symtab_symbol_info (regexp, TYPES_DOMAIN, from_tty);
3332 }
3333
3334 /* Breakpoint all functions matching regular expression. */
3335
3336 void
3337 rbreak_command_wrapper (char *regexp, int from_tty)
3338 {
3339   rbreak_command (regexp, from_tty);
3340 }
3341
3342 static void
3343 rbreak_command (char *regexp, int from_tty)
3344 {
3345   struct symbol_search *ss;
3346   struct symbol_search *p;
3347   struct cleanup *old_chain;
3348
3349   search_symbols (regexp, FUNCTIONS_DOMAIN, 0, (char **) NULL, &ss);
3350   old_chain = make_cleanup_free_search_symbols (ss);
3351
3352   for (p = ss; p != NULL; p = p->next)
3353     {
3354       if (p->msymbol == NULL)
3355         {
3356           char *string = alloca (strlen (p->symtab->filename)
3357                                  + strlen (SYMBOL_LINKAGE_NAME (p->symbol))
3358                                  + 4);
3359           strcpy (string, p->symtab->filename);
3360           strcat (string, ":'");
3361           strcat (string, SYMBOL_LINKAGE_NAME (p->symbol));
3362           strcat (string, "'");
3363           break_command (string, from_tty);
3364           print_symbol_info (FUNCTIONS_DOMAIN,
3365                              p->symtab,
3366                              p->symbol,
3367                              p->block,
3368                              p->symtab->filename);
3369         }
3370       else
3371         {
3372           char *string = alloca (strlen (SYMBOL_LINKAGE_NAME (p->msymbol))
3373                                  + 3);
3374           strcpy (string, "'");
3375           strcat (string, SYMBOL_LINKAGE_NAME (p->msymbol));
3376           strcat (string, "'");
3377
3378           break_command (string, from_tty);
3379           printf_filtered ("<function, no debug info> %s;\n",
3380                            SYMBOL_PRINT_NAME (p->msymbol));
3381         }
3382     }
3383
3384   do_cleanups (old_chain);
3385 }
3386 \f
3387
3388 /* Helper routine for make_symbol_completion_list.  */
3389
3390 static int return_val_size;
3391 static int return_val_index;
3392 static char **return_val;
3393
3394 #define COMPLETION_LIST_ADD_SYMBOL(symbol, sym_text, len, text, word) \
3395       completion_list_add_name \
3396         (SYMBOL_NATURAL_NAME (symbol), (sym_text), (len), (text), (word))
3397
3398 /*  Test to see if the symbol specified by SYMNAME (which is already
3399    demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
3400    characters.  If so, add it to the current completion list. */
3401
3402 static void
3403 completion_list_add_name (char *symname, char *sym_text, int sym_text_len,
3404                           char *text, char *word)
3405 {
3406   int newsize;
3407   int i;
3408
3409   /* clip symbols that cannot match */
3410
3411   if (strncmp (symname, sym_text, sym_text_len) != 0)
3412     {
3413       return;
3414     }
3415
3416   /* We have a match for a completion, so add SYMNAME to the current list
3417      of matches. Note that the name is moved to freshly malloc'd space. */
3418
3419   {
3420     char *new;
3421     if (word == sym_text)
3422       {
3423         new = xmalloc (strlen (symname) + 5);
3424         strcpy (new, symname);
3425       }
3426     else if (word > sym_text)
3427       {
3428         /* Return some portion of symname.  */
3429         new = xmalloc (strlen (symname) + 5);
3430         strcpy (new, symname + (word - sym_text));
3431       }
3432     else
3433       {
3434         /* Return some of SYM_TEXT plus symname.  */
3435         new = xmalloc (strlen (symname) + (sym_text - word) + 5);
3436         strncpy (new, word, sym_text - word);
3437         new[sym_text - word] = '\0';
3438         strcat (new, symname);
3439       }
3440
3441     if (return_val_index + 3 > return_val_size)
3442       {
3443         newsize = (return_val_size *= 2) * sizeof (char *);
3444         return_val = (char **) xrealloc ((char *) return_val, newsize);
3445       }
3446     return_val[return_val_index++] = new;
3447     return_val[return_val_index] = NULL;
3448   }
3449 }
3450
3451 /* ObjC: In case we are completing on a selector, look as the msymbol
3452    again and feed all the selectors into the mill.  */
3453
3454 static void
3455 completion_list_objc_symbol (struct minimal_symbol *msymbol, char *sym_text,
3456                              int sym_text_len, char *text, char *word)
3457 {
3458   static char *tmp = NULL;
3459   static unsigned int tmplen = 0;
3460     
3461   char *method, *category, *selector;
3462   char *tmp2 = NULL;
3463     
3464   method = SYMBOL_NATURAL_NAME (msymbol);
3465
3466   /* Is it a method?  */
3467   if ((method[0] != '-') && (method[0] != '+'))
3468     return;
3469
3470   if (sym_text[0] == '[')
3471     /* Complete on shortened method method.  */
3472     completion_list_add_name (method + 1, sym_text, sym_text_len, text, word);
3473     
3474   while ((strlen (method) + 1) >= tmplen)
3475     {
3476       if (tmplen == 0)
3477         tmplen = 1024;
3478       else
3479         tmplen *= 2;
3480       tmp = xrealloc (tmp, tmplen);
3481     }
3482   selector = strchr (method, ' ');
3483   if (selector != NULL)
3484     selector++;
3485     
3486   category = strchr (method, '(');
3487     
3488   if ((category != NULL) && (selector != NULL))
3489     {
3490       memcpy (tmp, method, (category - method));
3491       tmp[category - method] = ' ';
3492       memcpy (tmp + (category - method) + 1, selector, strlen (selector) + 1);
3493       completion_list_add_name (tmp, sym_text, sym_text_len, text, word);
3494       if (sym_text[0] == '[')
3495         completion_list_add_name (tmp + 1, sym_text, sym_text_len, text, word);
3496     }
3497     
3498   if (selector != NULL)
3499     {
3500       /* Complete on selector only.  */
3501       strcpy (tmp, selector);
3502       tmp2 = strchr (tmp, ']');
3503       if (tmp2 != NULL)
3504         *tmp2 = '\0';
3505         
3506       completion_list_add_name (tmp, sym_text, sym_text_len, text, word);
3507     }
3508 }
3509
3510 /* Break the non-quoted text based on the characters which are in
3511    symbols. FIXME: This should probably be language-specific. */
3512
3513 static char *
3514 language_search_unquoted_string (char *text, char *p)
3515 {
3516   for (; p > text; --p)
3517     {
3518       if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
3519         continue;
3520       else
3521         {
3522           if ((current_language->la_language == language_objc))
3523             {
3524               if (p[-1] == ':')     /* might be part of a method name */
3525                 continue;
3526               else if (p[-1] == '[' && (p[-2] == '-' || p[-2] == '+'))
3527                 p -= 2;             /* beginning of a method name */
3528               else if (p[-1] == ' ' || p[-1] == '(' || p[-1] == ')')
3529                 {                   /* might be part of a method name */
3530                   char *t = p;
3531
3532                   /* Seeing a ' ' or a '(' is not conclusive evidence
3533                      that we are in the middle of a method name.  However,
3534                      finding "-[" or "+[" should be pretty un-ambiguous.
3535                      Unfortunately we have to find it now to decide.  */
3536
3537                   while (t > text)
3538                     if (isalnum (t[-1]) || t[-1] == '_' ||
3539                         t[-1] == ' '    || t[-1] == ':' ||
3540                         t[-1] == '('    || t[-1] == ')')
3541                       --t;
3542                     else
3543                       break;
3544
3545                   if (t[-1] == '[' && (t[-2] == '-' || t[-2] == '+'))
3546                     p = t - 2;      /* method name detected */
3547                   /* else we leave with p unchanged */
3548                 }
3549             }
3550           break;
3551         }
3552     }
3553   return p;
3554 }
3555
3556 char **
3557 default_make_symbol_completion_list (char *text, char *word)
3558 {
3559   /* Problem: All of the symbols have to be copied because readline
3560      frees them.  I'm not going to worry about this; hopefully there
3561      won't be that many.  */
3562
3563   struct symbol *sym;
3564   struct symtab *s;
3565   struct partial_symtab *ps;
3566   struct minimal_symbol *msymbol;
3567   struct objfile *objfile;
3568   struct block *b, *surrounding_static_block = 0;
3569   struct dict_iterator iter;
3570   int j;
3571   struct partial_symbol **psym;
3572   /* The symbol we are completing on.  Points in same buffer as text.  */
3573   char *sym_text;
3574   /* Length of sym_text.  */
3575   int sym_text_len;
3576
3577   /* Now look for the symbol we are supposed to complete on.  */
3578   {
3579     char *p;
3580     char quote_found;
3581     char *quote_pos = NULL;
3582
3583     /* First see if this is a quoted string.  */
3584     quote_found = '\0';
3585     for (p = text; *p != '\0'; ++p)
3586       {
3587         if (quote_found != '\0')
3588           {
3589             if (*p == quote_found)
3590               /* Found close quote.  */
3591               quote_found = '\0';
3592             else if (*p == '\\' && p[1] == quote_found)
3593               /* A backslash followed by the quote character
3594                  doesn't end the string.  */
3595               ++p;
3596           }
3597         else if (*p == '\'' || *p == '"')
3598           {
3599             quote_found = *p;
3600             quote_pos = p;
3601           }
3602       }
3603     if (quote_found == '\'')
3604       /* A string within single quotes can be a symbol, so complete on it.  */
3605       sym_text = quote_pos + 1;
3606     else if (quote_found == '"')
3607       /* A double-quoted string is never a symbol, nor does it make sense
3608          to complete it any other way.  */
3609       {
3610         return_val = (char **) xmalloc (sizeof (char *));
3611         return_val[0] = NULL;
3612         return return_val;
3613       }
3614     else
3615       {
3616         /* It is not a quoted string.  Break it based on the characters
3617            which are in symbols.  */
3618         while (p > text)
3619           {
3620             if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
3621               --p;
3622             else
3623               break;
3624           }
3625         sym_text = p;
3626       }
3627   }
3628
3629   sym_text_len = strlen (sym_text);
3630
3631   return_val_size = 100;
3632   return_val_index = 0;
3633   return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
3634   return_val[0] = NULL;
3635
3636   /* Look through the partial symtabs for all symbols which begin
3637      by matching SYM_TEXT.  Add each one that you find to the list.  */
3638
3639   ALL_PSYMTABS (objfile, ps)
3640   {
3641     /* If the psymtab's been read in we'll get it when we search
3642        through the blockvector.  */
3643     if (ps->readin)
3644       continue;
3645
3646     for (psym = objfile->global_psymbols.list + ps->globals_offset;
3647          psym < (objfile->global_psymbols.list + ps->globals_offset
3648                  + ps->n_global_syms);
3649          psym++)
3650       {
3651         /* If interrupted, then quit. */
3652         QUIT;
3653         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
3654       }
3655
3656     for (psym = objfile->static_psymbols.list + ps->statics_offset;
3657          psym < (objfile->static_psymbols.list + ps->statics_offset
3658                  + ps->n_static_syms);
3659          psym++)
3660       {
3661         QUIT;
3662         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
3663       }
3664   }
3665
3666   /* At this point scan through the misc symbol vectors and add each
3667      symbol you find to the list.  Eventually we want to ignore
3668      anything that isn't a text symbol (everything else will be
3669      handled by the psymtab code above).  */
3670
3671   ALL_MSYMBOLS (objfile, msymbol)
3672   {
3673     QUIT;
3674     COMPLETION_LIST_ADD_SYMBOL (msymbol, sym_text, sym_text_len, text, word);
3675     
3676     completion_list_objc_symbol (msymbol, sym_text, sym_text_len, text, word);
3677   }
3678
3679   /* Search upwards from currently selected frame (so that we can
3680      complete on local vars.  */
3681
3682   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
3683     {
3684       if (!BLOCK_SUPERBLOCK (b))
3685         {
3686           surrounding_static_block = b;         /* For elmin of dups */
3687         }
3688
3689       /* Also catch fields of types defined in this places which match our
3690          text string.  Only complete on types visible from current context. */
3691
3692       ALL_BLOCK_SYMBOLS (b, iter, sym)
3693         {
3694           QUIT;
3695           COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3696           if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
3697             {
3698               struct type *t = SYMBOL_TYPE (sym);
3699               enum type_code c = TYPE_CODE (t);
3700
3701               if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
3702                 {
3703                   for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
3704                     {
3705                       if (TYPE_FIELD_NAME (t, j))
3706                         {
3707                           completion_list_add_name (TYPE_FIELD_NAME (t, j),
3708                                         sym_text, sym_text_len, text, word);
3709                         }
3710                     }
3711                 }
3712             }
3713         }
3714     }
3715
3716   /* Go through the symtabs and check the externs and statics for
3717      symbols which match.  */
3718
3719   ALL_PRIMARY_SYMTABS (objfile, s)
3720   {
3721     QUIT;
3722     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3723     ALL_BLOCK_SYMBOLS (b, iter, sym)
3724       {
3725         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3726       }
3727   }
3728
3729   ALL_PRIMARY_SYMTABS (objfile, s)
3730   {
3731     QUIT;
3732     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3733     /* Don't do this block twice.  */
3734     if (b == surrounding_static_block)
3735       continue;
3736     ALL_BLOCK_SYMBOLS (b, iter, sym)
3737       {
3738         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3739       }
3740   }
3741
3742   return (return_val);
3743 }
3744
3745 /* Return a NULL terminated array of all symbols (regardless of class)
3746    which begin by matching TEXT.  If the answer is no symbols, then
3747    the return value is an array which contains only a NULL pointer.  */
3748
3749 char **
3750 make_symbol_completion_list (char *text, char *word)
3751 {
3752   return current_language->la_make_symbol_completion_list (text, word);
3753 }
3754
3755 /* Like make_symbol_completion_list, but returns a list of symbols
3756    defined in a source file FILE.  */
3757
3758 char **
3759 make_file_symbol_completion_list (char *text, char *word, char *srcfile)
3760 {
3761   struct symbol *sym;
3762   struct symtab *s;
3763   struct block *b;
3764   struct dict_iterator iter;
3765   /* The symbol we are completing on.  Points in same buffer as text.  */
3766   char *sym_text;
3767   /* Length of sym_text.  */
3768   int sym_text_len;
3769
3770   /* Now look for the symbol we are supposed to complete on.
3771      FIXME: This should be language-specific.  */
3772   {
3773     char *p;
3774     char quote_found;
3775     char *quote_pos = NULL;
3776
3777     /* First see if this is a quoted string.  */
3778     quote_found = '\0';
3779     for (p = text; *p != '\0'; ++p)
3780       {
3781         if (quote_found != '\0')
3782           {
3783             if (*p == quote_found)
3784               /* Found close quote.  */
3785               quote_found = '\0';
3786             else if (*p == '\\' && p[1] == quote_found)
3787               /* A backslash followed by the quote character
3788                  doesn't end the string.  */
3789               ++p;
3790           }
3791         else if (*p == '\'' || *p == '"')
3792           {
3793             quote_found = *p;
3794             quote_pos = p;
3795           }
3796       }
3797     if (quote_found == '\'')
3798       /* A string within single quotes can be a symbol, so complete on it.  */
3799       sym_text = quote_pos + 1;
3800     else if (quote_found == '"')
3801       /* A double-quoted string is never a symbol, nor does it make sense
3802          to complete it any other way.  */
3803       {
3804         return_val = (char **) xmalloc (sizeof (char *));
3805         return_val[0] = NULL;
3806         return return_val;
3807       }
3808     else
3809       {
3810         /* Not a quoted string.  */
3811         sym_text = language_search_unquoted_string (text, p);
3812       }
3813   }
3814
3815   sym_text_len = strlen (sym_text);
3816
3817   return_val_size = 10;
3818   return_val_index = 0;
3819   return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
3820   return_val[0] = NULL;
3821
3822   /* Find the symtab for SRCFILE (this loads it if it was not yet read
3823      in).  */
3824   s = lookup_symtab (srcfile);
3825   if (s == NULL)
3826     {
3827       /* Maybe they typed the file with leading directories, while the
3828          symbol tables record only its basename.  */
3829       const char *tail = lbasename (srcfile);
3830
3831       if (tail > srcfile)
3832         s = lookup_symtab (tail);
3833     }
3834
3835   /* If we have no symtab for that file, return an empty list.  */
3836   if (s == NULL)
3837     return (return_val);
3838
3839   /* Go through this symtab and check the externs and statics for
3840      symbols which match.  */
3841
3842   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3843   ALL_BLOCK_SYMBOLS (b, iter, sym)
3844     {
3845       COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3846     }
3847
3848   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3849   ALL_BLOCK_SYMBOLS (b, iter, sym)
3850     {
3851       COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3852     }
3853
3854   return (return_val);
3855 }
3856
3857 /* A helper function for make_source_files_completion_list.  It adds
3858    another file name to a list of possible completions, growing the
3859    list as necessary.  */
3860
3861 static void
3862 add_filename_to_list (const char *fname, char *text, char *word,
3863                       char ***list, int *list_used, int *list_alloced)
3864 {
3865   char *new;
3866   size_t fnlen = strlen (fname);
3867
3868   if (*list_used + 1 >= *list_alloced)
3869     {
3870       *list_alloced *= 2;
3871       *list = (char **) xrealloc ((char *) *list,
3872                                   *list_alloced * sizeof (char *));
3873     }
3874
3875   if (word == text)
3876     {
3877       /* Return exactly fname.  */
3878       new = xmalloc (fnlen + 5);
3879       strcpy (new, fname);
3880     }
3881   else if (word > text)
3882     {
3883       /* Return some portion of fname.  */
3884       new = xmalloc (fnlen + 5);
3885       strcpy (new, fname + (word - text));
3886     }
3887   else
3888     {
3889       /* Return some of TEXT plus fname.  */
3890       new = xmalloc (fnlen + (text - word) + 5);
3891       strncpy (new, word, text - word);
3892       new[text - word] = '\0';
3893       strcat (new, fname);
3894     }
3895   (*list)[*list_used] = new;
3896   (*list)[++*list_used] = NULL;
3897 }
3898
3899 static int
3900 not_interesting_fname (const char *fname)
3901 {
3902   static const char *illegal_aliens[] = {
3903     "_globals_",        /* inserted by coff_symtab_read */
3904     NULL
3905   };
3906   int i;
3907
3908   for (i = 0; illegal_aliens[i]; i++)
3909     {
3910       if (strcmp (fname, illegal_aliens[i]) == 0)
3911         return 1;
3912     }
3913   return 0;
3914 }
3915
3916 /* Return a NULL terminated array of all source files whose names
3917    begin with matching TEXT.  The file names are looked up in the
3918    symbol tables of this program.  If the answer is no matchess, then
3919    the return value is an array which contains only a NULL pointer.  */
3920
3921 char **
3922 make_source_files_completion_list (char *text, char *word)
3923 {
3924   struct symtab *s;
3925   struct partial_symtab *ps;
3926   struct objfile *objfile;
3927   int first = 1;
3928   int list_alloced = 1;
3929   int list_used = 0;
3930   size_t text_len = strlen (text);
3931   char **list = (char **) xmalloc (list_alloced * sizeof (char *));
3932   const char *base_name;
3933
3934   list[0] = NULL;
3935
3936   if (!have_full_symbols () && !have_partial_symbols ())
3937     return list;
3938
3939   ALL_SYMTABS (objfile, s)
3940     {
3941       if (not_interesting_fname (s->filename))
3942         continue;
3943       if (!filename_seen (s->filename, 1, &first)
3944 #if HAVE_DOS_BASED_FILE_SYSTEM
3945           && strncasecmp (s->filename, text, text_len) == 0
3946 #else
3947           && strncmp (s->filename, text, text_len) == 0
3948 #endif
3949           )
3950         {
3951           /* This file matches for a completion; add it to the current
3952              list of matches.  */
3953           add_filename_to_list (s->filename, text, word,
3954                                 &list, &list_used, &list_alloced);
3955         }
3956       else
3957         {
3958           /* NOTE: We allow the user to type a base name when the
3959              debug info records leading directories, but not the other
3960              way around.  This is what subroutines of breakpoint
3961              command do when they parse file names.  */
3962           base_name = lbasename (s->filename);
3963           if (base_name != s->filename
3964               && !filename_seen (base_name, 1, &first)
3965 #if HAVE_DOS_BASED_FILE_SYSTEM
3966               && strncasecmp (base_name, text, text_len) == 0
3967 #else
3968               && strncmp (base_name, text, text_len) == 0
3969 #endif
3970               )
3971             add_filename_to_list (base_name, text, word,
3972                                   &list, &list_used, &list_alloced);
3973         }
3974     }
3975
3976   ALL_PSYMTABS (objfile, ps)
3977     {
3978       if (not_interesting_fname (ps->filename))
3979         continue;
3980       if (!ps->readin)
3981         {
3982           if (!filename_seen (ps->filename, 1, &first)
3983 #if HAVE_DOS_BASED_FILE_SYSTEM
3984               && strncasecmp (ps->filename, text, text_len) == 0
3985 #else
3986               && strncmp (ps->filename, text, text_len) == 0
3987 #endif
3988               )
3989             {
3990               /* This file matches for a completion; add it to the
3991                  current list of matches.  */
3992               add_filename_to_list (ps->filename, text, word,
3993                                     &list, &list_used, &list_alloced);
3994
3995             }
3996           else
3997             {
3998               base_name = lbasename (ps->filename);
3999               if (base_name != ps->filename
4000                   && !filename_seen (base_name, 1, &first)
4001 #if HAVE_DOS_BASED_FILE_SYSTEM
4002                   && strncasecmp (base_name, text, text_len) == 0
4003 #else
4004                   && strncmp (base_name, text, text_len) == 0
4005 #endif
4006                   )
4007                 add_filename_to_list (base_name, text, word,
4008                                       &list, &list_used, &list_alloced);
4009             }
4010         }
4011     }
4012
4013   return list;
4014 }
4015
4016 /* Determine if PC is in the prologue of a function.  The prologue is the area
4017    between the first instruction of a function, and the first executable line.
4018    Returns 1 if PC *might* be in prologue, 0 if definately *not* in prologue.
4019
4020    If non-zero, func_start is where we think the prologue starts, possibly
4021    by previous examination of symbol table information.
4022  */
4023
4024 int
4025 in_prologue (CORE_ADDR pc, CORE_ADDR func_start)
4026 {
4027   struct symtab_and_line sal;
4028   CORE_ADDR func_addr, func_end;
4029
4030   /* We have several sources of information we can consult to figure
4031      this out.
4032      - Compilers usually emit line number info that marks the prologue
4033        as its own "source line".  So the ending address of that "line"
4034        is the end of the prologue.  If available, this is the most
4035        reliable method.
4036      - The minimal symbols and partial symbols, which can usually tell
4037        us the starting and ending addresses of a function.
4038      - If we know the function's start address, we can call the
4039        architecture-defined gdbarch_skip_prologue function to analyze the
4040        instruction stream and guess where the prologue ends.
4041      - Our `func_start' argument; if non-zero, this is the caller's
4042        best guess as to the function's entry point.  At the time of
4043        this writing, handle_inferior_event doesn't get this right, so
4044        it should be our last resort.  */
4045
4046   /* Consult the partial symbol table, to find which function
4047      the PC is in.  */
4048   if (! find_pc_partial_function (pc, NULL, &func_addr, &func_end))
4049     {
4050       CORE_ADDR prologue_end;
4051
4052       /* We don't even have minsym information, so fall back to using
4053          func_start, if given.  */
4054       if (! func_start)
4055         return 1;               /* We *might* be in a prologue.  */
4056
4057       prologue_end = gdbarch_skip_prologue (current_gdbarch, func_start);
4058
4059       return func_start <= pc && pc < prologue_end;
4060     }
4061
4062   /* If we have line number information for the function, that's
4063      usually pretty reliable.  */
4064   sal = find_pc_line (func_addr, 0);
4065
4066   /* Now sal describes the source line at the function's entry point,
4067      which (by convention) is the prologue.  The end of that "line",
4068      sal.end, is the end of the prologue.
4069
4070      Note that, for functions whose source code is all on a single
4071      line, the line number information doesn't always end up this way.
4072      So we must verify that our purported end-of-prologue address is
4073      *within* the function, not at its start or end.  */
4074   if (sal.line == 0
4075       || sal.end <= func_addr
4076       || func_end <= sal.end)
4077     {
4078       /* We don't have any good line number info, so use the minsym
4079          information, together with the architecture-specific prologue
4080          scanning code.  */
4081       CORE_ADDR prologue_end = gdbarch_skip_prologue
4082                                  (current_gdbarch, func_addr);
4083
4084       return func_addr <= pc && pc < prologue_end;
4085     }
4086
4087   /* We have line number info, and it looks good.  */
4088   return func_addr <= pc && pc < sal.end;
4089 }
4090
4091 /* Given PC at the function's start address, attempt to find the
4092    prologue end using SAL information.  Return zero if the skip fails.
4093
4094    A non-optimized prologue traditionally has one SAL for the function
4095    and a second for the function body.  A single line function has
4096    them both pointing at the same line.
4097
4098    An optimized prologue is similar but the prologue may contain
4099    instructions (SALs) from the instruction body.  Need to skip those
4100    while not getting into the function body.
4101
4102    The functions end point and an increasing SAL line are used as
4103    indicators of the prologue's endpoint.
4104
4105    This code is based on the function refine_prologue_limit (versions
4106    found in both ia64 and ppc).  */
4107
4108 CORE_ADDR
4109 skip_prologue_using_sal (CORE_ADDR func_addr)
4110 {
4111   struct symtab_and_line prologue_sal;
4112   CORE_ADDR start_pc;
4113   CORE_ADDR end_pc;
4114
4115   /* Get an initial range for the function.  */
4116   find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc);
4117   start_pc += gdbarch_deprecated_function_start_offset (current_gdbarch);
4118
4119   prologue_sal = find_pc_line (start_pc, 0);
4120   if (prologue_sal.line != 0)
4121     {
4122       /* If there is only one sal that covers the entire function,
4123          then it is probably a single line function, like
4124          "foo(){}". */
4125       if (prologue_sal.end >= end_pc)
4126         return 0;
4127       while (prologue_sal.end < end_pc)
4128         {
4129           struct symtab_and_line sal;
4130
4131           sal = find_pc_line (prologue_sal.end, 0);
4132           if (sal.line == 0)
4133             break;
4134           /* Assume that a consecutive SAL for the same (or larger)
4135              line mark the prologue -> body transition.  */
4136           if (sal.line >= prologue_sal.line)
4137             break;
4138           /* The case in which compiler's optimizer/scheduler has
4139              moved instructions into the prologue.  We look ahead in
4140              the function looking for address ranges whose
4141              corresponding line number is less the first one that we
4142              found for the function.  This is more conservative then
4143              refine_prologue_limit which scans a large number of SALs
4144              looking for any in the prologue */
4145           prologue_sal = sal;
4146         }
4147     }
4148   return prologue_sal.end;
4149 }
4150 \f
4151 struct symtabs_and_lines
4152 decode_line_spec (char *string, int funfirstline)
4153 {
4154   struct symtabs_and_lines sals;
4155   struct symtab_and_line cursal;
4156   
4157   if (string == 0)
4158     error (_("Empty line specification."));
4159     
4160   /* We use whatever is set as the current source line. We do not try
4161      and get a default  or it will recursively call us! */  
4162   cursal = get_current_source_symtab_and_line ();
4163   
4164   sals = decode_line_1 (&string, funfirstline,
4165                         cursal.symtab, cursal.line,
4166                         (char ***) NULL, NULL);
4167
4168   if (*string)
4169     error (_("Junk at end of line specification: %s"), string);
4170   return sals;
4171 }
4172
4173 /* Track MAIN */
4174 static char *name_of_main;
4175
4176 void
4177 set_main_name (const char *name)
4178 {
4179   if (name_of_main != NULL)
4180     {
4181       xfree (name_of_main);
4182       name_of_main = NULL;
4183     }
4184   if (name != NULL)
4185     {
4186       name_of_main = xstrdup (name);
4187     }
4188 }
4189
4190 /* Deduce the name of the main procedure, and set NAME_OF_MAIN
4191    accordingly.  */
4192
4193 static void
4194 find_main_name (void)
4195 {
4196   const char *new_main_name;
4197
4198   /* Try to see if the main procedure is in Ada.  */
4199   /* FIXME: brobecker/2005-03-07: Another way of doing this would
4200      be to add a new method in the language vector, and call this
4201      method for each language until one of them returns a non-empty
4202      name.  This would allow us to remove this hard-coded call to
4203      an Ada function.  It is not clear that this is a better approach
4204      at this point, because all methods need to be written in a way
4205      such that false positives never be returned. For instance, it is
4206      important that a method does not return a wrong name for the main
4207      procedure if the main procedure is actually written in a different
4208      language.  It is easy to guaranty this with Ada, since we use a
4209      special symbol generated only when the main in Ada to find the name
4210      of the main procedure. It is difficult however to see how this can
4211      be guarantied for languages such as C, for instance.  This suggests
4212      that order of call for these methods becomes important, which means
4213      a more complicated approach.  */
4214   new_main_name = ada_main_name ();
4215   if (new_main_name != NULL)
4216     { 
4217       set_main_name (new_main_name);
4218       return;
4219     }
4220
4221   new_main_name = pascal_main_name ();
4222   if (new_main_name != NULL)
4223     { 
4224       set_main_name (new_main_name);
4225       return;
4226     }
4227
4228   /* The languages above didn't identify the name of the main procedure.
4229      Fallback to "main".  */
4230   set_main_name ("main");
4231 }
4232
4233 char *
4234 main_name (void)
4235 {
4236   if (name_of_main == NULL)
4237     find_main_name ();
4238
4239   return name_of_main;
4240 }
4241
4242 /* Handle ``executable_changed'' events for the symtab module.  */
4243
4244 static void
4245 symtab_observer_executable_changed (void *unused)
4246 {
4247   /* NAME_OF_MAIN may no longer be the same, so reset it for now.  */
4248   set_main_name (NULL);
4249 }
4250
4251 /* Helper to expand_line_sal below.  Appends new sal to SAL,
4252    initializing it from SYMTAB, LINENO and PC.  */
4253 static void
4254 append_expanded_sal (struct symtabs_and_lines *sal,
4255                      struct symtab *symtab,
4256                      int lineno, CORE_ADDR pc)
4257 {
4258   CORE_ADDR func_addr, func_end;
4259   
4260   sal->sals = xrealloc (sal->sals, 
4261                         sizeof (sal->sals[0]) 
4262                         * (sal->nelts + 1));
4263   init_sal (sal->sals + sal->nelts);
4264   sal->sals[sal->nelts].symtab = symtab;
4265   sal->sals[sal->nelts].section = NULL;
4266   sal->sals[sal->nelts].end = 0;
4267   sal->sals[sal->nelts].line = lineno;  
4268   sal->sals[sal->nelts].pc = pc;
4269   ++sal->nelts;      
4270 }
4271
4272 /* Compute a set of all sals in
4273    the entire program that correspond to same file
4274    and line as SAL and return those.  If there
4275    are several sals that belong to the same block,
4276    only one sal for the block is included in results.  */
4277    
4278 struct symtabs_and_lines
4279 expand_line_sal (struct symtab_and_line sal)
4280 {
4281   struct symtabs_and_lines ret, this_line;
4282   int i, j;
4283   struct objfile *objfile;
4284   struct partial_symtab *psymtab;
4285   struct symtab *symtab;
4286   int lineno;
4287   int deleted = 0;
4288   struct block **blocks = NULL;
4289   int *filter;
4290
4291   ret.nelts = 0;
4292   ret.sals = NULL;
4293
4294   if (sal.symtab == NULL || sal.line == 0 || sal.pc != 0)
4295     {
4296       ret.sals = xmalloc (sizeof (struct symtab_and_line));
4297       ret.sals[0] = sal;
4298       ret.nelts = 1;
4299       return ret;
4300     }
4301   else
4302     {
4303       struct linetable_entry *best_item = 0;
4304       struct symtab *best_symtab = 0;
4305       int exact = 0;
4306
4307       lineno = sal.line;
4308
4309       /* We meed to find all symtabs for a file which name
4310          is described by sal. We cannot just directly 
4311          iterate over symtabs, since a symtab might not be
4312          yet created. We also cannot iterate over psymtabs,
4313          calling PSYMTAB_TO_SYMTAB and working on that symtab,
4314          since PSYMTAB_TO_SYMTAB will return NULL for psymtab
4315          corresponding to an included file. Therefore, we do
4316          first pass over psymtabs, reading in those with
4317          the right name.  Then, we iterate over symtabs, knowing
4318          that all symtabs we're interested in are loaded.  */
4319
4320       ALL_PSYMTABS (objfile, psymtab)
4321         {
4322           if (strcmp (sal.symtab->filename,
4323                       psymtab->filename) == 0)
4324             PSYMTAB_TO_SYMTAB (psymtab);
4325         }
4326
4327          
4328       /* For each symtab, we add all pcs to ret.sals. I'm actually
4329          not sure what to do if we have exact match in one symtab,
4330          and non-exact match on another symtab.
4331       */
4332       ALL_SYMTABS (objfile, symtab)
4333         {
4334           if (strcmp (sal.symtab->filename,
4335                       symtab->filename) == 0)
4336             {
4337               struct linetable *l;
4338               int len;
4339               l = LINETABLE (symtab);
4340               if (!l)
4341                 continue;
4342               len = l->nitems;
4343
4344               for (j = 0; j < len; j++)
4345                 {
4346                   struct linetable_entry *item = &(l->item[j]);
4347
4348                   if (item->line == lineno)
4349                     {
4350                       exact = 1;
4351                       append_expanded_sal (&ret, symtab, lineno, item->pc);
4352                     }      
4353                   else if (!exact && item->line > lineno
4354                            && (best_item == NULL || item->line < best_item->line))
4355                   
4356                     {
4357                       best_item = item;
4358                       best_symtab = symtab;
4359                     }
4360                 }
4361             }
4362         }
4363       if (!exact && best_item)
4364         append_expanded_sal (&ret, best_symtab, lineno, best_item->pc);
4365     }
4366
4367   /* For optimized code, compiler can scatter one source line accross
4368      disjoint ranges of PC values, even when no duplicate functions
4369      or inline functions are involved.  For example, 'for (;;)' inside
4370      non-template non-inline non-ctor-or-dtor function can result
4371      in two PC ranges.  In this case, we don't want to set breakpoint
4372      on first PC of each range.  To filter such cases, we use containing
4373      blocks -- for each PC found above we see if there are other PCs
4374      that are in the same block.  If yes, the other PCs are filtered out.  */  
4375
4376   filter = xmalloc (ret.nelts * sizeof (int));
4377   blocks = xmalloc (ret.nelts * sizeof (struct block *));
4378   for (i = 0; i < ret.nelts; ++i)
4379     {
4380       filter[i] = 1;
4381       blocks[i] = block_for_pc (ret.sals[i].pc);
4382     }
4383
4384   for (i = 0; i < ret.nelts; ++i)
4385     if (blocks[i] != NULL)
4386       for (j = i+1; j < ret.nelts; ++j)
4387         if (blocks[j] == blocks[i])
4388           {
4389             filter[j] = 0;
4390             ++deleted;
4391             break;
4392           }
4393   
4394   {
4395     struct symtab_and_line *final = 
4396       xmalloc (sizeof (struct symtab_and_line) * (ret.nelts-deleted));
4397     
4398     for (i = 0, j = 0; i < ret.nelts; ++i)
4399       if (filter[i])
4400         final[j++] = ret.sals[i];
4401     
4402     ret.nelts -= deleted;
4403     xfree (ret.sals);
4404     ret.sals = final;
4405   }
4406
4407   return ret;
4408 }
4409
4410
4411 void
4412 _initialize_symtab (void)
4413 {
4414   add_info ("variables", variables_info, _("\
4415 All global and static variable names, or those matching REGEXP."));
4416   if (dbx_commands)
4417     add_com ("whereis", class_info, variables_info, _("\
4418 All global and static variable names, or those matching REGEXP."));
4419
4420   add_info ("functions", functions_info,
4421             _("All function names, or those matching REGEXP."));
4422
4423   
4424   /* FIXME:  This command has at least the following problems:
4425      1.  It prints builtin types (in a very strange and confusing fashion).
4426      2.  It doesn't print right, e.g. with
4427      typedef struct foo *FOO
4428      type_print prints "FOO" when we want to make it (in this situation)
4429      print "struct foo *".
4430      I also think "ptype" or "whatis" is more likely to be useful (but if
4431      there is much disagreement "info types" can be fixed).  */
4432   add_info ("types", types_info,
4433             _("All type names, or those matching REGEXP."));
4434
4435   add_info ("sources", sources_info,
4436             _("Source files in the program."));
4437
4438   add_com ("rbreak", class_breakpoint, rbreak_command,
4439            _("Set a breakpoint for all functions matching REGEXP."));
4440
4441   if (xdb_commands)
4442     {
4443       add_com ("lf", class_info, sources_info,
4444                _("Source files in the program"));
4445       add_com ("lg", class_info, variables_info, _("\
4446 All global and static variable names, or those matching REGEXP."));
4447     }
4448
4449   add_setshow_enum_cmd ("multiple-symbols", no_class,
4450                         multiple_symbols_modes, &multiple_symbols_mode,
4451                         _("\
4452 Set the debugger behavior when more than one symbol are possible matches\n\
4453 in an expression."), _("\
4454 Show how the debugger handles ambiguities in expressions."), _("\
4455 Valid values are \"ask\", \"all\", \"cancel\", and the default is \"all\"."),
4456                         NULL, NULL, &setlist, &showlist);
4457
4458   /* Initialize the one built-in type that isn't language dependent... */
4459   builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
4460                                   "<unknown type>", (struct objfile *) NULL);
4461
4462   observer_attach_executable_changed (symtab_observer_executable_changed);
4463 }