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