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