OSDN Git Service

2003-11-07 Andrew Cagney <cagney@redhat.com>
[pf3gnuchains/pf3gnuchains4x.git] / gdb / symtab.c
1 /* Symbol table lookup for the GNU debugger, GDB.
2
3    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
4    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
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 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
2318   /* Convex: no need to suppress code on first line, if any */
2319   sal.pc = pc;
2320 #else
2321   /* Check if SKIP_PROLOGUE left us in mid-line, and the next
2322      line is still part of the same function.  */
2323   if (sal.pc != pc
2324       && BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) <= sal.end
2325       && sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
2326     {
2327       /* First pc of next line */
2328       pc = sal.end;
2329       /* Recalculate the line number (might not be N+1).  */
2330       sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
2331     }
2332   sal.pc = pc;
2333 #endif
2334
2335   return sal;
2336 }
2337
2338 /* If P is of the form "operator[ \t]+..." where `...' is
2339    some legitimate operator text, return a pointer to the
2340    beginning of the substring of the operator text.
2341    Otherwise, return "".  */
2342 char *
2343 operator_chars (char *p, char **end)
2344 {
2345   *end = "";
2346   if (strncmp (p, "operator", 8))
2347     return *end;
2348   p += 8;
2349
2350   /* Don't get faked out by `operator' being part of a longer
2351      identifier.  */
2352   if (isalpha (*p) || *p == '_' || *p == '$' || *p == '\0')
2353     return *end;
2354
2355   /* Allow some whitespace between `operator' and the operator symbol.  */
2356   while (*p == ' ' || *p == '\t')
2357     p++;
2358
2359   /* Recognize 'operator TYPENAME'. */
2360
2361   if (isalpha (*p) || *p == '_' || *p == '$')
2362     {
2363       char *q = p + 1;
2364       while (isalnum (*q) || *q == '_' || *q == '$')
2365         q++;
2366       *end = q;
2367       return p;
2368     }
2369
2370   while (*p)
2371     switch (*p)
2372       {
2373       case '\\':                        /* regexp quoting */
2374         if (p[1] == '*')
2375           {
2376             if (p[2] == '=')    /* 'operator\*=' */
2377               *end = p + 3;
2378             else                        /* 'operator\*'  */
2379               *end = p + 2;
2380             return p;
2381           }
2382         else if (p[1] == '[')
2383           {
2384             if (p[2] == ']')
2385               error ("mismatched quoting on brackets, try 'operator\\[\\]'");
2386             else if (p[2] == '\\' && p[3] == ']')
2387               {
2388                 *end = p + 4;   /* 'operator\[\]' */
2389                 return p;
2390               }
2391             else
2392               error ("nothing is allowed between '[' and ']'");
2393           }
2394         else 
2395           {
2396             /* Gratuitous qoute: skip it and move on. */
2397             p++;
2398             continue;
2399           }
2400         break;
2401       case '!':
2402       case '=':
2403       case '*':
2404       case '/':
2405       case '%':
2406       case '^':
2407         if (p[1] == '=')
2408           *end = p + 2;
2409         else
2410           *end = p + 1;
2411         return p;
2412       case '<':
2413       case '>':
2414       case '+':
2415       case '-':
2416       case '&':
2417       case '|':
2418         if (p[0] == '-' && p[1] == '>')
2419           {
2420             /* Struct pointer member operator 'operator->'. */
2421             if (p[2] == '*')
2422               {
2423                 *end = p + 3;   /* 'operator->*' */
2424                 return p;
2425               }
2426             else if (p[2] == '\\')
2427               {
2428                 *end = p + 4;   /* Hopefully 'operator->\*' */
2429                 return p;
2430               }
2431             else
2432               {
2433                 *end = p + 2;   /* 'operator->' */
2434                 return p;
2435               }
2436           }
2437         if (p[1] == '=' || p[1] == p[0])
2438           *end = p + 2;
2439         else
2440           *end = p + 1;
2441         return p;
2442       case '~':
2443       case ',':
2444         *end = p + 1;
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       case '[':
2457         if (p[1] != ']')
2458           error ("`operator []' must be specified without whitespace in `[]'");
2459         *end = p + 2;
2460         return p;
2461       default:
2462         error ("`operator %s' not supported", p);
2463         break;
2464       }
2465
2466   *end = "";
2467   return *end;
2468 }
2469 \f
2470
2471 /* If FILE is not already in the table of files, return zero;
2472    otherwise return non-zero.  Optionally add FILE to the table if ADD
2473    is non-zero.  If *FIRST is non-zero, forget the old table
2474    contents.  */
2475 static int
2476 filename_seen (const char *file, int add, int *first)
2477 {
2478   /* Table of files seen so far.  */
2479   static const char **tab = NULL;
2480   /* Allocated size of tab in elements.
2481      Start with one 256-byte block (when using GNU malloc.c).
2482      24 is the malloc overhead when range checking is in effect.  */
2483   static int tab_alloc_size = (256 - 24) / sizeof (char *);
2484   /* Current size of tab in elements.  */
2485   static int tab_cur_size;
2486   const char **p;
2487
2488   if (*first)
2489     {
2490       if (tab == NULL)
2491         tab = (const char **) xmalloc (tab_alloc_size * sizeof (*tab));
2492       tab_cur_size = 0;
2493     }
2494
2495   /* Is FILE in tab?  */
2496   for (p = tab; p < tab + tab_cur_size; p++)
2497     if (strcmp (*p, file) == 0)
2498       return 1;
2499
2500   /* No; maybe add it to tab.  */
2501   if (add)
2502     {
2503       if (tab_cur_size == tab_alloc_size)
2504         {
2505           tab_alloc_size *= 2;
2506           tab = (const char **) xrealloc ((char *) tab,
2507                                           tab_alloc_size * sizeof (*tab));
2508         }
2509       tab[tab_cur_size++] = file;
2510     }
2511
2512   return 0;
2513 }
2514
2515 /* Slave routine for sources_info.  Force line breaks at ,'s.
2516    NAME is the name to print and *FIRST is nonzero if this is the first
2517    name printed.  Set *FIRST to zero.  */
2518 static void
2519 output_source_filename (char *name, int *first)
2520 {
2521   /* Since a single source file can result in several partial symbol
2522      tables, we need to avoid printing it more than once.  Note: if
2523      some of the psymtabs are read in and some are not, it gets
2524      printed both under "Source files for which symbols have been
2525      read" and "Source files for which symbols will be read in on
2526      demand".  I consider this a reasonable way to deal with the
2527      situation.  I'm not sure whether this can also happen for
2528      symtabs; it doesn't hurt to check.  */
2529
2530   /* Was NAME already seen?  */
2531   if (filename_seen (name, 1, first))
2532     {
2533       /* Yes; don't print it again.  */
2534       return;
2535     }
2536   /* No; print it and reset *FIRST.  */
2537   if (*first)
2538     {
2539       *first = 0;
2540     }
2541   else
2542     {
2543       printf_filtered (", ");
2544     }
2545
2546   wrap_here ("");
2547   fputs_filtered (name, gdb_stdout);
2548 }
2549
2550 static void
2551 sources_info (char *ignore, int from_tty)
2552 {
2553   struct symtab *s;
2554   struct partial_symtab *ps;
2555   struct objfile *objfile;
2556   int first;
2557
2558   if (!have_full_symbols () && !have_partial_symbols ())
2559     {
2560       error ("No symbol table is loaded.  Use the \"file\" command.");
2561     }
2562
2563   printf_filtered ("Source files for which symbols have been read in:\n\n");
2564
2565   first = 1;
2566   ALL_SYMTABS (objfile, s)
2567   {
2568     output_source_filename (s->filename, &first);
2569   }
2570   printf_filtered ("\n\n");
2571
2572   printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2573
2574   first = 1;
2575   ALL_PSYMTABS (objfile, ps)
2576   {
2577     if (!ps->readin)
2578       {
2579         output_source_filename (ps->filename, &first);
2580       }
2581   }
2582   printf_filtered ("\n");
2583 }
2584
2585 static int
2586 file_matches (char *file, char *files[], int nfiles)
2587 {
2588   int i;
2589
2590   if (file != NULL && nfiles != 0)
2591     {
2592       for (i = 0; i < nfiles; i++)
2593         {
2594           if (strcmp (files[i], lbasename (file)) == 0)
2595             return 1;
2596         }
2597     }
2598   else if (nfiles == 0)
2599     return 1;
2600   return 0;
2601 }
2602
2603 /* Free any memory associated with a search. */
2604 void
2605 free_search_symbols (struct symbol_search *symbols)
2606 {
2607   struct symbol_search *p;
2608   struct symbol_search *next;
2609
2610   for (p = symbols; p != NULL; p = next)
2611     {
2612       next = p->next;
2613       xfree (p);
2614     }
2615 }
2616
2617 static void
2618 do_free_search_symbols_cleanup (void *symbols)
2619 {
2620   free_search_symbols (symbols);
2621 }
2622
2623 struct cleanup *
2624 make_cleanup_free_search_symbols (struct symbol_search *symbols)
2625 {
2626   return make_cleanup (do_free_search_symbols_cleanup, symbols);
2627 }
2628
2629 /* Helper function for sort_search_symbols and qsort.  Can only
2630    sort symbols, not minimal symbols.  */
2631 static int
2632 compare_search_syms (const void *sa, const void *sb)
2633 {
2634   struct symbol_search **sym_a = (struct symbol_search **) sa;
2635   struct symbol_search **sym_b = (struct symbol_search **) sb;
2636
2637   return strcmp (SYMBOL_PRINT_NAME ((*sym_a)->symbol),
2638                  SYMBOL_PRINT_NAME ((*sym_b)->symbol));
2639 }
2640
2641 /* Sort the ``nfound'' symbols in the list after prevtail.  Leave
2642    prevtail where it is, but update its next pointer to point to
2643    the first of the sorted symbols.  */
2644 static struct symbol_search *
2645 sort_search_symbols (struct symbol_search *prevtail, int nfound)
2646 {
2647   struct symbol_search **symbols, *symp, *old_next;
2648   int i;
2649
2650   symbols = (struct symbol_search **) xmalloc (sizeof (struct symbol_search *)
2651                                                * nfound);
2652   symp = prevtail->next;
2653   for (i = 0; i < nfound; i++)
2654     {
2655       symbols[i] = symp;
2656       symp = symp->next;
2657     }
2658   /* Generally NULL.  */
2659   old_next = symp;
2660
2661   qsort (symbols, nfound, sizeof (struct symbol_search *),
2662          compare_search_syms);
2663
2664   symp = prevtail;
2665   for (i = 0; i < nfound; i++)
2666     {
2667       symp->next = symbols[i];
2668       symp = symp->next;
2669     }
2670   symp->next = old_next;
2671
2672   xfree (symbols);
2673   return symp;
2674 }
2675
2676 /* Search the symbol table for matches to the regular expression REGEXP,
2677    returning the results in *MATCHES.
2678
2679    Only symbols of KIND are searched:
2680    FUNCTIONS_DOMAIN - search all functions
2681    TYPES_DOMAIN     - search all type names
2682    METHODS_DOMAIN   - search all methods NOT IMPLEMENTED
2683    VARIABLES_DOMAIN - search all symbols, excluding functions, type names,
2684    and constants (enums)
2685
2686    free_search_symbols should be called when *MATCHES is no longer needed.
2687
2688    The results are sorted locally; each symtab's global and static blocks are
2689    separately alphabetized.
2690  */
2691 void
2692 search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
2693                 struct symbol_search **matches)
2694 {
2695   struct symtab *s;
2696   struct partial_symtab *ps;
2697   struct blockvector *bv;
2698   struct blockvector *prev_bv = 0;
2699   struct block *b;
2700   int i = 0;
2701   struct dict_iterator iter;
2702   struct symbol *sym;
2703   struct partial_symbol **psym;
2704   struct objfile *objfile;
2705   struct minimal_symbol *msymbol;
2706   char *val;
2707   int found_misc = 0;
2708   static enum minimal_symbol_type types[]
2709   =
2710   {mst_data, mst_text, mst_abs, mst_unknown};
2711   static enum minimal_symbol_type types2[]
2712   =
2713   {mst_bss, mst_file_text, mst_abs, mst_unknown};
2714   static enum minimal_symbol_type types3[]
2715   =
2716   {mst_file_data, mst_solib_trampoline, mst_abs, mst_unknown};
2717   static enum minimal_symbol_type types4[]
2718   =
2719   {mst_file_bss, mst_text, mst_abs, mst_unknown};
2720   enum minimal_symbol_type ourtype;
2721   enum minimal_symbol_type ourtype2;
2722   enum minimal_symbol_type ourtype3;
2723   enum minimal_symbol_type ourtype4;
2724   struct symbol_search *sr;
2725   struct symbol_search *psr;
2726   struct symbol_search *tail;
2727   struct cleanup *old_chain = NULL;
2728
2729   if (kind < VARIABLES_DOMAIN)
2730     error ("must search on specific domain");
2731
2732   ourtype = types[(int) (kind - VARIABLES_DOMAIN)];
2733   ourtype2 = types2[(int) (kind - VARIABLES_DOMAIN)];
2734   ourtype3 = types3[(int) (kind - VARIABLES_DOMAIN)];
2735   ourtype4 = types4[(int) (kind - VARIABLES_DOMAIN)];
2736
2737   sr = *matches = NULL;
2738   tail = NULL;
2739
2740   if (regexp != NULL)
2741     {
2742       /* Make sure spacing is right for C++ operators.
2743          This is just a courtesy to make the matching less sensitive
2744          to how many spaces the user leaves between 'operator'
2745          and <TYPENAME> or <OPERATOR>. */
2746       char *opend;
2747       char *opname = operator_chars (regexp, &opend);
2748       if (*opname)
2749         {
2750           int fix = -1;         /* -1 means ok; otherwise number of spaces needed. */
2751           if (isalpha (*opname) || *opname == '_' || *opname == '$')
2752             {
2753               /* There should 1 space between 'operator' and 'TYPENAME'. */
2754               if (opname[-1] != ' ' || opname[-2] == ' ')
2755                 fix = 1;
2756             }
2757           else
2758             {
2759               /* There should 0 spaces between 'operator' and 'OPERATOR'. */
2760               if (opname[-1] == ' ')
2761                 fix = 0;
2762             }
2763           /* If wrong number of spaces, fix it. */
2764           if (fix >= 0)
2765             {
2766               char *tmp = (char *) alloca (8 + fix + strlen (opname) + 1);
2767               sprintf (tmp, "operator%.*s%s", fix, " ", opname);
2768               regexp = tmp;
2769             }
2770         }
2771
2772       if (0 != (val = re_comp (regexp)))
2773         error ("Invalid regexp (%s): %s", val, regexp);
2774     }
2775
2776   /* Search through the partial symtabs *first* for all symbols
2777      matching the regexp.  That way we don't have to reproduce all of
2778      the machinery below. */
2779
2780   ALL_PSYMTABS (objfile, ps)
2781   {
2782     struct partial_symbol **bound, **gbound, **sbound;
2783     int keep_going = 1;
2784
2785     if (ps->readin)
2786       continue;
2787
2788     gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2789     sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2790     bound = gbound;
2791
2792     /* Go through all of the symbols stored in a partial
2793        symtab in one loop. */
2794     psym = objfile->global_psymbols.list + ps->globals_offset;
2795     while (keep_going)
2796       {
2797         if (psym >= bound)
2798           {
2799             if (bound == gbound && ps->n_static_syms != 0)
2800               {
2801                 psym = objfile->static_psymbols.list + ps->statics_offset;
2802                 bound = sbound;
2803               }
2804             else
2805               keep_going = 0;
2806             continue;
2807           }
2808         else
2809           {
2810             QUIT;
2811
2812             /* If it would match (logic taken from loop below)
2813                load the file and go on to the next one */
2814             if (file_matches (ps->filename, files, nfiles)
2815                 && ((regexp == NULL
2816                      || re_exec (SYMBOL_NATURAL_NAME (*psym)) != 0)
2817                     && ((kind == VARIABLES_DOMAIN && SYMBOL_CLASS (*psym) != LOC_TYPEDEF
2818                          && SYMBOL_CLASS (*psym) != LOC_BLOCK)
2819                         || (kind == FUNCTIONS_DOMAIN && SYMBOL_CLASS (*psym) == LOC_BLOCK)
2820                         || (kind == TYPES_DOMAIN && SYMBOL_CLASS (*psym) == LOC_TYPEDEF)
2821                         || (kind == METHODS_DOMAIN && SYMBOL_CLASS (*psym) == LOC_BLOCK))))
2822               {
2823                 PSYMTAB_TO_SYMTAB (ps);
2824                 keep_going = 0;
2825               }
2826           }
2827         psym++;
2828       }
2829   }
2830
2831   /* Here, we search through the minimal symbol tables for functions
2832      and variables that match, and force their symbols to be read.
2833      This is in particular necessary for demangled variable names,
2834      which are no longer put into the partial symbol tables.
2835      The symbol will then be found during the scan of symtabs below.
2836
2837      For functions, find_pc_symtab should succeed if we have debug info
2838      for the function, for variables we have to call lookup_symbol
2839      to determine if the variable has debug info.
2840      If the lookup fails, set found_misc so that we will rescan to print
2841      any matching symbols without debug info.
2842    */
2843
2844   if (nfiles == 0 && (kind == VARIABLES_DOMAIN || kind == FUNCTIONS_DOMAIN))
2845     {
2846       ALL_MSYMBOLS (objfile, msymbol)
2847       {
2848         if (MSYMBOL_TYPE (msymbol) == ourtype ||
2849             MSYMBOL_TYPE (msymbol) == ourtype2 ||
2850             MSYMBOL_TYPE (msymbol) == ourtype3 ||
2851             MSYMBOL_TYPE (msymbol) == ourtype4)
2852           {
2853             if (regexp == NULL
2854                 || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0)
2855               {
2856                 if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
2857                   {
2858                     /* FIXME: carlton/2003-02-04: Given that the
2859                        semantics of lookup_symbol keeps on changing
2860                        slightly, it would be a nice idea if we had a
2861                        function lookup_symbol_minsym that found the
2862                        symbol associated to a given minimal symbol (if
2863                        any).  */
2864                     if (kind == FUNCTIONS_DOMAIN
2865                         || lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
2866                                           (struct block *) NULL,
2867                                           VAR_DOMAIN,
2868                                         0, (struct symtab **) NULL) == NULL)
2869                       found_misc = 1;
2870                   }
2871               }
2872           }
2873       }
2874     }
2875
2876   ALL_SYMTABS (objfile, s)
2877   {
2878     bv = BLOCKVECTOR (s);
2879     /* Often many files share a blockvector.
2880        Scan each blockvector only once so that
2881        we don't get every symbol many times.
2882        It happens that the first symtab in the list
2883        for any given blockvector is the main file.  */
2884     if (bv != prev_bv)
2885       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
2886         {
2887           struct symbol_search *prevtail = tail;
2888           int nfound = 0;
2889           b = BLOCKVECTOR_BLOCK (bv, i);
2890           ALL_BLOCK_SYMBOLS (b, iter, sym)
2891             {
2892               QUIT;
2893               if (file_matches (s->filename, files, nfiles)
2894                   && ((regexp == NULL
2895                        || re_exec (SYMBOL_NATURAL_NAME (sym)) != 0)
2896                       && ((kind == VARIABLES_DOMAIN && SYMBOL_CLASS (sym) != LOC_TYPEDEF
2897                            && SYMBOL_CLASS (sym) != LOC_BLOCK
2898                            && SYMBOL_CLASS (sym) != LOC_CONST)
2899                           || (kind == FUNCTIONS_DOMAIN && SYMBOL_CLASS (sym) == LOC_BLOCK)
2900                           || (kind == TYPES_DOMAIN && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2901                           || (kind == METHODS_DOMAIN && SYMBOL_CLASS (sym) == LOC_BLOCK))))
2902                 {
2903                   /* match */
2904                   psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
2905                   psr->block = i;
2906                   psr->symtab = s;
2907                   psr->symbol = sym;
2908                   psr->msymbol = NULL;
2909                   psr->next = NULL;
2910                   if (tail == NULL)
2911                     sr = psr;
2912                   else
2913                     tail->next = psr;
2914                   tail = psr;
2915                   nfound ++;
2916                 }
2917             }
2918           if (nfound > 0)
2919             {
2920               if (prevtail == NULL)
2921                 {
2922                   struct symbol_search dummy;
2923
2924                   dummy.next = sr;
2925                   tail = sort_search_symbols (&dummy, nfound);
2926                   sr = dummy.next;
2927
2928                   old_chain = make_cleanup_free_search_symbols (sr);
2929                 }
2930               else
2931                 tail = sort_search_symbols (prevtail, nfound);
2932             }
2933         }
2934     prev_bv = bv;
2935   }
2936
2937   /* If there are no eyes, avoid all contact.  I mean, if there are
2938      no debug symbols, then print directly from the msymbol_vector.  */
2939
2940   if (found_misc || kind != FUNCTIONS_DOMAIN)
2941     {
2942       ALL_MSYMBOLS (objfile, msymbol)
2943       {
2944         if (MSYMBOL_TYPE (msymbol) == ourtype ||
2945             MSYMBOL_TYPE (msymbol) == ourtype2 ||
2946             MSYMBOL_TYPE (msymbol) == ourtype3 ||
2947             MSYMBOL_TYPE (msymbol) == ourtype4)
2948           {
2949             if (regexp == NULL
2950                 || re_exec (SYMBOL_NATURAL_NAME (msymbol)) != 0)
2951               {
2952                 /* Functions:  Look up by address. */
2953                 if (kind != FUNCTIONS_DOMAIN ||
2954                     (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
2955                   {
2956                     /* Variables/Absolutes:  Look up by name */
2957                     if (lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
2958                                        (struct block *) NULL, VAR_DOMAIN,
2959                                        0, (struct symtab **) NULL) == NULL)
2960                       {
2961                         /* match */
2962                         psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
2963                         psr->block = i;
2964                         psr->msymbol = msymbol;
2965                         psr->symtab = NULL;
2966                         psr->symbol = NULL;
2967                         psr->next = NULL;
2968                         if (tail == NULL)
2969                           {
2970                             sr = psr;
2971                             old_chain = make_cleanup_free_search_symbols (sr);
2972                           }
2973                         else
2974                           tail->next = psr;
2975                         tail = psr;
2976                       }
2977                   }
2978               }
2979           }
2980       }
2981     }
2982
2983   *matches = sr;
2984   if (sr != NULL)
2985     discard_cleanups (old_chain);
2986 }
2987
2988 /* Helper function for symtab_symbol_info, this function uses
2989    the data returned from search_symbols() to print information
2990    regarding the match to gdb_stdout.
2991  */
2992 static void
2993 print_symbol_info (domain_enum kind, struct symtab *s, struct symbol *sym,
2994                    int block, char *last)
2995 {
2996   if (last == NULL || strcmp (last, s->filename) != 0)
2997     {
2998       fputs_filtered ("\nFile ", gdb_stdout);
2999       fputs_filtered (s->filename, gdb_stdout);
3000       fputs_filtered (":\n", gdb_stdout);
3001     }
3002
3003   if (kind != TYPES_DOMAIN && block == STATIC_BLOCK)
3004     printf_filtered ("static ");
3005
3006   /* Typedef that is not a C++ class */
3007   if (kind == TYPES_DOMAIN
3008       && SYMBOL_DOMAIN (sym) != STRUCT_DOMAIN)
3009     typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
3010   /* variable, func, or typedef-that-is-c++-class */
3011   else if (kind < TYPES_DOMAIN ||
3012            (kind == TYPES_DOMAIN &&
3013             SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
3014     {
3015       type_print (SYMBOL_TYPE (sym),
3016                   (SYMBOL_CLASS (sym) == LOC_TYPEDEF
3017                    ? "" : SYMBOL_PRINT_NAME (sym)),
3018                   gdb_stdout, 0);
3019
3020       printf_filtered (";\n");
3021     }
3022 }
3023
3024 /* This help function for symtab_symbol_info() prints information
3025    for non-debugging symbols to gdb_stdout.
3026  */
3027 static void
3028 print_msymbol_info (struct minimal_symbol *msymbol)
3029 {
3030   char *tmp;
3031
3032   if (TARGET_ADDR_BIT <= 32)
3033     tmp = local_hex_string_custom (SYMBOL_VALUE_ADDRESS (msymbol)
3034                                    & (CORE_ADDR) 0xffffffff,
3035                                    "08l");
3036   else
3037     tmp = local_hex_string_custom (SYMBOL_VALUE_ADDRESS (msymbol),
3038                                    "016l");
3039   printf_filtered ("%s  %s\n",
3040                    tmp, SYMBOL_PRINT_NAME (msymbol));
3041 }
3042
3043 /* This is the guts of the commands "info functions", "info types", and
3044    "info variables". It calls search_symbols to find all matches and then
3045    print_[m]symbol_info to print out some useful information about the
3046    matches.
3047  */
3048 static void
3049 symtab_symbol_info (char *regexp, domain_enum kind, int from_tty)
3050 {
3051   static char *classnames[]
3052   =
3053   {"variable", "function", "type", "method"};
3054   struct symbol_search *symbols;
3055   struct symbol_search *p;
3056   struct cleanup *old_chain;
3057   char *last_filename = NULL;
3058   int first = 1;
3059
3060   /* must make sure that if we're interrupted, symbols gets freed */
3061   search_symbols (regexp, kind, 0, (char **) NULL, &symbols);
3062   old_chain = make_cleanup_free_search_symbols (symbols);
3063
3064   printf_filtered (regexp
3065                    ? "All %ss matching regular expression \"%s\":\n"
3066                    : "All defined %ss:\n",
3067                    classnames[(int) (kind - VARIABLES_DOMAIN)], regexp);
3068
3069   for (p = symbols; p != NULL; p = p->next)
3070     {
3071       QUIT;
3072
3073       if (p->msymbol != NULL)
3074         {
3075           if (first)
3076             {
3077               printf_filtered ("\nNon-debugging symbols:\n");
3078               first = 0;
3079             }
3080           print_msymbol_info (p->msymbol);
3081         }
3082       else
3083         {
3084           print_symbol_info (kind,
3085                              p->symtab,
3086                              p->symbol,
3087                              p->block,
3088                              last_filename);
3089           last_filename = p->symtab->filename;
3090         }
3091     }
3092
3093   do_cleanups (old_chain);
3094 }
3095
3096 static void
3097 variables_info (char *regexp, int from_tty)
3098 {
3099   symtab_symbol_info (regexp, VARIABLES_DOMAIN, from_tty);
3100 }
3101
3102 static void
3103 functions_info (char *regexp, int from_tty)
3104 {
3105   symtab_symbol_info (regexp, FUNCTIONS_DOMAIN, from_tty);
3106 }
3107
3108
3109 static void
3110 types_info (char *regexp, int from_tty)
3111 {
3112   symtab_symbol_info (regexp, TYPES_DOMAIN, from_tty);
3113 }
3114
3115 /* Breakpoint all functions matching regular expression. */
3116
3117 void
3118 rbreak_command_wrapper (char *regexp, int from_tty)
3119 {
3120   rbreak_command (regexp, from_tty);
3121 }
3122
3123 static void
3124 rbreak_command (char *regexp, int from_tty)
3125 {
3126   struct symbol_search *ss;
3127   struct symbol_search *p;
3128   struct cleanup *old_chain;
3129
3130   search_symbols (regexp, FUNCTIONS_DOMAIN, 0, (char **) NULL, &ss);
3131   old_chain = make_cleanup_free_search_symbols (ss);
3132
3133   for (p = ss; p != NULL; p = p->next)
3134     {
3135       if (p->msymbol == NULL)
3136         {
3137           char *string = alloca (strlen (p->symtab->filename)
3138                                  + strlen (SYMBOL_LINKAGE_NAME (p->symbol))
3139                                  + 4);
3140           strcpy (string, p->symtab->filename);
3141           strcat (string, ":'");
3142           strcat (string, SYMBOL_LINKAGE_NAME (p->symbol));
3143           strcat (string, "'");
3144           break_command (string, from_tty);
3145           print_symbol_info (FUNCTIONS_DOMAIN,
3146                              p->symtab,
3147                              p->symbol,
3148                              p->block,
3149                              p->symtab->filename);
3150         }
3151       else
3152         {
3153           break_command (SYMBOL_LINKAGE_NAME (p->msymbol), from_tty);
3154           printf_filtered ("<function, no debug info> %s;\n",
3155                            SYMBOL_PRINT_NAME (p->msymbol));
3156         }
3157     }
3158
3159   do_cleanups (old_chain);
3160 }
3161 \f
3162
3163 /* Helper routine for make_symbol_completion_list.  */
3164
3165 static int return_val_size;
3166 static int return_val_index;
3167 static char **return_val;
3168
3169 #define COMPLETION_LIST_ADD_SYMBOL(symbol, sym_text, len, text, word) \
3170       completion_list_add_name \
3171         (SYMBOL_NATURAL_NAME (symbol), (sym_text), (len), (text), (word))
3172
3173 /*  Test to see if the symbol specified by SYMNAME (which is already
3174    demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
3175    characters.  If so, add it to the current completion list. */
3176
3177 static void
3178 completion_list_add_name (char *symname, char *sym_text, int sym_text_len,
3179                           char *text, char *word)
3180 {
3181   int newsize;
3182   int i;
3183
3184   /* clip symbols that cannot match */
3185
3186   if (strncmp (symname, sym_text, sym_text_len) != 0)
3187     {
3188       return;
3189     }
3190
3191   /* We have a match for a completion, so add SYMNAME to the current list
3192      of matches. Note that the name is moved to freshly malloc'd space. */
3193
3194   {
3195     char *new;
3196     if (word == sym_text)
3197       {
3198         new = xmalloc (strlen (symname) + 5);
3199         strcpy (new, symname);
3200       }
3201     else if (word > sym_text)
3202       {
3203         /* Return some portion of symname.  */
3204         new = xmalloc (strlen (symname) + 5);
3205         strcpy (new, symname + (word - sym_text));
3206       }
3207     else
3208       {
3209         /* Return some of SYM_TEXT plus symname.  */
3210         new = xmalloc (strlen (symname) + (sym_text - word) + 5);
3211         strncpy (new, word, sym_text - word);
3212         new[sym_text - word] = '\0';
3213         strcat (new, symname);
3214       }
3215
3216     if (return_val_index + 3 > return_val_size)
3217       {
3218         newsize = (return_val_size *= 2) * sizeof (char *);
3219         return_val = (char **) xrealloc ((char *) return_val, newsize);
3220       }
3221     return_val[return_val_index++] = new;
3222     return_val[return_val_index] = NULL;
3223   }
3224 }
3225
3226 /* ObjC: In case we are completing on a selector, look as the msymbol
3227    again and feed all the selectors into the mill.  */
3228
3229 static void
3230 completion_list_objc_symbol (struct minimal_symbol *msymbol, char *sym_text,
3231                              int sym_text_len, char *text, char *word)
3232 {
3233   static char *tmp = NULL;
3234   static unsigned int tmplen = 0;
3235     
3236   char *method, *category, *selector;
3237   char *tmp2 = NULL;
3238     
3239   method = SYMBOL_NATURAL_NAME (msymbol);
3240
3241   /* Is it a method?  */
3242   if ((method[0] != '-') && (method[0] != '+'))
3243     return;
3244
3245   if (sym_text[0] == '[')
3246     /* Complete on shortened method method.  */
3247     completion_list_add_name (method + 1, sym_text, sym_text_len, text, word);
3248     
3249   while ((strlen (method) + 1) >= tmplen)
3250     {
3251       if (tmplen == 0)
3252         tmplen = 1024;
3253       else
3254         tmplen *= 2;
3255       tmp = xrealloc (tmp, tmplen);
3256     }
3257   selector = strchr (method, ' ');
3258   if (selector != NULL)
3259     selector++;
3260     
3261   category = strchr (method, '(');
3262     
3263   if ((category != NULL) && (selector != NULL))
3264     {
3265       memcpy (tmp, method, (category - method));
3266       tmp[category - method] = ' ';
3267       memcpy (tmp + (category - method) + 1, selector, strlen (selector) + 1);
3268       completion_list_add_name (tmp, sym_text, sym_text_len, text, word);
3269       if (sym_text[0] == '[')
3270         completion_list_add_name (tmp + 1, sym_text, sym_text_len, text, word);
3271     }
3272     
3273   if (selector != NULL)
3274     {
3275       /* Complete on selector only.  */
3276       strcpy (tmp, selector);
3277       tmp2 = strchr (tmp, ']');
3278       if (tmp2 != NULL)
3279         *tmp2 = '\0';
3280         
3281       completion_list_add_name (tmp, sym_text, sym_text_len, text, word);
3282     }
3283 }
3284
3285 /* Break the non-quoted text based on the characters which are in
3286    symbols. FIXME: This should probably be language-specific. */
3287
3288 static char *
3289 language_search_unquoted_string (char *text, char *p)
3290 {
3291   for (; p > text; --p)
3292     {
3293       if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
3294         continue;
3295       else
3296         {
3297           if ((current_language->la_language == language_objc))
3298             {
3299               if (p[-1] == ':')     /* might be part of a method name */
3300                 continue;
3301               else if (p[-1] == '[' && (p[-2] == '-' || p[-2] == '+'))
3302                 p -= 2;             /* beginning of a method name */
3303               else if (p[-1] == ' ' || p[-1] == '(' || p[-1] == ')')
3304                 {                   /* might be part of a method name */
3305                   char *t = p;
3306
3307                   /* Seeing a ' ' or a '(' is not conclusive evidence
3308                      that we are in the middle of a method name.  However,
3309                      finding "-[" or "+[" should be pretty un-ambiguous.
3310                      Unfortunately we have to find it now to decide.  */
3311
3312                   while (t > text)
3313                     if (isalnum (t[-1]) || t[-1] == '_' ||
3314                         t[-1] == ' '    || t[-1] == ':' ||
3315                         t[-1] == '('    || t[-1] == ')')
3316                       --t;
3317                     else
3318                       break;
3319
3320                   if (t[-1] == '[' && (t[-2] == '-' || t[-2] == '+'))
3321                     p = t - 2;      /* method name detected */
3322                   /* else we leave with p unchanged */
3323                 }
3324             }
3325           break;
3326         }
3327     }
3328   return p;
3329 }
3330
3331
3332 /* Return a NULL terminated array of all symbols (regardless of class)
3333    which begin by matching TEXT.  If the answer is no symbols, then
3334    the return value is an array which contains only a NULL pointer.
3335
3336    Problem: All of the symbols have to be copied because readline frees them.
3337    I'm not going to worry about this; hopefully there won't be that many.  */
3338
3339 char **
3340 make_symbol_completion_list (char *text, char *word)
3341 {
3342   struct symbol *sym;
3343   struct symtab *s;
3344   struct partial_symtab *ps;
3345   struct minimal_symbol *msymbol;
3346   struct objfile *objfile;
3347   struct block *b, *surrounding_static_block = 0;
3348   struct dict_iterator iter;
3349   int j;
3350   struct partial_symbol **psym;
3351   /* The symbol we are completing on.  Points in same buffer as text.  */
3352   char *sym_text;
3353   /* Length of sym_text.  */
3354   int sym_text_len;
3355
3356   /* Now look for the symbol we are supposed to complete on.
3357      FIXME: This should be language-specific.  */
3358   {
3359     char *p;
3360     char quote_found;
3361     char *quote_pos = NULL;
3362
3363     /* First see if this is a quoted string.  */
3364     quote_found = '\0';
3365     for (p = text; *p != '\0'; ++p)
3366       {
3367         if (quote_found != '\0')
3368           {
3369             if (*p == quote_found)
3370               /* Found close quote.  */
3371               quote_found = '\0';
3372             else if (*p == '\\' && p[1] == quote_found)
3373               /* A backslash followed by the quote character
3374                  doesn't end the string.  */
3375               ++p;
3376           }
3377         else if (*p == '\'' || *p == '"')
3378           {
3379             quote_found = *p;
3380             quote_pos = p;
3381           }
3382       }
3383     if (quote_found == '\'')
3384       /* A string within single quotes can be a symbol, so complete on it.  */
3385       sym_text = quote_pos + 1;
3386     else if (quote_found == '"')
3387       /* A double-quoted string is never a symbol, nor does it make sense
3388          to complete it any other way.  */
3389       {
3390         return_val = (char **) xmalloc (sizeof (char *));
3391         return_val[0] = NULL;
3392         return return_val;
3393       }
3394     else
3395       {
3396         /* It is not a quoted string.  Break it based on the characters
3397            which are in symbols.  */
3398         while (p > text)
3399           {
3400             if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
3401               --p;
3402             else
3403               break;
3404           }
3405         sym_text = p;
3406       }
3407   }
3408
3409   sym_text_len = strlen (sym_text);
3410
3411   return_val_size = 100;
3412   return_val_index = 0;
3413   return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
3414   return_val[0] = NULL;
3415
3416   /* Look through the partial symtabs for all symbols which begin
3417      by matching SYM_TEXT.  Add each one that you find to the list.  */
3418
3419   ALL_PSYMTABS (objfile, ps)
3420   {
3421     /* If the psymtab's been read in we'll get it when we search
3422        through the blockvector.  */
3423     if (ps->readin)
3424       continue;
3425
3426     for (psym = objfile->global_psymbols.list + ps->globals_offset;
3427          psym < (objfile->global_psymbols.list + ps->globals_offset
3428                  + ps->n_global_syms);
3429          psym++)
3430       {
3431         /* If interrupted, then quit. */
3432         QUIT;
3433         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
3434       }
3435
3436     for (psym = objfile->static_psymbols.list + ps->statics_offset;
3437          psym < (objfile->static_psymbols.list + ps->statics_offset
3438                  + ps->n_static_syms);
3439          psym++)
3440       {
3441         QUIT;
3442         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
3443       }
3444   }
3445
3446   /* At this point scan through the misc symbol vectors and add each
3447      symbol you find to the list.  Eventually we want to ignore
3448      anything that isn't a text symbol (everything else will be
3449      handled by the psymtab code above).  */
3450
3451   ALL_MSYMBOLS (objfile, msymbol)
3452   {
3453     QUIT;
3454     COMPLETION_LIST_ADD_SYMBOL (msymbol, sym_text, sym_text_len, text, word);
3455     
3456     completion_list_objc_symbol (msymbol, sym_text, sym_text_len, text, word);
3457   }
3458
3459   /* Search upwards from currently selected frame (so that we can
3460      complete on local vars.  */
3461
3462   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
3463     {
3464       if (!BLOCK_SUPERBLOCK (b))
3465         {
3466           surrounding_static_block = b;         /* For elmin of dups */
3467         }
3468
3469       /* Also catch fields of types defined in this places which match our
3470          text string.  Only complete on types visible from current context. */
3471
3472       ALL_BLOCK_SYMBOLS (b, iter, sym)
3473         {
3474           QUIT;
3475           COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3476           if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
3477             {
3478               struct type *t = SYMBOL_TYPE (sym);
3479               enum type_code c = TYPE_CODE (t);
3480
3481               if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
3482                 {
3483                   for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
3484                     {
3485                       if (TYPE_FIELD_NAME (t, j))
3486                         {
3487                           completion_list_add_name (TYPE_FIELD_NAME (t, j),
3488                                         sym_text, sym_text_len, text, word);
3489                         }
3490                     }
3491                 }
3492             }
3493         }
3494     }
3495
3496   /* Go through the symtabs and check the externs and statics for
3497      symbols which match.  */
3498
3499   ALL_SYMTABS (objfile, s)
3500   {
3501     QUIT;
3502     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3503     ALL_BLOCK_SYMBOLS (b, iter, sym)
3504       {
3505         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3506       }
3507   }
3508
3509   ALL_SYMTABS (objfile, s)
3510   {
3511     QUIT;
3512     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3513     /* Don't do this block twice.  */
3514     if (b == surrounding_static_block)
3515       continue;
3516     ALL_BLOCK_SYMBOLS (b, iter, sym)
3517       {
3518         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3519       }
3520   }
3521
3522   return (return_val);
3523 }
3524
3525 /* Like make_symbol_completion_list, but returns a list of symbols
3526    defined in a source file FILE.  */
3527
3528 char **
3529 make_file_symbol_completion_list (char *text, char *word, char *srcfile)
3530 {
3531   struct symbol *sym;
3532   struct symtab *s;
3533   struct block *b;
3534   struct dict_iterator iter;
3535   /* The symbol we are completing on.  Points in same buffer as text.  */
3536   char *sym_text;
3537   /* Length of sym_text.  */
3538   int sym_text_len;
3539
3540   /* Now look for the symbol we are supposed to complete on.
3541      FIXME: This should be language-specific.  */
3542   {
3543     char *p;
3544     char quote_found;
3545     char *quote_pos = NULL;
3546
3547     /* First see if this is a quoted string.  */
3548     quote_found = '\0';
3549     for (p = text; *p != '\0'; ++p)
3550       {
3551         if (quote_found != '\0')
3552           {
3553             if (*p == quote_found)
3554               /* Found close quote.  */
3555               quote_found = '\0';
3556             else if (*p == '\\' && p[1] == quote_found)
3557               /* A backslash followed by the quote character
3558                  doesn't end the string.  */
3559               ++p;
3560           }
3561         else if (*p == '\'' || *p == '"')
3562           {
3563             quote_found = *p;
3564             quote_pos = p;
3565           }
3566       }
3567     if (quote_found == '\'')
3568       /* A string within single quotes can be a symbol, so complete on it.  */
3569       sym_text = quote_pos + 1;
3570     else if (quote_found == '"')
3571       /* A double-quoted string is never a symbol, nor does it make sense
3572          to complete it any other way.  */
3573       {
3574         return_val = (char **) xmalloc (sizeof (char *));
3575         return_val[0] = NULL;
3576         return return_val;
3577       }
3578     else
3579       {
3580         /* Not a quoted string.  */
3581         sym_text = language_search_unquoted_string (text, p);
3582       }
3583   }
3584
3585   sym_text_len = strlen (sym_text);
3586
3587   return_val_size = 10;
3588   return_val_index = 0;
3589   return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
3590   return_val[0] = NULL;
3591
3592   /* Find the symtab for SRCFILE (this loads it if it was not yet read
3593      in).  */
3594   s = lookup_symtab (srcfile);
3595   if (s == NULL)
3596     {
3597       /* Maybe they typed the file with leading directories, while the
3598          symbol tables record only its basename.  */
3599       const char *tail = lbasename (srcfile);
3600
3601       if (tail > srcfile)
3602         s = lookup_symtab (tail);
3603     }
3604
3605   /* If we have no symtab for that file, return an empty list.  */
3606   if (s == NULL)
3607     return (return_val);
3608
3609   /* Go through this symtab and check the externs and statics for
3610      symbols which match.  */
3611
3612   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3613   ALL_BLOCK_SYMBOLS (b, iter, sym)
3614     {
3615       COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3616     }
3617
3618   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3619   ALL_BLOCK_SYMBOLS (b, iter, sym)
3620     {
3621       COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
3622     }
3623
3624   return (return_val);
3625 }
3626
3627 /* A helper function for make_source_files_completion_list.  It adds
3628    another file name to a list of possible completions, growing the
3629    list as necessary.  */
3630
3631 static void
3632 add_filename_to_list (const char *fname, char *text, char *word,
3633                       char ***list, int *list_used, int *list_alloced)
3634 {
3635   char *new;
3636   size_t fnlen = strlen (fname);
3637
3638   if (*list_used + 1 >= *list_alloced)
3639     {
3640       *list_alloced *= 2;
3641       *list = (char **) xrealloc ((char *) *list,
3642                                   *list_alloced * sizeof (char *));
3643     }
3644
3645   if (word == text)
3646     {
3647       /* Return exactly fname.  */
3648       new = xmalloc (fnlen + 5);
3649       strcpy (new, fname);
3650     }
3651   else if (word > text)
3652     {
3653       /* Return some portion of fname.  */
3654       new = xmalloc (fnlen + 5);
3655       strcpy (new, fname + (word - text));
3656     }
3657   else
3658     {
3659       /* Return some of TEXT plus fname.  */
3660       new = xmalloc (fnlen + (text - word) + 5);
3661       strncpy (new, word, text - word);
3662       new[text - word] = '\0';
3663       strcat (new, fname);
3664     }
3665   (*list)[*list_used] = new;
3666   (*list)[++*list_used] = NULL;
3667 }
3668
3669 static int
3670 not_interesting_fname (const char *fname)
3671 {
3672   static const char *illegal_aliens[] = {
3673     "_globals_",        /* inserted by coff_symtab_read */
3674     NULL
3675   };
3676   int i;
3677
3678   for (i = 0; illegal_aliens[i]; i++)
3679     {
3680       if (strcmp (fname, illegal_aliens[i]) == 0)
3681         return 1;
3682     }
3683   return 0;
3684 }
3685
3686 /* Return a NULL terminated array of all source files whose names
3687    begin with matching TEXT.  The file names are looked up in the
3688    symbol tables of this program.  If the answer is no matchess, then
3689    the return value is an array which contains only a NULL pointer.  */
3690
3691 char **
3692 make_source_files_completion_list (char *text, char *word)
3693 {
3694   struct symtab *s;
3695   struct partial_symtab *ps;
3696   struct objfile *objfile;
3697   int first = 1;
3698   int list_alloced = 1;
3699   int list_used = 0;
3700   size_t text_len = strlen (text);
3701   char **list = (char **) xmalloc (list_alloced * sizeof (char *));
3702   const char *base_name;
3703
3704   list[0] = NULL;
3705
3706   if (!have_full_symbols () && !have_partial_symbols ())
3707     return list;
3708
3709   ALL_SYMTABS (objfile, s)
3710     {
3711       if (not_interesting_fname (s->filename))
3712         continue;
3713       if (!filename_seen (s->filename, 1, &first)
3714 #if HAVE_DOS_BASED_FILE_SYSTEM
3715           && strncasecmp (s->filename, text, text_len) == 0
3716 #else
3717           && strncmp (s->filename, text, text_len) == 0
3718 #endif
3719           )
3720         {
3721           /* This file matches for a completion; add it to the current
3722              list of matches.  */
3723           add_filename_to_list (s->filename, text, word,
3724                                 &list, &list_used, &list_alloced);
3725         }
3726       else
3727         {
3728           /* NOTE: We allow the user to type a base name when the
3729              debug info records leading directories, but not the other
3730              way around.  This is what subroutines of breakpoint
3731              command do when they parse file names.  */
3732           base_name = lbasename (s->filename);
3733           if (base_name != s->filename
3734               && !filename_seen (base_name, 1, &first)
3735 #if HAVE_DOS_BASED_FILE_SYSTEM
3736               && strncasecmp (base_name, text, text_len) == 0
3737 #else
3738               && strncmp (base_name, text, text_len) == 0
3739 #endif
3740               )
3741             add_filename_to_list (base_name, text, word,
3742                                   &list, &list_used, &list_alloced);
3743         }
3744     }
3745
3746   ALL_PSYMTABS (objfile, ps)
3747     {
3748       if (not_interesting_fname (ps->filename))
3749         continue;
3750       if (!ps->readin)
3751         {
3752           if (!filename_seen (ps->filename, 1, &first)
3753 #if HAVE_DOS_BASED_FILE_SYSTEM
3754               && strncasecmp (ps->filename, text, text_len) == 0
3755 #else
3756               && strncmp (ps->filename, text, text_len) == 0
3757 #endif
3758               )
3759             {
3760               /* This file matches for a completion; add it to the
3761                  current list of matches.  */
3762               add_filename_to_list (ps->filename, text, word,
3763                                     &list, &list_used, &list_alloced);
3764
3765             }
3766           else
3767             {
3768               base_name = lbasename (ps->filename);
3769               if (base_name != ps->filename
3770                   && !filename_seen (base_name, 1, &first)
3771 #if HAVE_DOS_BASED_FILE_SYSTEM
3772                   && strncasecmp (base_name, text, text_len) == 0
3773 #else
3774                   && strncmp (base_name, text, text_len) == 0
3775 #endif
3776                   )
3777                 add_filename_to_list (base_name, text, word,
3778                                       &list, &list_used, &list_alloced);
3779             }
3780         }
3781     }
3782
3783   return list;
3784 }
3785
3786 /* Determine if PC is in the prologue of a function.  The prologue is the area
3787    between the first instruction of a function, and the first executable line.
3788    Returns 1 if PC *might* be in prologue, 0 if definately *not* in prologue.
3789
3790    If non-zero, func_start is where we think the prologue starts, possibly
3791    by previous examination of symbol table information.
3792  */
3793
3794 int
3795 in_prologue (CORE_ADDR pc, CORE_ADDR func_start)
3796 {
3797   struct symtab_and_line sal;
3798   CORE_ADDR func_addr, func_end;
3799
3800   /* We have several sources of information we can consult to figure
3801      this out.
3802      - Compilers usually emit line number info that marks the prologue
3803        as its own "source line".  So the ending address of that "line"
3804        is the end of the prologue.  If available, this is the most
3805        reliable method.
3806      - The minimal symbols and partial symbols, which can usually tell
3807        us the starting and ending addresses of a function.
3808      - If we know the function's start address, we can call the
3809        architecture-defined SKIP_PROLOGUE function to analyze the
3810        instruction stream and guess where the prologue ends.
3811      - Our `func_start' argument; if non-zero, this is the caller's
3812        best guess as to the function's entry point.  At the time of
3813        this writing, handle_inferior_event doesn't get this right, so
3814        it should be our last resort.  */
3815
3816   /* Consult the partial symbol table, to find which function
3817      the PC is in.  */
3818   if (! find_pc_partial_function (pc, NULL, &func_addr, &func_end))
3819     {
3820       CORE_ADDR prologue_end;
3821
3822       /* We don't even have minsym information, so fall back to using
3823          func_start, if given.  */
3824       if (! func_start)
3825         return 1;               /* We *might* be in a prologue.  */
3826
3827       prologue_end = SKIP_PROLOGUE (func_start);
3828
3829       return func_start <= pc && pc < prologue_end;
3830     }
3831
3832   /* If we have line number information for the function, that's
3833      usually pretty reliable.  */
3834   sal = find_pc_line (func_addr, 0);
3835
3836   /* Now sal describes the source line at the function's entry point,
3837      which (by convention) is the prologue.  The end of that "line",
3838      sal.end, is the end of the prologue.
3839
3840      Note that, for functions whose source code is all on a single
3841      line, the line number information doesn't always end up this way.
3842      So we must verify that our purported end-of-prologue address is
3843      *within* the function, not at its start or end.  */
3844   if (sal.line == 0
3845       || sal.end <= func_addr
3846       || func_end <= sal.end)
3847     {
3848       /* We don't have any good line number info, so use the minsym
3849          information, together with the architecture-specific prologue
3850          scanning code.  */
3851       CORE_ADDR prologue_end = SKIP_PROLOGUE (func_addr);
3852
3853       return func_addr <= pc && pc < prologue_end;
3854     }
3855
3856   /* We have line number info, and it looks good.  */
3857   return func_addr <= pc && pc < sal.end;
3858 }
3859
3860 \f
3861 struct symtabs_and_lines
3862 decode_line_spec (char *string, int funfirstline)
3863 {
3864   struct symtabs_and_lines sals;
3865   struct symtab_and_line cursal;
3866   
3867   if (string == 0)
3868     error ("Empty line specification.");
3869     
3870   /* We use whatever is set as the current source line. We do not try
3871      and get a default  or it will recursively call us! */  
3872   cursal = get_current_source_symtab_and_line ();
3873   
3874   sals = decode_line_1 (&string, funfirstline,
3875                         cursal.symtab, cursal.line,
3876                         (char ***) NULL);
3877
3878   if (*string)
3879     error ("Junk at end of line specification: %s", string);
3880   return sals;
3881 }
3882
3883 /* Track MAIN */
3884 static char *name_of_main;
3885
3886 void
3887 set_main_name (const char *name)
3888 {
3889   if (name_of_main != NULL)
3890     {
3891       xfree (name_of_main);
3892       name_of_main = NULL;
3893     }
3894   if (name != NULL)
3895     {
3896       name_of_main = xstrdup (name);
3897     }
3898 }
3899
3900 char *
3901 main_name (void)
3902 {
3903   if (name_of_main != NULL)
3904     return name_of_main;
3905   else
3906     return "main";
3907 }
3908
3909
3910 void
3911 _initialize_symtab (void)
3912 {
3913   add_info ("variables", variables_info,
3914          "All global and static variable names, or those matching REGEXP.");
3915   if (dbx_commands)
3916     add_com ("whereis", class_info, variables_info,
3917          "All global and static variable names, or those matching REGEXP.");
3918
3919   add_info ("functions", functions_info,
3920             "All function names, or those matching REGEXP.");
3921
3922   
3923   /* FIXME:  This command has at least the following problems:
3924      1.  It prints builtin types (in a very strange and confusing fashion).
3925      2.  It doesn't print right, e.g. with
3926      typedef struct foo *FOO
3927      type_print prints "FOO" when we want to make it (in this situation)
3928      print "struct foo *".
3929      I also think "ptype" or "whatis" is more likely to be useful (but if
3930      there is much disagreement "info types" can be fixed).  */
3931   add_info ("types", types_info,
3932             "All type names, or those matching REGEXP.");
3933
3934   add_info ("sources", sources_info,
3935             "Source files in the program.");
3936
3937   add_com ("rbreak", class_breakpoint, rbreak_command,
3938            "Set a breakpoint for all functions matching REGEXP.");
3939
3940   if (xdb_commands)
3941     {
3942       add_com ("lf", class_info, sources_info, "Source files in the program");
3943       add_com ("lg", class_info, variables_info,
3944          "All global and static variable names, or those matching REGEXP.");
3945     }
3946
3947   /* Initialize the one built-in type that isn't language dependent... */
3948   builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
3949                                   "<unknown type>", (struct objfile *) NULL);
3950 }