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