* symtab.c: Use paddr_nz() to print addresses.
[external/binutils.git] / gdb / symtab.c
1 /* Symbol table lookup for the GNU debugger, GDB.
2    Copyright 1986, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
3    Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 #include "defs.h"
23 #include "symtab.h"
24 #include "gdbtypes.h"
25 #include "gdbcore.h"
26 #include "frame.h"
27 #include "target.h"
28 #include "value.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "gdbcmd.h"
32 #include "call-cmds.h"
33 #include "gdb_regex.h"
34 #include "expression.h"
35 #include "language.h"
36 #include "demangle.h"
37 #include "inferior.h"
38
39 #include "obstack.h"
40
41 #include <sys/types.h>
42 #include <fcntl.h>
43 #include "gdb_string.h"
44 #include "gdb_stat.h"
45 #include <ctype.h>
46
47 /* Prototype for one function in parser-defs.h,
48    instead of including that entire file. */
49
50 extern char *find_template_name_end (char *);
51
52 /* Prototypes for local functions */
53
54 static int find_methods (struct type *, char *, struct symbol **);
55
56 static void completion_list_add_name (char *, char *, int, char *, char *);
57
58 static void build_canonical_line_spec (struct symtab_and_line *,
59                                        char *, char ***);
60
61 static struct symtabs_and_lines decode_line_2 (struct symbol *[],
62                                                int, int, char ***);
63
64 static void rbreak_command (char *, int);
65
66 static void types_info (char *, int);
67
68 static void functions_info (char *, int);
69
70 static void variables_info (char *, int);
71
72 static void sources_info (char *, int);
73
74 static void output_source_filename (char *, int *);
75
76 char *operator_chars (char *, char **);
77
78 static int find_line_common (struct linetable *, int, int *);
79
80 static struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
81                                                      const char *, int,
82                                                      namespace_enum);
83
84 static struct partial_symbol *fixup_psymbol_section (struct
85                                                      partial_symbol *,
86                                                      struct objfile *);
87
88 static struct symtab *lookup_symtab_1 (char *);
89
90 static void cplusplus_hint (char *);
91
92 static struct symbol *find_active_alias (struct symbol *sym, CORE_ADDR addr);
93
94 /* This flag is used in hppa-tdep.c, and set in hp-symtab-read.c */
95 /* Signals the presence of objects compiled by HP compilers */
96 int hp_som_som_object_present = 0;
97
98 static void fixup_section (struct general_symbol_info *, struct objfile *);
99
100 static int file_matches (char *, char **, int);
101
102 static void print_symbol_info (namespace_enum,
103                                struct symtab *, struct symbol *, int, char *);
104
105 static void print_msymbol_info (struct minimal_symbol *);
106
107 static void symtab_symbol_info (char *, namespace_enum, int);
108
109 static void overload_list_add_symbol (struct symbol *sym, char *oload_name);
110
111 void _initialize_symtab (void);
112
113 /* */
114
115 /* The single non-language-specific builtin type */
116 struct type *builtin_type_error;
117
118 /* Block in which the most recently searched-for symbol was found.
119    Might be better to make this a parameter to lookup_symbol and 
120    value_of_this. */
121
122 const struct block *block_found;
123
124 char no_symtab_msg[] = "No symbol table is loaded.  Use the \"file\" command.";
125
126 /* While the C++ support is still in flux, issue a possibly helpful hint on
127    using the new command completion feature on single quoted demangled C++
128    symbols.  Remove when loose ends are cleaned up.   FIXME -fnf */
129
130 static void
131 cplusplus_hint (name)
132      char *name;
133 {
134   while (*name == '\'')
135     name++;
136   printf_filtered ("Hint: try '%s<TAB> or '%s<ESC-?>\n", name, name);
137   printf_filtered ("(Note leading single quote.)\n");
138 }
139
140 /* Check for a symtab of a specific name; first in symtabs, then in
141    psymtabs.  *If* there is no '/' in the name, a match after a '/'
142    in the symtab filename will also work.  */
143
144 static struct symtab *
145 lookup_symtab_1 (name)
146      char *name;
147 {
148   register struct symtab *s;
149   register struct partial_symtab *ps;
150   register char *slash;
151   register struct objfile *objfile;
152
153 got_symtab:
154
155   /* First, search for an exact match */
156
157   ALL_SYMTABS (objfile, s)
158     if (STREQ (name, s->filename))
159     return s;
160
161   slash = strchr (name, '/');
162
163   /* Now, search for a matching tail (only if name doesn't have any dirs) */
164
165   if (!slash)
166     ALL_SYMTABS (objfile, s)
167     {
168       char *p = s->filename;
169       char *tail = strrchr (p, '/');
170
171       if (tail)
172         p = tail + 1;
173
174       if (STREQ (p, name))
175         return s;
176     }
177
178   /* Same search rules as above apply here, but now we look thru the
179      psymtabs.  */
180
181   ps = lookup_partial_symtab (name);
182   if (!ps)
183     return (NULL);
184
185   if (ps->readin)
186     error ("Internal: readin %s pst for `%s' found when no symtab found.",
187            ps->filename, name);
188
189   s = PSYMTAB_TO_SYMTAB (ps);
190
191   if (s)
192     return s;
193
194   /* At this point, we have located the psymtab for this file, but
195      the conversion to a symtab has failed.  This usually happens
196      when we are looking up an include file.  In this case,
197      PSYMTAB_TO_SYMTAB doesn't return a symtab, even though one has
198      been created.  So, we need to run through the symtabs again in
199      order to find the file.
200      XXX - This is a crock, and should be fixed inside of the the
201      symbol parsing routines. */
202   goto got_symtab;
203 }
204
205 /* Lookup the symbol table of a source file named NAME.  Try a couple
206    of variations if the first lookup doesn't work.  */
207
208 struct symtab *
209 lookup_symtab (name)
210      char *name;
211 {
212   register struct symtab *s;
213 #if 0
214   register char *copy;
215 #endif
216
217   s = lookup_symtab_1 (name);
218   if (s)
219     return s;
220
221 #if 0
222   /* This screws c-exp.y:yylex if there is both a type "tree" and a symtab
223      "tree.c".  */
224
225   /* If name not found as specified, see if adding ".c" helps.  */
226   /* Why is this?  Is it just a user convenience?  (If so, it's pretty
227      questionable in the presence of C++, FORTRAN, etc.).  It's not in
228      the GDB manual.  */
229
230   copy = (char *) alloca (strlen (name) + 3);
231   strcpy (copy, name);
232   strcat (copy, ".c");
233   s = lookup_symtab_1 (copy);
234   if (s)
235     return s;
236 #endif /* 0 */
237
238   /* We didn't find anything; die.  */
239   return 0;
240 }
241
242 /* Lookup the partial symbol table of a source file named NAME.
243    *If* there is no '/' in the name, a match after a '/'
244    in the psymtab filename will also work.  */
245
246 struct partial_symtab *
247 lookup_partial_symtab (name)
248      char *name;
249 {
250   register struct partial_symtab *pst;
251   register struct objfile *objfile;
252
253   ALL_PSYMTABS (objfile, pst)
254   {
255     if (STREQ (name, pst->filename))
256       {
257         return (pst);
258       }
259   }
260
261   /* Now, search for a matching tail (only if name doesn't have any dirs) */
262
263   if (!strchr (name, '/'))
264     ALL_PSYMTABS (objfile, pst)
265     {
266       char *p = pst->filename;
267       char *tail = strrchr (p, '/');
268
269       if (tail)
270         p = tail + 1;
271
272       if (STREQ (p, name))
273         return (pst);
274     }
275
276   return (NULL);
277 }
278 \f
279 /* Mangle a GDB method stub type.  This actually reassembles the pieces of the
280    full method name, which consist of the class name (from T), the unadorned
281    method name from METHOD_ID, and the signature for the specific overload,
282    specified by SIGNATURE_ID.  Note that this function is g++ specific. */
283
284 char *
285 gdb_mangle_name (type, method_id, signature_id)
286      struct type *type;
287      int method_id, signature_id;
288 {
289   int mangled_name_len;
290   char *mangled_name;
291   struct fn_field *f = TYPE_FN_FIELDLIST1 (type, method_id);
292   struct fn_field *method = &f[signature_id];
293   char *field_name = TYPE_FN_FIELDLIST_NAME (type, method_id);
294   char *physname = TYPE_FN_FIELD_PHYSNAME (f, signature_id);
295   char *newname = type_name_no_tag (type);
296
297   /* Does the form of physname indicate that it is the full mangled name
298      of a constructor (not just the args)?  */
299   int is_full_physname_constructor;
300
301   int is_constructor;
302   int is_destructor = DESTRUCTOR_PREFIX_P (physname);
303   /* Need a new type prefix.  */
304   char *const_prefix = method->is_const ? "C" : "";
305   char *volatile_prefix = method->is_volatile ? "V" : "";
306   char buf[20];
307   int len = (newname == NULL ? 0 : strlen (newname));
308
309   is_full_physname_constructor =
310     ((physname[0] == '_' && physname[1] == '_' &&
311       (isdigit (physname[2]) || physname[2] == 'Q' || physname[2] == 't'))
312      || (strncmp (physname, "__ct", 4) == 0));
313
314   is_constructor =
315     is_full_physname_constructor || (newname && STREQ (field_name, newname));
316
317   if (!is_destructor)
318     is_destructor = (strncmp (physname, "__dt", 4) == 0);
319
320   if (is_destructor || is_full_physname_constructor)
321     {
322       mangled_name = (char *) xmalloc (strlen (physname) + 1);
323       strcpy (mangled_name, physname);
324       return mangled_name;
325     }
326
327   if (len == 0)
328     {
329       sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
330     }
331   else if (physname[0] == 't' || physname[0] == 'Q')
332     {
333       /* The physname for template and qualified methods already includes
334          the class name.  */
335       sprintf (buf, "__%s%s", const_prefix, volatile_prefix);
336       newname = NULL;
337       len = 0;
338     }
339   else
340     {
341       sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
342     }
343   mangled_name_len = ((is_constructor ? 0 : strlen (field_name))
344                       + strlen (buf) + len
345                       + strlen (physname)
346                       + 1);
347
348   /* Only needed for GNU-mangled names.  ANSI-mangled names
349      work with the normal mechanisms.  */
350   if (OPNAME_PREFIX_P (field_name))
351     {
352       const char *opname = cplus_mangle_opname (field_name + 3, 0);
353       if (opname == NULL)
354         error ("No mangling for \"%s\"", field_name);
355       mangled_name_len += strlen (opname);
356       mangled_name = (char *) xmalloc (mangled_name_len);
357
358       strncpy (mangled_name, field_name, 3);
359       mangled_name[3] = '\0';
360       strcat (mangled_name, opname);
361     }
362   else
363     {
364       mangled_name = (char *) xmalloc (mangled_name_len);
365       if (is_constructor)
366         mangled_name[0] = '\0';
367       else
368         strcpy (mangled_name, field_name);
369     }
370   strcat (mangled_name, buf);
371   /* If the class doesn't have a name, i.e. newname NULL, then we just
372      mangle it using 0 for the length of the class.  Thus it gets mangled
373      as something starting with `::' rather than `classname::'. */
374   if (newname != NULL)
375     strcat (mangled_name, newname);
376
377   strcat (mangled_name, physname);
378   return (mangled_name);
379 }
380 \f
381
382
383 /* Find which partial symtab on contains PC and SECTION.  Return 0 if none.  */
384
385 struct partial_symtab *
386 find_pc_sect_psymtab (pc, section)
387      CORE_ADDR pc;
388      asection *section;
389 {
390   register struct partial_symtab *pst;
391   register struct objfile *objfile;
392
393   ALL_PSYMTABS (objfile, pst)
394   {
395     if (pc >= pst->textlow && pc < pst->texthigh)
396       {
397         struct minimal_symbol *msymbol;
398         struct partial_symtab *tpst;
399
400         /* An objfile that has its functions reordered might have
401            many partial symbol tables containing the PC, but
402            we want the partial symbol table that contains the
403            function containing the PC.  */
404         if (!(objfile->flags & OBJF_REORDERED) &&
405             section == 0)       /* can't validate section this way */
406           return (pst);
407
408         msymbol = lookup_minimal_symbol_by_pc_section (pc, section);
409         if (msymbol == NULL)
410           return (pst);
411
412         for (tpst = pst; tpst != NULL; tpst = tpst->next)
413           {
414             if (pc >= tpst->textlow && pc < tpst->texthigh)
415               {
416                 struct partial_symbol *p;
417
418                 p = find_pc_sect_psymbol (tpst, pc, section);
419                 if (p != NULL
420                     && SYMBOL_VALUE_ADDRESS (p)
421                     == SYMBOL_VALUE_ADDRESS (msymbol))
422                   return (tpst);
423               }
424           }
425         return (pst);
426       }
427   }
428   return (NULL);
429 }
430
431 /* Find which partial symtab contains PC.  Return 0 if none. 
432    Backward compatibility, no section */
433
434 struct partial_symtab *
435 find_pc_psymtab (pc)
436      CORE_ADDR pc;
437 {
438   return find_pc_sect_psymtab (pc, find_pc_mapped_section (pc));
439 }
440
441 /* Find which partial symbol within a psymtab matches PC and SECTION.  
442    Return 0 if none.  Check all psymtabs if PSYMTAB is 0.  */
443
444 struct partial_symbol *
445 find_pc_sect_psymbol (psymtab, pc, section)
446      struct partial_symtab *psymtab;
447      CORE_ADDR pc;
448      asection *section;
449 {
450   struct partial_symbol *best = NULL, *p, **pp;
451   CORE_ADDR best_pc;
452
453   if (!psymtab)
454     psymtab = find_pc_sect_psymtab (pc, section);
455   if (!psymtab)
456     return 0;
457
458   /* Cope with programs that start at address 0 */
459   best_pc = (psymtab->textlow != 0) ? psymtab->textlow - 1 : 0;
460
461   /* Search the global symbols as well as the static symbols, so that
462      find_pc_partial_function doesn't use a minimal symbol and thus
463      cache a bad endaddr.  */
464   for (pp = psymtab->objfile->global_psymbols.list + psymtab->globals_offset;
465     (pp - (psymtab->objfile->global_psymbols.list + psymtab->globals_offset)
466      < psymtab->n_global_syms);
467        pp++)
468     {
469       p = *pp;
470       if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
471           && SYMBOL_CLASS (p) == LOC_BLOCK
472           && pc >= SYMBOL_VALUE_ADDRESS (p)
473           && (SYMBOL_VALUE_ADDRESS (p) > best_pc
474               || (psymtab->textlow == 0
475                   && best_pc == 0 && SYMBOL_VALUE_ADDRESS (p) == 0)))
476         {
477           if (section)          /* match on a specific section */
478             {
479               fixup_psymbol_section (p, psymtab->objfile);
480               if (SYMBOL_BFD_SECTION (p) != section)
481                 continue;
482             }
483           best_pc = SYMBOL_VALUE_ADDRESS (p);
484           best = p;
485         }
486     }
487
488   for (pp = psymtab->objfile->static_psymbols.list + psymtab->statics_offset;
489     (pp - (psymtab->objfile->static_psymbols.list + psymtab->statics_offset)
490      < psymtab->n_static_syms);
491        pp++)
492     {
493       p = *pp;
494       if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
495           && SYMBOL_CLASS (p) == LOC_BLOCK
496           && pc >= SYMBOL_VALUE_ADDRESS (p)
497           && (SYMBOL_VALUE_ADDRESS (p) > best_pc
498               || (psymtab->textlow == 0
499                   && best_pc == 0 && SYMBOL_VALUE_ADDRESS (p) == 0)))
500         {
501           if (section)          /* match on a specific section */
502             {
503               fixup_psymbol_section (p, psymtab->objfile);
504               if (SYMBOL_BFD_SECTION (p) != section)
505                 continue;
506             }
507           best_pc = SYMBOL_VALUE_ADDRESS (p);
508           best = p;
509         }
510     }
511
512   return best;
513 }
514
515 /* Find which partial symbol within a psymtab matches PC.  Return 0 if none.  
516    Check all psymtabs if PSYMTAB is 0.  Backwards compatibility, no section. */
517
518 struct partial_symbol *
519 find_pc_psymbol (psymtab, pc)
520      struct partial_symtab *psymtab;
521      CORE_ADDR pc;
522 {
523   return find_pc_sect_psymbol (psymtab, pc, find_pc_mapped_section (pc));
524 }
525 \f
526 /* Debug symbols usually don't have section information.  We need to dig that
527    out of the minimal symbols and stash that in the debug symbol.  */
528
529 static void
530 fixup_section (ginfo, objfile)
531      struct general_symbol_info *ginfo;
532      struct objfile *objfile;
533 {
534   struct minimal_symbol *msym;
535   msym = lookup_minimal_symbol (ginfo->name, NULL, objfile);
536
537   if (msym)
538     ginfo->bfd_section = SYMBOL_BFD_SECTION (msym);
539 }
540
541 struct symbol *
542 fixup_symbol_section (sym, objfile)
543      struct symbol *sym;
544      struct objfile *objfile;
545 {
546   if (!sym)
547     return NULL;
548
549   if (SYMBOL_BFD_SECTION (sym))
550     return sym;
551
552   fixup_section (&sym->ginfo, objfile);
553
554   return sym;
555 }
556
557 static struct partial_symbol *
558 fixup_psymbol_section (psym, objfile)
559      struct partial_symbol *psym;
560      struct objfile *objfile;
561 {
562   if (!psym)
563     return NULL;
564
565   if (SYMBOL_BFD_SECTION (psym))
566     return psym;
567
568   fixup_section (&psym->ginfo, objfile);
569
570   return psym;
571 }
572
573 /* Find the definition for a specified symbol name NAME
574    in namespace NAMESPACE, visible from lexical block BLOCK.
575    Returns the struct symbol pointer, or zero if no symbol is found.
576    If SYMTAB is non-NULL, store the symbol table in which the
577    symbol was found there, or NULL if not found.
578    C++: if IS_A_FIELD_OF_THIS is nonzero on entry, check to see if
579    NAME is a field of the current implied argument `this'.  If so set
580    *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero. 
581    BLOCK_FOUND is set to the block in which NAME is found (in the case of
582    a field of `this', value_of_this sets BLOCK_FOUND to the proper value.) */
583
584 /* This function has a bunch of loops in it and it would seem to be
585    attractive to put in some QUIT's (though I'm not really sure
586    whether it can run long enough to be really important).  But there
587    are a few calls for which it would appear to be bad news to quit
588    out of here: find_proc_desc in alpha-tdep.c and mips-tdep.c, and
589    nindy_frame_chain_valid in nindy-tdep.c.  (Note that there is C++
590    code below which can error(), but that probably doesn't affect
591    these calls since they are looking for a known variable and thus
592    can probably assume it will never hit the C++ code).  */
593
594 struct symbol *
595 lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
596      const char *name;
597      register const struct block *block;
598      const namespace_enum namespace;
599      int *is_a_field_of_this;
600      struct symtab **symtab;
601 {
602   register struct symbol *sym;
603   register struct symtab *s = NULL;
604   register struct partial_symtab *ps;
605   struct blockvector *bv;
606   register struct objfile *objfile = NULL;
607   register struct block *b;
608   register struct minimal_symbol *msymbol;
609
610   /* Search specified block and its superiors.  */
611
612   while (block != 0)
613     {
614       sym = lookup_block_symbol (block, name, namespace);
615       if (sym)
616         {
617           block_found = block;
618           if (symtab != NULL)
619             {
620               /* Search the list of symtabs for one which contains the
621                  address of the start of this block.  */
622               ALL_SYMTABS (objfile, s)
623               {
624                 bv = BLOCKVECTOR (s);
625                 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
626                 if (BLOCK_START (b) <= BLOCK_START (block)
627                     && BLOCK_END (b) > BLOCK_START (block))
628                   goto found;
629               }
630             found:
631               *symtab = s;
632             }
633
634           return fixup_symbol_section (sym, objfile);
635         }
636       block = BLOCK_SUPERBLOCK (block);
637     }
638
639   /* FIXME: this code is never executed--block is always NULL at this
640      point.  What is it trying to do, anyway?  We already should have
641      checked the STATIC_BLOCK above (it is the superblock of top-level
642      blocks).  Why is VAR_NAMESPACE special-cased?  */
643   /* Don't need to mess with the psymtabs; if we have a block,
644      that file is read in.  If we don't, then we deal later with
645      all the psymtab stuff that needs checking.  */
646   /* Note (RT): The following never-executed code looks unnecessary to me also.
647    * If we change the code to use the original (passed-in)
648    * value of 'block', we could cause it to execute, but then what
649    * would it do? The STATIC_BLOCK of the symtab containing the passed-in
650    * 'block' was already searched by the above code. And the STATIC_BLOCK's
651    * of *other* symtabs (those files not containing 'block' lexically)
652    * should not contain 'block' address-wise. So we wouldn't expect this
653    * code to find any 'sym''s that were not found above. I vote for 
654    * deleting the following paragraph of code.
655    */
656   if (namespace == VAR_NAMESPACE && block != NULL)
657     {
658       struct block *b;
659       /* Find the right symtab.  */
660       ALL_SYMTABS (objfile, s)
661       {
662         bv = BLOCKVECTOR (s);
663         b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
664         if (BLOCK_START (b) <= BLOCK_START (block)
665             && BLOCK_END (b) > BLOCK_START (block))
666           {
667             sym = lookup_block_symbol (b, name, VAR_NAMESPACE);
668             if (sym)
669               {
670                 block_found = b;
671                 if (symtab != NULL)
672                   *symtab = s;
673                 return fixup_symbol_section (sym, objfile);
674               }
675           }
676       }
677     }
678
679
680   /* C++: If requested to do so by the caller, 
681      check to see if NAME is a field of `this'. */
682   if (is_a_field_of_this)
683     {
684       struct value *v = value_of_this (0);
685
686       *is_a_field_of_this = 0;
687       if (v && check_field (v, name))
688         {
689           *is_a_field_of_this = 1;
690           if (symtab != NULL)
691             *symtab = NULL;
692           return NULL;
693         }
694     }
695
696   /* Now search all global blocks.  Do the symtab's first, then
697      check the psymtab's. If a psymtab indicates the existence
698      of the desired name as a global, then do psymtab-to-symtab
699      conversion on the fly and return the found symbol. */
700
701   ALL_SYMTABS (objfile, s)
702   {
703     bv = BLOCKVECTOR (s);
704     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
705     sym = lookup_block_symbol (block, name, namespace);
706     if (sym)
707       {
708         block_found = block;
709         if (symtab != NULL)
710           *symtab = s;
711         return fixup_symbol_section (sym, objfile);
712       }
713   }
714
715 #ifndef HPUXHPPA
716
717   /* Check for the possibility of the symbol being a function or
718      a mangled variable that is stored in one of the minimal symbol tables.
719      Eventually, all global symbols might be resolved in this way.  */
720
721   if (namespace == VAR_NAMESPACE)
722     {
723       msymbol = lookup_minimal_symbol (name, NULL, NULL);
724       if (msymbol != NULL)
725         {
726           s = find_pc_sect_symtab (SYMBOL_VALUE_ADDRESS (msymbol),
727                                    SYMBOL_BFD_SECTION (msymbol));
728           if (s != NULL)
729             {
730               /* This is a function which has a symtab for its address.  */
731               bv = BLOCKVECTOR (s);
732               block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
733               sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
734                                          namespace);
735               /* We kept static functions in minimal symbol table as well as
736                  in static scope. We want to find them in the symbol table. */
737               if (!sym)
738                 {
739                   block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
740                   sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
741                                              namespace);
742                 }
743
744               /* sym == 0 if symbol was found in the minimal symbol table
745                  but not in the symtab.
746                  Return 0 to use the msymbol definition of "foo_".
747
748                  This happens for Fortran  "foo_" symbols,
749                  which are "foo" in the symtab.
750
751                  This can also happen if "asm" is used to make a
752                  regular symbol but not a debugging symbol, e.g.
753                  asm(".globl _main");
754                  asm("_main:");
755                */
756
757               if (symtab != NULL)
758                 *symtab = s;
759               return fixup_symbol_section (sym, objfile);
760             }
761           else if (MSYMBOL_TYPE (msymbol) != mst_text
762                    && MSYMBOL_TYPE (msymbol) != mst_file_text
763                    && !STREQ (name, SYMBOL_NAME (msymbol)))
764             {
765               /* This is a mangled variable, look it up by its
766                  mangled name.  */
767               return lookup_symbol (SYMBOL_NAME (msymbol), block,
768                                     namespace, is_a_field_of_this, symtab);
769             }
770           /* There are no debug symbols for this file, or we are looking
771              for an unmangled variable.
772              Try to find a matching static symbol below. */
773         }
774     }
775
776 #endif
777
778   ALL_PSYMTABS (objfile, ps)
779   {
780     if (!ps->readin && lookup_partial_symbol (ps, name, 1, namespace))
781       {
782         s = PSYMTAB_TO_SYMTAB (ps);
783         bv = BLOCKVECTOR (s);
784         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
785         sym = lookup_block_symbol (block, name, namespace);
786         if (!sym)
787           {
788             /* This shouldn't be necessary, but as a last resort
789              * try looking in the statics even though the psymtab
790              * claimed the symbol was global. It's possible that
791              * the psymtab gets it wrong in some cases.
792              */
793             block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
794             sym = lookup_block_symbol (block, name, namespace);
795             if (!sym)
796               error ("Internal: global symbol `%s' found in %s psymtab but not in symtab.\n\
797 %s may be an inlined function, or may be a template function\n\
798 (if a template, try specifying an instantiation: %s<type>).",
799                      name, ps->filename, name, name);
800           }
801         if (symtab != NULL)
802           *symtab = s;
803         return fixup_symbol_section (sym, objfile);
804       }
805   }
806
807   /* Now search all static file-level symbols.
808      Not strictly correct, but more useful than an error.
809      Do the symtabs first, then check the psymtabs.
810      If a psymtab indicates the existence
811      of the desired name as a file-level static, then do psymtab-to-symtab
812      conversion on the fly and return the found symbol. */
813
814   ALL_SYMTABS (objfile, s)
815   {
816     bv = BLOCKVECTOR (s);
817     block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
818     sym = lookup_block_symbol (block, name, namespace);
819     if (sym)
820       {
821         block_found = block;
822         if (symtab != NULL)
823           *symtab = s;
824         return fixup_symbol_section (sym, objfile);
825       }
826   }
827
828   ALL_PSYMTABS (objfile, ps)
829   {
830     if (!ps->readin && lookup_partial_symbol (ps, name, 0, namespace))
831       {
832         s = PSYMTAB_TO_SYMTAB (ps);
833         bv = BLOCKVECTOR (s);
834         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
835         sym = lookup_block_symbol (block, name, namespace);
836         if (!sym)
837           {
838             /* This shouldn't be necessary, but as a last resort
839              * try looking in the globals even though the psymtab
840              * claimed the symbol was static. It's possible that
841              * the psymtab gets it wrong in some cases.
842              */
843             block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
844             sym = lookup_block_symbol (block, name, namespace);
845             if (!sym)
846               error ("Internal: static symbol `%s' found in %s psymtab but not in symtab.\n\
847 %s may be an inlined function, or may be a template function\n\
848 (if a template, try specifying an instantiation: %s<type>).",
849                      name, ps->filename, name, name);
850           }
851         if (symtab != NULL)
852           *symtab = s;
853         return fixup_symbol_section (sym, objfile);
854       }
855   }
856
857 #ifdef HPUXHPPA
858
859   /* Check for the possibility of the symbol being a function or
860      a global variable that is stored in one of the minimal symbol tables.
861      The "minimal symbol table" is built from linker-supplied info.
862
863      RT: I moved this check to last, after the complete search of
864      the global (p)symtab's and static (p)symtab's. For HP-generated
865      symbol tables, this check was causing a premature exit from
866      lookup_symbol with NULL return, and thus messing up symbol lookups
867      of things like "c::f". It seems to me a check of the minimal
868      symbol table ought to be a last resort in any case. I'm vaguely
869      worried about the comment below which talks about FORTRAN routines "foo_"
870      though... is it saying we need to do the "minsym" check before
871      the static check in this case? 
872    */
873
874   if (namespace == VAR_NAMESPACE)
875     {
876       msymbol = lookup_minimal_symbol (name, NULL, NULL);
877       if (msymbol != NULL)
878         {
879           /* OK, we found a minimal symbol in spite of not
880            * finding any symbol. There are various possible
881            * explanations for this. One possibility is the symbol
882            * exists in code not compiled -g. Another possibility
883            * is that the 'psymtab' isn't doing its job.
884            * A third possibility, related to #2, is that we were confused 
885            * by name-mangling. For instance, maybe the psymtab isn't
886            * doing its job because it only know about demangled
887            * names, but we were given a mangled name...
888            */
889
890           /* We first use the address in the msymbol to try to
891            * locate the appropriate symtab. Note that find_pc_symtab()
892            * has a side-effect of doing psymtab-to-symtab expansion,
893            * for the found symtab.
894            */
895           s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
896           if (s != NULL)
897             {
898               bv = BLOCKVECTOR (s);
899               block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
900               sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
901                                          namespace);
902               /* We kept static functions in minimal symbol table as well as
903                  in static scope. We want to find them in the symbol table. */
904               if (!sym)
905                 {
906                   block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
907                   sym = lookup_block_symbol (block, SYMBOL_NAME (msymbol),
908                                              namespace);
909                 }
910               /* If we found one, return it */
911               if (sym)
912                 {
913                   if (symtab != NULL)
914                     *symtab = s;
915                   return sym;
916                 }
917
918               /* If we get here with sym == 0, the symbol was 
919                  found in the minimal symbol table
920                  but not in the symtab.
921                  Fall through and return 0 to use the msymbol 
922                  definition of "foo_".
923                  (Note that outer code generally follows up a call
924                  to this routine with a call to lookup_minimal_symbol(),
925                  so a 0 return means we'll just flow into that other routine).
926
927                  This happens for Fortran  "foo_" symbols,
928                  which are "foo" in the symtab.
929
930                  This can also happen if "asm" is used to make a
931                  regular symbol but not a debugging symbol, e.g.
932                  asm(".globl _main");
933                  asm("_main:");
934                */
935             }
936
937           /* If the lookup-by-address fails, try repeating the
938            * entire lookup process with the symbol name from
939            * the msymbol (if different from the original symbol name).
940            */
941           else if (MSYMBOL_TYPE (msymbol) != mst_text
942                    && MSYMBOL_TYPE (msymbol) != mst_file_text
943                    && !STREQ (name, SYMBOL_NAME (msymbol)))
944             {
945               return lookup_symbol (SYMBOL_NAME (msymbol), block,
946                                     namespace, is_a_field_of_this, symtab);
947             }
948         }
949     }
950
951 #endif
952
953   if (symtab != NULL)
954     *symtab = NULL;
955   return 0;
956 }
957                                                                 
958 /* Look, in partial_symtab PST, for symbol NAME.  Check the global
959    symbols if GLOBAL, the static symbols if not */
960
961 static struct partial_symbol *
962 lookup_partial_symbol (pst, name, global, namespace)
963      struct partial_symtab *pst;
964      const char *name;
965      int global;
966      namespace_enum namespace;
967 {
968   struct partial_symbol *temp;
969   struct partial_symbol **start, **psym;
970   struct partial_symbol **top, **bottom, **center;
971   int length = (global ? pst->n_global_syms : pst->n_static_syms);
972   int do_linear_search = 1;
973   
974   if (length == 0)
975     {
976       return (NULL);
977     }
978   start = (global ?
979            pst->objfile->global_psymbols.list + pst->globals_offset :
980            pst->objfile->static_psymbols.list + pst->statics_offset);
981   
982   if (global)                   /* This means we can use a binary search. */
983     {
984       do_linear_search = 0;
985
986       /* Binary search.  This search is guaranteed to end with center
987          pointing at the earliest partial symbol with the correct
988          name.  At that point *all* partial symbols with that name
989          will be checked against the correct namespace. */
990
991       bottom = start;
992       top = start + length - 1;
993       while (top > bottom)
994         {
995           center = bottom + (top - bottom) / 2;
996           if (!(center < top))
997             abort ();
998           if (!do_linear_search
999               && (SYMBOL_LANGUAGE (*center) == language_java))
1000             {
1001               do_linear_search = 1;
1002             }
1003           if (STRCMP (SYMBOL_NAME (*center), name) >= 0)
1004             {
1005               top = center;
1006             }
1007           else
1008             {
1009               bottom = center + 1;
1010             }
1011         }
1012       if (!(top == bottom))
1013         abort ();
1014
1015       /* djb - 2000-06-03 - Use SYMBOL_MATCHES_NAME, not a strcmp, so
1016          we don't have to force a linear search on C++. Probably holds true
1017          for JAVA as well, no way to check.*/
1018       while (SYMBOL_MATCHES_NAME (*top,name))
1019         {
1020           if (SYMBOL_NAMESPACE (*top) == namespace)
1021             {
1022                   return (*top);
1023             }
1024           top++;
1025         }
1026     }
1027
1028   /* Can't use a binary search or else we found during the binary search that
1029      we should also do a linear search. */
1030
1031   if (do_linear_search)
1032     {                   
1033       for (psym = start; psym < start + length; psym++)
1034         {
1035           if (namespace == SYMBOL_NAMESPACE (*psym))
1036             {
1037               if (SYMBOL_MATCHES_NAME (*psym, name))
1038                 {
1039                   return (*psym);
1040                 }
1041             }
1042         }
1043     }
1044
1045   return (NULL);
1046 }
1047
1048 /* Look up a type named NAME in the struct_namespace.  The type returned
1049    must not be opaque -- i.e., must have at least one field defined
1050
1051    This code was modelled on lookup_symbol -- the parts not relevant to looking
1052    up types were just left out.  In particular it's assumed here that types
1053    are available in struct_namespace and only at file-static or global blocks. */
1054
1055
1056 struct type *
1057 lookup_transparent_type (name)
1058      const char *name;
1059 {
1060   register struct symbol *sym;
1061   register struct symtab *s = NULL;
1062   register struct partial_symtab *ps;
1063   struct blockvector *bv;
1064   register struct objfile *objfile;
1065   register struct block *block;
1066
1067   /* Now search all the global symbols.  Do the symtab's first, then
1068      check the psymtab's. If a psymtab indicates the existence
1069      of the desired name as a global, then do psymtab-to-symtab
1070      conversion on the fly and return the found symbol.  */
1071
1072   ALL_SYMTABS (objfile, s)
1073   {
1074     bv = BLOCKVECTOR (s);
1075     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1076     sym = lookup_block_symbol (block, name, STRUCT_NAMESPACE);
1077     if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1078       {
1079         return SYMBOL_TYPE (sym);
1080       }
1081   }
1082
1083   ALL_PSYMTABS (objfile, ps)
1084   {
1085     if (!ps->readin && lookup_partial_symbol (ps, name, 1, STRUCT_NAMESPACE))
1086       {
1087         s = PSYMTAB_TO_SYMTAB (ps);
1088         bv = BLOCKVECTOR (s);
1089         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1090         sym = lookup_block_symbol (block, name, STRUCT_NAMESPACE);
1091         if (!sym)
1092           {
1093             /* This shouldn't be necessary, but as a last resort
1094              * try looking in the statics even though the psymtab
1095              * claimed the symbol was global. It's possible that
1096              * the psymtab gets it wrong in some cases.
1097              */
1098             block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1099             sym = lookup_block_symbol (block, name, STRUCT_NAMESPACE);
1100             if (!sym)
1101               error ("Internal: global symbol `%s' found in %s psymtab but not in symtab.\n\
1102 %s may be an inlined function, or may be a template function\n\
1103 (if a template, try specifying an instantiation: %s<type>).",
1104                      name, ps->filename, name, name);
1105           }
1106         if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1107           return SYMBOL_TYPE (sym);
1108       }
1109   }
1110
1111   /* Now search the static file-level symbols.
1112      Not strictly correct, but more useful than an error.
1113      Do the symtab's first, then
1114      check the psymtab's. If a psymtab indicates the existence
1115      of the desired name as a file-level static, then do psymtab-to-symtab
1116      conversion on the fly and return the found symbol.
1117    */
1118
1119   ALL_SYMTABS (objfile, s)
1120   {
1121     bv = BLOCKVECTOR (s);
1122     block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1123     sym = lookup_block_symbol (block, name, STRUCT_NAMESPACE);
1124     if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1125       {
1126         return SYMBOL_TYPE (sym);
1127       }
1128   }
1129
1130   ALL_PSYMTABS (objfile, ps)
1131   {
1132     if (!ps->readin && lookup_partial_symbol (ps, name, 0, STRUCT_NAMESPACE))
1133       {
1134         s = PSYMTAB_TO_SYMTAB (ps);
1135         bv = BLOCKVECTOR (s);
1136         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1137         sym = lookup_block_symbol (block, name, STRUCT_NAMESPACE);
1138         if (!sym)
1139           {
1140             /* This shouldn't be necessary, but as a last resort
1141              * try looking in the globals even though the psymtab
1142              * claimed the symbol was static. It's possible that
1143              * the psymtab gets it wrong in some cases.
1144              */
1145             block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1146             sym = lookup_block_symbol (block, name, STRUCT_NAMESPACE);
1147             if (!sym)
1148               error ("Internal: static symbol `%s' found in %s psymtab but not in symtab.\n\
1149 %s may be an inlined function, or may be a template function\n\
1150 (if a template, try specifying an instantiation: %s<type>).",
1151                      name, ps->filename, name, name);
1152           }
1153         if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
1154           return SYMBOL_TYPE (sym);
1155       }
1156   }
1157   return (struct type *) 0;
1158 }
1159
1160
1161 /* Find the psymtab containing main(). */
1162 /* FIXME:  What about languages without main() or specially linked
1163    executables that have no main() ? */
1164
1165 struct partial_symtab *
1166 find_main_psymtab ()
1167 {
1168   register struct partial_symtab *pst;
1169   register struct objfile *objfile;
1170
1171   ALL_PSYMTABS (objfile, pst)
1172   {
1173     if (lookup_partial_symbol (pst, "main", 1, VAR_NAMESPACE))
1174       {
1175         return (pst);
1176       }
1177   }
1178   return (NULL);
1179 }
1180
1181 /* Search BLOCK for symbol NAME in NAMESPACE.
1182
1183    Note that if NAME is the demangled form of a C++ symbol, we will fail
1184    to find a match during the binary search of the non-encoded names, but
1185    for now we don't worry about the slight inefficiency of looking for
1186    a match we'll never find, since it will go pretty quick.  Once the
1187    binary search terminates, we drop through and do a straight linear
1188    search on the symbols.  Each symbol which is marked as being a C++
1189    symbol (language_cplus set) has both the encoded and non-encoded names
1190    tested for a match. */
1191
1192 struct symbol *
1193 lookup_block_symbol (block, name, namespace)
1194      register const struct block *block;
1195      const char *name;
1196      const namespace_enum namespace;
1197 {
1198   register int bot, top, inc;
1199   register struct symbol *sym;
1200   register struct symbol *sym_found = NULL;
1201   register int do_linear_search = 1;
1202
1203   /* If the blocks's symbols were sorted, start with a binary search.  */
1204
1205   if (BLOCK_SHOULD_SORT (block))
1206     {
1207       /* Reset the linear search flag so if the binary search fails, we
1208          won't do the linear search once unless we find some reason to
1209          do so, such as finding a C++ symbol during the binary search.
1210          Note that for C++ modules, ALL the symbols in a block should
1211          end up marked as C++ symbols. */
1212
1213       do_linear_search = 0;
1214       top = BLOCK_NSYMS (block);
1215       bot = 0;
1216
1217       /* Advance BOT to not far before the first symbol whose name is NAME. */
1218
1219       while (1)
1220         {
1221           inc = (top - bot + 1);
1222           /* No need to keep binary searching for the last few bits worth.  */
1223           if (inc < 4)
1224             {
1225               break;
1226             }
1227           inc = (inc >> 1) + bot;
1228           sym = BLOCK_SYM (block, inc);
1229           if (!do_linear_search
1230               && (SYMBOL_LANGUAGE (sym) == language_cplus
1231                   || SYMBOL_LANGUAGE (sym) == language_java
1232               ))
1233             {
1234               do_linear_search = 1;
1235             }
1236           if (SYMBOL_NAME (sym)[0] < name[0])
1237             {
1238               bot = inc;
1239             }
1240           else if (SYMBOL_NAME (sym)[0] > name[0])
1241             {
1242               top = inc;
1243             }
1244           else if (STRCMP (SYMBOL_NAME (sym), name) < 0)
1245             {
1246               bot = inc;
1247             }
1248           else
1249             {
1250               top = inc;
1251             }
1252         }
1253
1254       /* Now scan forward until we run out of symbols, find one whose
1255          name is greater than NAME, or find one we want.  If there is
1256          more than one symbol with the right name and namespace, we
1257          return the first one; I believe it is now impossible for us
1258          to encounter two symbols with the same name and namespace
1259          here, because blocks containing argument symbols are no
1260          longer sorted.  */
1261
1262       top = BLOCK_NSYMS (block);
1263       while (bot < top)
1264         {
1265           sym = BLOCK_SYM (block, bot);
1266           inc = SYMBOL_NAME (sym)[0] - name[0];
1267           if (inc == 0)
1268             {
1269               inc = STRCMP (SYMBOL_NAME (sym), name);
1270             }
1271           if (inc == 0 && SYMBOL_NAMESPACE (sym) == namespace)
1272             {
1273               return (sym);
1274             }
1275           if (inc > 0)
1276             {
1277               break;
1278             }
1279           bot++;
1280         }
1281     }
1282
1283   /* Here if block isn't sorted, or we fail to find a match during the
1284      binary search above.  If during the binary search above, we find a
1285      symbol which is a C++ symbol, then we have re-enabled the linear
1286      search flag which was reset when starting the binary search.
1287
1288      This loop is equivalent to the loop above, but hacked greatly for speed.
1289
1290      Note that parameter symbols do not always show up last in the
1291      list; this loop makes sure to take anything else other than
1292      parameter symbols first; it only uses parameter symbols as a
1293      last resort.  Note that this only takes up extra computation
1294      time on a match.  */
1295
1296   if (do_linear_search)
1297     {
1298       top = BLOCK_NSYMS (block);
1299       bot = 0;
1300       while (bot < top)
1301         {
1302           sym = BLOCK_SYM (block, bot);
1303           if (SYMBOL_NAMESPACE (sym) == namespace &&
1304               SYMBOL_MATCHES_NAME (sym, name))
1305             {
1306               /* If SYM has aliases, then use any alias that is active
1307                  at the current PC.  If no alias is active at the current
1308                  PC, then use the main symbol.
1309
1310                  ?!? Is checking the current pc correct?  Is this routine
1311                  ever called to look up a symbol from another context?
1312
1313                  FIXME: No, it's not correct.  If someone sets a
1314                  conditional breakpoint at an address, then the
1315                  breakpoint's `struct expression' should refer to the
1316                  `struct symbol' appropriate for the breakpoint's
1317                  address, which may not be the PC.
1318
1319                  Even if it were never called from another context,
1320                  it's totally bizarre for lookup_symbol's behavior to
1321                  depend on the value of the inferior's current PC.  We
1322                  should pass in the appropriate PC as well as the
1323                  block.  The interface to lookup_symbol should change
1324                  to require the caller to provide a PC.  */
1325
1326               if (SYMBOL_ALIASES (sym))
1327                 sym = find_active_alias (sym, read_pc ());
1328
1329               sym_found = sym;
1330               if (SYMBOL_CLASS (sym) != LOC_ARG &&
1331                   SYMBOL_CLASS (sym) != LOC_LOCAL_ARG &&
1332                   SYMBOL_CLASS (sym) != LOC_REF_ARG &&
1333                   SYMBOL_CLASS (sym) != LOC_REGPARM &&
1334                   SYMBOL_CLASS (sym) != LOC_REGPARM_ADDR &&
1335                   SYMBOL_CLASS (sym) != LOC_BASEREG_ARG)
1336                 {
1337                   break;
1338                 }
1339             }
1340           bot++;
1341         }
1342     }
1343   return (sym_found);           /* Will be NULL if not found. */
1344 }
1345
1346 /* Given a main symbol SYM and ADDR, search through the alias
1347    list to determine if an alias is active at ADDR and return
1348    the active alias.
1349
1350    If no alias is active, then return SYM.  */
1351
1352 static struct symbol *
1353 find_active_alias (sym, addr)
1354      struct symbol *sym;
1355      CORE_ADDR addr;
1356 {
1357   struct range_list *r;
1358   struct alias_list *aliases;
1359
1360   /* If we have aliases, check them first.  */
1361   aliases = SYMBOL_ALIASES (sym);
1362
1363   while (aliases)
1364     {
1365       if (!SYMBOL_RANGES (aliases->sym))
1366         return aliases->sym;
1367       for (r = SYMBOL_RANGES (aliases->sym); r; r = r->next)
1368         {
1369           if (r->start <= addr && r->end > addr)
1370             return aliases->sym;
1371         }
1372       aliases = aliases->next;
1373     }
1374
1375   /* Nothing found, return the main symbol.  */
1376   return sym;
1377 }
1378 \f
1379
1380 /* Return the symbol for the function which contains a specified
1381    lexical block, described by a struct block BL.  */
1382
1383 struct symbol *
1384 block_function (bl)
1385      struct block *bl;
1386 {
1387   while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
1388     bl = BLOCK_SUPERBLOCK (bl);
1389
1390   return BLOCK_FUNCTION (bl);
1391 }
1392
1393 /* Find the symtab associated with PC and SECTION.  Look through the
1394    psymtabs and read in another symtab if necessary. */
1395
1396 struct symtab *
1397 find_pc_sect_symtab (pc, section)
1398      CORE_ADDR pc;
1399      asection *section;
1400 {
1401   register struct block *b;
1402   struct blockvector *bv;
1403   register struct symtab *s = NULL;
1404   register struct symtab *best_s = NULL;
1405   register struct partial_symtab *ps;
1406   register struct objfile *objfile;
1407   CORE_ADDR distance = 0;
1408
1409   /* Search all symtabs for the one whose file contains our address, and which
1410      is the smallest of all the ones containing the address.  This is designed
1411      to deal with a case like symtab a is at 0x1000-0x2000 and 0x3000-0x4000
1412      and symtab b is at 0x2000-0x3000.  So the GLOBAL_BLOCK for a is from
1413      0x1000-0x4000, but for address 0x2345 we want to return symtab b.
1414
1415      This happens for native ecoff format, where code from included files
1416      gets its own symtab. The symtab for the included file should have
1417      been read in already via the dependency mechanism.
1418      It might be swifter to create several symtabs with the same name
1419      like xcoff does (I'm not sure).
1420
1421      It also happens for objfiles that have their functions reordered.
1422      For these, the symtab we are looking for is not necessarily read in.  */
1423
1424   ALL_SYMTABS (objfile, s)
1425   {
1426     bv = BLOCKVECTOR (s);
1427     b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1428
1429     if (BLOCK_START (b) <= pc
1430         && BLOCK_END (b) > pc
1431         && (distance == 0
1432             || BLOCK_END (b) - BLOCK_START (b) < distance))
1433       {
1434         /* For an objfile that has its functions reordered,
1435            find_pc_psymtab will find the proper partial symbol table
1436            and we simply return its corresponding symtab.  */
1437         /* In order to better support objfiles that contain both
1438            stabs and coff debugging info, we continue on if a psymtab
1439            can't be found. */
1440         if ((objfile->flags & OBJF_REORDERED) && objfile->psymtabs)
1441           {
1442             ps = find_pc_sect_psymtab (pc, section);
1443             if (ps)
1444               return PSYMTAB_TO_SYMTAB (ps);
1445           }
1446         if (section != 0)
1447           {
1448             int i;
1449
1450             for (i = 0; i < b->nsyms; i++)
1451               {
1452                 fixup_symbol_section (b->sym[i], objfile);
1453                 if (section == SYMBOL_BFD_SECTION (b->sym[i]))
1454                   break;
1455               }
1456             if (i >= b->nsyms)
1457               continue;         /* no symbol in this symtab matches section */
1458           }
1459         distance = BLOCK_END (b) - BLOCK_START (b);
1460         best_s = s;
1461       }
1462   }
1463
1464   if (best_s != NULL)
1465     return (best_s);
1466
1467   s = NULL;
1468   ps = find_pc_sect_psymtab (pc, section);
1469   if (ps)
1470     {
1471       if (ps->readin)
1472         /* Might want to error() here (in case symtab is corrupt and
1473            will cause a core dump), but maybe we can successfully
1474            continue, so let's not.  */
1475         warning ("\
1476 (Internal error: pc 0x%s in read in psymtab, but not in symtab.)\n",
1477                  paddr_nz (pc));
1478       s = PSYMTAB_TO_SYMTAB (ps);
1479     }
1480   return (s);
1481 }
1482
1483 /* Find the symtab associated with PC.  Look through the psymtabs and
1484    read in another symtab if necessary.  Backward compatibility, no section */
1485
1486 struct symtab *
1487 find_pc_symtab (pc)
1488      CORE_ADDR pc;
1489 {
1490   return find_pc_sect_symtab (pc, find_pc_mapped_section (pc));
1491 }
1492 \f
1493
1494 #if 0
1495
1496 /* Find the closest symbol value (of any sort -- function or variable)
1497    for a given address value.  Slow but complete.  (currently unused,
1498    mainly because it is too slow.  We could fix it if each symtab and
1499    psymtab had contained in it the addresses ranges of each of its
1500    sections, which also would be required to make things like "info
1501    line *0x2345" cause psymtabs to be converted to symtabs).  */
1502
1503 struct symbol *
1504 find_addr_symbol (addr, symtabp, symaddrp)
1505      CORE_ADDR addr;
1506      struct symtab **symtabp;
1507      CORE_ADDR *symaddrp;
1508 {
1509   struct symtab *symtab, *best_symtab;
1510   struct objfile *objfile;
1511   register int bot, top;
1512   register struct symbol *sym;
1513   register CORE_ADDR sym_addr;
1514   struct block *block;
1515   int blocknum;
1516
1517   /* Info on best symbol seen so far */
1518
1519   register CORE_ADDR best_sym_addr = 0;
1520   struct symbol *best_sym = 0;
1521
1522   /* FIXME -- we should pull in all the psymtabs, too!  */
1523   ALL_SYMTABS (objfile, symtab)
1524   {
1525     /* Search the global and static blocks in this symtab for
1526        the closest symbol-address to the desired address.  */
1527
1528     for (blocknum = GLOBAL_BLOCK; blocknum <= STATIC_BLOCK; blocknum++)
1529       {
1530         QUIT;
1531         block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), blocknum);
1532         top = BLOCK_NSYMS (block);
1533         for (bot = 0; bot < top; bot++)
1534           {
1535             sym = BLOCK_SYM (block, bot);
1536             switch (SYMBOL_CLASS (sym))
1537               {
1538               case LOC_STATIC:
1539               case LOC_LABEL:
1540                 sym_addr = SYMBOL_VALUE_ADDRESS (sym);
1541                 break;
1542
1543               case LOC_INDIRECT:
1544                 sym_addr = SYMBOL_VALUE_ADDRESS (sym);
1545                 /* An indirect symbol really lives at *sym_addr,
1546                  * so an indirection needs to be done.
1547                  * However, I am leaving this commented out because it's
1548                  * expensive, and it's possible that symbolization
1549                  * could be done without an active process (in
1550                  * case this read_memory will fail). RT
1551                  sym_addr = read_memory_unsigned_integer
1552                  (sym_addr, TARGET_PTR_BIT / TARGET_CHAR_BIT);
1553                  */
1554                 break;
1555
1556               case LOC_BLOCK:
1557                 sym_addr = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
1558                 break;
1559
1560               default:
1561                 continue;
1562               }
1563
1564             if (sym_addr <= addr)
1565               if (sym_addr > best_sym_addr)
1566                 {
1567                   /* Quit if we found an exact match.  */
1568                   best_sym = sym;
1569                   best_sym_addr = sym_addr;
1570                   best_symtab = symtab;
1571                   if (sym_addr == addr)
1572                     goto done;
1573                 }
1574           }
1575       }
1576   }
1577
1578 done:
1579   if (symtabp)
1580     *symtabp = best_symtab;
1581   if (symaddrp)
1582     *symaddrp = best_sym_addr;
1583   return best_sym;
1584 }
1585 #endif /* 0 */
1586
1587 /* Find the source file and line number for a given PC value and section.
1588    Return a structure containing a symtab pointer, a line number,
1589    and a pc range for the entire source line.
1590    The value's .pc field is NOT the specified pc.
1591    NOTCURRENT nonzero means, if specified pc is on a line boundary,
1592    use the line that ends there.  Otherwise, in that case, the line
1593    that begins there is used.  */
1594
1595 /* The big complication here is that a line may start in one file, and end just
1596    before the start of another file.  This usually occurs when you #include
1597    code in the middle of a subroutine.  To properly find the end of a line's PC
1598    range, we must search all symtabs associated with this compilation unit, and
1599    find the one whose first PC is closer than that of the next line in this
1600    symtab.  */
1601
1602 /* If it's worth the effort, we could be using a binary search.  */
1603
1604 struct symtab_and_line
1605 find_pc_sect_line (pc, section, notcurrent)
1606      CORE_ADDR pc;
1607      struct sec *section;
1608      int notcurrent;
1609 {
1610   struct symtab *s;
1611   register struct linetable *l;
1612   register int len;
1613   register int i;
1614   register struct linetable_entry *item;
1615   struct symtab_and_line val;
1616   struct blockvector *bv;
1617   struct minimal_symbol *msymbol;
1618   struct minimal_symbol *mfunsym;
1619
1620   /* Info on best line seen so far, and where it starts, and its file.  */
1621
1622   struct linetable_entry *best = NULL;
1623   CORE_ADDR best_end = 0;
1624   struct symtab *best_symtab = 0;
1625
1626   /* Store here the first line number
1627      of a file which contains the line at the smallest pc after PC.
1628      If we don't find a line whose range contains PC,
1629      we will use a line one less than this,
1630      with a range from the start of that file to the first line's pc.  */
1631   struct linetable_entry *alt = NULL;
1632   struct symtab *alt_symtab = 0;
1633
1634   /* Info on best line seen in this file.  */
1635
1636   struct linetable_entry *prev;
1637
1638   /* If this pc is not from the current frame,
1639      it is the address of the end of a call instruction.
1640      Quite likely that is the start of the following statement.
1641      But what we want is the statement containing the instruction.
1642      Fudge the pc to make sure we get that.  */
1643
1644   INIT_SAL (&val);              /* initialize to zeroes */
1645
1646   if (notcurrent)
1647     pc -= 1;
1648
1649   /* elz: added this because this function returned the wrong
1650      information if the pc belongs to a stub (import/export)
1651      to call a shlib function. This stub would be anywhere between
1652      two functions in the target, and the line info was erroneously 
1653      taken to be the one of the line before the pc. 
1654    */
1655   /* RT: Further explanation:
1656
1657    * We have stubs (trampolines) inserted between procedures.
1658    *
1659    * Example: "shr1" exists in a shared library, and a "shr1" stub also
1660    * exists in the main image.
1661    *
1662    * In the minimal symbol table, we have a bunch of symbols
1663    * sorted by start address. The stubs are marked as "trampoline",
1664    * the others appear as text. E.g.:
1665    *
1666    *  Minimal symbol table for main image 
1667    *     main:  code for main (text symbol)
1668    *     shr1: stub  (trampoline symbol)
1669    *     foo:   code for foo (text symbol)
1670    *     ...
1671    *  Minimal symbol table for "shr1" image:
1672    *     ...
1673    *     shr1: code for shr1 (text symbol)
1674    *     ...
1675    *
1676    * So the code below is trying to detect if we are in the stub
1677    * ("shr1" stub), and if so, find the real code ("shr1" trampoline),
1678    * and if found,  do the symbolization from the real-code address
1679    * rather than the stub address.
1680    *
1681    * Assumptions being made about the minimal symbol table:
1682    *   1. lookup_minimal_symbol_by_pc() will return a trampoline only
1683    *      if we're really in the trampoline. If we're beyond it (say
1684    *      we're in "foo" in the above example), it'll have a closer 
1685    *      symbol (the "foo" text symbol for example) and will not
1686    *      return the trampoline.
1687    *   2. lookup_minimal_symbol_text() will find a real text symbol
1688    *      corresponding to the trampoline, and whose address will
1689    *      be different than the trampoline address. I put in a sanity
1690    *      check for the address being the same, to avoid an
1691    *      infinite recursion.
1692    */
1693   msymbol = lookup_minimal_symbol_by_pc (pc);
1694   if (msymbol != NULL)
1695     if (MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
1696       {
1697         mfunsym = lookup_minimal_symbol_text (SYMBOL_NAME (msymbol), NULL, NULL);
1698         if (mfunsym == NULL)
1699           /* I eliminated this warning since it is coming out
1700            * in the following situation:
1701            * gdb shmain // test program with shared libraries
1702            * (gdb) break shr1  // function in shared lib
1703            * Warning: In stub for ...
1704            * In the above situation, the shared lib is not loaded yet, 
1705            * so of course we can't find the real func/line info,
1706            * but the "break" still works, and the warning is annoying.
1707            * So I commented out the warning. RT */
1708           /* warning ("In stub for %s; unable to find real function/line info", SYMBOL_NAME(msymbol)) */ ;
1709         /* fall through */
1710         else if (SYMBOL_VALUE (mfunsym) == SYMBOL_VALUE (msymbol))
1711           /* Avoid infinite recursion */
1712           /* See above comment about why warning is commented out */
1713           /* warning ("In stub for %s; unable to find real function/line info", SYMBOL_NAME(msymbol)) */ ;
1714         /* fall through */
1715         else
1716           return find_pc_line (SYMBOL_VALUE (mfunsym), 0);
1717       }
1718
1719
1720   s = find_pc_sect_symtab (pc, section);
1721   if (!s)
1722     {
1723       /* if no symbol information, return previous pc */
1724       if (notcurrent)
1725         pc++;
1726       val.pc = pc;
1727       return val;
1728     }
1729
1730   bv = BLOCKVECTOR (s);
1731
1732   /* Look at all the symtabs that share this blockvector.
1733      They all have the same apriori range, that we found was right;
1734      but they have different line tables.  */
1735
1736   for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1737     {
1738       /* Find the best line in this symtab.  */
1739       l = LINETABLE (s);
1740       if (!l)
1741         continue;
1742       len = l->nitems;
1743       if (len <= 0)
1744         {
1745           /* I think len can be zero if the symtab lacks line numbers
1746              (e.g. gcc -g1).  (Either that or the LINETABLE is NULL;
1747              I'm not sure which, and maybe it depends on the symbol
1748              reader).  */
1749           continue;
1750         }
1751
1752       prev = NULL;
1753       item = l->item;           /* Get first line info */
1754
1755       /* Is this file's first line closer than the first lines of other files?
1756          If so, record this file, and its first line, as best alternate.  */
1757       if (item->pc > pc && (!alt || item->pc < alt->pc))
1758         {
1759           alt = item;
1760           alt_symtab = s;
1761         }
1762
1763       for (i = 0; i < len; i++, item++)
1764         {
1765           /* Leave prev pointing to the linetable entry for the last line
1766              that started at or before PC.  */
1767           if (item->pc > pc)
1768             break;
1769
1770           prev = item;
1771         }
1772
1773       /* At this point, prev points at the line whose start addr is <= pc, and
1774          item points at the next line.  If we ran off the end of the linetable
1775          (pc >= start of the last line), then prev == item.  If pc < start of
1776          the first line, prev will not be set.  */
1777
1778       /* Is this file's best line closer than the best in the other files?
1779          If so, record this file, and its best line, as best so far.  */
1780
1781       if (prev && (!best || prev->pc > best->pc))
1782         {
1783           best = prev;
1784           best_symtab = s;
1785           /* If another line is in the linetable, and its PC is closer
1786              than the best_end we currently have, take it as best_end.  */
1787           if (i < len && (best_end == 0 || best_end > item->pc))
1788             best_end = item->pc;
1789         }
1790     }
1791
1792   if (!best_symtab)
1793     {
1794       if (!alt_symtab)
1795         {                       /* If we didn't find any line # info, just
1796                                    return zeros.  */
1797           val.pc = pc;
1798         }
1799       else
1800         {
1801           val.symtab = alt_symtab;
1802           val.line = alt->line - 1;
1803
1804           /* Don't return line 0, that means that we didn't find the line.  */
1805           if (val.line == 0)
1806             ++val.line;
1807
1808           val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1809           val.end = alt->pc;
1810         }
1811     }
1812   else
1813     {
1814       val.symtab = best_symtab;
1815       val.line = best->line;
1816       val.pc = best->pc;
1817       if (best_end && (!alt || best_end < alt->pc))
1818         val.end = best_end;
1819       else if (alt)
1820         val.end = alt->pc;
1821       else
1822         val.end = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1823     }
1824   val.section = section;
1825   return val;
1826 }
1827
1828 /* Backward compatibility (no section) */
1829
1830 struct symtab_and_line
1831 find_pc_line (pc, notcurrent)
1832      CORE_ADDR pc;
1833      int notcurrent;
1834 {
1835   asection *section;
1836
1837   section = find_pc_overlay (pc);
1838   if (pc_in_unmapped_range (pc, section))
1839     pc = overlay_mapped_address (pc, section);
1840   return find_pc_sect_line (pc, section, notcurrent);
1841 }
1842 \f
1843
1844 static struct symtab *find_line_symtab (struct symtab *, int, int *, int *);
1845
1846 /* Find line number LINE in any symtab whose name is the same as
1847    SYMTAB.
1848
1849    If found, return the symtab that contains the linetable in which it was
1850    found, set *INDEX to the index in the linetable of the best entry
1851    found, and set *EXACT_MATCH nonzero if the value returned is an
1852    exact match.
1853
1854    If not found, return NULL.  */
1855
1856 static struct symtab *
1857 find_line_symtab (symtab, line, index, exact_match)
1858      struct symtab *symtab;
1859      int line;
1860      int *index;
1861      int *exact_match;
1862 {
1863   int exact;
1864
1865   /* BEST_INDEX and BEST_LINETABLE identify the smallest linenumber > LINE
1866      so far seen.  */
1867
1868   int best_index;
1869   struct linetable *best_linetable;
1870   struct symtab *best_symtab;
1871
1872   /* First try looking it up in the given symtab.  */
1873   best_linetable = LINETABLE (symtab);
1874   best_symtab = symtab;
1875   best_index = find_line_common (best_linetable, line, &exact);
1876   if (best_index < 0 || !exact)
1877     {
1878       /* Didn't find an exact match.  So we better keep looking for
1879          another symtab with the same name.  In the case of xcoff,
1880          multiple csects for one source file (produced by IBM's FORTRAN
1881          compiler) produce multiple symtabs (this is unavoidable
1882          assuming csects can be at arbitrary places in memory and that
1883          the GLOBAL_BLOCK of a symtab has a begin and end address).  */
1884
1885       /* BEST is the smallest linenumber > LINE so far seen,
1886          or 0 if none has been seen so far.
1887          BEST_INDEX and BEST_LINETABLE identify the item for it.  */
1888       int best;
1889
1890       struct objfile *objfile;
1891       struct symtab *s;
1892
1893       if (best_index >= 0)
1894         best = best_linetable->item[best_index].line;
1895       else
1896         best = 0;
1897
1898       ALL_SYMTABS (objfile, s)
1899       {
1900         struct linetable *l;
1901         int ind;
1902
1903         if (!STREQ (symtab->filename, s->filename))
1904           continue;
1905         l = LINETABLE (s);
1906         ind = find_line_common (l, line, &exact);
1907         if (ind >= 0)
1908           {
1909             if (exact)
1910               {
1911                 best_index = ind;
1912                 best_linetable = l;
1913                 best_symtab = s;
1914                 goto done;
1915               }
1916             if (best == 0 || l->item[ind].line < best)
1917               {
1918                 best = l->item[ind].line;
1919                 best_index = ind;
1920                 best_linetable = l;
1921                 best_symtab = s;
1922               }
1923           }
1924       }
1925     }
1926 done:
1927   if (best_index < 0)
1928     return NULL;
1929
1930   if (index)
1931     *index = best_index;
1932   if (exact_match)
1933     *exact_match = exact;
1934
1935   return best_symtab;
1936 }
1937 \f
1938 /* Set the PC value for a given source file and line number and return true.
1939    Returns zero for invalid line number (and sets the PC to 0).
1940    The source file is specified with a struct symtab.  */
1941
1942 int
1943 find_line_pc (symtab, line, pc)
1944      struct symtab *symtab;
1945      int line;
1946      CORE_ADDR *pc;
1947 {
1948   struct linetable *l;
1949   int ind;
1950
1951   *pc = 0;
1952   if (symtab == 0)
1953     return 0;
1954
1955   symtab = find_line_symtab (symtab, line, &ind, NULL);
1956   if (symtab != NULL)
1957     {
1958       l = LINETABLE (symtab);
1959       *pc = l->item[ind].pc;
1960       return 1;
1961     }
1962   else
1963     return 0;
1964 }
1965
1966 /* Find the range of pc values in a line.
1967    Store the starting pc of the line into *STARTPTR
1968    and the ending pc (start of next line) into *ENDPTR.
1969    Returns 1 to indicate success.
1970    Returns 0 if could not find the specified line.  */
1971
1972 int
1973 find_line_pc_range (sal, startptr, endptr)
1974      struct symtab_and_line sal;
1975      CORE_ADDR *startptr, *endptr;
1976 {
1977   CORE_ADDR startaddr;
1978   struct symtab_and_line found_sal;
1979
1980   startaddr = sal.pc;
1981   if (startaddr == 0 && !find_line_pc (sal.symtab, sal.line, &startaddr))
1982     return 0;
1983
1984   /* This whole function is based on address.  For example, if line 10 has
1985      two parts, one from 0x100 to 0x200 and one from 0x300 to 0x400, then
1986      "info line *0x123" should say the line goes from 0x100 to 0x200
1987      and "info line *0x355" should say the line goes from 0x300 to 0x400.
1988      This also insures that we never give a range like "starts at 0x134
1989      and ends at 0x12c".  */
1990
1991   found_sal = find_pc_sect_line (startaddr, sal.section, 0);
1992   if (found_sal.line != sal.line)
1993     {
1994       /* The specified line (sal) has zero bytes.  */
1995       *startptr = found_sal.pc;
1996       *endptr = found_sal.pc;
1997     }
1998   else
1999     {
2000       *startptr = found_sal.pc;
2001       *endptr = found_sal.end;
2002     }
2003   return 1;
2004 }
2005
2006 /* Given a line table and a line number, return the index into the line
2007    table for the pc of the nearest line whose number is >= the specified one.
2008    Return -1 if none is found.  The value is >= 0 if it is an index.
2009
2010    Set *EXACT_MATCH nonzero if the value returned is an exact match.  */
2011
2012 static int
2013 find_line_common (l, lineno, exact_match)
2014      register struct linetable *l;
2015      register int lineno;
2016      int *exact_match;
2017 {
2018   register int i;
2019   register int len;
2020
2021   /* BEST is the smallest linenumber > LINENO so far seen,
2022      or 0 if none has been seen so far.
2023      BEST_INDEX identifies the item for it.  */
2024
2025   int best_index = -1;
2026   int best = 0;
2027
2028   if (lineno <= 0)
2029     return -1;
2030   if (l == 0)
2031     return -1;
2032
2033   len = l->nitems;
2034   for (i = 0; i < len; i++)
2035     {
2036       register struct linetable_entry *item = &(l->item[i]);
2037
2038       if (item->line == lineno)
2039         {
2040           /* Return the first (lowest address) entry which matches.  */
2041           *exact_match = 1;
2042           return i;
2043         }
2044
2045       if (item->line > lineno && (best == 0 || item->line < best))
2046         {
2047           best = item->line;
2048           best_index = i;
2049         }
2050     }
2051
2052   /* If we got here, we didn't get an exact match.  */
2053
2054   *exact_match = 0;
2055   return best_index;
2056 }
2057
2058 int
2059 find_pc_line_pc_range (pc, startptr, endptr)
2060      CORE_ADDR pc;
2061      CORE_ADDR *startptr, *endptr;
2062 {
2063   struct symtab_and_line sal;
2064   sal = find_pc_line (pc, 0);
2065   *startptr = sal.pc;
2066   *endptr = sal.end;
2067   return sal.symtab != 0;
2068 }
2069
2070 /* Given a function symbol SYM, find the symtab and line for the start
2071    of the function.
2072    If the argument FUNFIRSTLINE is nonzero, we want the first line
2073    of real code inside the function.  */
2074
2075 static struct symtab_and_line
2076 find_function_start_sal (struct symbol *sym, int);
2077
2078 static struct symtab_and_line
2079 find_function_start_sal (sym, funfirstline)
2080      struct symbol *sym;
2081      int funfirstline;
2082 {
2083   CORE_ADDR pc;
2084   struct symtab_and_line sal;
2085
2086   pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym));
2087   fixup_symbol_section (sym, NULL);
2088   if (funfirstline)
2089     {                           /* skip "first line" of function (which is actually its prologue) */
2090       asection *section = SYMBOL_BFD_SECTION (sym);
2091       /* If function is in an unmapped overlay, use its unmapped LMA
2092          address, so that SKIP_PROLOGUE has something unique to work on */
2093       if (section_is_overlay (section) &&
2094           !section_is_mapped (section))
2095         pc = overlay_unmapped_address (pc, section);
2096
2097       pc += FUNCTION_START_OFFSET;
2098       pc = SKIP_PROLOGUE (pc);
2099
2100       /* For overlays, map pc back into its mapped VMA range */
2101       pc = overlay_mapped_address (pc, section);
2102     }
2103   sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
2104
2105 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
2106   /* Convex: no need to suppress code on first line, if any */
2107   sal.pc = pc;
2108 #else
2109   /* Check if SKIP_PROLOGUE left us in mid-line, and the next
2110      line is still part of the same function.  */
2111   if (sal.pc != pc
2112       && BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) <= sal.end
2113       && sal.end < BLOCK_END (SYMBOL_BLOCK_VALUE (sym)))
2114     {
2115       /* First pc of next line */
2116       pc = sal.end;
2117       /* Recalculate the line number (might not be N+1).  */
2118       sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
2119     }
2120   sal.pc = pc;
2121 #endif
2122
2123   return sal;
2124 }
2125 \f
2126 /* If P is of the form "operator[ \t]+..." where `...' is
2127    some legitimate operator text, return a pointer to the
2128    beginning of the substring of the operator text.
2129    Otherwise, return "".  */
2130 char *
2131 operator_chars (p, end)
2132      char *p;
2133      char **end;
2134 {
2135   *end = "";
2136   if (strncmp (p, "operator", 8))
2137     return *end;
2138   p += 8;
2139
2140   /* Don't get faked out by `operator' being part of a longer
2141      identifier.  */
2142   if (isalpha (*p) || *p == '_' || *p == '$' || *p == '\0')
2143     return *end;
2144
2145   /* Allow some whitespace between `operator' and the operator symbol.  */
2146   while (*p == ' ' || *p == '\t')
2147     p++;
2148
2149   /* Recognize 'operator TYPENAME'. */
2150
2151   if (isalpha (*p) || *p == '_' || *p == '$')
2152     {
2153       register char *q = p + 1;
2154       while (isalnum (*q) || *q == '_' || *q == '$')
2155         q++;
2156       *end = q;
2157       return p;
2158     }
2159
2160   switch (*p)
2161     {
2162     case '!':
2163     case '=':
2164     case '*':
2165     case '/':
2166     case '%':
2167     case '^':
2168       if (p[1] == '=')
2169         *end = p + 2;
2170       else
2171         *end = p + 1;
2172       return p;
2173     case '<':
2174     case '>':
2175     case '+':
2176     case '-':
2177     case '&':
2178     case '|':
2179       if (p[1] == '=' || p[1] == p[0])
2180         *end = p + 2;
2181       else
2182         *end = p + 1;
2183       return p;
2184     case '~':
2185     case ',':
2186       *end = p + 1;
2187       return p;
2188     case '(':
2189       if (p[1] != ')')
2190         error ("`operator ()' must be specified without whitespace in `()'");
2191       *end = p + 2;
2192       return p;
2193     case '?':
2194       if (p[1] != ':')
2195         error ("`operator ?:' must be specified without whitespace in `?:'");
2196       *end = p + 2;
2197       return p;
2198     case '[':
2199       if (p[1] != ']')
2200         error ("`operator []' must be specified without whitespace in `[]'");
2201       *end = p + 2;
2202       return p;
2203     default:
2204       error ("`operator %s' not supported", p);
2205       break;
2206     }
2207   *end = "";
2208   return *end;
2209 }
2210
2211 /* Return the number of methods described for TYPE, including the
2212    methods from types it derives from. This can't be done in the symbol
2213    reader because the type of the baseclass might still be stubbed
2214    when the definition of the derived class is parsed.  */
2215
2216 static int total_number_of_methods (struct type *type);
2217
2218 static int
2219 total_number_of_methods (type)
2220      struct type *type;
2221 {
2222   int n;
2223   int count;
2224
2225   CHECK_TYPEDEF (type);
2226   if (TYPE_CPLUS_SPECIFIC (type) == NULL)
2227     return 0;
2228   count = TYPE_NFN_FIELDS_TOTAL (type);
2229
2230   for (n = 0; n < TYPE_N_BASECLASSES (type); n++)
2231     count += total_number_of_methods (TYPE_BASECLASS (type, n));
2232
2233   return count;
2234 }
2235
2236 /* Recursive helper function for decode_line_1.
2237    Look for methods named NAME in type T.
2238    Return number of matches.
2239    Put matches in SYM_ARR, which should have been allocated with
2240    a size of total_number_of_methods (T) * sizeof (struct symbol *).
2241    Note that this function is g++ specific.  */
2242
2243 static int
2244 find_methods (t, name, sym_arr)
2245      struct type *t;
2246      char *name;
2247      struct symbol **sym_arr;
2248 {
2249   int i1 = 0;
2250   int ibase;
2251   struct symbol *sym_class;
2252   char *class_name = type_name_no_tag (t);
2253
2254   /* Ignore this class if it doesn't have a name.  This is ugly, but
2255      unless we figure out how to get the physname without the name of
2256      the class, then the loop can't do any good.  */
2257   if (class_name
2258       && (sym_class = lookup_symbol (class_name,
2259                                      (struct block *) NULL,
2260                                      STRUCT_NAMESPACE,
2261                                      (int *) NULL,
2262                                      (struct symtab **) NULL)))
2263     {
2264       int method_counter;
2265
2266       /* FIXME: Shouldn't this just be CHECK_TYPEDEF (t)?  */
2267       t = SYMBOL_TYPE (sym_class);
2268
2269       /* Loop over each method name.  At this level, all overloads of a name
2270          are counted as a single name.  There is an inner loop which loops over
2271          each overload.  */
2272
2273       for (method_counter = TYPE_NFN_FIELDS (t) - 1;
2274            method_counter >= 0;
2275            --method_counter)
2276         {
2277           int field_counter;
2278           char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
2279           char dem_opname[64];
2280
2281           if (strncmp (method_name, "__", 2) == 0 ||
2282               strncmp (method_name, "op", 2) == 0 ||
2283               strncmp (method_name, "type", 4) == 0)
2284             {
2285               if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
2286                 method_name = dem_opname;
2287               else if (cplus_demangle_opname (method_name, dem_opname, 0))
2288                 method_name = dem_opname;
2289             }
2290
2291           if (STREQ (name, method_name))
2292             /* Find all the overloaded methods with that name.  */
2293             for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
2294                  field_counter >= 0;
2295                  --field_counter)
2296               {
2297                 struct fn_field *f;
2298                 char *phys_name;
2299
2300                 f = TYPE_FN_FIELDLIST1 (t, method_counter);
2301
2302                 if (TYPE_FN_FIELD_STUB (f, field_counter))
2303                   {
2304                     char *tmp_name;
2305
2306                     tmp_name = gdb_mangle_name (t,
2307                                                 method_counter,
2308                                                 field_counter);
2309                     phys_name = alloca (strlen (tmp_name) + 1);
2310                     strcpy (phys_name, tmp_name);
2311                     free (tmp_name);
2312                   }
2313                 else
2314                   phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
2315
2316                 /* Destructor is handled by caller, dont add it to the list */
2317                 if (DESTRUCTOR_PREFIX_P (phys_name))
2318                   continue;
2319
2320                 sym_arr[i1] = lookup_symbol (phys_name,
2321                                              NULL, VAR_NAMESPACE,
2322                                              (int *) NULL,
2323                                              (struct symtab **) NULL);
2324                 if (sym_arr[i1])
2325                   i1++;
2326                 else
2327                   {
2328                     /* This error message gets printed, but the method
2329                        still seems to be found
2330                        fputs_filtered("(Cannot find method ", gdb_stdout);
2331                        fprintf_symbol_filtered (gdb_stdout, phys_name,
2332                        language_cplus,
2333                        DMGL_PARAMS | DMGL_ANSI);
2334                        fputs_filtered(" - possibly inlined.)\n", gdb_stdout);
2335                      */
2336                   }
2337               }
2338         }
2339     }
2340
2341   /* Only search baseclasses if there is no match yet, since names in
2342      derived classes override those in baseclasses.
2343
2344      FIXME: The above is not true; it is only true of member functions
2345      if they have the same number of arguments (??? - section 13.1 of the
2346      ARM says the function members are not in the same scope but doesn't
2347      really spell out the rules in a way I understand.  In any case, if
2348      the number of arguments differ this is a case in which we can overload
2349      rather than hiding without any problem, and gcc 2.4.5 does overload
2350      rather than hiding in this case).  */
2351
2352   if (i1 == 0)
2353     for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
2354       i1 += find_methods (TYPE_BASECLASS (t, ibase), name, sym_arr + i1);
2355
2356   return i1;
2357 }
2358
2359 /* Helper function for decode_line_1.
2360    Build a canonical line spec in CANONICAL if it is non-NULL and if
2361    the SAL has a symtab.
2362    If SYMNAME is non-NULL the canonical line spec is `filename:symname'.
2363    If SYMNAME is NULL the line number from SAL is used and the canonical
2364    line spec is `filename:linenum'.  */
2365
2366 static void
2367 build_canonical_line_spec (sal, symname, canonical)
2368      struct symtab_and_line *sal;
2369      char *symname;
2370      char ***canonical;
2371 {
2372   char **canonical_arr;
2373   char *canonical_name;
2374   char *filename;
2375   struct symtab *s = sal->symtab;
2376
2377   if (s == (struct symtab *) NULL
2378       || s->filename == (char *) NULL
2379       || canonical == (char ***) NULL)
2380     return;
2381
2382   canonical_arr = (char **) xmalloc (sizeof (char *));
2383   *canonical = canonical_arr;
2384
2385   filename = s->filename;
2386   if (symname != NULL)
2387     {
2388       canonical_name = xmalloc (strlen (filename) + strlen (symname) + 2);
2389       sprintf (canonical_name, "%s:%s", filename, symname);
2390     }
2391   else
2392     {
2393       canonical_name = xmalloc (strlen (filename) + 30);
2394       sprintf (canonical_name, "%s:%d", filename, sal->line);
2395     }
2396   canonical_arr[0] = canonical_name;
2397 }
2398
2399
2400
2401 /* Find an instance of the character C in the string S that is outside
2402    of all parenthesis pairs, single-quoted strings, and double-quoted
2403    strings.  */
2404 static char *
2405 find_toplevel_char (char *s, char c)
2406 {
2407   int quoted = 0;               /* zero if we're not in quotes;
2408                                    '"' if we're in a double-quoted string;
2409                                    '\'' if we're in a single-quoted string.  */
2410   int depth = 0;                /* number of unclosed parens we've seen */
2411   char *scan;
2412
2413   for (scan = s; *scan; scan++)
2414     {
2415       if (quoted)
2416         {
2417           if (*scan == quoted)
2418             quoted = 0;
2419           else if (*scan == '\\' && *(scan + 1))
2420             scan++;
2421         }
2422       else if (*scan == c && ! quoted && depth == 0)
2423         return scan;
2424       else if (*scan == '"' || *scan == '\'')
2425         quoted = *scan;
2426       else if (*scan == '(')
2427         depth++;
2428       else if (*scan == ')' && depth > 0)
2429         depth--;
2430     }
2431
2432   return 0;
2433 }
2434
2435
2436 /* Parse a string that specifies a line number.
2437    Pass the address of a char * variable; that variable will be
2438    advanced over the characters actually parsed.
2439
2440    The string can be:
2441
2442    LINENUM -- that line number in current file.  PC returned is 0.
2443    FILE:LINENUM -- that line in that file.  PC returned is 0.
2444    FUNCTION -- line number of openbrace of that function.
2445    PC returned is the start of the function.
2446    VARIABLE -- line number of definition of that variable.
2447    PC returned is 0.
2448    FILE:FUNCTION -- likewise, but prefer functions in that file.
2449    *EXPR -- line in which address EXPR appears.
2450
2451    This may all be followed by an "if EXPR", which we ignore.
2452
2453    FUNCTION may be an undebuggable function found in minimal symbol table.
2454
2455    If the argument FUNFIRSTLINE is nonzero, we want the first line
2456    of real code inside a function when a function is specified, and it is
2457    not OK to specify a variable or type to get its line number.
2458
2459    DEFAULT_SYMTAB specifies the file to use if none is specified.
2460    It defaults to current_source_symtab.
2461    DEFAULT_LINE specifies the line number to use for relative
2462    line numbers (that start with signs).  Defaults to current_source_line.
2463    If CANONICAL is non-NULL, store an array of strings containing the canonical
2464    line specs there if necessary. Currently overloaded member functions and
2465    line numbers or static functions without a filename yield a canonical
2466    line spec. The array and the line spec strings are allocated on the heap,
2467    it is the callers responsibility to free them.
2468
2469    Note that it is possible to return zero for the symtab
2470    if no file is validly specified.  Callers must check that.
2471    Also, the line number returned may be invalid.  */
2472
2473 /* We allow single quotes in various places.  This is a hideous
2474    kludge, which exists because the completer can't yet deal with the
2475    lack of single quotes.  FIXME: write a linespec_completer which we
2476    can use as appropriate instead of make_symbol_completion_list.  */
2477
2478 struct symtabs_and_lines
2479 decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
2480      char **argptr;
2481      int funfirstline;
2482      struct symtab *default_symtab;
2483      int default_line;
2484      char ***canonical;
2485 {
2486   struct symtabs_and_lines values;
2487 #ifdef HPPA_COMPILER_BUG
2488   /* FIXME: The native HP 9000/700 compiler has a bug which appears
2489      when optimizing this file with target i960-vxworks.  I haven't
2490      been able to construct a simple test case.  The problem is that
2491      in the second call to SKIP_PROLOGUE below, the compiler somehow
2492      does not realize that the statement val = find_pc_line (...) will
2493      change the values of the fields of val.  It extracts the elements
2494      into registers at the top of the block, and does not update the
2495      registers after the call to find_pc_line.  You can check this by
2496      inserting a printf at the end of find_pc_line to show what values
2497      it is returning for val.pc and val.end and another printf after
2498      the call to see what values the function actually got (remember,
2499      this is compiling with cc -O, with this patch removed).  You can
2500      also examine the assembly listing: search for the second call to
2501      skip_prologue; the LDO statement before the next call to
2502      find_pc_line loads the address of the structure which
2503      find_pc_line will return; if there is a LDW just before the LDO,
2504      which fetches an element of the structure, then the compiler
2505      still has the bug.
2506
2507      Setting val to volatile avoids the problem.  We must undef
2508      volatile, because the HPPA native compiler does not define
2509      __STDC__, although it does understand volatile, and so volatile
2510      will have been defined away in defs.h.  */
2511 #undef volatile
2512   volatile struct symtab_and_line val;
2513 #define volatile                /*nothing */
2514 #else
2515   struct symtab_and_line val;
2516 #endif
2517   register char *p, *p1;
2518   char *q, *pp, *ii, *p2;
2519 #if 0
2520   char *q1;
2521 #endif
2522   register struct symtab *s;
2523
2524   register struct symbol *sym;
2525   /* The symtab that SYM was found in.  */
2526   struct symtab *sym_symtab;
2527
2528   register CORE_ADDR pc;
2529   register struct minimal_symbol *msymbol;
2530   char *copy;
2531   struct symbol *sym_class;
2532   int i1;
2533   int is_quoted;
2534   int is_quote_enclosed;
2535   int has_parens;
2536   int has_if = 0;
2537   int has_comma = 0;
2538   struct symbol **sym_arr;
2539   struct type *t;
2540   char *saved_arg = *argptr;
2541   extern char *gdb_completer_quote_characters;
2542
2543   INIT_SAL (&val);              /* initialize to zeroes */
2544
2545   /* Defaults have defaults.  */
2546
2547   if (default_symtab == 0)
2548     {
2549       default_symtab = current_source_symtab;
2550       default_line = current_source_line;
2551     }
2552
2553   /* See if arg is *PC */
2554
2555   if (**argptr == '*')
2556     {
2557       (*argptr)++;
2558       pc = parse_and_eval_address_1 (argptr);
2559
2560       values.sals = (struct symtab_and_line *)
2561         xmalloc (sizeof (struct symtab_and_line));
2562
2563       values.nelts = 1;
2564       values.sals[0] = find_pc_line (pc, 0);
2565       values.sals[0].pc = pc;
2566       values.sals[0].section = find_pc_overlay (pc);
2567
2568       return values;
2569     }
2570
2571   /* 'has_if' is for the syntax:
2572    *     (gdb) break foo if (a==b)
2573    */
2574   if ((ii = strstr (*argptr, " if ")) != NULL ||
2575       (ii = strstr (*argptr, "\tif ")) != NULL ||
2576       (ii = strstr (*argptr, " if\t")) != NULL ||
2577       (ii = strstr (*argptr, "\tif\t")) != NULL ||
2578       (ii = strstr (*argptr, " if(")) != NULL ||
2579       (ii = strstr (*argptr, "\tif( ")) != NULL)
2580     has_if = 1;
2581   /* Temporarily zap out "if (condition)" to not
2582    * confuse the parenthesis-checking code below.
2583    * This is undone below. Do not change ii!!
2584    */
2585   if (has_if)
2586     {
2587       *ii = '\0';
2588     }
2589
2590   /* Set various flags.
2591    * 'has_parens' is important for overload checking, where
2592    * we allow things like: 
2593    *     (gdb) break c::f(int)
2594    */
2595
2596   /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
2597
2598   is_quoted = (**argptr
2599                && strchr (gdb_completer_quote_characters, **argptr) != NULL);
2600
2601   has_parens = ((pp = strchr (*argptr, '(')) != NULL
2602                 && (pp = strrchr (pp, ')')) != NULL);
2603
2604   /* Now that we're safely past the has_parens check,
2605    * put back " if (condition)" so outer layers can see it 
2606    */
2607   if (has_if)
2608     *ii = ' ';
2609
2610   /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
2611      and we must isolate the first half.  Outer layers will call again later
2612      for the second half.
2613
2614      Don't count commas that appear in argument lists of overloaded
2615      functions, or in quoted strings.  It's stupid to go to this much
2616      trouble when the rest of the function is such an obvious roach hotel.  */
2617   ii = find_toplevel_char (*argptr, ',');
2618   has_comma = (ii != 0);
2619
2620   /* Temporarily zap out second half to not
2621    * confuse the code below.
2622    * This is undone below. Do not change ii!!
2623    */
2624   if (has_comma)
2625     {
2626       *ii = '\0';
2627     }
2628
2629   /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
2630   /* May also be CLASS::MEMBER, or NAMESPACE::NAME */
2631   /* Look for ':', but ignore inside of <> */
2632
2633   s = NULL;
2634   p = *argptr;
2635   if (p[0] == '"')
2636     {
2637       is_quote_enclosed = 1;
2638       p++;
2639     }
2640   else
2641     is_quote_enclosed = 0;
2642   for (; *p; p++)
2643     {
2644       if (p[0] == '<')
2645         {
2646           char *temp_end = find_template_name_end (p);
2647           if (!temp_end)
2648             error ("malformed template specification in command");
2649           p = temp_end;
2650         }
2651       /* Check for the end of the first half of the linespec.  End of line,
2652          a tab, a double colon or the last single colon, or a space.  But
2653          if enclosed in double quotes we do not break on enclosed spaces */
2654       if (!*p
2655           || p[0] == '\t'
2656           || ((p[0] == ':')
2657               && ((p[1] == ':') || (strchr (p + 1, ':') == NULL)))
2658           || ((p[0] == ' ') && !is_quote_enclosed))
2659         break;
2660       if (p[0] == '.' && strchr (p, ':') == NULL)       /* Java qualified method. */
2661         {
2662           /* Find the *last* '.', since the others are package qualifiers. */
2663           for (p1 = p; *p1; p1++)
2664             {
2665               if (*p1 == '.')
2666                 p = p1;
2667             }
2668           break;
2669         }
2670     }
2671   while (p[0] == ' ' || p[0] == '\t')
2672     p++;
2673
2674   /* if the closing double quote was left at the end, remove it */
2675   if (is_quote_enclosed)
2676     {
2677       char *closing_quote = strchr (p, '"');
2678       if (closing_quote && closing_quote[1] == '\0')
2679         *closing_quote = '\0';
2680     }
2681
2682   /* Now that we've safely parsed the first half,
2683    * put back ',' so outer layers can see it 
2684    */
2685   if (has_comma)
2686     *ii = ',';
2687
2688   if ((p[0] == ':' || p[0] == '.') && !has_parens)
2689     {
2690       /*  C++ */
2691       /*  ... or Java */
2692       if (is_quoted)
2693         *argptr = *argptr + 1;
2694       if (p[0] == '.' || p[1] == ':')
2695         {
2696           char *saved_arg2 = *argptr;
2697           char *temp_end;
2698           /* First check for "global" namespace specification,
2699              of the form "::foo". If found, skip over the colons
2700              and jump to normal symbol processing */
2701           if ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t'))
2702             saved_arg2 += 2;
2703
2704           /* We have what looks like a class or namespace
2705              scope specification (A::B), possibly with many
2706              levels of namespaces or classes (A::B::C::D).
2707
2708              Some versions of the HP ANSI C++ compiler (as also possibly
2709              other compilers) generate class/function/member names with
2710              embedded double-colons if they are inside namespaces. To
2711              handle this, we loop a few times, considering larger and
2712              larger prefixes of the string as though they were single
2713              symbols.  So, if the initially supplied string is
2714              A::B::C::D::foo, we have to look up "A", then "A::B",
2715              then "A::B::C", then "A::B::C::D", and finally
2716              "A::B::C::D::foo" as single, monolithic symbols, because
2717              A, B, C or D may be namespaces.
2718
2719              Note that namespaces can nest only inside other
2720              namespaces, and not inside classes.  So we need only
2721              consider *prefixes* of the string; there is no need to look up
2722              "B::C" separately as a symbol in the previous example. */
2723
2724           p2 = p;               /* save for restart */
2725           while (1)
2726             {
2727               /* Extract the class name.  */
2728               p1 = p;
2729               while (p != *argptr && p[-1] == ' ')
2730                 --p;
2731               copy = (char *) alloca (p - *argptr + 1);
2732               memcpy (copy, *argptr, p - *argptr);
2733               copy[p - *argptr] = 0;
2734
2735               /* Discard the class name from the arg.  */
2736               p = p1 + (p1[0] == ':' ? 2 : 1);
2737               while (*p == ' ' || *p == '\t')
2738                 p++;
2739               *argptr = p;
2740
2741               sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
2742                                          (struct symtab **) NULL);
2743
2744               if (sym_class &&
2745                   (t = check_typedef (SYMBOL_TYPE (sym_class)),
2746                    (TYPE_CODE (t) == TYPE_CODE_STRUCT
2747                     || TYPE_CODE (t) == TYPE_CODE_UNION)))
2748                 {
2749                   /* Arg token is not digits => try it as a function name
2750                      Find the next token(everything up to end or next blank). */
2751                   if (**argptr
2752                       && strchr (gdb_completer_quote_characters, **argptr) != NULL)
2753                     {
2754                       p = skip_quoted (*argptr);
2755                       *argptr = *argptr + 1;
2756                     }
2757                   else
2758                     {
2759                       p = *argptr;
2760                       while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':')
2761                         p++;
2762                     }
2763 /*
2764    q = operator_chars (*argptr, &q1);
2765    if (q1 - q)
2766    {
2767    char *opname;
2768    char *tmp = alloca (q1 - q + 1);
2769    memcpy (tmp, q, q1 - q);
2770    tmp[q1 - q] = '\0';
2771    opname = cplus_mangle_opname (tmp, DMGL_ANSI);
2772    if (opname == NULL)
2773    {
2774    error_begin ();
2775    printf_filtered ("no mangling for \"%s\"\n", tmp);
2776    cplusplus_hint (saved_arg);
2777    return_to_top_level (RETURN_ERROR);
2778    }
2779    copy = (char*) alloca (3 + strlen(opname));
2780    sprintf (copy, "__%s", opname);
2781    p = q1;
2782    }
2783    else
2784  */
2785                   {
2786                     copy = (char *) alloca (p - *argptr + 1);
2787                     memcpy (copy, *argptr, p - *argptr);
2788                     copy[p - *argptr] = '\0';
2789                     if (p != *argptr
2790                         && copy[p - *argptr - 1]
2791                         && strchr (gdb_completer_quote_characters,
2792                                    copy[p - *argptr - 1]) != NULL)
2793                       copy[p - *argptr - 1] = '\0';
2794                   }
2795
2796                   /* no line number may be specified */
2797                   while (*p == ' ' || *p == '\t')
2798                     p++;
2799                   *argptr = p;
2800
2801                   sym = 0;
2802                   i1 = 0;       /*  counter for the symbol array */
2803                   sym_arr = (struct symbol **) alloca (total_number_of_methods (t)
2804                                                 * sizeof (struct symbol *));
2805
2806                   if (destructor_name_p (copy, t))
2807                     {
2808                       /* Destructors are a special case.  */
2809                       int m_index, f_index;
2810
2811                       if (get_destructor_fn_field (t, &m_index, &f_index))
2812                         {
2813                           struct fn_field *f = TYPE_FN_FIELDLIST1 (t, m_index);
2814
2815                           sym_arr[i1] =
2816                             lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, f_index),
2817                                            NULL, VAR_NAMESPACE, (int *) NULL,
2818                                            (struct symtab **) NULL);
2819                           if (sym_arr[i1])
2820                             i1++;
2821                         }
2822                     }
2823                   else
2824                     i1 = find_methods (t, copy, sym_arr);
2825                   if (i1 == 1)
2826                     {
2827                       /* There is exactly one field with that name.  */
2828                       sym = sym_arr[0];
2829
2830                       if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
2831                         {
2832                           values.sals = (struct symtab_and_line *)
2833                             xmalloc (sizeof (struct symtab_and_line));
2834                           values.nelts = 1;
2835                           values.sals[0] = find_function_start_sal (sym,
2836                                                               funfirstline);
2837                         }
2838                       else
2839                         {
2840                           values.nelts = 0;
2841                         }
2842                       return values;
2843                     }
2844                   if (i1 > 0)
2845                     {
2846                       /* There is more than one field with that name
2847                          (overloaded).  Ask the user which one to use.  */
2848                       return decode_line_2 (sym_arr, i1, funfirstline, canonical);
2849                     }
2850                   else
2851                     {
2852                       char *tmp;
2853
2854                       if (OPNAME_PREFIX_P (copy))
2855                         {
2856                           tmp = (char *) alloca (strlen (copy + 3) + 9);
2857                           strcpy (tmp, "operator ");
2858                           strcat (tmp, copy + 3);
2859                         }
2860                       else
2861                         tmp = copy;
2862                       error_begin ();
2863                       if (tmp[0] == '~')
2864                         printf_filtered
2865                           ("the class `%s' does not have destructor defined\n",
2866                            SYMBOL_SOURCE_NAME (sym_class));
2867                       else
2868                         printf_filtered
2869                           ("the class %s does not have any method named %s\n",
2870                            SYMBOL_SOURCE_NAME (sym_class), tmp);
2871                       cplusplus_hint (saved_arg);
2872                       return_to_top_level (RETURN_ERROR);
2873                     }
2874                 }
2875
2876               /* Move pointer up to next possible class/namespace token */
2877               p = p2 + 1;       /* restart with old value +1 */
2878               /* Move pointer ahead to next double-colon */
2879               while (*p && (p[0] != ' ') && (p[0] != '\t') && (p[0] != '\''))
2880                 {
2881                   if (p[0] == '<')
2882                     {
2883                       temp_end = find_template_name_end (p);
2884                       if (!temp_end)
2885                         error ("malformed template specification in command");
2886                       p = temp_end;
2887                     }
2888                   else if ((p[0] == ':') && (p[1] == ':'))
2889                     break;      /* found double-colon */
2890                   else
2891                     p++;
2892                 }
2893
2894               if (*p != ':')
2895                 break;          /* out of the while (1) */
2896
2897               p2 = p;           /* save restart for next time around */
2898               *argptr = saved_arg2;     /* restore argptr */
2899             }                   /* while (1) */
2900
2901           /* Last chance attempt -- check entire name as a symbol */
2902           /* Use "copy" in preparation for jumping out of this block,
2903              to be consistent with usage following the jump target */
2904           copy = (char *) alloca (p - saved_arg2 + 1);
2905           memcpy (copy, saved_arg2, p - saved_arg2);
2906           /* Note: if is_quoted should be true, we snuff out quote here anyway */
2907           copy[p - saved_arg2] = '\000';
2908           /* Set argptr to skip over the name */
2909           *argptr = (*p == '\'') ? p + 1 : p;
2910           /* Look up entire name */
2911           sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
2912           s = (struct symtab *) 0;
2913           /* Prepare to jump: restore the " if (condition)" so outer layers see it */
2914           /* Symbol was found --> jump to normal symbol processing.
2915              Code following "symbol_found" expects "copy" to have the
2916              symbol name, "sym" to have the symbol pointer, "s" to be
2917              a specified file's symtab, and sym_symtab to be the symbol's
2918              symtab. */
2919           /* By jumping there we avoid falling through the FILE:LINE and
2920              FILE:FUNC processing stuff below */
2921           if (sym)
2922             goto symbol_found;
2923
2924           /* Couldn't find any interpretation as classes/namespaces, so give up */
2925           error_begin ();
2926           /* The quotes are important if copy is empty.  */
2927           printf_filtered
2928             ("Can't find member of namespace, class, struct, or union named \"%s\"\n", copy);
2929           cplusplus_hint (saved_arg);
2930           return_to_top_level (RETURN_ERROR);
2931         }
2932       /*  end of C++  */
2933
2934
2935       /* Extract the file name.  */
2936       p1 = p;
2937       while (p != *argptr && p[-1] == ' ')
2938         --p;
2939       if ((*p == '"') && is_quote_enclosed)
2940         --p;
2941       copy = (char *) alloca (p - *argptr + 1);
2942       if ((**argptr == '"') && is_quote_enclosed)
2943         {
2944           memcpy (copy, *argptr + 1, p - *argptr - 1);
2945           /* It may have the ending quote right after the file name */
2946           if (copy[p - *argptr - 2] == '"')
2947             copy[p - *argptr - 2] = 0;
2948           else
2949             copy[p - *argptr - 1] = 0;
2950         }
2951       else
2952         {
2953           memcpy (copy, *argptr, p - *argptr);
2954           copy[p - *argptr] = 0;
2955         }
2956
2957       /* Find that file's data.  */
2958       s = lookup_symtab (copy);
2959       if (s == 0)
2960         {
2961           if (!have_full_symbols () && !have_partial_symbols ())
2962             error (no_symtab_msg);
2963           error ("No source file named %s.", copy);
2964         }
2965
2966       /* Discard the file name from the arg.  */
2967       p = p1 + 1;
2968       while (*p == ' ' || *p == '\t')
2969         p++;
2970       *argptr = p;
2971     }
2972 #if 0
2973   /* No one really seems to know why this was added. It certainly
2974      breaks the command line, though, whenever the passed
2975      name is of the form ClassName::Method. This bit of code
2976      singles out the class name, and if funfirstline is set (for
2977      example, you are setting a breakpoint at this function),
2978      you get an error. This did not occur with earlier
2979      verions, so I am ifdef'ing this out. 3/29/99 */
2980   else
2981     {
2982       /* Check if what we have till now is a symbol name */
2983
2984       /* We may be looking at a template instantiation such
2985          as "foo<int>".  Check here whether we know about it,
2986          instead of falling through to the code below which
2987          handles ordinary function names, because that code
2988          doesn't like seeing '<' and '>' in a name -- the
2989          skip_quoted call doesn't go past them.  So see if we
2990          can figure it out right now. */
2991
2992       copy = (char *) alloca (p - *argptr + 1);
2993       memcpy (copy, *argptr, p - *argptr);
2994       copy[p - *argptr] = '\000';
2995       sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
2996       if (sym)
2997         {
2998           /* Yes, we have a symbol; jump to symbol processing */
2999           /* Code after symbol_found expects S, SYM_SYMTAB, SYM, 
3000              and COPY to be set correctly */
3001           *argptr = (*p == '\'') ? p + 1 : p;
3002           s = (struct symtab *) 0;
3003           goto symbol_found;
3004         }
3005       /* Otherwise fall out from here and go to file/line spec
3006          processing, etc. */
3007     }
3008 #endif
3009
3010   /* S is specified file's symtab, or 0 if no file specified.
3011      arg no longer contains the file name.  */
3012
3013   /* Check whether arg is all digits (and sign) */
3014
3015   q = *argptr;
3016   if (*q == '-' || *q == '+')
3017     q++;
3018   while (*q >= '0' && *q <= '9')
3019     q++;
3020
3021   if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ','))
3022     {
3023       /* We found a token consisting of all digits -- at least one digit.  */
3024       enum sign
3025         {
3026           none, plus, minus
3027         }
3028       sign = none;
3029
3030       /* We might need a canonical line spec if no file was specified.  */
3031       int need_canonical = (s == 0) ? 1 : 0;
3032
3033       /* This is where we need to make sure that we have good defaults.
3034          We must guarantee that this section of code is never executed
3035          when we are called with just a function name, since
3036          select_source_symtab calls us with such an argument  */
3037
3038       if (s == 0 && default_symtab == 0)
3039         {
3040           select_source_symtab (0);
3041           default_symtab = current_source_symtab;
3042           default_line = current_source_line;
3043         }
3044
3045       if (**argptr == '+')
3046         sign = plus, (*argptr)++;
3047       else if (**argptr == '-')
3048         sign = minus, (*argptr)++;
3049       val.line = atoi (*argptr);
3050       switch (sign)
3051         {
3052         case plus:
3053           if (q == *argptr)
3054             val.line = 5;
3055           if (s == 0)
3056             val.line = default_line + val.line;
3057           break;
3058         case minus:
3059           if (q == *argptr)
3060             val.line = 15;
3061           if (s == 0)
3062             val.line = default_line - val.line;
3063           else
3064             val.line = 1;
3065           break;
3066         case none:
3067           break;                /* No need to adjust val.line.  */
3068         }
3069
3070       while (*q == ' ' || *q == '\t')
3071         q++;
3072       *argptr = q;
3073       if (s == 0)
3074         s = default_symtab;
3075
3076       /* It is possible that this source file has more than one symtab, 
3077          and that the new line number specification has moved us from the
3078          default (in s) to a new one.  */
3079       val.symtab = find_line_symtab (s, val.line, NULL, NULL);
3080       if (val.symtab == 0)
3081         val.symtab = s;
3082
3083       val.pc = 0;
3084       values.sals = (struct symtab_and_line *)
3085         xmalloc (sizeof (struct symtab_and_line));
3086       values.sals[0] = val;
3087       values.nelts = 1;
3088       if (need_canonical)
3089         build_canonical_line_spec (values.sals, NULL, canonical);
3090       return values;
3091     }
3092
3093   /* Arg token is not digits => try it as a variable name
3094      Find the next token (everything up to end or next whitespace).  */
3095
3096   if (**argptr == '$')          /* May be a convenience variable */
3097     p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));        /* One or two $ chars possible */
3098   else if (is_quoted)
3099     {
3100       p = skip_quoted (*argptr);
3101       if (p[-1] != '\'')
3102         error ("Unmatched single quote.");
3103     }
3104   else if (has_parens)
3105     {
3106       p = pp + 1;
3107     }
3108   else
3109     {
3110       p = skip_quoted (*argptr);
3111     }
3112
3113   if (is_quote_enclosed && **argptr == '"')
3114     (*argptr)++;
3115
3116   copy = (char *) alloca (p - *argptr + 1);
3117   memcpy (copy, *argptr, p - *argptr);
3118   copy[p - *argptr] = '\0';
3119   if (p != *argptr
3120       && copy[0]
3121       && copy[0] == copy[p - *argptr - 1]
3122       && strchr (gdb_completer_quote_characters, copy[0]) != NULL)
3123     {
3124       copy[p - *argptr - 1] = '\0';
3125       copy++;
3126     }
3127   while (*p == ' ' || *p == '\t')
3128     p++;
3129   *argptr = p;
3130
3131   /* If it starts with $: may be a legitimate variable or routine name
3132      (e.g. HP-UX millicode routines such as $$dyncall), or it may
3133      be history value, or it may be a convenience variable */
3134
3135   if (*copy == '$')
3136     {
3137       value_ptr valx;
3138       int index = 0;
3139       int need_canonical = 0;
3140
3141       p = (copy[1] == '$') ? copy + 2 : copy + 1;
3142       while (*p >= '0' && *p <= '9')
3143         p++;
3144       if (!*p)                  /* reached end of token without hitting non-digit */
3145         {
3146           /* We have a value history reference */
3147           sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
3148           valx = access_value_history ((copy[1] == '$') ? -index : index);
3149           if (TYPE_CODE (VALUE_TYPE (valx)) != TYPE_CODE_INT)
3150             error ("History values used in line specs must have integer values.");
3151         }
3152       else
3153         {
3154           /* Not all digits -- may be user variable/function or a
3155              convenience variable */
3156
3157           /* Look up entire name as a symbol first */
3158           sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
3159           s = (struct symtab *) 0;
3160           need_canonical = 1;
3161           /* Symbol was found --> jump to normal symbol processing.
3162              Code following "symbol_found" expects "copy" to have the
3163              symbol name, "sym" to have the symbol pointer, "s" to be
3164              a specified file's symtab, and sym_symtab to be the symbol's
3165              symtab. */
3166           if (sym)
3167             goto symbol_found;
3168
3169           /* If symbol was not found, look in minimal symbol tables */
3170           msymbol = lookup_minimal_symbol (copy, 0, 0);
3171           /* Min symbol was found --> jump to minsym processing. */
3172           if (msymbol)
3173             goto minimal_symbol_found;
3174
3175           /* Not a user variable or function -- must be convenience variable */
3176           need_canonical = (s == 0) ? 1 : 0;
3177           valx = value_of_internalvar (lookup_internalvar (copy + 1));
3178           if (TYPE_CODE (VALUE_TYPE (valx)) != TYPE_CODE_INT)
3179             error ("Convenience variables used in line specs must have integer values.");
3180         }
3181
3182       /* Either history value or convenience value from above, in valx */
3183       val.symtab = s ? s : default_symtab;
3184       val.line = value_as_long (valx);
3185       val.pc = 0;
3186
3187       values.sals = (struct symtab_and_line *) xmalloc (sizeof val);
3188       values.sals[0] = val;
3189       values.nelts = 1;
3190
3191       if (need_canonical)
3192         build_canonical_line_spec (values.sals, NULL, canonical);
3193
3194       return values;
3195     }
3196
3197
3198   /* Look up that token as a variable.
3199      If file specified, use that file's per-file block to start with.  */
3200
3201   sym = lookup_symbol (copy,
3202                        (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
3203                         : get_selected_block ()),
3204                        VAR_NAMESPACE, 0, &sym_symtab);
3205
3206 symbol_found:                   /* We also jump here from inside the C++ class/namespace 
3207                                    code on finding a symbol of the form "A::B::C" */
3208
3209   if (sym != NULL)
3210     {
3211       if (SYMBOL_CLASS (sym) == LOC_BLOCK)
3212         {
3213           /* Arg is the name of a function */
3214           values.sals = (struct symtab_and_line *)
3215             xmalloc (sizeof (struct symtab_and_line));
3216           values.sals[0] = find_function_start_sal (sym, funfirstline);
3217           values.nelts = 1;
3218
3219           /* Don't use the SYMBOL_LINE; if used at all it points to
3220              the line containing the parameters or thereabouts, not
3221              the first line of code.  */
3222
3223           /* We might need a canonical line spec if it is a static
3224              function.  */
3225           if (s == 0)
3226             {
3227               struct blockvector *bv = BLOCKVECTOR (sym_symtab);
3228               struct block *b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3229               if (lookup_block_symbol (b, copy, VAR_NAMESPACE) != NULL)
3230                 build_canonical_line_spec (values.sals, copy, canonical);
3231             }
3232           return values;
3233         }
3234       else
3235         {
3236           if (funfirstline)
3237             error ("\"%s\" is not a function", copy);
3238           else if (SYMBOL_LINE (sym) != 0)
3239             {
3240               /* We know its line number.  */
3241               values.sals = (struct symtab_and_line *)
3242                 xmalloc (sizeof (struct symtab_and_line));
3243               values.nelts = 1;
3244               memset (&values.sals[0], 0, sizeof (values.sals[0]));
3245               values.sals[0].symtab = sym_symtab;
3246               values.sals[0].line = SYMBOL_LINE (sym);
3247               return values;
3248             }
3249           else
3250             /* This can happen if it is compiled with a compiler which doesn't
3251                put out line numbers for variables.  */
3252             /* FIXME: Shouldn't we just set .line and .symtab to zero
3253                and return?  For example, "info line foo" could print
3254                the address.  */
3255             error ("Line number not known for symbol \"%s\"", copy);
3256         }
3257     }
3258
3259   msymbol = lookup_minimal_symbol (copy, NULL, NULL);
3260
3261 minimal_symbol_found:           /* We also jump here from the case for variables
3262                                    that begin with '$' */
3263
3264   if (msymbol != NULL)
3265     {
3266       values.sals = (struct symtab_and_line *)
3267         xmalloc (sizeof (struct symtab_and_line));
3268       values.sals[0] = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
3269                                           (struct sec *) 0, 0);
3270       values.sals[0].section = SYMBOL_BFD_SECTION (msymbol);
3271       if (funfirstline)
3272         {
3273           values.sals[0].pc += FUNCTION_START_OFFSET;
3274           values.sals[0].pc = SKIP_PROLOGUE (values.sals[0].pc);
3275         }
3276       values.nelts = 1;
3277       return values;
3278     }
3279
3280   if (!have_full_symbols () &&
3281       !have_partial_symbols () && !have_minimal_symbols ())
3282     error (no_symtab_msg);
3283
3284   error ("Function \"%s\" not defined.", copy);
3285   return values;                /* for lint */
3286 }
3287
3288 struct symtabs_and_lines
3289 decode_line_spec (string, funfirstline)
3290      char *string;
3291      int funfirstline;
3292 {
3293   struct symtabs_and_lines sals;
3294   if (string == 0)
3295     error ("Empty line specification.");
3296   sals = decode_line_1 (&string, funfirstline,
3297                         current_source_symtab, current_source_line,
3298                         (char ***) NULL);
3299   if (*string)
3300     error ("Junk at end of line specification: %s", string);
3301   return sals;
3302 }
3303
3304 /* Given a list of NELTS symbols in SYM_ARR, return a list of lines to
3305    operate on (ask user if necessary).
3306    If CANONICAL is non-NULL return a corresponding array of mangled names
3307    as canonical line specs there.  */
3308
3309 static struct symtabs_and_lines
3310 decode_line_2 (sym_arr, nelts, funfirstline, canonical)
3311      struct symbol *sym_arr[];
3312      int nelts;
3313      int funfirstline;
3314      char ***canonical;
3315 {
3316   struct symtabs_and_lines values, return_values;
3317   char *args, *arg1;
3318   int i;
3319   char *prompt;
3320   char *symname;
3321   struct cleanup *old_chain;
3322   char **canonical_arr = (char **) NULL;
3323
3324   values.sals = (struct symtab_and_line *)
3325     alloca (nelts * sizeof (struct symtab_and_line));
3326   return_values.sals = (struct symtab_and_line *)
3327     xmalloc (nelts * sizeof (struct symtab_and_line));
3328   old_chain = make_cleanup (free, return_values.sals);
3329
3330   if (canonical)
3331     {
3332       canonical_arr = (char **) xmalloc (nelts * sizeof (char *));
3333       make_cleanup (free, canonical_arr);
3334       memset (canonical_arr, 0, nelts * sizeof (char *));
3335       *canonical = canonical_arr;
3336     }
3337
3338   i = 0;
3339   printf_unfiltered ("[0] cancel\n[1] all\n");
3340   while (i < nelts)
3341     {
3342       INIT_SAL (&return_values.sals[i]);        /* initialize to zeroes */
3343       INIT_SAL (&values.sals[i]);
3344       if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
3345         {
3346           values.sals[i] = find_function_start_sal (sym_arr[i], funfirstline);
3347           printf_unfiltered ("[%d] %s at %s:%d\n",
3348                              (i + 2),
3349                              SYMBOL_SOURCE_NAME (sym_arr[i]),
3350                              values.sals[i].symtab->filename,
3351                              values.sals[i].line);
3352         }
3353       else
3354         printf_unfiltered ("?HERE\n");
3355       i++;
3356     }
3357
3358   if ((prompt = getenv ("PS2")) == NULL)
3359     {
3360       prompt = "> ";
3361     }
3362   args = command_line_input (prompt, 0, "overload-choice");
3363
3364   if (args == 0 || *args == 0)
3365     error_no_arg ("one or more choice numbers");
3366
3367   i = 0;
3368   while (*args)
3369     {
3370       int num;
3371
3372       arg1 = args;
3373       while (*arg1 >= '0' && *arg1 <= '9')
3374         arg1++;
3375       if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
3376         error ("Arguments must be choice numbers.");
3377
3378       num = atoi (args);
3379
3380       if (num == 0)
3381         error ("cancelled");
3382       else if (num == 1)
3383         {
3384           if (canonical_arr)
3385             {
3386               for (i = 0; i < nelts; i++)
3387                 {
3388                   if (canonical_arr[i] == NULL)
3389                     {
3390                       symname = SYMBOL_NAME (sym_arr[i]);
3391                       canonical_arr[i] = savestring (symname, strlen (symname));
3392                     }
3393                 }
3394             }
3395           memcpy (return_values.sals, values.sals,
3396                   (nelts * sizeof (struct symtab_and_line)));
3397           return_values.nelts = nelts;
3398           discard_cleanups (old_chain);
3399           return return_values;
3400         }
3401
3402       if (num >= nelts + 2)
3403         {
3404           printf_unfiltered ("No choice number %d.\n", num);
3405         }
3406       else
3407         {
3408           num -= 2;
3409           if (values.sals[num].pc)
3410             {
3411               if (canonical_arr)
3412                 {
3413                   symname = SYMBOL_NAME (sym_arr[num]);
3414                   make_cleanup (free, symname);
3415                   canonical_arr[i] = savestring (symname, strlen (symname));
3416                 }
3417               return_values.sals[i++] = values.sals[num];
3418               values.sals[num].pc = 0;
3419             }
3420           else
3421             {
3422               printf_unfiltered ("duplicate request for %d ignored.\n", num);
3423             }
3424         }
3425
3426       args = arg1;
3427       while (*args == ' ' || *args == '\t')
3428         args++;
3429     }
3430   return_values.nelts = i;
3431   discard_cleanups (old_chain);
3432   return return_values;
3433 }
3434 \f
3435
3436 /* Slave routine for sources_info.  Force line breaks at ,'s.
3437    NAME is the name to print and *FIRST is nonzero if this is the first
3438    name printed.  Set *FIRST to zero.  */
3439 static void
3440 output_source_filename (name, first)
3441      char *name;
3442      int *first;
3443 {
3444   /* Table of files printed so far.  Since a single source file can
3445      result in several partial symbol tables, we need to avoid printing
3446      it more than once.  Note: if some of the psymtabs are read in and
3447      some are not, it gets printed both under "Source files for which
3448      symbols have been read" and "Source files for which symbols will
3449      be read in on demand".  I consider this a reasonable way to deal
3450      with the situation.  I'm not sure whether this can also happen for
3451      symtabs; it doesn't hurt to check.  */
3452   static char **tab = NULL;
3453   /* Allocated size of tab in elements.
3454      Start with one 256-byte block (when using GNU malloc.c).
3455      24 is the malloc overhead when range checking is in effect.  */
3456   static int tab_alloc_size = (256 - 24) / sizeof (char *);
3457   /* Current size of tab in elements.  */
3458   static int tab_cur_size;
3459
3460   char **p;
3461
3462   if (*first)
3463     {
3464       if (tab == NULL)
3465         tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
3466       tab_cur_size = 0;
3467     }
3468
3469   /* Is NAME in tab?  */
3470   for (p = tab; p < tab + tab_cur_size; p++)
3471     if (STREQ (*p, name))
3472       /* Yes; don't print it again.  */
3473       return;
3474   /* No; add it to tab.  */
3475   if (tab_cur_size == tab_alloc_size)
3476     {
3477       tab_alloc_size *= 2;
3478       tab = (char **) xrealloc ((char *) tab, tab_alloc_size * sizeof (*tab));
3479     }
3480   tab[tab_cur_size++] = name;
3481
3482   if (*first)
3483     {
3484       *first = 0;
3485     }
3486   else
3487     {
3488       printf_filtered (", ");
3489     }
3490
3491   wrap_here ("");
3492   fputs_filtered (name, gdb_stdout);
3493 }
3494
3495 static void
3496 sources_info (ignore, from_tty)
3497      char *ignore;
3498      int from_tty;
3499 {
3500   register struct symtab *s;
3501   register struct partial_symtab *ps;
3502   register struct objfile *objfile;
3503   int first;
3504
3505   if (!have_full_symbols () && !have_partial_symbols ())
3506     {
3507       error (no_symtab_msg);
3508     }
3509
3510   printf_filtered ("Source files for which symbols have been read in:\n\n");
3511
3512   first = 1;
3513   ALL_SYMTABS (objfile, s)
3514   {
3515     output_source_filename (s->filename, &first);
3516   }
3517   printf_filtered ("\n\n");
3518
3519   printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
3520
3521   first = 1;
3522   ALL_PSYMTABS (objfile, ps)
3523   {
3524     if (!ps->readin)
3525       {
3526         output_source_filename (ps->filename, &first);
3527       }
3528   }
3529   printf_filtered ("\n");
3530 }
3531
3532 static int
3533 file_matches (file, files, nfiles)
3534      char *file;
3535      char *files[];
3536      int nfiles;
3537 {
3538   int i;
3539
3540   if (file != NULL && nfiles != 0)
3541     {
3542       for (i = 0; i < nfiles; i++)
3543         {
3544           if (strcmp (files[i], basename (file)) == 0)
3545             return 1;
3546         }
3547     }
3548   else if (nfiles == 0)
3549     return 1;
3550   return 0;
3551 }
3552
3553 /* Free any memory associated with a search. */
3554 void
3555 free_search_symbols (symbols)
3556      struct symbol_search *symbols;
3557 {
3558   struct symbol_search *p;
3559   struct symbol_search *next;
3560
3561   for (p = symbols; p != NULL; p = next)
3562     {
3563       next = p->next;
3564       free (p);
3565     }
3566 }
3567
3568 static void
3569 do_free_search_symbols_cleanup (void *symbols)
3570 {
3571   free_search_symbols (symbols);
3572 }
3573
3574 struct cleanup *
3575 make_cleanup_free_search_symbols (struct symbol_search *symbols)
3576 {
3577   return make_cleanup (do_free_search_symbols_cleanup, symbols);
3578 }
3579
3580
3581 /* Search the symbol table for matches to the regular expression REGEXP,
3582    returning the results in *MATCHES.
3583
3584    Only symbols of KIND are searched:
3585    FUNCTIONS_NAMESPACE - search all functions
3586    TYPES_NAMESPACE     - search all type names
3587    METHODS_NAMESPACE   - search all methods NOT IMPLEMENTED
3588    VARIABLES_NAMESPACE - search all symbols, excluding functions, type names,
3589    and constants (enums)
3590
3591    free_search_symbols should be called when *MATCHES is no longer needed.
3592  */
3593 void
3594 search_symbols (regexp, kind, nfiles, files, matches)
3595      char *regexp;
3596      namespace_enum kind;
3597      int nfiles;
3598      char *files[];
3599      struct symbol_search **matches;
3600
3601 {
3602   register struct symtab *s;
3603   register struct partial_symtab *ps;
3604   register struct blockvector *bv;
3605   struct blockvector *prev_bv = 0;
3606   register struct block *b;
3607   register int i = 0;
3608   register int j;
3609   register struct symbol *sym;
3610   struct partial_symbol **psym;
3611   struct objfile *objfile;
3612   struct minimal_symbol *msymbol;
3613   char *val;
3614   int found_misc = 0;
3615   static enum minimal_symbol_type types[]
3616   =
3617   {mst_data, mst_text, mst_abs, mst_unknown};
3618   static enum minimal_symbol_type types2[]
3619   =
3620   {mst_bss, mst_file_text, mst_abs, mst_unknown};
3621   static enum minimal_symbol_type types3[]
3622   =
3623   {mst_file_data, mst_solib_trampoline, mst_abs, mst_unknown};
3624   static enum minimal_symbol_type types4[]
3625   =
3626   {mst_file_bss, mst_text, mst_abs, mst_unknown};
3627   enum minimal_symbol_type ourtype;
3628   enum minimal_symbol_type ourtype2;
3629   enum minimal_symbol_type ourtype3;
3630   enum minimal_symbol_type ourtype4;
3631   struct symbol_search *sr;
3632   struct symbol_search *psr;
3633   struct symbol_search *tail;
3634   struct cleanup *old_chain = NULL;
3635
3636   if (kind < LABEL_NAMESPACE)
3637     error ("must search on specific namespace");
3638
3639   ourtype = types[(int) (kind - LABEL_NAMESPACE)];
3640   ourtype2 = types2[(int) (kind - LABEL_NAMESPACE)];
3641   ourtype3 = types3[(int) (kind - LABEL_NAMESPACE)];
3642   ourtype4 = types4[(int) (kind - LABEL_NAMESPACE)];
3643
3644   sr = *matches = NULL;
3645   tail = NULL;
3646
3647   if (regexp != NULL)
3648     {
3649       /* Make sure spacing is right for C++ operators.
3650          This is just a courtesy to make the matching less sensitive
3651          to how many spaces the user leaves between 'operator'
3652          and <TYPENAME> or <OPERATOR>. */
3653       char *opend;
3654       char *opname = operator_chars (regexp, &opend);
3655       if (*opname)
3656         {
3657           int fix = -1;         /* -1 means ok; otherwise number of spaces needed. */
3658           if (isalpha (*opname) || *opname == '_' || *opname == '$')
3659             {
3660               /* There should 1 space between 'operator' and 'TYPENAME'. */
3661               if (opname[-1] != ' ' || opname[-2] == ' ')
3662                 fix = 1;
3663             }
3664           else
3665             {
3666               /* There should 0 spaces between 'operator' and 'OPERATOR'. */
3667               if (opname[-1] == ' ')
3668                 fix = 0;
3669             }
3670           /* If wrong number of spaces, fix it. */
3671           if (fix >= 0)
3672             {
3673               char *tmp = (char *) alloca (opend - opname + 10);
3674               sprintf (tmp, "operator%.*s%s", fix, " ", opname);
3675               regexp = tmp;
3676             }
3677         }
3678
3679       if (0 != (val = re_comp (regexp)))
3680         error ("Invalid regexp (%s): %s", val, regexp);
3681     }
3682
3683   /* Search through the partial symtabs *first* for all symbols
3684      matching the regexp.  That way we don't have to reproduce all of
3685      the machinery below. */
3686
3687   ALL_PSYMTABS (objfile, ps)
3688   {
3689     struct partial_symbol **bound, **gbound, **sbound;
3690     int keep_going = 1;
3691
3692     if (ps->readin)
3693       continue;
3694
3695     gbound = objfile->global_psymbols.list + ps->globals_offset + ps->n_global_syms;
3696     sbound = objfile->static_psymbols.list + ps->statics_offset + ps->n_static_syms;
3697     bound = gbound;
3698
3699     /* Go through all of the symbols stored in a partial
3700        symtab in one loop. */
3701     psym = objfile->global_psymbols.list + ps->globals_offset;
3702     while (keep_going)
3703       {
3704         if (psym >= bound)
3705           {
3706             if (bound == gbound && ps->n_static_syms != 0)
3707               {
3708                 psym = objfile->static_psymbols.list + ps->statics_offset;
3709                 bound = sbound;
3710               }
3711             else
3712               keep_going = 0;
3713             continue;
3714           }
3715         else
3716           {
3717             QUIT;
3718
3719             /* If it would match (logic taken from loop below)
3720                load the file and go on to the next one */
3721             if (file_matches (ps->filename, files, nfiles)
3722                 && ((regexp == NULL || SYMBOL_MATCHES_REGEXP (*psym))
3723                     && ((kind == VARIABLES_NAMESPACE && SYMBOL_CLASS (*psym) != LOC_TYPEDEF
3724                          && SYMBOL_CLASS (*psym) != LOC_BLOCK)
3725                         || (kind == FUNCTIONS_NAMESPACE && SYMBOL_CLASS (*psym) == LOC_BLOCK)
3726                         || (kind == TYPES_NAMESPACE && SYMBOL_CLASS (*psym) == LOC_TYPEDEF)
3727                         || (kind == METHODS_NAMESPACE && SYMBOL_CLASS (*psym) == LOC_BLOCK))))
3728               {
3729                 PSYMTAB_TO_SYMTAB (ps);
3730                 keep_going = 0;
3731               }
3732           }
3733         psym++;
3734       }
3735   }
3736
3737   /* Here, we search through the minimal symbol tables for functions
3738      and variables that match, and force their symbols to be read.
3739      This is in particular necessary for demangled variable names,
3740      which are no longer put into the partial symbol tables.
3741      The symbol will then be found during the scan of symtabs below.
3742
3743      For functions, find_pc_symtab should succeed if we have debug info
3744      for the function, for variables we have to call lookup_symbol
3745      to determine if the variable has debug info.
3746      If the lookup fails, set found_misc so that we will rescan to print
3747      any matching symbols without debug info.
3748    */
3749
3750   if (nfiles == 0 && (kind == VARIABLES_NAMESPACE || kind == FUNCTIONS_NAMESPACE))
3751     {
3752       ALL_MSYMBOLS (objfile, msymbol)
3753       {
3754         if (MSYMBOL_TYPE (msymbol) == ourtype ||
3755             MSYMBOL_TYPE (msymbol) == ourtype2 ||
3756             MSYMBOL_TYPE (msymbol) == ourtype3 ||
3757             MSYMBOL_TYPE (msymbol) == ourtype4)
3758           {
3759             if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
3760               {
3761                 if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
3762                   {
3763                     if (kind == FUNCTIONS_NAMESPACE
3764                         || lookup_symbol (SYMBOL_NAME (msymbol),
3765                                           (struct block *) NULL,
3766                                           VAR_NAMESPACE,
3767                                         0, (struct symtab **) NULL) == NULL)
3768                       found_misc = 1;
3769                   }
3770               }
3771           }
3772       }
3773     }
3774
3775   ALL_SYMTABS (objfile, s)
3776   {
3777     bv = BLOCKVECTOR (s);
3778     /* Often many files share a blockvector.
3779        Scan each blockvector only once so that
3780        we don't get every symbol many times.
3781        It happens that the first symtab in the list
3782        for any given blockvector is the main file.  */
3783     if (bv != prev_bv)
3784       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
3785         {
3786           b = BLOCKVECTOR_BLOCK (bv, i);
3787           /* Skip the sort if this block is always sorted.  */
3788           if (!BLOCK_SHOULD_SORT (b))
3789             sort_block_syms (b);
3790           for (j = 0; j < BLOCK_NSYMS (b); j++)
3791             {
3792               QUIT;
3793               sym = BLOCK_SYM (b, j);
3794               if (file_matches (s->filename, files, nfiles)
3795                   && ((regexp == NULL || SYMBOL_MATCHES_REGEXP (sym))
3796                       && ((kind == VARIABLES_NAMESPACE && SYMBOL_CLASS (sym) != LOC_TYPEDEF
3797                            && SYMBOL_CLASS (sym) != LOC_BLOCK
3798                            && SYMBOL_CLASS (sym) != LOC_CONST)
3799                           || (kind == FUNCTIONS_NAMESPACE && SYMBOL_CLASS (sym) == LOC_BLOCK)
3800                           || (kind == TYPES_NAMESPACE && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
3801                           || (kind == METHODS_NAMESPACE && SYMBOL_CLASS (sym) == LOC_BLOCK))))
3802                 {
3803                   /* match */
3804                   psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
3805                   psr->block = i;
3806                   psr->symtab = s;
3807                   psr->symbol = sym;
3808                   psr->msymbol = NULL;
3809                   psr->next = NULL;
3810                   if (tail == NULL)
3811                     {
3812                       sr = psr;
3813                       old_chain = make_cleanup_free_search_symbols (sr);
3814                     }
3815                   else
3816                     tail->next = psr;
3817                   tail = psr;
3818                 }
3819             }
3820         }
3821     prev_bv = bv;
3822   }
3823
3824   /* If there are no eyes, avoid all contact.  I mean, if there are
3825      no debug symbols, then print directly from the msymbol_vector.  */
3826
3827   if (found_misc || kind != FUNCTIONS_NAMESPACE)
3828     {
3829       ALL_MSYMBOLS (objfile, msymbol)
3830       {
3831         if (MSYMBOL_TYPE (msymbol) == ourtype ||
3832             MSYMBOL_TYPE (msymbol) == ourtype2 ||
3833             MSYMBOL_TYPE (msymbol) == ourtype3 ||
3834             MSYMBOL_TYPE (msymbol) == ourtype4)
3835           {
3836             if (regexp == NULL || SYMBOL_MATCHES_REGEXP (msymbol))
3837               {
3838                 /* Functions:  Look up by address. */
3839                 if (kind != FUNCTIONS_NAMESPACE ||
3840                     (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
3841                   {
3842                     /* Variables/Absolutes:  Look up by name */
3843                     if (lookup_symbol (SYMBOL_NAME (msymbol),
3844                                        (struct block *) NULL, VAR_NAMESPACE,
3845                                        0, (struct symtab **) NULL) == NULL)
3846                       {
3847                         /* match */
3848                         psr = (struct symbol_search *) xmalloc (sizeof (struct symbol_search));
3849                         psr->block = i;
3850                         psr->msymbol = msymbol;
3851                         psr->symtab = NULL;
3852                         psr->symbol = NULL;
3853                         psr->next = NULL;
3854                         if (tail == NULL)
3855                           {
3856                             sr = psr;
3857                             old_chain = make_cleanup_free_search_symbols (sr);
3858                           }
3859                         else
3860                           tail->next = psr;
3861                         tail = psr;
3862                       }
3863                   }
3864               }
3865           }
3866       }
3867     }
3868
3869   *matches = sr;
3870   if (sr != NULL)
3871     discard_cleanups (old_chain);
3872 }
3873
3874 /* Helper function for symtab_symbol_info, this function uses
3875    the data returned from search_symbols() to print information
3876    regarding the match to gdb_stdout.
3877  */
3878 static void
3879 print_symbol_info (kind, s, sym, block, last)
3880      namespace_enum kind;
3881      struct symtab *s;
3882      struct symbol *sym;
3883      int block;
3884      char *last;
3885 {
3886   if (last == NULL || strcmp (last, s->filename) != 0)
3887     {
3888       fputs_filtered ("\nFile ", gdb_stdout);
3889       fputs_filtered (s->filename, gdb_stdout);
3890       fputs_filtered (":\n", gdb_stdout);
3891     }
3892
3893   if (kind != TYPES_NAMESPACE && block == STATIC_BLOCK)
3894     printf_filtered ("static ");
3895
3896   /* Typedef that is not a C++ class */
3897   if (kind == TYPES_NAMESPACE
3898       && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
3899     c_typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
3900   /* variable, func, or typedef-that-is-c++-class */
3901   else if (kind < TYPES_NAMESPACE ||
3902            (kind == TYPES_NAMESPACE &&
3903             SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE))
3904     {
3905       type_print (SYMBOL_TYPE (sym),
3906                   (SYMBOL_CLASS (sym) == LOC_TYPEDEF
3907                    ? "" : SYMBOL_SOURCE_NAME (sym)),
3908                   gdb_stdout, 0);
3909
3910       printf_filtered (";\n");
3911     }
3912   else
3913     {
3914 #if 0
3915       /* Tiemann says: "info methods was never implemented."  */
3916       char *demangled_name;
3917       c_type_print_base (TYPE_FN_FIELD_TYPE (t, block),
3918                          gdb_stdout, 0, 0);
3919       c_type_print_varspec_prefix (TYPE_FN_FIELD_TYPE (t, block),
3920                                    gdb_stdout, 0);
3921       if (TYPE_FN_FIELD_STUB (t, block))
3922         check_stub_method (TYPE_DOMAIN_TYPE (type), j, block);
3923       demangled_name =
3924         cplus_demangle (TYPE_FN_FIELD_PHYSNAME (t, block),
3925                         DMGL_ANSI | DMGL_PARAMS);
3926       if (demangled_name == NULL)
3927         fprintf_filtered (stream, "<badly mangled name %s>",
3928                           TYPE_FN_FIELD_PHYSNAME (t, block));
3929       else
3930         {
3931           fputs_filtered (demangled_name, stream);
3932           free (demangled_name);
3933         }
3934 #endif
3935     }
3936 }
3937
3938 /* This help function for symtab_symbol_info() prints information
3939    for non-debugging symbols to gdb_stdout.
3940  */
3941 static void
3942 print_msymbol_info (msymbol)
3943      struct minimal_symbol *msymbol;
3944 {
3945   printf_filtered ("    %08lx  %s\n",
3946                    (unsigned long) SYMBOL_VALUE_ADDRESS (msymbol),
3947                    SYMBOL_SOURCE_NAME (msymbol));
3948 }
3949
3950 /* This is the guts of the commands "info functions", "info types", and
3951    "info variables". It calls search_symbols to find all matches and then
3952    print_[m]symbol_info to print out some useful information about the
3953    matches.
3954  */
3955 static void
3956 symtab_symbol_info (regexp, kind, from_tty)
3957      char *regexp;
3958      namespace_enum kind;
3959      int from_tty;
3960 {
3961   static char *classnames[]
3962   =
3963   {"variable", "function", "type", "method"};
3964   struct symbol_search *symbols;
3965   struct symbol_search *p;
3966   struct cleanup *old_chain;
3967   char *last_filename = NULL;
3968   int first = 1;
3969
3970   /* must make sure that if we're interrupted, symbols gets freed */
3971   search_symbols (regexp, kind, 0, (char **) NULL, &symbols);
3972   old_chain = make_cleanup_free_search_symbols (symbols);
3973
3974   printf_filtered (regexp
3975                    ? "All %ss matching regular expression \"%s\":\n"
3976                    : "All defined %ss:\n",
3977                    classnames[(int) (kind - LABEL_NAMESPACE - 1)], regexp);
3978
3979   for (p = symbols; p != NULL; p = p->next)
3980     {
3981       QUIT;
3982
3983       if (p->msymbol != NULL)
3984         {
3985           if (first)
3986             {
3987               printf_filtered ("\nNon-debugging symbols:\n");
3988               first = 0;
3989             }
3990           print_msymbol_info (p->msymbol);
3991         }
3992       else
3993         {
3994           print_symbol_info (kind,
3995                              p->symtab,
3996                              p->symbol,
3997                              p->block,
3998                              last_filename);
3999           last_filename = p->symtab->filename;
4000         }
4001     }
4002
4003   do_cleanups (old_chain);
4004 }
4005
4006 static void
4007 variables_info (regexp, from_tty)
4008      char *regexp;
4009      int from_tty;
4010 {
4011   symtab_symbol_info (regexp, VARIABLES_NAMESPACE, from_tty);
4012 }
4013
4014 static void
4015 functions_info (regexp, from_tty)
4016      char *regexp;
4017      int from_tty;
4018 {
4019   symtab_symbol_info (regexp, FUNCTIONS_NAMESPACE, from_tty);
4020 }
4021
4022
4023 static void
4024 types_info (regexp, from_tty)
4025      char *regexp;
4026      int from_tty;
4027 {
4028   symtab_symbol_info (regexp, TYPES_NAMESPACE, from_tty);
4029 }
4030
4031 #if 0
4032 /* Tiemann says: "info methods was never implemented."  */
4033 static void
4034 methods_info (regexp)
4035      char *regexp;
4036 {
4037   symtab_symbol_info (regexp, METHODS_NAMESPACE, 0, from_tty);
4038 }
4039 #endif /* 0 */
4040
4041 /* Breakpoint all functions matching regular expression. */
4042 #ifdef UI_OUT
4043 void
4044 rbreak_command_wrapper (regexp, from_tty)
4045      char *regexp;
4046      int from_tty;
4047 {
4048   rbreak_command (regexp, from_tty);
4049 }
4050 #endif
4051 static void
4052 rbreak_command (regexp, from_tty)
4053      char *regexp;
4054      int from_tty;
4055 {
4056   struct symbol_search *ss;
4057   struct symbol_search *p;
4058   struct cleanup *old_chain;
4059
4060   search_symbols (regexp, FUNCTIONS_NAMESPACE, 0, (char **) NULL, &ss);
4061   old_chain = make_cleanup_free_search_symbols (ss);
4062
4063   for (p = ss; p != NULL; p = p->next)
4064     {
4065       if (p->msymbol == NULL)
4066         {
4067           char *string = (char *) alloca (strlen (p->symtab->filename)
4068                                           + strlen (SYMBOL_NAME (p->symbol))
4069                                           + 4);
4070           strcpy (string, p->symtab->filename);
4071           strcat (string, ":'");
4072           strcat (string, SYMBOL_NAME (p->symbol));
4073           strcat (string, "'");
4074           break_command (string, from_tty);
4075           print_symbol_info (FUNCTIONS_NAMESPACE,
4076                              p->symtab,
4077                              p->symbol,
4078                              p->block,
4079                              p->symtab->filename);
4080         }
4081       else
4082         {
4083           break_command (SYMBOL_NAME (p->msymbol), from_tty);
4084           printf_filtered ("<function, no debug info> %s;\n",
4085                            SYMBOL_SOURCE_NAME (p->msymbol));
4086         }
4087     }
4088
4089   do_cleanups (old_chain);
4090 }
4091 \f
4092
4093 /* Return Nonzero if block a is lexically nested within block b,
4094    or if a and b have the same pc range.
4095    Return zero otherwise. */
4096 int
4097 contained_in (a, b)
4098      struct block *a, *b;
4099 {
4100   if (!a || !b)
4101     return 0;
4102   return BLOCK_START (a) >= BLOCK_START (b)
4103     && BLOCK_END (a) <= BLOCK_END (b);
4104 }
4105 \f
4106
4107 /* Helper routine for make_symbol_completion_list.  */
4108
4109 static int return_val_size;
4110 static int return_val_index;
4111 static char **return_val;
4112
4113 #define COMPLETION_LIST_ADD_SYMBOL(symbol, sym_text, len, text, word) \
4114   do { \
4115     if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) \
4116       /* Put only the mangled name on the list.  */ \
4117       /* Advantage:  "b foo<TAB>" completes to "b foo(int, int)" */ \
4118       /* Disadvantage:  "b foo__i<TAB>" doesn't complete.  */ \
4119       completion_list_add_name \
4120         (SYMBOL_DEMANGLED_NAME (symbol), (sym_text), (len), (text), (word)); \
4121     else \
4122       completion_list_add_name \
4123         (SYMBOL_NAME (symbol), (sym_text), (len), (text), (word)); \
4124   } while (0)
4125
4126 /*  Test to see if the symbol specified by SYMNAME (which is already
4127    demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
4128    characters.  If so, add it to the current completion list. */
4129
4130 static void
4131 completion_list_add_name (symname, sym_text, sym_text_len, text, word)
4132      char *symname;
4133      char *sym_text;
4134      int sym_text_len;
4135      char *text;
4136      char *word;
4137 {
4138   int newsize;
4139   int i;
4140
4141   /* clip symbols that cannot match */
4142
4143   if (strncmp (symname, sym_text, sym_text_len) != 0)
4144     {
4145       return;
4146     }
4147
4148   /* Clip any symbol names that we've already considered.  (This is a
4149      time optimization)  */
4150
4151   for (i = 0; i < return_val_index; ++i)
4152     {
4153       if (STREQ (symname, return_val[i]))
4154         {
4155           return;
4156         }
4157     }
4158
4159   /* We have a match for a completion, so add SYMNAME to the current list
4160      of matches. Note that the name is moved to freshly malloc'd space. */
4161
4162   {
4163     char *new;
4164     if (word == sym_text)
4165       {
4166         new = xmalloc (strlen (symname) + 5);
4167         strcpy (new, symname);
4168       }
4169     else if (word > sym_text)
4170       {
4171         /* Return some portion of symname.  */
4172         new = xmalloc (strlen (symname) + 5);
4173         strcpy (new, symname + (word - sym_text));
4174       }
4175     else
4176       {
4177         /* Return some of SYM_TEXT plus symname.  */
4178         new = xmalloc (strlen (symname) + (sym_text - word) + 5);
4179         strncpy (new, word, sym_text - word);
4180         new[sym_text - word] = '\0';
4181         strcat (new, symname);
4182       }
4183
4184     /* Recheck for duplicates if we intend to add a modified symbol.  */
4185     if (word != sym_text)
4186       {
4187         for (i = 0; i < return_val_index; ++i)
4188           {
4189             if (STREQ (new, return_val[i]))
4190               {
4191                 free (new);
4192                 return;
4193               }
4194           }
4195       }
4196
4197     if (return_val_index + 3 > return_val_size)
4198       {
4199         newsize = (return_val_size *= 2) * sizeof (char *);
4200         return_val = (char **) xrealloc ((char *) return_val, newsize);
4201       }
4202     return_val[return_val_index++] = new;
4203     return_val[return_val_index] = NULL;
4204   }
4205 }
4206
4207 /* Return a NULL terminated array of all symbols (regardless of class) which
4208    begin by matching TEXT.  If the answer is no symbols, then the return value
4209    is an array which contains only a NULL pointer.
4210
4211    Problem: All of the symbols have to be copied because readline frees them.
4212    I'm not going to worry about this; hopefully there won't be that many.  */
4213
4214 char **
4215 make_symbol_completion_list (text, word)
4216      char *text;
4217      char *word;
4218 {
4219   register struct symbol *sym;
4220   register struct symtab *s;
4221   register struct partial_symtab *ps;
4222   register struct minimal_symbol *msymbol;
4223   register struct objfile *objfile;
4224   register struct block *b, *surrounding_static_block = 0;
4225   register int i, j;
4226   struct partial_symbol **psym;
4227   /* The symbol we are completing on.  Points in same buffer as text.  */
4228   char *sym_text;
4229   /* Length of sym_text.  */
4230   int sym_text_len;
4231
4232   /* Now look for the symbol we are supposed to complete on.
4233      FIXME: This should be language-specific.  */
4234   {
4235     char *p;
4236     char quote_found;
4237     char *quote_pos = NULL;
4238
4239     /* First see if this is a quoted string.  */
4240     quote_found = '\0';
4241     for (p = text; *p != '\0'; ++p)
4242       {
4243         if (quote_found != '\0')
4244           {
4245             if (*p == quote_found)
4246               /* Found close quote.  */
4247               quote_found = '\0';
4248             else if (*p == '\\' && p[1] == quote_found)
4249               /* A backslash followed by the quote character
4250                  doesn't end the string.  */
4251               ++p;
4252           }
4253         else if (*p == '\'' || *p == '"')
4254           {
4255             quote_found = *p;
4256             quote_pos = p;
4257           }
4258       }
4259     if (quote_found == '\'')
4260       /* A string within single quotes can be a symbol, so complete on it.  */
4261       sym_text = quote_pos + 1;
4262     else if (quote_found == '"')
4263       /* A double-quoted string is never a symbol, nor does it make sense
4264          to complete it any other way.  */
4265       return NULL;
4266     else
4267       {
4268         /* It is not a quoted string.  Break it based on the characters
4269            which are in symbols.  */
4270         while (p > text)
4271           {
4272             if (isalnum (p[-1]) || p[-1] == '_' || p[-1] == '\0')
4273               --p;
4274             else
4275               break;
4276           }
4277         sym_text = p;
4278       }
4279   }
4280
4281   sym_text_len = strlen (sym_text);
4282
4283   return_val_size = 100;
4284   return_val_index = 0;
4285   return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
4286   return_val[0] = NULL;
4287
4288   /* Look through the partial symtabs for all symbols which begin
4289      by matching SYM_TEXT.  Add each one that you find to the list.  */
4290
4291   ALL_PSYMTABS (objfile, ps)
4292   {
4293     /* If the psymtab's been read in we'll get it when we search
4294        through the blockvector.  */
4295     if (ps->readin)
4296       continue;
4297
4298     for (psym = objfile->global_psymbols.list + ps->globals_offset;
4299          psym < (objfile->global_psymbols.list + ps->globals_offset
4300                  + ps->n_global_syms);
4301          psym++)
4302       {
4303         /* If interrupted, then quit. */
4304         QUIT;
4305         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
4306       }
4307
4308     for (psym = objfile->static_psymbols.list + ps->statics_offset;
4309          psym < (objfile->static_psymbols.list + ps->statics_offset
4310                  + ps->n_static_syms);
4311          psym++)
4312       {
4313         QUIT;
4314         COMPLETION_LIST_ADD_SYMBOL (*psym, sym_text, sym_text_len, text, word);
4315       }
4316   }
4317
4318   /* At this point scan through the misc symbol vectors and add each
4319      symbol you find to the list.  Eventually we want to ignore
4320      anything that isn't a text symbol (everything else will be
4321      handled by the psymtab code above).  */
4322
4323   ALL_MSYMBOLS (objfile, msymbol)
4324   {
4325     QUIT;
4326     COMPLETION_LIST_ADD_SYMBOL (msymbol, sym_text, sym_text_len, text, word);
4327   }
4328
4329   /* Search upwards from currently selected frame (so that we can
4330      complete on local vars.  */
4331
4332   for (b = get_selected_block (); b != NULL; b = BLOCK_SUPERBLOCK (b))
4333     {
4334       if (!BLOCK_SUPERBLOCK (b))
4335         {
4336           surrounding_static_block = b;         /* For elmin of dups */
4337         }
4338
4339       /* Also catch fields of types defined in this places which match our
4340          text string.  Only complete on types visible from current context. */
4341
4342       for (i = 0; i < BLOCK_NSYMS (b); i++)
4343         {
4344           sym = BLOCK_SYM (b, i);
4345           COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
4346           if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4347             {
4348               struct type *t = SYMBOL_TYPE (sym);
4349               enum type_code c = TYPE_CODE (t);
4350
4351               if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
4352                 {
4353                   for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
4354                     {
4355                       if (TYPE_FIELD_NAME (t, j))
4356                         {
4357                           completion_list_add_name (TYPE_FIELD_NAME (t, j),
4358                                         sym_text, sym_text_len, text, word);
4359                         }
4360                     }
4361                 }
4362             }
4363         }
4364     }
4365
4366   /* Go through the symtabs and check the externs and statics for
4367      symbols which match.  */
4368
4369   ALL_SYMTABS (objfile, s)
4370   {
4371     QUIT;
4372     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4373     for (i = 0; i < BLOCK_NSYMS (b); i++)
4374       {
4375         sym = BLOCK_SYM (b, i);
4376         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
4377       }
4378   }
4379
4380   ALL_SYMTABS (objfile, s)
4381   {
4382     QUIT;
4383     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4384     /* Don't do this block twice.  */
4385     if (b == surrounding_static_block)
4386       continue;
4387     for (i = 0; i < BLOCK_NSYMS (b); i++)
4388       {
4389         sym = BLOCK_SYM (b, i);
4390         COMPLETION_LIST_ADD_SYMBOL (sym, sym_text, sym_text_len, text, word);
4391       }
4392   }
4393
4394   return (return_val);
4395 }
4396
4397 /* Determine if PC is in the prologue of a function.  The prologue is the area
4398    between the first instruction of a function, and the first executable line.
4399    Returns 1 if PC *might* be in prologue, 0 if definately *not* in prologue.
4400
4401    If non-zero, func_start is where we think the prologue starts, possibly
4402    by previous examination of symbol table information.
4403  */
4404
4405 int
4406 in_prologue (pc, func_start)
4407      CORE_ADDR pc;
4408      CORE_ADDR func_start;
4409 {
4410   struct symtab_and_line sal;
4411   CORE_ADDR func_addr, func_end;
4412
4413   /* We have several sources of information we can consult to figure
4414      this out.
4415      - Compilers usually emit line number info that marks the prologue
4416        as its own "source line".  So the ending address of that "line"
4417        is the end of the prologue.  If available, this is the most
4418        reliable method.
4419      - The minimal symbols and partial symbols, which can usually tell
4420        us the starting and ending addresses of a function.
4421      - If we know the function's start address, we can call the
4422        architecture-defined SKIP_PROLOGUE function to analyze the
4423        instruction stream and guess where the prologue ends.
4424      - Our `func_start' argument; if non-zero, this is the caller's
4425        best guess as to the function's entry point.  At the time of
4426        this writing, handle_inferior_event doesn't get this right, so
4427        it should be our last resort.  */
4428
4429   /* Consult the partial symbol table, to find which function
4430      the PC is in.  */
4431   if (! find_pc_partial_function (pc, NULL, &func_addr, &func_end))
4432     {
4433       CORE_ADDR prologue_end;
4434
4435       /* We don't even have minsym information, so fall back to using
4436          func_start, if given.  */
4437       if (! func_start)
4438         return 1;               /* We *might* be in a prologue.  */
4439
4440       prologue_end = SKIP_PROLOGUE (func_start);
4441
4442       return func_start <= pc && pc < prologue_end;
4443     }
4444
4445   /* If we have line number information for the function, that's
4446      usually pretty reliable.  */
4447   sal = find_pc_line (func_addr, 0);
4448
4449   /* Now sal describes the source line at the function's entry point,
4450      which (by convention) is the prologue.  The end of that "line",
4451      sal.end, is the end of the prologue.
4452
4453      Note that, for functions whose source code is all on a single
4454      line, the line number information doesn't always end up this way.
4455      So we must verify that our purported end-of-prologue address is
4456      *within* the function, not at its start or end.  */
4457   if (sal.line == 0
4458       || sal.end <= func_addr
4459       || func_end <= sal.end)
4460     {
4461       /* We don't have any good line number info, so use the minsym
4462          information, together with the architecture-specific prologue
4463          scanning code.  */
4464       CORE_ADDR prologue_end = SKIP_PROLOGUE (func_addr);
4465
4466       return func_addr <= pc && pc < prologue_end;
4467     }
4468
4469   /* We have line number info, and it looks good.  */
4470   return func_addr <= pc && pc < sal.end;
4471 }
4472
4473
4474 /* Begin overload resolution functions */
4475 /* Helper routine for make_symbol_completion_list.  */
4476
4477 static int sym_return_val_size;
4478 static int sym_return_val_index;
4479 static struct symbol **sym_return_val;
4480
4481 /*  Test to see if the symbol specified by SYMNAME (which is already
4482    demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN
4483    characters.  If so, add it to the current completion list. */
4484
4485 static void
4486 overload_list_add_symbol (sym, oload_name)
4487      struct symbol *sym;
4488      char *oload_name;
4489 {
4490   int newsize;
4491   int i;
4492
4493   /* Get the demangled name without parameters */
4494   char *sym_name = cplus_demangle (SYMBOL_NAME (sym), DMGL_ARM | DMGL_ANSI);
4495   if (!sym_name)
4496     {
4497       sym_name = (char *) xmalloc (strlen (SYMBOL_NAME (sym)) + 1);
4498       strcpy (sym_name, SYMBOL_NAME (sym));
4499     }
4500
4501   /* skip symbols that cannot match */
4502   if (strcmp (sym_name, oload_name) != 0)
4503     {
4504       free (sym_name);
4505       return;
4506     }
4507
4508   /* If there is no type information, we can't do anything, so skip */
4509   if (SYMBOL_TYPE (sym) == NULL)
4510     return;
4511
4512   /* skip any symbols that we've already considered. */
4513   for (i = 0; i < sym_return_val_index; ++i)
4514     if (!strcmp (SYMBOL_NAME (sym), SYMBOL_NAME (sym_return_val[i])))
4515       return;
4516
4517   /* We have a match for an overload instance, so add SYM to the current list
4518    * of overload instances */
4519   if (sym_return_val_index + 3 > sym_return_val_size)
4520     {
4521       newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *);
4522       sym_return_val = (struct symbol **) xrealloc ((char *) sym_return_val, newsize);
4523     }
4524   sym_return_val[sym_return_val_index++] = sym;
4525   sym_return_val[sym_return_val_index] = NULL;
4526
4527   free (sym_name);
4528 }
4529
4530 /* Return a null-terminated list of pointers to function symbols that
4531  * match name of the supplied symbol FSYM.
4532  * This is used in finding all overloaded instances of a function name.
4533  * This has been modified from make_symbol_completion_list.  */
4534
4535
4536 struct symbol **
4537 make_symbol_overload_list (fsym)
4538      struct symbol *fsym;
4539 {
4540   register struct symbol *sym;
4541   register struct symtab *s;
4542   register struct partial_symtab *ps;
4543   register struct objfile *objfile;
4544   register struct block *b, *surrounding_static_block = 0;
4545   register int i;
4546   /* The name we are completing on. */
4547   char *oload_name = NULL;
4548   /* Length of name.  */
4549   int oload_name_len = 0;
4550
4551   /* Look for the symbol we are supposed to complete on.
4552    * FIXME: This should be language-specific.  */
4553
4554   oload_name = cplus_demangle (SYMBOL_NAME (fsym), DMGL_ARM | DMGL_ANSI);
4555   if (!oload_name)
4556     {
4557       oload_name = (char *) xmalloc (strlen (SYMBOL_NAME (fsym)) + 1);
4558       strcpy (oload_name, SYMBOL_NAME (fsym));
4559     }
4560   oload_name_len = strlen (oload_name);
4561
4562   sym_return_val_size = 100;
4563   sym_return_val_index = 0;
4564   sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *));
4565   sym_return_val[0] = NULL;
4566
4567   /* Look through the partial symtabs for all symbols which begin
4568      by matching OLOAD_NAME.  Make sure we read that symbol table in. */
4569
4570   ALL_PSYMTABS (objfile, ps)
4571   {
4572     struct partial_symbol **psym;
4573
4574     /* If the psymtab's been read in we'll get it when we search
4575        through the blockvector.  */
4576     if (ps->readin)
4577       continue;
4578
4579     for (psym = objfile->global_psymbols.list + ps->globals_offset;
4580          psym < (objfile->global_psymbols.list + ps->globals_offset
4581                  + ps->n_global_syms);
4582          psym++)
4583       {
4584         /* If interrupted, then quit. */
4585         QUIT;
4586         /* This will cause the symbol table to be read if it has not yet been */
4587         s = PSYMTAB_TO_SYMTAB (ps);
4588       }
4589
4590     for (psym = objfile->static_psymbols.list + ps->statics_offset;
4591          psym < (objfile->static_psymbols.list + ps->statics_offset
4592                  + ps->n_static_syms);
4593          psym++)
4594       {
4595         QUIT;
4596         /* This will cause the symbol table to be read if it has not yet been */
4597         s = PSYMTAB_TO_SYMTAB (ps);
4598       }
4599   }
4600
4601   /* Search upwards from currently selected frame (so that we can
4602      complete on local vars.  */
4603
4604   for (b = get_selected_block (); b != NULL; b = BLOCK_SUPERBLOCK (b))
4605     {
4606       if (!BLOCK_SUPERBLOCK (b))
4607         {
4608           surrounding_static_block = b;         /* For elimination of dups */
4609         }
4610
4611       /* Also catch fields of types defined in this places which match our
4612          text string.  Only complete on types visible from current context. */
4613
4614       for (i = 0; i < BLOCK_NSYMS (b); i++)
4615         {
4616           sym = BLOCK_SYM (b, i);
4617           overload_list_add_symbol (sym, oload_name);
4618         }
4619     }
4620
4621   /* Go through the symtabs and check the externs and statics for
4622      symbols which match.  */
4623
4624   ALL_SYMTABS (objfile, s)
4625   {
4626     QUIT;
4627     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4628     for (i = 0; i < BLOCK_NSYMS (b); i++)
4629       {
4630         sym = BLOCK_SYM (b, i);
4631         overload_list_add_symbol (sym, oload_name);
4632       }
4633   }
4634
4635   ALL_SYMTABS (objfile, s)
4636   {
4637     QUIT;
4638     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4639     /* Don't do this block twice.  */
4640     if (b == surrounding_static_block)
4641       continue;
4642     for (i = 0; i < BLOCK_NSYMS (b); i++)
4643       {
4644         sym = BLOCK_SYM (b, i);
4645         overload_list_add_symbol (sym, oload_name);
4646       }
4647   }
4648
4649   free (oload_name);
4650
4651   return (sym_return_val);
4652 }
4653
4654 /* End of overload resolution functions */
4655 \f
4656
4657 void
4658 _initialize_symtab ()
4659 {
4660   add_info ("variables", variables_info,
4661          "All global and static variable names, or those matching REGEXP.");
4662   if (dbx_commands)
4663     add_com ("whereis", class_info, variables_info,
4664          "All global and static variable names, or those matching REGEXP.");
4665
4666   add_info ("functions", functions_info,
4667             "All function names, or those matching REGEXP.");
4668
4669   
4670   /* FIXME:  This command has at least the following problems:
4671      1.  It prints builtin types (in a very strange and confusing fashion).
4672      2.  It doesn't print right, e.g. with
4673      typedef struct foo *FOO
4674      type_print prints "FOO" when we want to make it (in this situation)
4675      print "struct foo *".
4676      I also think "ptype" or "whatis" is more likely to be useful (but if
4677      there is much disagreement "info types" can be fixed).  */
4678   add_info ("types", types_info,
4679             "All type names, or those matching REGEXP.");
4680
4681 #if 0
4682   add_info ("methods", methods_info,
4683             "All method names, or those matching REGEXP::REGEXP.\n\
4684 If the class qualifier is omitted, it is assumed to be the current scope.\n\
4685 If the first REGEXP is omitted, then all methods matching the second REGEXP\n\
4686 are listed.");
4687 #endif
4688   add_info ("sources", sources_info,
4689             "Source files in the program.");
4690
4691   add_com ("rbreak", class_breakpoint, rbreak_command,
4692            "Set a breakpoint for all functions matching REGEXP.");
4693
4694   if (xdb_commands)
4695     {
4696       add_com ("lf", class_info, sources_info, "Source files in the program");
4697       add_com ("lg", class_info, variables_info,
4698          "All global and static variable names, or those matching REGEXP.");
4699     }
4700
4701   /* Initialize the one built-in type that isn't language dependent... */
4702   builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0,
4703                                   "<unknown type>", (struct objfile *) NULL);
4704 }