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