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