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