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