OSDN Git Service

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