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