1 /* Symbol table lookup for the GNU debugger, GDB.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
36 #include <sys/types.h>
41 extern char *getenv ();
43 extern char *cplus_demangle ();
44 extern char *cplus_mangle_opname ();
45 extern struct value *value_of_this ();
46 extern void break_command ();
47 extern void select_source_symtab ();
49 /* Functions this file defines */
50 static int find_line_common ();
51 struct partial_symtab *lookup_partial_symtab ();
52 static struct partial_symbol *lookup_partial_symbol ();
53 static struct partial_symbol *lookup_demangled_partial_symbol ();
54 static struct symbol *lookup_demangled_block_symbol ();
56 /* The single non-language-specific builtin type */
57 struct type *builtin_type_error;
59 /* Block in which the most recently searched-for symbol was found.
60 Might be better to make this a parameter to lookup_symbol and
62 struct block *block_found;
64 char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
66 /* Check for a symtab of a specific name; first in symtabs, then in
67 psymtabs. *If* there is no '/' in the name, a match after a '/'
68 in the symtab filename will also work. */
70 static struct symtab *
71 lookup_symtab_1 (name)
74 register struct symtab *s;
75 register struct partial_symtab *ps;
76 register char *slash = strchr (name, '/');
77 register int len = strlen (name);
79 for (s = symtab_list; s; s = s->next)
80 if (!strcmp (name, s->filename))
83 for (ps = partial_symtab_list; ps; ps = ps->next)
84 if (!strcmp (name, ps->filename))
87 error ("Internal: readin pst for `%s' found when no symtab found.", name);
88 return PSYMTAB_TO_SYMTAB (ps);
93 for (s = symtab_list; s; s = s->next)
95 int l = strlen (s->filename);
97 if (s->filename[l - len -1] == '/'
98 && !strcmp (s->filename + l - len, name))
102 for (ps = partial_symtab_list; ps; ps = ps->next)
104 int l = strlen (ps->filename);
106 if (ps->filename[l - len - 1] == '/'
107 && !strcmp (ps->filename + l - len, name))
110 error ("Internal: readin pst for `%s' found when no symtab found.", name);
111 return PSYMTAB_TO_SYMTAB (ps);
118 /* Lookup the symbol table of a source file named NAME. Try a couple
119 of variations if the first lookup doesn't work. */
125 register struct symtab *s;
128 s = lookup_symtab_1 (name);
131 /* If name not found as specified, see if adding ".c" helps. */
133 copy = (char *) alloca (strlen (name) + 3);
136 s = lookup_symtab_1 (copy);
139 /* We didn't find anything; die. */
143 /* Lookup the partial symbol table of a source file named NAME. This
144 only returns true on an exact match (ie. this semantics are
145 different from lookup_symtab. */
147 struct partial_symtab *
148 lookup_partial_symtab (name)
151 register struct partial_symtab *s;
153 for (s = partial_symtab_list; s; s = s->next)
154 if (!strcmp (name, s->filename))
160 /* Return a typename for a struct/union/enum type
161 without the tag qualifier. If the type has a NULL name,
164 type_name_no_tag (type)
165 register struct type *type;
167 register char *name = TYPE_NAME (type);
173 switch (TYPE_CODE (type))
175 case TYPE_CODE_STRUCT:
177 case TYPE_CODE_UNION:
184 name = strchr (name, ' ');
188 return TYPE_NAME (type);
191 /* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989.
193 If this is a stubbed struct (i.e. declared as struct foo *), see if
194 we can find a full definition in some other file. If so, copy this
195 definition, so we can use it in future. If not, set a flag so we
196 don't waste too much time in future. (FIXME, this doesn't seem
199 This used to be coded as a macro, but I don't think it is called
200 often enough to merit such treatment.
203 struct complaint stub_noname_complaint =
204 {"stub type has NULL name", 0, 0};
207 check_stub_type(type)
210 if (TYPE_FLAGS(type) & TYPE_FLAG_STUB)
212 char* name= type_name_no_tag (type);
216 complain (&stub_noname_complaint, 0);
219 sym = lookup_symbol (name, 0, STRUCT_NAMESPACE, 0,
220 (struct symtab **)NULL);
222 bcopy (SYMBOL_TYPE(sym), type, sizeof (struct type));
226 /* Demangle a GDB method stub type. */
228 gdb_mangle_name (type, i, j)
232 int mangled_name_len;
234 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
235 struct fn_field *method = &f[j];
236 char *field_name = TYPE_FN_FIELDLIST_NAME (type, i);
238 /* Need a new type prefix. */
240 char *const_prefix = method->is_const ? "C" : "";
241 char *volatile_prefix = method->is_volatile ? "V" : "";
242 char *newname = type_name_no_tag (type);
244 int len = strlen (newname);
246 sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len);
247 mangled_name_len = (strlen (field_name)
249 + strlen (TYPE_FN_FIELD_PHYSNAME (f, j))
252 if (OPNAME_PREFIX_P (field_name))
254 char *opname = cplus_mangle_opname (field_name + 3);
256 error ("No mangling for \"%s\"", field_name);
257 mangled_name_len += strlen (opname);
258 mangled_name = (char *)xmalloc (mangled_name_len);
260 strncpy (mangled_name, field_name, 3);
261 mangled_name[3] = '\0';
262 strcat (mangled_name, opname);
266 mangled_name = (char *)xmalloc (mangled_name_len);
267 strcpy (mangled_name, TYPE_FN_FIELDLIST_NAME (type, i));
269 strcat (mangled_name, buf);
270 strcat (mangled_name, newname);
271 strcat (mangled_name, TYPE_FN_FIELD_PHYSNAME (f, j));
276 /* Lookup a primitive type named NAME.
277 Return zero if NAME is not a primitive type.*/
280 lookup_primitive_typename (name)
283 struct type ** const *p;
285 for (p = current_language->la_builtin_type_vector; *p; p++)
286 if(!strcmp((**p)->name, name))
291 /* Lookup a typedef or primitive type named NAME,
292 visible in lexical block BLOCK.
293 If NOERR is nonzero, return zero if NAME is not suitably defined. */
296 lookup_typename (name, block, noerr)
301 register struct symbol *sym =
302 lookup_symbol (name, block, VAR_NAMESPACE, 0, (struct symtab **)NULL);
303 if (sym == 0 || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
306 tmp = lookup_primitive_typename (name);
309 else if (!tmp && noerr)
312 error ("No type named %s.", name);
314 return SYMBOL_TYPE (sym);
318 lookup_unsigned_typename (name)
321 char *uns = alloca (strlen(name) + 10);
323 strcpy (uns, "unsigned ");
324 strcpy (uns+9, name);
325 return lookup_typename (uns, (struct block *)0, 0);
328 /* Lookup a structure type named "struct NAME",
329 visible in lexical block BLOCK. */
332 lookup_struct (name, block)
336 register struct symbol *sym
337 = lookup_symbol (name, block, STRUCT_NAMESPACE, 0, (struct symtab **)NULL);
340 error ("No struct type named %s.", name);
341 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
342 error ("This context has class, union or enum %s, not a struct.", name);
343 return SYMBOL_TYPE (sym);
346 /* Lookup a union type named "union NAME",
347 visible in lexical block BLOCK. */
350 lookup_union (name, block)
354 register struct symbol *sym
355 = lookup_symbol (name, block, STRUCT_NAMESPACE, 0, (struct symtab **)NULL);
358 error ("No union type named %s.", name);
359 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_UNION)
360 error ("This context has class, struct or enum %s, not a union.", name);
361 return SYMBOL_TYPE (sym);
364 /* Lookup an enum type named "enum NAME",
365 visible in lexical block BLOCK. */
368 lookup_enum (name, block)
372 register struct symbol *sym
373 = lookup_symbol (name, block, STRUCT_NAMESPACE, 0, (struct symtab **)NULL);
375 error ("No enum type named %s.", name);
376 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_ENUM)
377 error ("This context has class, struct or union %s, not an enum.", name);
378 return SYMBOL_TYPE (sym);
381 /* Given a type TYPE, lookup the type of the component of type named
383 If NOERR is nonzero, return zero if NAME is not suitably defined. */
386 lookup_struct_elt_type (type, name, noerr)
393 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
394 && TYPE_CODE (type) != TYPE_CODE_UNION)
396 target_terminal_ours ();
398 fprintf (stderr, "Type ");
399 type_print (type, "", stderr, -1);
400 error (" is not a structure or union type.");
403 check_stub_type (type);
405 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
407 char *t_field_name = TYPE_FIELD_NAME (type, i);
409 if (t_field_name && !strcmp (t_field_name, name))
410 return TYPE_FIELD_TYPE (type, i);
412 /* OK, it's not in this class. Recursively check the baseclasses. */
413 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
415 struct type *t = lookup_struct_elt_type (TYPE_BASECLASS (type, i),
424 target_terminal_ours ();
426 fprintf (stderr, "Type ");
427 type_print (type, "", stderr, -1);
428 fprintf (stderr, " has no component named ");
429 fputs_filtered (name, stderr);
431 return (struct type *)-1; /* For lint */
434 /* Given a type TYPE, return a type of pointers to that type.
435 May need to construct such a type if this is the first use.
437 C++: use TYPE_MAIN_VARIANT and TYPE_CHAIN to keep pointer
438 to member types under control. */
441 lookup_pointer_type (type)
444 register struct type *ptype = TYPE_POINTER_TYPE (type);
445 if (ptype) return TYPE_MAIN_VARIANT (ptype);
447 /* This is the first time anyone wanted a pointer to a TYPE. */
448 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
449 ptype = (struct type *) xmalloc (sizeof (struct type));
451 ptype = (struct type *) obstack_alloc (symbol_obstack,
452 sizeof (struct type));
454 bzero (ptype, sizeof (struct type));
455 TYPE_MAIN_VARIANT (ptype) = ptype;
456 TYPE_TARGET_TYPE (ptype) = type;
457 TYPE_POINTER_TYPE (type) = ptype;
458 /* New type is permanent if type pointed to is permanent. */
459 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
460 TYPE_FLAGS (ptype) |= TYPE_FLAG_PERM;
461 /* We assume the machine has only one representation for pointers! */
462 /* FIXME: This confuses host<->target data representations, and is a
463 poor assumption besides. */
464 TYPE_LENGTH (ptype) = sizeof (char *);
465 TYPE_CODE (ptype) = TYPE_CODE_PTR;
470 lookup_reference_type (type)
473 register struct type *rtype = TYPE_REFERENCE_TYPE (type);
474 if (rtype) return TYPE_MAIN_VARIANT (rtype);
476 /* This is the first time anyone wanted a pointer to a TYPE. */
477 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
478 rtype = (struct type *) xmalloc (sizeof (struct type));
480 rtype = (struct type *) obstack_alloc (symbol_obstack,
481 sizeof (struct type));
483 bzero (rtype, sizeof (struct type));
484 TYPE_MAIN_VARIANT (rtype) = rtype;
485 TYPE_TARGET_TYPE (rtype) = type;
486 TYPE_REFERENCE_TYPE (type) = rtype;
487 /* New type is permanent if type pointed to is permanent. */
488 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
489 TYPE_FLAGS (rtype) |= TYPE_FLAG_PERM;
490 /* We assume the machine has only one representation for pointers! */
491 TYPE_LENGTH (rtype) = sizeof (char *);
492 TYPE_CODE (rtype) = TYPE_CODE_REF;
497 /* Implement direct support for MEMBER_TYPE in GNU C++.
498 May need to construct such a type if this is the first use.
499 The TYPE is the type of the member. The DOMAIN is the type
500 of the aggregate that the member belongs to. */
503 lookup_member_type (type, domain)
504 struct type *type, *domain;
506 register struct type *mtype = TYPE_MAIN_VARIANT (type);
507 struct type *main_type;
512 if (TYPE_DOMAIN_TYPE (mtype) == domain)
514 mtype = TYPE_NEXT_VARIANT (mtype);
517 /* This is the first time anyone wanted this member type. */
518 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
519 mtype = (struct type *) xmalloc (sizeof (struct type));
521 mtype = (struct type *) obstack_alloc (symbol_obstack,
522 sizeof (struct type));
524 bzero (mtype, sizeof (struct type));
529 TYPE_NEXT_VARIANT (mtype) = TYPE_NEXT_VARIANT (main_type);
530 TYPE_NEXT_VARIANT (main_type) = mtype;
532 TYPE_MAIN_VARIANT (mtype) = main_type;
533 TYPE_TARGET_TYPE (mtype) = type;
534 TYPE_DOMAIN_TYPE (mtype) = domain;
535 /* New type is permanent if type pointed to is permanent. */
536 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
537 TYPE_FLAGS (mtype) |= TYPE_FLAG_PERM;
539 /* In practice, this is never used. */
540 TYPE_LENGTH (mtype) = 1;
541 TYPE_CODE (mtype) = TYPE_CODE_MEMBER;
544 /* Now splice in the new member pointer type. */
547 /* This type was not "smashed". */
548 TYPE_CHAIN (mtype) = TYPE_CHAIN (main_type);
549 TYPE_CHAIN (main_type) = mtype;
556 /* Allocate a stub method whose return type is
557 TYPE. We will fill in arguments later. This always
558 returns a fresh type. If we unify this type with
559 an existing type later, the storage allocated
560 here can be freed. */
562 allocate_stub_method (type)
565 struct type *mtype = (struct type *)xmalloc (sizeof (struct type));
566 bzero (mtype, sizeof (struct type));
567 TYPE_MAIN_VARIANT (mtype) = mtype;
568 TYPE_TARGET_TYPE (mtype) = type;
569 TYPE_FLAGS (mtype) = TYPE_FLAG_STUB;
570 TYPE_CODE (mtype) = TYPE_CODE_METHOD;
571 TYPE_LENGTH (mtype) = 1;
575 /* Lookup a method type belonging to class DOMAIN, returning type TYPE,
576 and taking a list of arguments ARGS.
577 If one is not found, allocate a new one. */
580 lookup_method_type (domain, type, args)
581 struct type *domain, *type, **args;
583 register struct type *mtype = TYPE_MAIN_VARIANT (type);
584 struct type *main_type;
589 if (TYPE_DOMAIN_TYPE (mtype) == domain)
591 struct type **t1 = args;
592 struct type **t2 = TYPE_ARG_TYPES (mtype);
596 for (i = 0; t1[i] != 0 && t1[i]->code != TYPE_CODE_VOID; i++)
603 mtype = TYPE_NEXT_VARIANT (mtype);
606 /* This is the first time anyone wanted this member type. */
607 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
608 mtype = (struct type *) xmalloc (sizeof (struct type));
610 mtype = (struct type *) obstack_alloc (symbol_obstack,
611 sizeof (struct type));
613 bzero (mtype, sizeof (struct type));
618 TYPE_NEXT_VARIANT (mtype) = TYPE_NEXT_VARIANT (main_type);
619 TYPE_NEXT_VARIANT (main_type) = mtype;
621 TYPE_MAIN_VARIANT (mtype) = main_type;
622 TYPE_TARGET_TYPE (mtype) = type;
623 TYPE_DOMAIN_TYPE (mtype) = domain;
624 TYPE_ARG_TYPES (mtype) = args;
625 /* New type is permanent if type pointed to is permanent. */
626 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
627 TYPE_FLAGS (mtype) |= TYPE_FLAG_PERM;
629 /* In practice, this is never used. */
630 TYPE_LENGTH (mtype) = 1;
631 TYPE_CODE (mtype) = TYPE_CODE_METHOD;
634 /* Now splice in the new member pointer type. */
637 /* This type was not "smashed". */
638 TYPE_CHAIN (mtype) = TYPE_CHAIN (main_type);
639 TYPE_CHAIN (main_type) = mtype;
647 /* Given a type TYPE, return a type which has offset OFFSET,
648 via_virtual VIA_VIRTUAL, and via_public VIA_PUBLIC.
649 May need to construct such a type if none exists. */
651 lookup_basetype_type (type, offset, via_virtual, via_public)
654 int via_virtual, via_public;
656 register struct type *btype = TYPE_MAIN_VARIANT (type);
657 struct type *main_type;
661 printf ("Internal error: type offset non-zero in lookup_basetype_type");
668 if (/* TYPE_OFFSET (btype) == offset
669 && */ TYPE_VIA_PUBLIC (btype) == via_public
670 && TYPE_VIA_VIRTUAL (btype) == via_virtual)
672 btype = TYPE_NEXT_VARIANT (btype);
675 /* This is the first time anyone wanted this member type. */
676 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
677 btype = (struct type *) xmalloc (sizeof (struct type));
679 btype = (struct type *) obstack_alloc (symbol_obstack,
680 sizeof (struct type));
685 bzero (btype, sizeof (struct type));
686 TYPE_MAIN_VARIANT (btype) = main_type;
690 bcopy (main_type, btype, sizeof (struct type));
691 TYPE_NEXT_VARIANT (main_type) = btype;
693 /* TYPE_OFFSET (btype) = offset; */
695 TYPE_FLAGS (btype) |= TYPE_FLAG_VIA_PUBLIC;
697 TYPE_FLAGS (btype) |= TYPE_FLAG_VIA_VIRTUAL;
698 /* New type is permanent if type pointed to is permanent. */
699 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
700 TYPE_FLAGS (btype) |= TYPE_FLAG_PERM;
702 /* In practice, this is never used. */
703 TYPE_LENGTH (btype) = 1;
704 TYPE_CODE (btype) = TYPE_CODE_STRUCT;
710 /* Given a type TYPE, return a type of functions that return that type.
711 May need to construct such a type if this is the first use. */
714 lookup_function_type (type)
717 register struct type *ptype = TYPE_FUNCTION_TYPE (type);
718 if (ptype) return ptype;
720 /* This is the first time anyone wanted a function returning a TYPE. */
721 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
722 ptype = (struct type *) xmalloc (sizeof (struct type));
724 ptype = (struct type *) obstack_alloc (symbol_obstack,
725 sizeof (struct type));
727 bzero (ptype, sizeof (struct type));
728 TYPE_TARGET_TYPE (ptype) = type;
729 TYPE_FUNCTION_TYPE (type) = ptype;
730 /* New type is permanent if type returned is permanent. */
731 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
732 TYPE_FLAGS (ptype) |= TYPE_FLAG_PERM;
733 TYPE_LENGTH (ptype) = 1;
734 TYPE_CODE (ptype) = TYPE_CODE_FUNC;
735 TYPE_NFIELDS (ptype) = 0;
739 /* Create an array type. Elements will be of type TYPE, and there will
742 Eventually this should be extended to take two more arguments which
743 specify the bounds of the array and the type of the index.
744 It should also be changed to be a "lookup" function, with the
745 appropriate data structures added to the type field.
746 Then read array type should call here. */
749 create_array_type (element_type, number)
750 struct type *element_type;
753 struct type *result_type = (struct type *)
754 obstack_alloc (symbol_obstack, sizeof (struct type));
755 struct type *range_type;
757 bzero (result_type, sizeof (struct type));
759 TYPE_CODE (result_type) = TYPE_CODE_ARRAY;
760 TYPE_TARGET_TYPE (result_type) = element_type;
761 TYPE_LENGTH (result_type) = number * TYPE_LENGTH (element_type);
762 TYPE_NFIELDS (result_type) = 1;
763 TYPE_FIELDS (result_type) =
764 (struct field *) obstack_alloc (symbol_obstack, sizeof (struct field));
767 /* Create range type. */
768 range_type = (struct type *) obstack_alloc (symbol_obstack,
769 sizeof (struct type));
770 TYPE_CODE (range_type) = TYPE_CODE_RANGE;
771 TYPE_TARGET_TYPE (range_type) = builtin_type_int; /* FIXME */
773 /* This should never be needed. */
774 TYPE_LENGTH (range_type) = sizeof (int);
776 TYPE_NFIELDS (range_type) = 2;
777 TYPE_FIELDS (range_type) =
778 (struct field *) obstack_alloc (symbol_obstack,
779 2 * sizeof (struct field));
780 TYPE_FIELD_BITPOS (range_type, 0) = 0; /* FIXME */
781 TYPE_FIELD_BITPOS (range_type, 1) = number-1; /* FIXME */
782 TYPE_FIELD_TYPE (range_type, 0) = builtin_type_int; /* FIXME */
783 TYPE_FIELD_TYPE (range_type, 1) = builtin_type_int; /* FIXME */
785 TYPE_FIELD_TYPE(result_type,0)=range_type;
786 TYPE_VPTR_FIELDNO (result_type) = -1;
792 /* Smash TYPE to be a type of members of DOMAIN with type TO_TYPE. */
795 smash_to_member_type (type, domain, to_type)
796 struct type *type, *domain, *to_type;
798 bzero (type, sizeof (struct type));
799 TYPE_TARGET_TYPE (type) = to_type;
800 TYPE_DOMAIN_TYPE (type) = domain;
802 /* In practice, this is never needed. */
803 TYPE_LENGTH (type) = 1;
804 TYPE_CODE (type) = TYPE_CODE_MEMBER;
806 TYPE_MAIN_VARIANT (type) = lookup_member_type (domain, to_type);
809 /* Smash TYPE to be a type of method of DOMAIN with type TO_TYPE. */
812 smash_to_method_type (type, domain, to_type, args)
813 struct type *type, *domain, *to_type, **args;
815 bzero (type, sizeof (struct type));
816 TYPE_TARGET_TYPE (type) = to_type;
817 TYPE_DOMAIN_TYPE (type) = domain;
818 TYPE_ARG_TYPES (type) = args;
820 /* In practice, this is never needed. */
821 TYPE_LENGTH (type) = 1;
822 TYPE_CODE (type) = TYPE_CODE_METHOD;
824 TYPE_MAIN_VARIANT (type) = lookup_method_type (domain, to_type, args);
827 /* Find which partial symtab on the partial_symtab_list contains
828 PC. Return 0 if none. */
830 struct partial_symtab *
832 register CORE_ADDR pc;
834 register struct partial_symtab *ps;
836 for (ps = partial_symtab_list; ps; ps = ps->next)
837 if (pc >= ps->textlow && pc < ps->texthigh)
843 /* Find which partial symbol within a psymtab contains PC. Return 0
844 if none. Check all psymtabs if PSYMTAB is 0. */
845 struct partial_symbol *
846 find_pc_psymbol (psymtab, pc)
847 struct partial_symtab *psymtab;
850 struct partial_symbol *best, *p;
854 psymtab = find_pc_psymtab (pc);
858 best_pc = psymtab->textlow - 1;
860 for (p = static_psymbols.list + psymtab->statics_offset;
861 (p - (static_psymbols.list + psymtab->statics_offset)
862 < psymtab->n_static_syms);
864 if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
865 && SYMBOL_CLASS (p) == LOC_BLOCK
866 && pc >= SYMBOL_VALUE_ADDRESS (p)
867 && SYMBOL_VALUE_ADDRESS (p) > best_pc)
869 best_pc = SYMBOL_VALUE_ADDRESS (p);
872 if (best_pc == psymtab->textlow - 1)
878 /* Find the definition for a specified symbol name NAME
879 in namespace NAMESPACE, visible from lexical block BLOCK.
880 Returns the struct symbol pointer, or zero if no symbol is found.
881 If SYMTAB is non-NULL, store the symbol table in which the
882 symbol was found there, or NULL if not found.
883 C++: if IS_A_FIELD_OF_THIS is nonzero on entry, check to see if
884 NAME is a field of the current implied argument `this'. If so set
885 *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero.
886 BLOCK_FOUND is set to the block in which NAME is found (in the case of
887 a field of `this', value_of_this sets BLOCK_FOUND to the proper value.) */
890 lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
892 register struct block *block;
893 enum namespace namespace;
894 int *is_a_field_of_this;
895 struct symtab **symtab;
897 register struct symbol *sym;
898 register struct symtab *s;
899 register struct partial_symtab *ps;
900 struct blockvector *bv;
902 /* Search specified block and its superiors. */
906 sym = lookup_block_symbol (block, name, namespace);
912 /* Search the list of symtabs for one which contains the
913 address of the start of this block. */
915 for (s = symtab_list; s; s = s->next)
917 bv = BLOCKVECTOR (s);
918 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
919 if (BLOCK_START (b) <= BLOCK_START (block)
920 && BLOCK_END (b) > BLOCK_START (block))
928 block = BLOCK_SUPERBLOCK (block);
931 /* But that doesn't do any demangling for the STATIC_BLOCK.
932 I'm not sure whether demangling is needed in the case of
933 nested function in inner blocks; if so this needs to be changed.
935 Don't need to mess with the psymtabs; if we have a block,
936 that file is read in. If we don't, then we deal later with
937 all the psymtab stuff that needs checking. */
938 if (namespace == VAR_NAMESPACE && block != NULL)
941 /* Find the right symtab. */
942 for (s = symtab_list; s; s = s->next)
944 bv = BLOCKVECTOR (s);
945 b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
946 if (BLOCK_START (b) <= BLOCK_START (block)
947 && BLOCK_END (b) > BLOCK_START (block))
949 sym = lookup_demangled_block_symbol (b, name);
962 /* C++: If requested to do so by the caller,
963 check to see if NAME is a field of `this'. */
964 if (is_a_field_of_this)
966 struct value *v = value_of_this (0);
968 *is_a_field_of_this = 0;
969 if (v && check_field (v, name))
971 *is_a_field_of_this = 1;
978 /* Now search all global blocks. Do the symtab's first, then
979 check the psymtab's */
981 for (s = symtab_list; s; s = s->next)
983 bv = BLOCKVECTOR (s);
984 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
985 sym = lookup_block_symbol (block, name, namespace);
995 /* Check for the possibility of the symbol being a global function
996 that is stored on the misc function vector. Eventually, all
997 global symbols might be resolved in this way. */
999 if (namespace == VAR_NAMESPACE)
1001 int ind = lookup_misc_func (name);
1003 /* Look for a mangled C++ name for NAME. */
1006 int name_len = strlen (name);
1008 for (ind = misc_function_count; --ind >= 0; )
1009 /* Assume orginal name is prefix of mangled name. */
1010 if (!strncmp (misc_function_vector[ind].name, name, name_len))
1013 cplus_demangle(misc_function_vector[ind].name, -1);
1014 if (demangled != NULL)
1016 int cond = strcmp (demangled, name);
1022 /* Loop terminates on no match with ind == -1. */
1027 s = find_pc_symtab (misc_function_vector[ind].address);
1028 /* If S is zero, there are no debug symbols for this file.
1029 Skip this stuff and check for matching static symbols below. */
1032 bv = BLOCKVECTOR (s);
1033 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1034 sym = lookup_block_symbol (block, misc_function_vector[ind].name,
1036 /* sym == 0 if symbol was found in the misc_function_vector
1037 but not in the symtab.
1038 Return 0 to use the misc_function definition of "foo_".
1040 This happens for Fortran "foo_" symbols,
1041 which are "foo" in the symtab.
1043 This can also happen if "asm" is used to make a
1044 regular symbol but not a debugging symbol, e.g.
1045 asm(".globl _main");
1056 for (ps = partial_symtab_list; ps; ps = ps->next)
1057 if (!ps->readin && lookup_partial_symbol (ps, name, 1, namespace))
1059 s = PSYMTAB_TO_SYMTAB(ps);
1060 bv = BLOCKVECTOR (s);
1061 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1062 sym = lookup_block_symbol (block, name, namespace);
1064 error ("Internal: global symbol `%s' found in psymtab but not in symtab", name);
1070 /* Now search all per-file blocks.
1071 Not strictly correct, but more useful than an error.
1072 Do the symtabs first, then check the psymtabs */
1074 for (s = symtab_list; s; s = s->next)
1076 bv = BLOCKVECTOR (s);
1077 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1078 sym = lookup_block_symbol (block, name, namespace);
1081 block_found = block;
1088 for (ps = partial_symtab_list; ps; ps = ps->next)
1089 if (!ps->readin && lookup_partial_symbol (ps, name, 0, namespace))
1091 s = PSYMTAB_TO_SYMTAB(ps);
1092 bv = BLOCKVECTOR (s);
1093 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1094 sym = lookup_block_symbol (block, name, namespace);
1096 error ("Internal: static symbol `%s' found in psymtab but not in symtab", name);
1102 /* Now search all per-file blocks for static mangled symbols.
1103 Do the symtabs first, then check the psymtabs. */
1105 if (namespace == VAR_NAMESPACE)
1107 for (s = symtab_list; s; s = s->next)
1109 bv = BLOCKVECTOR (s);
1110 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1111 sym = lookup_demangled_block_symbol (block, name);
1114 block_found = block;
1121 for (ps = partial_symtab_list; ps; ps = ps->next)
1122 if (!ps->readin && lookup_demangled_partial_symbol (ps, name))
1124 s = PSYMTAB_TO_SYMTAB(ps);
1125 bv = BLOCKVECTOR (s);
1126 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1127 sym = lookup_demangled_block_symbol (block, name);
1129 error ("Internal: mangled static symbol `%s' found in psymtab but not in symtab", name);
1141 /* Look for a static demangled symbol in block BLOCK. */
1143 static struct symbol *
1144 lookup_demangled_block_symbol (block, name)
1145 register struct block *block;
1148 register int bot, top, inc;
1149 register struct symbol *sym;
1152 top = BLOCK_NSYMS (block);
1157 sym = BLOCK_SYM (block, bot);
1158 if (SYMBOL_NAME (sym)[0] == inc
1159 && SYMBOL_NAMESPACE (sym) == VAR_NAMESPACE)
1161 char *demangled = cplus_demangle(SYMBOL_NAME (sym), -1);
1162 if (demangled != NULL)
1164 int cond = strcmp (demangled, name);
1176 /* Look, in partial_symtab PST, for static mangled symbol NAME. */
1178 static struct partial_symbol *
1179 lookup_demangled_partial_symbol (pst, name)
1180 struct partial_symtab *pst;
1183 struct partial_symbol *start, *psym;
1184 int length = pst->n_static_syms;
1185 register int inc = name[0];
1188 return (struct partial_symbol *) 0;
1190 start = static_psymbols.list + pst->statics_offset;
1191 for (psym = start; psym < start + length; psym++)
1193 if (SYMBOL_NAME (psym)[0] == inc
1194 && SYMBOL_NAMESPACE (psym) == VAR_NAMESPACE)
1196 char *demangled = cplus_demangle(SYMBOL_NAME (psym), -1);
1197 if (demangled != NULL)
1199 int cond = strcmp (demangled, name);
1207 return (struct partial_symbol *) 0;
1210 /* Look, in partial_symtab PST, for symbol NAME. Check the global
1211 symbols if GLOBAL, the static symbols if not */
1213 static struct partial_symbol *
1214 lookup_partial_symbol (pst, name, global, namespace)
1215 struct partial_symtab *pst;
1218 enum namespace namespace;
1220 struct partial_symbol *start, *psym;
1221 int length = (global ? pst->n_global_syms : pst->n_static_syms);
1224 return (struct partial_symbol *) 0;
1227 global_psymbols.list + pst->globals_offset :
1228 static_psymbols.list + pst->statics_offset );
1230 if (global) /* This means we can use a binary */
1233 struct partial_symbol *top, *bottom, *center;
1235 /* Binary search. This search is guaranteed to end with center
1236 pointing at the earliest partial symbol with the correct
1237 name. At that point *all* partial symbols with that name
1238 will be checked against the correct namespace. */
1240 top = start + length - 1;
1241 while (top > bottom)
1243 center = bottom + (top - bottom) / 2;
1245 assert (center < top);
1247 if (strcmp (SYMBOL_NAME (center), name) >= 0)
1250 bottom = center + 1;
1252 assert (top == bottom);
1254 while (!strcmp (SYMBOL_NAME (top), name))
1256 if (SYMBOL_NAMESPACE (top) == namespace)
1263 /* Can't use a binary search */
1264 for (psym = start; psym < start + length; psym++)
1265 if (namespace == SYMBOL_NAMESPACE (psym)
1266 && !strcmp (name, SYMBOL_NAME (psym)))
1270 return (struct partial_symbol *) 0;
1273 /* Look for a symbol in block BLOCK. */
1276 lookup_block_symbol (block, name, namespace)
1277 register struct block *block;
1279 enum namespace namespace;
1281 register int bot, top, inc;
1282 register struct symbol *sym, *parameter_sym;
1284 top = BLOCK_NSYMS (block);
1287 /* If the blocks's symbols were sorted, start with a binary search. */
1289 if (BLOCK_SHOULD_SORT (block))
1291 /* First, advance BOT to not far before
1292 the first symbol whose name is NAME. */
1296 inc = (top - bot + 1);
1297 /* No need to keep binary searching for the last few bits worth. */
1300 inc = (inc >> 1) + bot;
1301 sym = BLOCK_SYM (block, inc);
1302 if (SYMBOL_NAME (sym)[0] < name[0])
1304 else if (SYMBOL_NAME (sym)[0] > name[0])
1306 else if (strcmp (SYMBOL_NAME (sym), name) < 0)
1312 /* Now scan forward until we run out of symbols,
1313 find one whose name is greater than NAME,
1314 or find one we want.
1315 If there is more than one symbol with the right name and namespace,
1316 we return the first one. dbxread.c is careful to make sure
1317 that if one is a register then it comes first. */
1319 top = BLOCK_NSYMS (block);
1322 sym = BLOCK_SYM (block, bot);
1323 inc = SYMBOL_NAME (sym)[0] - name[0];
1325 inc = strcmp (SYMBOL_NAME (sym), name);
1326 if (inc == 0 && SYMBOL_NAMESPACE (sym) == namespace)
1335 /* Here if block isn't sorted.
1336 This loop is equivalent to the loop above,
1337 but hacked greatly for speed.
1339 Note that parameter symbols do not always show up last in the
1340 list; this loop makes sure to take anything else other than
1341 parameter symbols first; it only uses parameter symbols as a
1342 last resort. Note that this only takes up extra computation
1345 parameter_sym = (struct symbol *) 0;
1346 top = BLOCK_NSYMS (block);
1350 sym = BLOCK_SYM (block, bot);
1351 if (SYMBOL_NAME (sym)[0] == inc
1352 && !strcmp (SYMBOL_NAME (sym), name)
1353 && SYMBOL_NAMESPACE (sym) == namespace)
1355 if (SYMBOL_CLASS (sym) == LOC_ARG
1356 || SYMBOL_CLASS (sym) == LOC_LOCAL_ARG
1357 || SYMBOL_CLASS (sym) == LOC_REF_ARG
1358 || SYMBOL_CLASS (sym) == LOC_REGPARM)
1359 parameter_sym = sym;
1365 return parameter_sym; /* Will be 0 if not found. */
1368 /* Return the symbol for the function which contains a specified
1369 lexical block, described by a struct block BL. */
1375 while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
1376 bl = BLOCK_SUPERBLOCK (bl);
1378 return BLOCK_FUNCTION (bl);
1381 /* Subroutine of find_pc_line */
1385 register CORE_ADDR pc;
1387 register struct block *b;
1388 struct blockvector *bv;
1389 register struct symtab *s;
1390 register struct partial_symtab *ps;
1392 /* Search all symtabs for one whose file contains our pc */
1394 for (s = symtab_list; s; s = s->next)
1396 bv = BLOCKVECTOR (s);
1397 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
1398 if (BLOCK_START (b) <= pc
1399 && BLOCK_END (b) > pc)
1405 ps = find_pc_psymtab (pc);
1406 if (ps && ps->readin)
1408 "(Internal error: pc 0x%x in read in psymtab, but not in symtab.)\n", pc);
1411 s = PSYMTAB_TO_SYMTAB (ps);
1417 /* Find the source file and line number for a given PC value.
1418 Return a structure containing a symtab pointer, a line number,
1419 and a pc range for the entire source line.
1420 The value's .pc field is NOT the specified pc.
1421 NOTCURRENT nonzero means, if specified pc is on a line boundary,
1422 use the line that ends there. Otherwise, in that case, the line
1423 that begins there is used. */
1425 struct symtab_and_line
1426 find_pc_line (pc, notcurrent)
1431 register struct linetable *l;
1434 register struct linetable_entry *item;
1435 struct symtab_and_line val;
1436 struct blockvector *bv;
1438 /* Info on best line seen so far, and where it starts, and its file. */
1441 CORE_ADDR best_pc = 0;
1442 CORE_ADDR best_end = 0;
1443 struct symtab *best_symtab = 0;
1445 /* Store here the first line number
1446 of a file which contains the line at the smallest pc after PC.
1447 If we don't find a line whose range contains PC,
1448 we will use a line one less than this,
1449 with a range from the start of that file to the first line's pc. */
1451 CORE_ADDR alt_pc = 0;
1452 struct symtab *alt_symtab = 0;
1454 /* Info on best line seen in this file. */
1459 /* Info on first line of this file. */
1464 /* If this pc is not from the current frame,
1465 it is the address of the end of a call instruction.
1466 Quite likely that is the start of the following statement.
1467 But what we want is the statement containing the instruction.
1468 Fudge the pc to make sure we get that. */
1470 if (notcurrent) pc -= 1;
1472 s = find_pc_symtab (pc);
1482 bv = BLOCKVECTOR (s);
1484 /* Look at all the symtabs that share this blockvector.
1485 They all have the same apriori range, that we found was right;
1486 but they have different line tables. */
1488 for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1490 /* Find the best line in this symtab. */
1497 for (i = 0; i < len; i++)
1499 item = &(l->item[i]);
1503 first_line = item->line;
1504 first_pc = item->pc;
1506 /* Return the last line that did not start after PC. */
1509 prev_line = item->line;
1516 /* Is this file's best line closer than the best in the other files?
1517 If so, record this file, and its best line, as best so far. */
1518 if (prev_line >= 0 && prev_pc > best_pc)
1521 best_line = prev_line;
1524 best_end = item->pc;
1528 /* Is this file's first line closer than the first lines of other files?
1529 If so, record this file, and its first line, as best alternate. */
1530 if (first_line >= 0 && first_pc > pc
1531 && (alt_pc == 0 || first_pc < alt_pc))
1534 alt_line = first_line;
1538 if (best_symtab == 0)
1540 val.symtab = alt_symtab;
1541 val.line = alt_line - 1;
1542 val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
1547 val.symtab = best_symtab;
1548 val.line = best_line;
1550 val.end = (best_end ? best_end
1552 : BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))));
1557 /* Find the PC value for a given source file and line number.
1558 Returns zero for invalid line number.
1559 The source file is specified with a struct symtab. */
1562 find_line_pc (symtab, line)
1563 struct symtab *symtab;
1566 register struct linetable *l;
1572 l = LINETABLE (symtab);
1573 ind = find_line_common(l, line, &dummy);
1574 return (ind >= 0) ? l->item[ind].pc : 0;
1577 /* Find the range of pc values in a line.
1578 Store the starting pc of the line into *STARTPTR
1579 and the ending pc (start of next line) into *ENDPTR.
1580 Returns 1 to indicate success.
1581 Returns 0 if could not find the specified line. */
1584 find_line_pc_range (symtab, thisline, startptr, endptr)
1585 struct symtab *symtab;
1587 CORE_ADDR *startptr, *endptr;
1589 register struct linetable *l;
1591 int exact_match; /* did we get an exact linenumber match */
1596 l = LINETABLE (symtab);
1597 ind = find_line_common (l, thisline, &exact_match);
1600 *startptr = l->item[ind].pc;
1601 /* If we have not seen an entry for the specified line,
1602 assume that means the specified line has zero bytes. */
1603 if (!exact_match || ind == l->nitems-1)
1604 *endptr = *startptr;
1606 /* Perhaps the following entry is for the following line.
1607 It's worth a try. */
1608 if (ind+1 < l->nitems
1609 && l->item[ind+1].line == thisline + 1)
1610 *endptr = l->item[ind+1].pc;
1612 *endptr = find_line_pc (symtab, thisline+1);
1619 /* Given a line table and a line number, return the index into the line
1620 table for the pc of the nearest line whose number is >= the specified one.
1621 Return -1 if none is found. The value is >= 0 if it is an index.
1623 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
1626 find_line_common (l, lineno, exact_match)
1627 register struct linetable *l;
1628 register int lineno;
1634 /* BEST is the smallest linenumber > LINENO so far seen,
1635 or 0 if none has been seen so far.
1636 BEST_INDEX identifies the item for it. */
1638 int best_index = -1;
1647 for (i = 0; i < len; i++)
1649 register struct linetable_entry *item = &(l->item[i]);
1651 if (item->line == lineno)
1657 if (item->line > lineno && (best == 0 || item->line < best))
1664 /* If we got here, we didn't get an exact match. */
1671 find_pc_line_pc_range (pc, startptr, endptr)
1673 CORE_ADDR *startptr, *endptr;
1675 struct symtab_and_line sal;
1676 sal = find_pc_line (pc, 0);
1679 return sal.symtab != 0;
1682 /* If P is of the form "operator[ \t]+..." where `...' is
1683 some legitimate operator text, return a pointer to the
1684 beginning of the substring of the operator text.
1685 Otherwise, return "". */
1687 operator_chars (p, end)
1692 if (strncmp (p, "operator", 8))
1696 /* Don't get faked out by `operator' being part of a longer
1698 if ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')
1699 || *p == '_' || *p == '$' || *p == '\0')
1702 /* Allow some whitespace between `operator' and the operator symbol. */
1703 while (*p == ' ' || *p == '\t')
1725 if (p[1] == '=' || p[1] == p[0])
1736 error ("`operator ()' must be specified without whitespace in `()'");
1741 error ("`operator ?:' must be specified without whitespace in `?:'");
1746 error ("`operator []' must be specified without whitespace in `[]'");
1750 error ("`operator %s' not supported", p);
1757 /* Recursive helper function for decode_line_1.
1758 * Look for methods named NAME in type T.
1759 * Return number of matches.
1760 * Put matches in PHYSNAMES and SYM_ARR (which better be big enough!).
1761 * These allocations seem to define "big enough":
1762 * sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1763 * physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1767 find_methods(t, name, physnames, sym_arr)
1771 struct symbol **sym_arr;
1775 struct symbol *sym_class;
1776 char *class_name = type_name_no_tag (t);
1777 /* Ignore this class if it doesn't have a name.
1778 This prevents core dumps, but is just a workaround
1779 because we might not find the function in
1780 certain cases, such as
1781 struct D {virtual int f();}
1782 struct C : D {virtual int g();}
1783 (in this case g++ 1.35.1- does not put out a name
1784 for D as such, it defines type 19 (for example) in
1785 the same stab as C, and then does a
1786 .stabs "D:T19" and a .stabs "D:t19".
1788 "break C::f" should not be looking for field f in
1790 but just for the field f in the baseclasses of C
1791 (no matter what their names).
1793 However, I don't know how to replace the code below
1794 that depends on knowing the name of D. */
1796 && (sym_class = lookup_symbol (class_name,
1797 (struct block *)NULL,
1800 (struct symtab **)NULL)))
1803 t = SYMBOL_TYPE (sym_class);
1804 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1805 method_counter >= 0;
1809 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, method_counter);
1811 char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1812 if (!strcmp (name, method_name))
1813 /* Find all the fields with that name. */
1814 for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
1819 if (TYPE_FLAGS (TYPE_FN_FIELD_TYPE (f, field_counter)) & TYPE_FLAG_STUB)
1820 check_stub_method (t, method_counter, field_counter);
1821 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1822 physnames[i1] = (char*) alloca (strlen (phys_name) + 1);
1823 strcpy (physnames[i1], phys_name);
1824 sym_arr[i1] = lookup_symbol (phys_name,
1825 SYMBOL_BLOCK_VALUE (sym_class),
1828 (struct symtab **) NULL);
1829 if (sym_arr[i1]) i1++;
1833 /* Only search baseclasses if there is no match yet,
1834 * since names in derived classes override those in baseclasses.
1838 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1839 i1 += find_methods(TYPE_BASECLASS(t, ibase), name,
1840 physnames + i1, sym_arr + i1);
1844 /* Parse a string that specifies a line number.
1845 Pass the address of a char * variable; that variable will be
1846 advanced over the characters actually parsed.
1850 LINENUM -- that line number in current file. PC returned is 0.
1851 FILE:LINENUM -- that line in that file. PC returned is 0.
1852 FUNCTION -- line number of openbrace of that function.
1853 PC returned is the start of the function.
1854 VARIABLE -- line number of definition of that variable.
1856 FILE:FUNCTION -- likewise, but prefer functions in that file.
1857 *EXPR -- line in which address EXPR appears.
1859 FUNCTION may be an undebuggable function found in misc_function_vector.
1861 If the argument FUNFIRSTLINE is nonzero, we want the first line
1862 of real code inside a function when a function is specified.
1864 DEFAULT_SYMTAB specifies the file to use if none is specified.
1865 It defaults to current_source_symtab.
1866 DEFAULT_LINE specifies the line number to use for relative
1867 line numbers (that start with signs). Defaults to current_source_line.
1869 Note that it is possible to return zero for the symtab
1870 if no file is validly specified. Callers must check that.
1871 Also, the line number returned may be invalid. */
1873 struct symtabs_and_lines
1874 decode_line_1 (argptr, funfirstline, default_symtab, default_line)
1877 struct symtab *default_symtab;
1880 struct symtabs_and_lines decode_line_2 ();
1881 struct symtabs_and_lines values;
1882 struct symtab_and_line val;
1883 register char *p, *p1;
1885 register struct symtab *s;
1887 register struct symbol *sym;
1888 /* The symtab that SYM was found in. */
1889 struct symtab *sym_symtab;
1891 register CORE_ADDR pc;
1894 struct symbol *sym_class;
1896 struct symbol **sym_arr;
1900 /* Defaults have defaults. */
1902 if (default_symtab == 0)
1904 default_symtab = current_source_symtab;
1905 default_line = current_source_line;
1908 /* See if arg is *PC */
1910 if (**argptr == '*')
1913 pc = parse_and_eval_address_1 (argptr);
1914 values.sals = (struct symtab_and_line *)
1915 xmalloc (sizeof (struct symtab_and_line));
1917 values.sals[0] = find_pc_line (pc, 0);
1918 values.sals[0].pc = pc;
1922 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
1926 for (p = *argptr; *p; p++)
1928 if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
1931 while (p[0] == ' ' || p[0] == '\t') p++;
1933 q = operator_chars (*argptr, &q1);
1940 /* Extract the class name. */
1942 while (p != *argptr && p[-1] == ' ') --p;
1943 copy = (char *) alloca (p - *argptr + 1);
1944 bcopy (*argptr, copy, p - *argptr);
1945 copy[p - *argptr] = 0;
1947 /* Discard the class name from the arg. */
1949 while (*p == ' ' || *p == '\t') p++;
1952 sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
1953 (struct symtab **)NULL);
1956 (TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_STRUCT
1957 || TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_UNION))
1959 /* Arg token is not digits => try it as a function name
1960 Find the next token (everything up to end or next whitespace). */
1962 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
1963 q = operator_chars (*argptr, &q1);
1965 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
1970 copy[2] = CPLUS_MARKER;
1971 bcopy (q, copy + 3, q1 - q);
1972 copy[3 + (q1 - q)] = '\0';
1977 bcopy (*argptr, copy, p - *argptr);
1978 copy[p - *argptr] = '\0';
1981 /* no line number may be specified */
1982 while (*p == ' ' || *p == '\t') p++;
1986 i1 = 0; /* counter for the symbol array */
1987 t = SYMBOL_TYPE (sym_class);
1988 sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1989 physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1991 if (destructor_name_p (copy, t))
1993 /* destructors are a special case. */
1994 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, 0);
1995 int len = TYPE_FN_FIELDLIST_LENGTH (t, 0) - 1;
1996 char *phys_name = TYPE_FN_FIELD_PHYSNAME (f, len);
1997 physnames[i1] = (char *)alloca (strlen (phys_name) + 1);
1998 strcpy (physnames[i1], phys_name);
2000 lookup_symbol (phys_name, SYMBOL_BLOCK_VALUE (sym_class),
2001 VAR_NAMESPACE, 0, (struct symtab **)NULL);
2002 if (sym_arr[i1]) i1++;
2005 i1 = find_methods (t, copy, physnames, sym_arr);
2008 /* There is exactly one field with that name. */
2011 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
2013 /* Arg is the name of a function */
2014 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
2017 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
2019 values.sals[0] = find_pc_line (pc, 0);
2020 values.sals[0].pc = (values.sals[0].end && values.sals[0].pc != pc) ? values.sals[0].end : pc;
2030 /* There is more than one field with that name
2031 (overloaded). Ask the user which one to use. */
2032 return decode_line_2 (sym_arr, i1, funfirstline);
2038 if (OPNAME_PREFIX_P (copy))
2040 tmp = (char *)alloca (strlen (copy+3) + 9);
2041 strcpy (tmp, "operator ");
2042 strcat (tmp, copy+3);
2046 error ("that class does not have any method named %s", tmp);
2050 /* The quotes are important if copy is empty. */
2051 error("No class, struct, or union named \"%s\"", copy );
2056 /* Extract the file name. */
2058 while (p != *argptr && p[-1] == ' ') --p;
2059 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
2064 copy[2] = CPLUS_MARKER;
2065 bcopy (q, copy + 3, q1-q);
2066 copy[3 + (q1-q)] = 0;
2071 bcopy (*argptr, copy, p - *argptr);
2072 copy[p - *argptr] = 0;
2075 /* Find that file's data. */
2076 s = lookup_symtab (copy);
2079 if (symtab_list == 0 && partial_symtab_list == 0)
2080 error (no_symtab_msg);
2081 error ("No source file named %s.", copy);
2084 /* Discard the file name from the arg. */
2086 while (*p == ' ' || *p == '\t') p++;
2090 /* S is specified file's symtab, or 0 if no file specified.
2091 arg no longer contains the file name. */
2093 /* Check whether arg is all digits (and sign) */
2096 if (*p == '-' || *p == '+') p++;
2097 while (*p >= '0' && *p <= '9')
2100 if (p != *argptr && (*p == 0 || *p == ' ' || *p == '\t' || *p == ','))
2102 /* We found a token consisting of all digits -- at least one digit. */
2103 enum sign {none, plus, minus} sign = none;
2105 /* This is where we need to make sure that we have good defaults.
2106 We must guarantee that this section of code is never executed
2107 when we are called with just a function name, since
2108 select_source_symtab calls us with such an argument */
2110 if (s == 0 && default_symtab == 0)
2112 select_source_symtab (0);
2113 default_symtab = current_source_symtab;
2114 default_line = current_source_line;
2117 if (**argptr == '+')
2118 sign = plus, (*argptr)++;
2119 else if (**argptr == '-')
2120 sign = minus, (*argptr)++;
2121 val.line = atoi (*argptr);
2128 val.line = default_line + val.line;
2134 val.line = default_line - val.line;
2139 break; /* No need to adjust val.line. */
2142 while (*p == ' ' || *p == '\t') p++;
2148 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
2149 values.sals[0] = val;
2154 /* Arg token is not digits => try it as a variable name
2155 Find the next token (everything up to end or next whitespace). */
2157 while (*p && *p != ' ' && *p != '\t' && *p != ',') p++;
2158 copy = (char *) alloca (p - *argptr + 1);
2159 bcopy (*argptr, copy, p - *argptr);
2160 copy[p - *argptr] = 0;
2161 while (*p == ' ' || *p == '\t') p++;
2164 /* Look up that token as a variable.
2165 If file specified, use that file's per-file block to start with. */
2167 sym = lookup_symbol (copy,
2168 (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
2169 : get_selected_block ()),
2170 VAR_NAMESPACE, 0, &sym_symtab);
2174 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
2176 /* Arg is the name of a function */
2177 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
2180 val = find_pc_line (pc, 0);
2181 #ifdef PROLOGUE_FIRSTLINE_OVERLAP
2182 /* Convex: no need to suppress code on first line, if any */
2185 val.pc = (val.end && val.pc != pc) ? val.end : pc;
2187 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
2188 values.sals[0] = val;
2191 /* I think this is always the same as the line that
2192 we calculate above, but the general principle is
2193 "trust the symbols more than stuff like
2195 if (SYMBOL_LINE (sym) != 0)
2196 values.sals[0].line = SYMBOL_LINE (sym);
2200 else if (SYMBOL_LINE (sym) != 0)
2202 /* We know its line number. */
2203 values.sals = (struct symtab_and_line *)
2204 xmalloc (sizeof (struct symtab_and_line));
2206 bzero (&values.sals[0], sizeof (values.sals[0]));
2207 values.sals[0].symtab = sym_symtab;
2208 values.sals[0].line = SYMBOL_LINE (sym);
2212 /* This can happen if it is compiled with a compiler which doesn't
2213 put out line numbers for variables. */
2214 error ("Line number not known for symbol \"%s\"", copy);
2217 if ((i = lookup_misc_func (copy)) >= 0)
2221 val.pc = misc_function_vector[i].address + FUNCTION_START_OFFSET;
2223 SKIP_PROLOGUE (val.pc);
2224 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
2225 values.sals[0] = val;
2230 if (symtab_list == 0 && partial_symtab_list == 0 && misc_function_count == 0)
2231 error (no_symtab_msg);
2233 error ("Function %s not defined.", copy);
2234 return values; /* for lint */
2237 struct symtabs_and_lines
2238 decode_line_spec (string, funfirstline)
2242 struct symtabs_and_lines sals;
2244 error ("Empty line specification.");
2245 sals = decode_line_1 (&string, funfirstline,
2246 current_source_symtab, current_source_line);
2248 error ("Junk at end of line specification: %s", string);
2252 /* Given a list of NELTS symbols in sym_arr (with corresponding
2253 mangled names in physnames), return a list of lines to operate on
2254 (ask user if necessary). */
2255 struct symtabs_and_lines
2256 decode_line_2 (sym_arr, nelts, funfirstline)
2257 struct symbol *sym_arr[];
2261 struct symtabs_and_lines values, return_values;
2262 register CORE_ADDR pc;
2263 char *args, *arg1, *command_line_input ();
2267 values.sals = (struct symtab_and_line *) alloca (nelts * sizeof(struct symtab_and_line));
2268 return_values.sals = (struct symtab_and_line *) xmalloc (nelts * sizeof(struct symtab_and_line));
2271 printf("[0] cancel\n[1] all\n");
2274 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
2276 /* Arg is the name of a function */
2277 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym_arr[i]))
2278 + FUNCTION_START_OFFSET;
2281 values.sals[i] = find_pc_line (pc, 0);
2282 values.sals[i].pc = (values.sals[i].end && values.sals[i].pc != pc) ?
2283 values.sals[i].end : pc;
2284 printf("[%d] file:%s; line number:%d\n",
2285 (i+2), values.sals[i].symtab->filename, values.sals[i].line);
2287 else printf ("?HERE\n");
2291 if ((prompt = getenv ("PS2")) == NULL)
2295 printf("%s ",prompt);
2298 args = command_line_input (0, 0);
2301 error_no_arg ("one or more choice numbers");
2309 while (*arg1 >= '0' && *arg1 <= '9') arg1++;
2310 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
2311 error ("Arguments must be choice numbers.");
2316 error ("cancelled");
2319 bcopy (values.sals, return_values.sals, (nelts * sizeof(struct symtab_and_line)));
2320 return_values.nelts = nelts;
2321 return return_values;
2324 if (num > nelts + 2)
2326 printf ("No choice number %d.\n", num);
2331 if (values.sals[num].pc)
2333 return_values.sals[i++] = values.sals[num];
2334 values.sals[num].pc = 0;
2338 printf ("duplicate request for %d ignored.\n", num);
2343 while (*args == ' ' || *args == '\t') args++;
2345 return_values.nelts = i;
2346 return return_values;
2349 /* Return the index of misc function named NAME. */
2352 lookup_misc_func (name)
2353 register char *name;
2357 for (i = 0; i < misc_function_count; i++)
2358 if (!strcmp (misc_function_vector[i].name, name))
2360 return -1; /* not found */
2363 /* Slave routine for sources_info. Force line breaks at ,'s.
2364 NAME is the name to print and *FIRST is nonzero if this is the first
2365 name printed. Set *FIRST to zero. */
2367 output_source_filename (name, first)
2372 /* Table of files printed so far. Since a single source file can
2373 result in several partial symbol tables, we need to avoid printing
2374 it more than once. Note: if some of the psymtabs are read in and
2375 some are not, it gets printed both under "Source files for which
2376 symbols have been read" and "Source files for which symbols will
2377 be read in on demand". I consider this a reasonable way to deal
2378 with the situation. I'm not sure whether this can also happen for
2379 symtabs; it doesn't hurt to check. */
2380 static char **tab = NULL;
2381 /* Allocated size of tab in elements.
2382 Start with one 256-byte block (when using GNU malloc.c).
2383 24 is the malloc overhead when range checking is in effect. */
2384 static int tab_alloc_size = (256 - 24) / sizeof (char *);
2385 /* Current size of tab in elements. */
2386 static int tab_cur_size;
2393 tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
2397 /* Is NAME in tab? */
2398 for (p = tab; p < tab + tab_cur_size; p++)
2399 if (strcmp (*p, name) == 0)
2400 /* Yes; don't print it again. */
2402 /* No; add it to tab. */
2403 if (tab_cur_size == tab_alloc_size)
2405 tab_alloc_size *= 2;
2406 tab = (char **) xrealloc (tab, tab_alloc_size * sizeof (*tab));
2408 tab[tab_cur_size++] = name;
2417 printf_filtered (",");
2421 if (column != 0 && column + strlen (name) >= 70)
2423 printf_filtered ("\n");
2426 else if (column != 0)
2428 printf_filtered (" ");
2431 fputs_filtered (name, stdout);
2432 column += strlen (name);
2438 register struct symtab *s;
2439 register struct partial_symtab *ps;
2442 if (symtab_list == 0 && partial_symtab_list == 0)
2444 printf (no_symtab_msg);
2448 printf_filtered ("Source files for which symbols have been read in:\n\n");
2451 for (s = symtab_list; s; s = s->next)
2452 output_source_filename (s->filename, &first);
2453 printf_filtered ("\n\n");
2455 printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2458 for (ps = partial_symtab_list; ps; ps = ps->next)
2460 output_source_filename (ps->filename, &first);
2461 printf_filtered ("\n");
2464 /* List all symbols (if REGEXP is 0) or all symbols matching REGEXP.
2465 If CLASS is zero, list all symbols except functions and type names.
2466 If CLASS is 1, list only functions.
2467 If CLASS is 2, list only type names.
2468 If CLASS is 3, list only method names.
2470 BPT is non-zero if we should set a breakpoint at the functions
2474 list_symbols (regexp, class, bpt)
2479 register struct symtab *s;
2480 register struct partial_symtab *ps;
2481 register struct blockvector *bv;
2482 struct blockvector *prev_bv = 0;
2483 register struct block *b;
2485 register struct symbol *sym;
2486 struct partial_symbol *psym;
2488 static char *classnames[]
2489 = {"variable", "function", "type", "method"};
2490 int found_in_file = 0;
2492 static enum misc_function_type types[]
2493 = {mf_data, mf_text, mf_abs, mf_unknown};
2494 static enum misc_function_type types2[]
2495 = {mf_bss, mf_text, mf_abs, mf_unknown};
2496 enum misc_function_type ourtype = types[class];
2497 enum misc_function_type ourtype2 = types2[class];
2500 if (0 != (val = re_comp (regexp)))
2501 error ("Invalid regexp (%s): %s", val, regexp);
2503 /* Search through the partial_symtab_list *first* for all symbols
2504 matching the regexp. That way we don't have to reproduce all of
2505 the machinery below. */
2506 for (ps = partial_symtab_list; ps; ps = ps->next)
2508 struct partial_symbol *bound, *gbound, *sbound;
2511 if (ps->readin) continue;
2513 gbound = global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2514 sbound = static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2517 /* Go through all of the symbols stored in a partial
2518 symtab in one loop. */
2519 psym = global_psymbols.list + ps->globals_offset;
2524 if (bound == gbound && ps->n_static_syms != 0)
2526 psym = static_psymbols.list + ps->statics_offset;
2537 /* If it would match (logic taken from loop below)
2538 load the file and go on to the next one */
2539 if ((regexp == 0 || re_exec (SYMBOL_NAME (psym)))
2540 && ((class == 0 && SYMBOL_CLASS (psym) != LOC_TYPEDEF
2541 && SYMBOL_CLASS (psym) != LOC_BLOCK)
2542 || (class == 1 && SYMBOL_CLASS (psym) == LOC_BLOCK)
2543 || (class == 2 && SYMBOL_CLASS (psym) == LOC_TYPEDEF)
2544 || (class == 3 && SYMBOL_CLASS (psym) == LOC_BLOCK)))
2546 (void) PSYMTAB_TO_SYMTAB(ps);
2554 /* Here, we search through the misc function vector for functions that
2555 match, and call find_pc_symtab on them to force their symbols to
2556 be read. The symbol will then be found during the scan of symtabs
2557 below. If find_pc_symtab fails, set found_misc so that we will
2558 rescan to print any matching symbols without debug info. */
2561 for (i = 0; i < misc_function_count; i++) {
2562 if (misc_function_vector[i].type != ourtype
2563 && misc_function_vector[i].type != ourtype2)
2565 if (regexp == 0 || re_exec (misc_function_vector[i].name)) {
2566 if (0 == find_pc_symtab (misc_function_vector[i].address))
2572 /* Printout here so as to get after the "Reading in symbols"
2573 messages which will be generated above. */
2575 printf_filtered (regexp
2576 ? "All %ss matching regular expression \"%s\":\n"
2577 : "All defined %ss:\n",
2581 for (s = symtab_list; s; s = s->next)
2584 bv = BLOCKVECTOR (s);
2585 /* Often many files share a blockvector.
2586 Scan each blockvector only once so that
2587 we don't get every symbol many times.
2588 It happens that the first symtab in the list
2589 for any given blockvector is the main file. */
2591 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
2593 b = BLOCKVECTOR_BLOCK (bv, i);
2594 /* Skip the sort if this block is always sorted. */
2595 if (!BLOCK_SHOULD_SORT (b))
2596 sort_block_syms (b);
2597 for (j = 0; j < BLOCK_NSYMS (b); j++)
2600 sym = BLOCK_SYM (b, j);
2601 if ((regexp == 0 || re_exec (SYMBOL_NAME (sym)))
2602 && ((class == 0 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
2603 && SYMBOL_CLASS (sym) != LOC_BLOCK)
2604 || (class == 1 && SYMBOL_CLASS (sym) == LOC_BLOCK)
2605 || (class == 2 && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2606 || (class == 3 && SYMBOL_CLASS (sym) == LOC_BLOCK)))
2610 /* Set a breakpoint here, if it's a function */
2612 break_command (SYMBOL_NAME(sym), 0);
2614 else if (!found_in_file)
2616 fputs_filtered ("\nFile ", stdout);
2617 fputs_filtered (s->filename, stdout);
2618 fputs_filtered (":\n", stdout);
2622 if (class != 2 && i == STATIC_BLOCK)
2623 printf_filtered ("static ");
2625 /* Typedef that is not a C++ class */
2627 && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
2628 typedef_print (SYMBOL_TYPE(sym), sym, stdout);
2629 /* variable, func, or typedef-that-is-c++-class */
2630 else if (class < 2 ||
2632 SYMBOL_NAMESPACE(sym) == STRUCT_NAMESPACE))
2634 type_print (SYMBOL_TYPE (sym),
2635 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2636 ? "" : SYMBOL_NAME (sym)),
2639 printf_filtered (";\n");
2645 type_print_base (TYPE_FN_FIELD_TYPE(t, i), stdout, 0, 0);
2646 type_print_varspec_prefix (TYPE_FN_FIELD_TYPE(t, i), stdout, 0);
2647 sprintf (buf, " %s::", type_name_no_tag (t));
2648 type_print_method_args (TYPE_FN_FIELD_ARGS (t, i), buf, name, stdout);
2658 /* If there are no eyes, avoid all contact. I mean, if there are
2659 no debug symbols, then print directly from the misc_function_vector. */
2661 if (found_misc || class != 1) {
2663 for (i = 0; i < misc_function_count; i++) {
2664 if (misc_function_vector[i].type != ourtype
2665 && misc_function_vector[i].type != ourtype2)
2667 if (regexp == 0 || re_exec (misc_function_vector[i].name)) {
2668 /* Functions: Look up by address. */
2670 if (0 != find_pc_symtab (misc_function_vector[i].address))
2672 /* Variables/Absolutes: Look up by name */
2673 if (0 != lookup_symbol (misc_function_vector[i].name,
2674 (struct block *)0, VAR_NAMESPACE, 0, (struct symtab **)0))
2676 if (!found_in_file) {
2677 printf_filtered ("\nNon-debugging symbols:\n");
2680 printf_filtered (" %08x %s\n",
2681 misc_function_vector[i].address,
2682 misc_function_vector[i].name);
2689 variables_info (regexp)
2692 list_symbols (regexp, 0, 0);
2696 functions_info (regexp)
2699 list_symbols (regexp, 1, 0);
2706 list_symbols (regexp, 2, 0);
2710 /* Tiemann says: "info methods was never implemented." */
2712 methods_info (regexp)
2715 list_symbols (regexp, 3, 0);
2719 /* Breakpoint all functions matching regular expression. */
2721 rbreak_command (regexp)
2724 list_symbols (regexp, 1, 1);
2727 /* Helper function to initialize the standard scalar types. */
2730 init_type (code, length, uns, name)
2731 enum type_code code;
2735 register struct type *type;
2737 type = (struct type *) xmalloc (sizeof (struct type));
2738 bzero (type, sizeof *type);
2739 TYPE_MAIN_VARIANT (type) = type;
2740 TYPE_CODE (type) = code;
2741 TYPE_LENGTH (type) = length;
2742 TYPE_FLAGS (type) = uns ? TYPE_FLAG_UNSIGNED : 0;
2743 TYPE_FLAGS (type) |= TYPE_FLAG_PERM;
2744 TYPE_NFIELDS (type) = 0;
2745 TYPE_NAME (type) = name;
2748 TYPE_NFN_FIELDS (type) = 0;
2749 TYPE_N_BASECLASSES (type) = 0;
2753 /* Return Nonzero if block a is lexically nested within block b,
2754 or if a and b have the same pc range.
2755 Return zero otherwise. */
2758 struct block *a, *b;
2762 return BLOCK_START (a) >= BLOCK_START (b)
2763 && BLOCK_END (a) <= BLOCK_END (b);
2767 /* Helper routine for make_symbol_completion_list. */
2769 int return_val_size, return_val_index;
2773 completion_list_add_symbol (symname)
2776 if (return_val_index + 3 > return_val_size)
2778 (char **)xrealloc (return_val,
2779 (return_val_size *= 2) * sizeof (char *));
2781 return_val[return_val_index] =
2782 (char *)xmalloc (1 + strlen (symname));
2784 strcpy (return_val[return_val_index], symname);
2786 return_val[++return_val_index] = (char *)NULL;
2789 /* Return a NULL terminated array of all symbols (regardless of class) which
2790 begin by matching TEXT. If the answer is no symbols, then the return value
2791 is an array which contains only a NULL pointer.
2793 Problem: All of the symbols have to be copied because readline
2794 frees them. I'm not going to worry about this; hopefully there
2795 won't be that many. */
2798 make_symbol_completion_list (text)
2801 register struct symtab *s;
2802 register struct partial_symtab *ps;
2803 register struct block *b, *surrounding_static_block = 0;
2804 extern struct block *get_selected_block ();
2806 struct partial_symbol *psym;
2808 int text_len = strlen (text);
2809 return_val_size = 100;
2810 return_val_index = 0;
2812 (char **)xmalloc ((1 + return_val_size) *sizeof (char *));
2813 return_val[0] = (char *)NULL;
2815 /* Look through the partial symtabs for all symbols which begin
2816 by matching TEXT. Add each one that you find to the list. */
2818 for (ps = partial_symtab_list; ps; ps = ps->next)
2820 /* If the psymtab's been read in we'll get it when we search
2821 through the blockvector. */
2822 if (ps->readin) continue;
2824 for (psym = global_psymbols.list + ps->globals_offset;
2825 psym < (global_psymbols.list + ps->globals_offset
2826 + ps->n_global_syms);
2829 QUIT; /* If interrupted, then quit. */
2830 if ((strncmp (SYMBOL_NAME (psym), text, text_len) == 0))
2831 completion_list_add_symbol (SYMBOL_NAME (psym));
2834 for (psym = static_psymbols.list + ps->statics_offset;
2835 psym < (static_psymbols.list + ps->statics_offset
2836 + ps->n_static_syms);
2840 if ((strncmp (SYMBOL_NAME (psym), text, text_len) == 0))
2841 completion_list_add_symbol (SYMBOL_NAME (psym));
2845 /* At this point scan through the misc function vector and add each
2846 symbol you find to the list. Eventually we want to ignore
2847 anything that isn't a text symbol (everything else will be
2848 handled by the psymtab code above). */
2850 for (i = 0; i < misc_function_count; i++)
2851 if (!strncmp (text, misc_function_vector[i].name, text_len))
2852 completion_list_add_symbol (misc_function_vector[i].name);
2854 /* Search upwards from currently selected frame (so that we can
2855 complete on local vars. */
2856 for (b = get_selected_block (); b; b = BLOCK_SUPERBLOCK (b))
2858 if (!BLOCK_SUPERBLOCK (b))
2859 surrounding_static_block = b; /* For elmin of dups */
2861 /* Also catch fields of types defined in this places which
2862 match our text string. Only complete on types visible
2863 from current context. */
2864 for (i = 0; i < BLOCK_NSYMS (b); i++)
2866 register struct symbol *sym = BLOCK_SYM (b, i);
2868 if (!strncmp (SYMBOL_NAME (sym), text, text_len))
2869 completion_list_add_symbol (SYMBOL_NAME (sym));
2871 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2873 struct type *t = SYMBOL_TYPE (sym);
2874 enum type_code c = TYPE_CODE (t);
2876 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2877 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2878 if (TYPE_FIELD_NAME (t, j) &&
2879 !strncmp (TYPE_FIELD_NAME (t, j), text, text_len))
2880 completion_list_add_symbol (TYPE_FIELD_NAME (t, j));
2885 /* Go through the symtabs and check the externs and statics for
2886 symbols which match. */
2888 for (s = symtab_list; s; s = s->next)
2890 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
2892 for (i = 0; i < BLOCK_NSYMS (b); i++)
2893 if (!strncmp (SYMBOL_NAME (BLOCK_SYM (b, i)), text, text_len))
2894 completion_list_add_symbol (SYMBOL_NAME (BLOCK_SYM (b, i)));
2897 for (s = symtab_list; s; s = s->next)
2899 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
2901 /* Don't do this block twice. */
2902 if (b == surrounding_static_block) continue;
2904 for (i = 0; i < BLOCK_NSYMS (b); i++)
2905 if (!strncmp (SYMBOL_NAME (BLOCK_SYM (b, i)), text, text_len))
2906 completion_list_add_symbol (SYMBOL_NAME (BLOCK_SYM (b, i)));
2909 return (return_val);
2913 /* Add the type of the symbol sym to the type of the current
2914 function whose block we are in (assumed). The type of
2915 this current function is contained in *TYPE.
2917 This basically works as follows: When we find a function
2918 symbol (N_FUNC with a 'f' or 'F' in the symbol name), we record
2919 a pointer to its type in the global in_function_type. Every
2920 time we come across a parameter symbol ('p' in its name), then
2921 this procedure adds the name and type of that parameter
2922 to the function type pointed to by *TYPE. (Which should correspond
2923 to in_function_type if it was called correctly).
2925 Note that since we are modifying a type, the result of
2926 lookup_function_type() should be bcopy()ed before calling
2927 this. When not in strict typing mode, the expression
2928 evaluator can choose to ignore this.
2930 Assumption: All of a function's parameter symbols will
2931 appear before another function symbol is found. The parameters
2932 appear in the same order in the argument list as they do in the
2936 add_param_to_type (type,sym)
2940 int num = ++(TYPE_NFIELDS(*type));
2942 if(TYPE_NFIELDS(*type)-1)
2943 TYPE_FIELDS(*type) =
2944 (struct field *)xrealloc((char *)(TYPE_FIELDS(*type)),
2945 num*sizeof(struct field));
2947 TYPE_FIELDS(*type) =
2948 (struct field *)xmalloc(num*sizeof(struct field));
2950 TYPE_FIELD_BITPOS(*type,num-1) = num-1;
2951 TYPE_FIELD_BITSIZE(*type,num-1) = 0;
2952 TYPE_FIELD_TYPE(*type,num-1) = SYMBOL_TYPE(sym);
2953 TYPE_FIELD_NAME(*type,num-1) = SYMBOL_NAME(sym);
2958 _initialize_symtab ()
2960 add_info ("variables", variables_info,
2961 "All global and static variable names, or those matching REGEXP.");
2962 add_info ("functions", functions_info,
2963 "All function names, or those matching REGEXP.");
2965 /* FIXME: This command has at least the following problems:
2966 1. It prints builtin types (in a very strange and confusing fashion).
2967 2. It doesn't print right, e.g. with
2968 typedef struct foo *FOO
2969 type_print prints "FOO" when we want to make it (in this situation)
2970 print "struct foo *".
2971 I also think "ptype" or "whatis" is more likely to be useful (but if
2972 there is much disagreement "info types" can be fixed). */
2973 add_info ("types", types_info,
2974 "All types names, or those matching REGEXP.");
2977 add_info ("methods", methods_info,
2978 "All method names, or those matching REGEXP::REGEXP.\n\
2979 If the class qualifier is ommited, it is assumed to be the current scope.\n\
2980 If the first REGEXP is ommited, then all methods matching the second REGEXP\n\
2983 add_info ("sources", sources_info,
2984 "Source files in the program.");
2986 add_com ("rbreak", no_class, rbreak_command,
2987 "Set a breakpoint for all functions matching REGEXP.");
2989 /* Initialize the one built-in type that isn't language dependent... */
2990 builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0, "<unknown type>");