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