The list of changes is too long to fit in the cvs log (since it truncates!).
[deliverable/binutils-gdb.git] / gdb / symtab.c
CommitLineData
bd5635a1
RP
1/* Symbol table lookup for the GNU debugger, GDB.
2 Copyright (C) 1986, 1987, 1988, 1989, 1990 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6GDB is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option)
9any later version.
10
11GDB is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GDB; see the file COPYING. If not, write to
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20#include <stdio.h>
21#include "defs.h"
22#include "symtab.h"
23#include "param.h"
24#include "gdbcore.h"
25#include "frame.h"
26#include "target.h"
27#include "value.h"
28#include "symfile.h"
29#include "gdbcmd.h"
30
31#include <obstack.h>
32#include <assert.h>
33
34#include <sys/types.h>
35#include <fcntl.h>
36#include <string.h>
37#include <sys/stat.h>
38
39extern int close ();
40extern void qsort ();
41extern char *getenv ();
42
43extern char *cplus_demangle ();
44extern struct value *value_of_this ();
45extern void break_command ();
46extern void select_source_symtab ();
47
48/* Functions this file defines */
49static int find_line_common ();
50struct partial_symtab *lookup_partial_symtab ();
51static struct partial_symbol *lookup_partial_symbol ();
b039ac3a
JK
52static struct partial_symbol *lookup_demangled_partial_symbol ();
53static struct symbol *lookup_demangled_block_symbol ();
bd5635a1
RP
54
55/* These variables point to the objects
56 representing the predefined C data types. */
57
58struct type *builtin_type_void;
59struct type *builtin_type_char;
60struct type *builtin_type_short;
61struct type *builtin_type_int;
62struct type *builtin_type_long;
bd5635a1 63struct type *builtin_type_long_long;
bd5635a1
RP
64struct type *builtin_type_unsigned_char;
65struct type *builtin_type_unsigned_short;
66struct type *builtin_type_unsigned_int;
67struct type *builtin_type_unsigned_long;
bd5635a1 68struct type *builtin_type_unsigned_long_long;
bd5635a1
RP
69struct type *builtin_type_float;
70struct type *builtin_type_double;
71struct type *builtin_type_error;
72
73/* Block in which the most recently searched-for symbol was found.
74 Might be better to make this a parameter to lookup_symbol and
75 value_of_this. */
76struct block *block_found;
77
78char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
79
80/* Check for a symtab of a specific name; first in symtabs, then in
81 psymtabs. *If* there is no '/' in the name, a match after a '/'
82 in the symtab filename will also work. */
83
84static struct symtab *
85lookup_symtab_1 (name)
86 char *name;
87{
88 register struct symtab *s;
89 register struct partial_symtab *ps;
90 register char *slash = strchr (name, '/');
91 register int len = strlen (name);
92
93 for (s = symtab_list; s; s = s->next)
94 if (!strcmp (name, s->filename))
95 return s;
96
97 for (ps = partial_symtab_list; ps; ps = ps->next)
98 if (!strcmp (name, ps->filename))
99 {
100 if (ps->readin)
101 fatal ("Internal: readin pst found when no symtab found.");
102 return PSYMTAB_TO_SYMTAB (ps);
103 }
104
105 if (!slash)
106 {
107 for (s = symtab_list; s; s = s->next)
108 {
109 int l = strlen (s->filename);
110
111 if (s->filename[l - len -1] == '/'
112 && !strcmp (s->filename + l - len, name))
113 return s;
114 }
115
116 for (ps = partial_symtab_list; ps; ps = ps->next)
117 {
118 int l = strlen (ps->filename);
119
120 if (ps->filename[l - len - 1] == '/'
121 && !strcmp (ps->filename + l - len, name))
122 {
123 if (ps->readin)
124 fatal ("Internal: readin pst found when no symtab found.");
125 return PSYMTAB_TO_SYMTAB (ps);
126 }
127 }
128 }
129 return 0;
130}
131
132/* Lookup the symbol table of a source file named NAME. Try a couple
133 of variations if the first lookup doesn't work. */
134
135struct symtab *
136lookup_symtab (name)
137 char *name;
138{
139 register struct symtab *s;
140 register char *copy;
141
142 s = lookup_symtab_1 (name);
143 if (s) return s;
144
145 /* If name not found as specified, see if adding ".c" helps. */
146
147 copy = (char *) alloca (strlen (name) + 3);
148 strcpy (copy, name);
149 strcat (copy, ".c");
150 s = lookup_symtab_1 (copy);
151 if (s) return s;
152
153 /* We didn't find anything; die. */
154 return 0;
155}
156
157/* Lookup the partial symbol table of a source file named NAME. This
158 only returns true on an exact match (ie. this semantics are
159 different from lookup_symtab. */
160
161struct partial_symtab *
162lookup_partial_symtab (name)
163char *name;
164{
165 register struct partial_symtab *s;
166
167 for (s = partial_symtab_list; s; s = s->next)
168 if (!strcmp (name, s->filename))
169 return s;
170
171 return 0;
172}
173\f
174/* Return a typename for a struct/union/enum type
175 without the tag qualifier. If the type has a NULL name,
176 NULL is returned. */
177char *
178type_name_no_tag (type)
179 register struct type *type;
180{
181 register char *name = TYPE_NAME (type);
182 char *strchr ();
183 if (name == 0)
184 return 0;
185
186#if 0
187 switch (TYPE_CODE (type))
188 {
189 case TYPE_CODE_STRUCT:
190 return name + 7;
191 case TYPE_CODE_UNION:
192 return name + 6;
193 case TYPE_CODE_ENUM:
194 return name + 5;
195 }
196#endif
197
198 name = strchr (name, ' ');
199 if (name)
200 return name + 1;
201
202 return TYPE_NAME (type);
203}
204
205/* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989.
206
207 If this is a stubbed struct (i.e. declared as struct foo *), see if
208 we can find a full definition in some other file. If so, copy this
209 definition, so we can use it in future. If not, set a flag so we
210 don't waste too much time in future.
211
212 This used to be coded as a macro, but I don't think it is called
213 often enough to merit such treatment.
214*/
215
216struct complaint stub_noname_complaint =
217 {"stub type has NULL name", 0, 0};
218
219void
220check_stub_type(type)
221 struct type *type;
222{
223 if (TYPE_FLAGS(type) & TYPE_FLAG_STUB)
224 {
225 char* name= type_name_no_tag (type);
226 struct symbol *sym;
227 if (name == 0)
228 {
e1ce8aa5 229 complain (&stub_noname_complaint, 0);
bd5635a1
RP
230 return;
231 }
232 if (sym = lookup_symbol (name, 0, STRUCT_NAMESPACE, 0,
233 (struct symtab **)NULL) )
234 bcopy (SYMBOL_TYPE(sym), type, sizeof (struct type));
235 }
236}
237
238/* Demangle a GDB method stub type. */
239char *
240gdb_mangle_typename (type)
241 struct type *type;
242{
243 static struct type *last_type;
244 static char *mangled_typename;
245
246 if (type != last_type)
247 {
248 /* Need a new type prefix. */
249 char *strchr ();
250 char *newname = type_name_no_tag (type);
251 char buf[20];
252 int len;
253
254 if (mangled_typename)
255 free (mangled_typename);
256
257 len = strlen (newname);
258 sprintf (buf, "__%d", len);
259 mangled_typename = (char *)xmalloc (strlen (buf) + len + 1);
260 strcpy (mangled_typename, buf);
261 strcat (mangled_typename, newname);
262 /* Now we have built "__#newname". */
263 }
264 return mangled_typename;
265}
266
267/* Lookup a primitive type named NAME.
268 Return zero if NAME is not a primitive type.*/
269
270struct type *
271lookup_primitive_typename (name)
272 char *name;
273{
274 if (!strcmp (name, "int"))
275 return builtin_type_int;
276 if (!strcmp (name, "long"))
277 return builtin_type_long;
278 if (!strcmp (name, "short"))
279 return builtin_type_short;
280 if (!strcmp (name, "char"))
281 return builtin_type_char;
282 if (!strcmp (name, "float"))
283 return builtin_type_float;
284 if (!strcmp (name, "double"))
285 return builtin_type_double;
286 if (!strcmp (name, "void"))
287 return builtin_type_void;
288 return 0;
289}
290
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. */
294
295struct type *
296lookup_typename (name, block, noerr)
297 char *name;
298 struct block *block;
299 int noerr;
300{
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)
304 {
305 struct type *tmp;
306 tmp = lookup_primitive_typename (name);
307 if (!tmp && noerr)
308 return 0;
309 error ("No type named %s.", name);
310 }
311 return SYMBOL_TYPE (sym);
312}
313
314struct type *
315lookup_unsigned_typename (name)
316 char *name;
317{
318 if (!strcmp (name, "int"))
319 return builtin_type_unsigned_int;
320 if (!strcmp (name, "long"))
321 return builtin_type_unsigned_long;
322 if (!strcmp (name, "short"))
323 return builtin_type_unsigned_short;
324 if (!strcmp (name, "char"))
325 return builtin_type_unsigned_char;
326 error ("No type named unsigned %s.", name);
327 return (struct type *)-1; /* for lint */
328}
329
330/* Lookup a structure type named "struct NAME",
331 visible in lexical block BLOCK. */
332
333struct type *
334lookup_struct (name, block)
335 char *name;
336 struct block *block;
337{
338 register struct symbol *sym
339 = lookup_symbol (name, block, STRUCT_NAMESPACE, 0, (struct symtab **)NULL);
340
341 if (sym == 0)
342 error ("No struct type named %s.", name);
343 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
344 error ("This context has class, union or enum %s, not a struct.", name);
345 return SYMBOL_TYPE (sym);
346}
347
348/* Lookup a union type named "union NAME",
349 visible in lexical block BLOCK. */
350
351struct type *
352lookup_union (name, block)
353 char *name;
354 struct block *block;
355{
356 register struct symbol *sym
357 = lookup_symbol (name, block, STRUCT_NAMESPACE, 0, (struct symtab **)NULL);
358
359 if (sym == 0)
360 error ("No union type named %s.", name);
361 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_UNION)
362 error ("This context has class, struct or enum %s, not a union.", name);
363 return SYMBOL_TYPE (sym);
364}
365
366/* Lookup an enum type named "enum NAME",
367 visible in lexical block BLOCK. */
368
369struct type *
370lookup_enum (name, block)
371 char *name;
372 struct block *block;
373{
374 register struct symbol *sym
375 = lookup_symbol (name, block, STRUCT_NAMESPACE, 0, (struct symtab **)NULL);
376 if (sym == 0)
377 error ("No enum type named %s.", name);
378 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_ENUM)
379 error ("This context has class, struct or union %s, not an enum.", name);
380 return SYMBOL_TYPE (sym);
381}
382
383/* Given a type TYPE, lookup the type of the component of type named
d96b54ea
JK
384 NAME.
385 If NOERR is nonzero, return zero if NAME is not suitably defined. */
bd5635a1
RP
386
387struct type *
d96b54ea 388lookup_struct_elt_type (type, name, noerr)
bd5635a1
RP
389 struct type *type;
390 char *name;
d96b54ea 391 int noerr;
bd5635a1
RP
392{
393 int i;
394
395 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
396 && TYPE_CODE (type) != TYPE_CODE_UNION)
397 {
398 target_terminal_ours ();
399 fflush (stdout);
400 fprintf (stderr, "Type ");
401 type_print (type, "", stderr, -1);
402 error (" is not a structure or union type.");
403 }
404
d96b54ea
JK
405 check_stub_type (type);
406
bd5635a1 407 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
d96b54ea
JK
408 {
409 char *t_field_name = TYPE_FIELD_NAME (type, i);
bd5635a1 410
d96b54ea
JK
411 if (t_field_name && !strcmp (t_field_name, name))
412 return TYPE_FIELD_TYPE (type, i);
413 }
414 /* OK, it's not in this class. Recursively check the baseclasses. */
415 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
416 {
417 struct type *t = lookup_struct_elt_type (TYPE_BASECLASS (type, i),
418 name, 0);
419 if (t != NULL)
420 return t;
421 }
422
423 if (noerr)
424 return NULL;
425
bd5635a1
RP
426 target_terminal_ours ();
427 fflush (stdout);
428 fprintf (stderr, "Type ");
429 type_print (type, "", stderr, -1);
430 fprintf (stderr, " has no component named ");
431 fputs_filtered (name, stderr);
432 error (".");
433 return (struct type *)-1; /* For lint */
434}
435
436/* Given a type TYPE, return a type of pointers to that type.
437 May need to construct such a type if this is the first use.
438
439 C++: use TYPE_MAIN_VARIANT and TYPE_CHAIN to keep pointer
440 to member types under control. */
441
442struct type *
443lookup_pointer_type (type)
444 struct type *type;
445{
446 register struct type *ptype = TYPE_POINTER_TYPE (type);
447 if (ptype) return TYPE_MAIN_VARIANT (ptype);
448
449 /* This is the first time anyone wanted a pointer to a TYPE. */
450 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
451 ptype = (struct type *) xmalloc (sizeof (struct type));
452 else
453 ptype = (struct type *) obstack_alloc (symbol_obstack,
454 sizeof (struct type));
455
456 bzero (ptype, sizeof (struct type));
457 TYPE_MAIN_VARIANT (ptype) = ptype;
458 TYPE_TARGET_TYPE (ptype) = type;
459 TYPE_POINTER_TYPE (type) = ptype;
460 /* New type is permanent if type pointed to is permanent. */
461 if (TYPE_FLAGS (type) & TYPE_FLAG_PERM)
462 TYPE_FLAGS (ptype) |= TYPE_FLAG_PERM;
463 /* We assume the machine has only one representation for pointers! */
464 TYPE_LENGTH (ptype) = sizeof (char *);
465 TYPE_CODE (ptype) = TYPE_CODE_PTR;
466 return ptype;
467}
468
469struct type *
470lookup_reference_type (type)
471 struct type *type;
472{
473 register struct type *rtype = TYPE_REFERENCE_TYPE (type);
474 if (rtype) return TYPE_MAIN_VARIANT (rtype);
475
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));
479 else
480 rtype = (struct type *) obstack_alloc (symbol_obstack,
481 sizeof (struct type));
482
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;
493 return rtype;
494}
495
496
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. */
501
502struct type *
503lookup_member_type (type, domain)
504 struct type *type, *domain;
505{
506 register struct type *mtype = TYPE_MAIN_VARIANT (type);
507 struct type *main_type;
508
509 main_type = mtype;
510 while (mtype)
511 {
512 if (TYPE_DOMAIN_TYPE (mtype) == domain)
513 return mtype;
514 mtype = TYPE_NEXT_VARIANT (mtype);
515 }
516
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));
520 else
521 mtype = (struct type *) obstack_alloc (symbol_obstack,
522 sizeof (struct type));
523
524 bzero (mtype, sizeof (struct type));
525 if (main_type == 0)
526 main_type = mtype;
527 else
528 {
529 TYPE_NEXT_VARIANT (mtype) = TYPE_NEXT_VARIANT (main_type);
530 TYPE_NEXT_VARIANT (main_type) = mtype;
531 }
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;
538
539 /* In practice, this is never used. */
540 TYPE_LENGTH (mtype) = 1;
541 TYPE_CODE (mtype) = TYPE_CODE_MEMBER;
542
543#if 0
544 /* Now splice in the new member pointer type. */
545 if (main_type)
546 {
547 /* This type was not "smashed". */
548 TYPE_CHAIN (mtype) = TYPE_CHAIN (main_type);
549 TYPE_CHAIN (main_type) = mtype;
550 }
551#endif
552
553 return mtype;
554}
555
d96b54ea
JK
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. */
561struct type *
562allocate_stub_method (type)
563 struct type *type;
564{
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;
572 return mtype;
573}
574
575/* Lookup a method type returning type TYPE, belonging
576 to class DOMAIN, and taking a list of arguments ARGS.
577 If one is not found, allocate a new one. */
578
bd5635a1
RP
579struct type *
580lookup_method_type (type, domain, args)
581 struct type *type, *domain, **args;
582{
583 register struct type *mtype = TYPE_MAIN_VARIANT (type);
584 struct type *main_type;
585
586 main_type = mtype;
587 while (mtype)
588 {
589 if (TYPE_DOMAIN_TYPE (mtype) == domain)
590 {
591 struct type **t1 = args;
592 struct type **t2 = TYPE_ARG_TYPES (mtype);
593 if (t2)
594 {
595 int i;
596 for (i = 0; t1[i] != 0 && t1[i]->code != TYPE_CODE_VOID; i++)
597 if (t1[i] != t2[i])
598 break;
599 if (t1[i] == t2[i])
600 return mtype;
601 }
602 }
603 mtype = TYPE_NEXT_VARIANT (mtype);
604 }
605
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));
609 else
610 mtype = (struct type *) obstack_alloc (symbol_obstack,
611 sizeof (struct type));
612
613 bzero (mtype, sizeof (struct type));
614 if (main_type == 0)
615 main_type = mtype;
616 else
617 {
618 TYPE_NEXT_VARIANT (mtype) = TYPE_NEXT_VARIANT (main_type);
619 TYPE_NEXT_VARIANT (main_type) = mtype;
620 }
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;
628
629 /* In practice, this is never used. */
630 TYPE_LENGTH (mtype) = 1;
631 TYPE_CODE (mtype) = TYPE_CODE_METHOD;
632
633#if 0
634 /* Now splice in the new member pointer type. */
635 if (main_type)
636 {
637 /* This type was not "smashed". */
638 TYPE_CHAIN (mtype) = TYPE_CHAIN (main_type);
639 TYPE_CHAIN (main_type) = mtype;
640 }
641#endif
642
643 return mtype;
644}
645
646#if 0
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. */
650struct type *
651lookup_basetype_type (type, offset, via_virtual, via_public)
652 struct type *type;
653 int offset;
654 int via_virtual, via_public;
655{
656 register struct type *btype = TYPE_MAIN_VARIANT (type);
657 struct type *main_type;
658
659 if (offset != 0)
660 {
661 printf ("Internal error: type offset non-zero in lookup_basetype_type");
662 offset = 0;
663 }
664
665 main_type = btype;
666 while (btype)
667 {
668 if (/* TYPE_OFFSET (btype) == offset
669 && */ TYPE_VIA_PUBLIC (btype) == via_public
670 && TYPE_VIA_VIRTUAL (btype) == via_virtual)
671 return btype;
672 btype = TYPE_NEXT_VARIANT (btype);
673 }
674
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));
678 else
679 btype = (struct type *) obstack_alloc (symbol_obstack,
680 sizeof (struct type));
681
682 if (main_type == 0)
683 {
684 main_type = btype;
685 bzero (btype, sizeof (struct type));
686 TYPE_MAIN_VARIANT (btype) = main_type;
687 }
688 else
689 {
690 bcopy (main_type, btype, sizeof (struct type));
691 TYPE_NEXT_VARIANT (main_type) = btype;
692 }
693/* TYPE_OFFSET (btype) = offset; */
694 if (via_public)
695 TYPE_FLAGS (btype) |= TYPE_FLAG_VIA_PUBLIC;
696 if (via_virtual)
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;
701
702 /* In practice, this is never used. */
703 TYPE_LENGTH (btype) = 1;
704 TYPE_CODE (btype) = TYPE_CODE_STRUCT;
705
706 return btype;
707}
708#endif
709
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. */
712
713struct type *
714lookup_function_type (type)
715 struct type *type;
716{
717 register struct type *ptype = TYPE_FUNCTION_TYPE (type);
718 if (ptype) return ptype;
719
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));
723 else
724 ptype = (struct type *) obstack_alloc (symbol_obstack,
725 sizeof (struct type));
726
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;
736 return ptype;
737}
738\f
739/* Create an array type. Elements will be of type TYPE, and there will
740 be NUM of them.
741
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. */
747
748struct type *
749create_array_type (element_type, number)
750 struct type *element_type;
751 int number;
752{
753 struct type *result_type = (struct type *)
754 obstack_alloc (symbol_obstack, sizeof (struct type));
755
756 bzero (result_type, sizeof (struct type));
757
758 TYPE_CODE (result_type) = TYPE_CODE_ARRAY;
759 TYPE_TARGET_TYPE (result_type) = element_type;
760 TYPE_LENGTH (result_type) = number * TYPE_LENGTH (element_type);
761 TYPE_NFIELDS (result_type) = 1;
762 TYPE_FIELDS (result_type) =
763 (struct field *) obstack_alloc (symbol_obstack, sizeof (struct field));
764 TYPE_FIELD_TYPE (result_type, 0) = builtin_type_int;
765 TYPE_VPTR_FIELDNO (result_type) = -1;
766
767 return result_type;
768}
769
770\f
771/* Smash TYPE to be a type of members of DOMAIN with type TO_TYPE. */
772
773void
774smash_to_member_type (type, domain, to_type)
775 struct type *type, *domain, *to_type;
776{
777 bzero (type, sizeof (struct type));
778 TYPE_TARGET_TYPE (type) = to_type;
779 TYPE_DOMAIN_TYPE (type) = domain;
780
781 /* In practice, this is never needed. */
782 TYPE_LENGTH (type) = 1;
783 TYPE_CODE (type) = TYPE_CODE_MEMBER;
784
785 TYPE_MAIN_VARIANT (type) = lookup_member_type (domain, to_type);
786}
787
788/* Smash TYPE to be a type of method of DOMAIN with type TO_TYPE. */
789
790void
791smash_to_method_type (type, domain, to_type, args)
792 struct type *type, *domain, *to_type, **args;
793{
794 bzero (type, sizeof (struct type));
795 TYPE_TARGET_TYPE (type) = to_type;
796 TYPE_DOMAIN_TYPE (type) = domain;
797 TYPE_ARG_TYPES (type) = args;
798
799 /* In practice, this is never needed. */
800 TYPE_LENGTH (type) = 1;
801 TYPE_CODE (type) = TYPE_CODE_METHOD;
802
803 TYPE_MAIN_VARIANT (type) = lookup_method_type (domain, to_type, args);
804}
805\f
806/* Find which partial symtab on the partial_symtab_list contains
807 PC. Return 0 if none. */
808
809struct partial_symtab *
810find_pc_psymtab (pc)
811 register CORE_ADDR pc;
812{
813 register struct partial_symtab *ps;
814
815 for (ps = partial_symtab_list; ps; ps = ps->next)
816 if (pc >= ps->textlow && pc < ps->texthigh)
817 return ps;
818
819 return 0;
820}
821
822/* Find which partial symbol within a psymtab contains PC. Return 0
823 if none. Check all psymtabs if PSYMTAB is 0. */
824struct partial_symbol *
825find_pc_psymbol (psymtab, pc)
826 struct partial_symtab *psymtab;
827 CORE_ADDR pc;
828{
829 struct partial_symbol *best, *p;
830 CORE_ADDR best_pc;
831
832 if (!psymtab)
833 psymtab = find_pc_psymtab (pc);
834 if (!psymtab)
835 return 0;
836
837 best_pc = psymtab->textlow - 1;
838
839 for (p = static_psymbols.list + psymtab->statics_offset;
840 (p - (static_psymbols.list + psymtab->statics_offset)
841 < psymtab->n_static_syms);
842 p++)
843 if (SYMBOL_NAMESPACE (p) == VAR_NAMESPACE
844 && SYMBOL_CLASS (p) == LOC_BLOCK
845 && pc >= SYMBOL_VALUE_ADDRESS (p)
846 && SYMBOL_VALUE_ADDRESS (p) > best_pc)
847 {
848 best_pc = SYMBOL_VALUE_ADDRESS (p);
849 best = p;
850 }
851 if (best_pc == psymtab->textlow - 1)
852 return 0;
853 return best;
854}
855
856\f
857/* Find the definition for a specified symbol name NAME
858 in namespace NAMESPACE, visible from lexical block BLOCK.
859 Returns the struct symbol pointer, or zero if no symbol is found.
860 If SYMTAB is non-NULL, store the symbol table in which the
861 symbol was found there, or NULL if not found.
862 C++: if IS_A_FIELD_OF_THIS is nonzero on entry, check to see if
863 NAME is a field of the current implied argument `this'. If so set
864 *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero.
865 BLOCK_FOUND is set to the block in which NAME is found (in the case of
866 a field of `this', value_of_this sets BLOCK_FOUND to the proper value.) */
867
868struct symbol *
869lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
870 char *name;
871 register struct block *block;
872 enum namespace namespace;
873 int *is_a_field_of_this;
874 struct symtab **symtab;
875{
876 register struct symbol *sym;
877 register struct symtab *s;
878 register struct partial_symtab *ps;
879 struct blockvector *bv;
880
881 /* Search specified block and its superiors. */
882
883 while (block != 0)
884 {
885 sym = lookup_block_symbol (block, name, namespace);
886 if (sym)
887 {
888 block_found = block;
889 if (symtab != NULL)
890 {
891 /* Search the list of symtabs for one which contains the
892 address of the start of this block. */
893 struct block *b;
894 for (s = symtab_list; s; s = s->next)
895 {
896 bv = BLOCKVECTOR (s);
3ba6a043 897 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
bd5635a1
RP
898 if (BLOCK_START (b) <= BLOCK_START (block)
899 && BLOCK_END (b) > BLOCK_START (block))
900 break;
901 }
902 *symtab = s;
903 }
904
905 return sym;
906 }
907 block = BLOCK_SUPERBLOCK (block);
908 }
909
b039ac3a
JK
910 /* But that doesn't do any demangling for the STATIC_BLOCK.
911 I'm not sure whether demangling is needed in the case of
912 nested function in inner blocks; if so this needs to be changed.
913
914 Don't need to mess with the psymtabs; if we have a block,
915 that file is read in. If we don't, then we deal later with
916 all the psymtab stuff that needs checking. */
917 if (namespace == VAR_NAMESPACE && block != NULL)
918 {
919 struct block *b;
920 /* Find the right symtab. */
921 for (s = symtab_list; s; s = s->next)
922 {
923 bv = BLOCKVECTOR (s);
924 b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
925 if (BLOCK_START (b) <= BLOCK_START (block)
926 && BLOCK_END (b) > BLOCK_START (block))
927 {
928 sym = lookup_demangled_block_symbol (b, name);
929 if (sym)
930 {
931 block_found = b;
932 if (symtab != NULL)
933 *symtab = s;
934 return sym;
935 }
936 }
937 }
938 }
939
940
bd5635a1
RP
941 /* C++: If requested to do so by the caller,
942 check to see if NAME is a field of `this'. */
943 if (is_a_field_of_this)
944 {
945 struct value *v = value_of_this (0);
946
947 *is_a_field_of_this = 0;
948 if (v && check_field (v, name))
949 {
950 *is_a_field_of_this = 1;
951 if (symtab != NULL)
952 *symtab = NULL;
953 return 0;
954 }
955 }
956
957 /* Now search all global blocks. Do the symtab's first, then
958 check the psymtab's */
959
960 for (s = symtab_list; s; s = s->next)
961 {
962 bv = BLOCKVECTOR (s);
3ba6a043 963 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
bd5635a1
RP
964 sym = lookup_block_symbol (block, name, namespace);
965 if (sym)
966 {
967 block_found = block;
968 if (symtab != NULL)
969 *symtab = s;
970 return sym;
971 }
972 }
973
974 /* Check for the possibility of the symbol being a global function
975 that is stored on the misc function vector. Eventually, all
976 global symbols might be resolved in this way. */
977
978 if (namespace == VAR_NAMESPACE)
979 {
980 int ind = lookup_misc_func (name);
981
982 /* Look for a mangled C++ name for NAME. */
983 if (ind == -1)
984 {
985 int name_len = strlen (name);
986
987 for (ind = misc_function_count; --ind >= 0; )
988 /* Assume orginal name is prefix of mangled name. */
989 if (!strncmp (misc_function_vector[ind].name, name, name_len))
990 {
991 char *demangled =
992 cplus_demangle(misc_function_vector[ind].name, -1);
993 if (demangled != NULL)
994 {
995 int cond = strcmp (demangled, name);
996 free (demangled);
997 if (!cond)
998 break;
999 }
1000 }
1001 /* Loop terminates on no match with ind == -1. */
1002 }
1003
1004 if (ind != -1)
1005 {
1006 s = find_pc_symtab (misc_function_vector[ind].address);
1007 if (s)
1008 {
1009 bv = BLOCKVECTOR (s);
3ba6a043 1010 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
bd5635a1
RP
1011 sym = lookup_block_symbol (block, misc_function_vector[ind].name,
1012 namespace);
1013 /* sym == 0 if symbol was found in the misc_function_vector
1014 but not in the symtab.
1015 Return 0 to use the misc_function definition of "foo_".
1016
1017 This happens for Fortran "foo_" symbols,
1018 which are "foo" in the symtab.
1019
1020 This can also happen if "asm" is used to make a
1021 regular symbol but not a debugging symbol, e.g.
1022 asm(".globl _main");
1023 asm("_main:");
1024 */
1025
1026 if (symtab != NULL)
1027 *symtab = s;
1028 return sym;
1029 }
1030 }
1031 }
1032
1033 for (ps = partial_symtab_list; ps; ps = ps->next)
1034 if (!ps->readin && lookup_partial_symbol (ps, name, 1, namespace))
1035 {
1036 s = PSYMTAB_TO_SYMTAB(ps);
1037 bv = BLOCKVECTOR (s);
3ba6a043 1038 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
bd5635a1
RP
1039 sym = lookup_block_symbol (block, name, namespace);
1040 if (!sym)
1041 fatal ("Internal: global symbol found in psymtab but not in symtab");
1042 if (symtab != NULL)
1043 *symtab = s;
1044 return sym;
1045 }
1046
1047 /* Now search all per-file blocks.
1048 Not strictly correct, but more useful than an error.
1049 Do the symtabs first, then check the psymtabs */
1050
1051 for (s = symtab_list; s; s = s->next)
1052 {
1053 bv = BLOCKVECTOR (s);
3ba6a043 1054 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
bd5635a1
RP
1055 sym = lookup_block_symbol (block, name, namespace);
1056 if (sym)
1057 {
1058 block_found = block;
1059 if (symtab != NULL)
1060 *symtab = s;
1061 return sym;
1062 }
1063 }
1064
1065 for (ps = partial_symtab_list; ps; ps = ps->next)
1066 if (!ps->readin && lookup_partial_symbol (ps, name, 0, namespace))
1067 {
1068 s = PSYMTAB_TO_SYMTAB(ps);
1069 bv = BLOCKVECTOR (s);
3ba6a043 1070 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
bd5635a1
RP
1071 sym = lookup_block_symbol (block, name, namespace);
1072 if (!sym)
1073 fatal ("Internal: static symbol found in psymtab but not in symtab");
1074 if (symtab != NULL)
1075 *symtab = s;
1076 return sym;
1077 }
1078
b039ac3a
JK
1079 /* Now search all per-file blocks for static mangled symbols.
1080 Do the symtabs first, then check the psymtabs. */
1081
1082 if (namespace == VAR_NAMESPACE)
1083 {
1084 for (s = symtab_list; s; s = s->next)
1085 {
1086 bv = BLOCKVECTOR (s);
1087 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1088 sym = lookup_demangled_block_symbol (block, name);
1089 if (sym)
1090 {
1091 block_found = block;
1092 if (symtab != NULL)
1093 *symtab = s;
1094 return sym;
1095 }
1096 }
1097
1098 for (ps = partial_symtab_list; ps; ps = ps->next)
1099 if (!ps->readin && lookup_demangled_partial_symbol (ps, name))
1100 {
1101 s = PSYMTAB_TO_SYMTAB(ps);
1102 bv = BLOCKVECTOR (s);
1103 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
1104 sym = lookup_demangled_block_symbol (block, name);
1105 if (!sym)
1106 fatal ("Internal: static symbol found in psymtab but not in symtab");
1107 if (symtab != NULL)
1108 *symtab = s;
1109 return sym;
1110 }
1111 }
1112
bd5635a1
RP
1113 if (symtab != NULL)
1114 *symtab = NULL;
1115 return 0;
1116}
1117
b039ac3a
JK
1118/* Look for a static demangled symbol in block BLOCK. */
1119
1120static struct symbol *
1121lookup_demangled_block_symbol (block, name)
1122 register struct block *block;
1123 char *name;
1124{
1125 register int bot, top, inc;
1126 register struct symbol *sym;
1127
1128 bot = 0;
1129 top = BLOCK_NSYMS (block);
1130 inc = name[0];
1131
1132 while (bot < top)
1133 {
1134 sym = BLOCK_SYM (block, bot);
1135 if (SYMBOL_NAME (sym)[0] == inc
1136 && SYMBOL_NAMESPACE (sym) == VAR_NAMESPACE)
1137 {
1138 char *demangled = cplus_demangle(SYMBOL_NAME (sym), -1);
1139 if (demangled != NULL)
1140 {
1141 int cond = strcmp (demangled, name);
1142 free (demangled);
1143 if (!cond)
1144 return sym;
1145 }
1146 }
1147 bot++;
1148 }
1149
1150 return 0;
1151}
1152
1153/* Look, in partial_symtab PST, for static mangled symbol NAME. */
1154
1155static struct partial_symbol *
1156lookup_demangled_partial_symbol (pst, name)
1157 struct partial_symtab *pst;
1158 char *name;
1159{
1160 struct partial_symbol *start, *psym;
1161 int length = pst->n_static_syms;
1162 register int inc = name[0];
1163
1164 if (!length)
1165 return (struct partial_symbol *) 0;
1166
1167 start = static_psymbols.list + pst->statics_offset;
1168 for (psym = start; psym < start + length; psym++)
1169 {
1170 if (SYMBOL_NAME (psym)[0] == inc
1171 && SYMBOL_NAMESPACE (psym) == VAR_NAMESPACE)
1172 {
1173 char *demangled = cplus_demangle(SYMBOL_NAME (psym), -1);
1174 if (demangled != NULL)
1175 {
1176 int cond = strcmp (demangled, name);
1177 free (demangled);
1178 if (!cond)
1179 return psym;
1180 }
1181 }
1182 }
1183
1184 return (struct partial_symbol *) 0;
1185}
1186
bd5635a1
RP
1187/* Look, in partial_symtab PST, for symbol NAME. Check the global
1188 symbols if GLOBAL, the static symbols if not */
1189
1190static struct partial_symbol *
1191lookup_partial_symbol (pst, name, global, namespace)
1192 struct partial_symtab *pst;
1193 char *name;
1194 int global;
1195 enum namespace namespace;
1196{
1197 struct partial_symbol *start, *psym;
1198 int length = (global ? pst->n_global_syms : pst->n_static_syms);
1199
1200 if (!length)
1201 return (struct partial_symbol *) 0;
1202
1203 start = (global ?
1204 global_psymbols.list + pst->globals_offset :
1205 static_psymbols.list + pst->statics_offset );
1206
1207 if (global) /* This means we can use a binary */
1208 /* search. */
1209 {
1210 struct partial_symbol *top, *bottom, *center;
1211
1212 /* Binary search. This search is guaranteed to end with center
1213 pointing at the earliest partial symbol with the correct
1214 name. At that point *all* partial symbols with that name
1215 will be checked against the correct namespace. */
1216 bottom = start;
1217 top = start + length - 1;
1218 while (top > bottom)
1219 {
1220 center = bottom + (top - bottom) / 2;
1221
1222 assert (center < top);
1223
1224 if (strcmp (SYMBOL_NAME (center), name) >= 0)
1225 top = center;
1226 else
1227 bottom = center + 1;
1228 }
1229 assert (top == bottom);
1230
1231 while (!strcmp (SYMBOL_NAME (top), name))
1232 {
1233 if (SYMBOL_NAMESPACE (top) == namespace)
1234 return top;
1235 top ++;
1236 }
1237 }
1238 else
1239 {
1240 /* Can't use a binary search */
1241 for (psym = start; psym < start + length; psym++)
1242 if (namespace == SYMBOL_NAMESPACE (psym)
1243 && !strcmp (name, SYMBOL_NAME (psym)))
1244 return psym;
1245 }
1246
1247 return (struct partial_symbol *) 0;
1248}
1249
1250/* Look for a symbol in block BLOCK. */
1251
1252struct symbol *
1253lookup_block_symbol (block, name, namespace)
1254 register struct block *block;
1255 char *name;
1256 enum namespace namespace;
1257{
1258 register int bot, top, inc;
1259 register struct symbol *sym, *parameter_sym;
1260
1261 top = BLOCK_NSYMS (block);
1262 bot = 0;
1263
1264 /* If the blocks's symbols were sorted, start with a binary search. */
1265
1266 if (BLOCK_SHOULD_SORT (block))
1267 {
1268 /* First, advance BOT to not far before
1269 the first symbol whose name is NAME. */
1270
1271 while (1)
1272 {
1273 inc = (top - bot + 1);
1274 /* No need to keep binary searching for the last few bits worth. */
1275 if (inc < 4)
1276 break;
1277 inc = (inc >> 1) + bot;
1278 sym = BLOCK_SYM (block, inc);
1279 if (SYMBOL_NAME (sym)[0] < name[0])
1280 bot = inc;
1281 else if (SYMBOL_NAME (sym)[0] > name[0])
1282 top = inc;
1283 else if (strcmp (SYMBOL_NAME (sym), name) < 0)
1284 bot = inc;
1285 else
1286 top = inc;
1287 }
1288
1289 /* Now scan forward until we run out of symbols,
1290 find one whose name is greater than NAME,
1291 or find one we want.
1292 If there is more than one symbol with the right name and namespace,
1293 we return the first one. dbxread.c is careful to make sure
1294 that if one is a register then it comes first. */
1295
1296 top = BLOCK_NSYMS (block);
1297 while (bot < top)
1298 {
1299 sym = BLOCK_SYM (block, bot);
1300 inc = SYMBOL_NAME (sym)[0] - name[0];
1301 if (inc == 0)
1302 inc = strcmp (SYMBOL_NAME (sym), name);
1303 if (inc == 0 && SYMBOL_NAMESPACE (sym) == namespace)
1304 return sym;
1305 if (inc > 0)
1306 return 0;
1307 bot++;
1308 }
1309 return 0;
1310 }
1311
1312 /* Here if block isn't sorted.
1313 This loop is equivalent to the loop above,
1314 but hacked greatly for speed.
1315
1316 Note that parameter symbols do not always show up last in the
1317 list; this loop makes sure to take anything else other than
1318 parameter symbols first; it only uses parameter symbols as a
1319 last resort. Note that this only takes up extra computation
1320 time on a match. */
1321
1322 parameter_sym = (struct symbol *) 0;
1323 top = BLOCK_NSYMS (block);
1324 inc = name[0];
1325 while (bot < top)
1326 {
1327 sym = BLOCK_SYM (block, bot);
1328 if (SYMBOL_NAME (sym)[0] == inc
1329 && !strcmp (SYMBOL_NAME (sym), name)
1330 && SYMBOL_NAMESPACE (sym) == namespace)
1331 {
1332 if (SYMBOL_CLASS (sym) == LOC_ARG
1333 || SYMBOL_CLASS (sym) == LOC_LOCAL_ARG
1334 || SYMBOL_CLASS (sym) == LOC_REF_ARG
1335 || SYMBOL_CLASS (sym) == LOC_REGPARM)
1336 parameter_sym = sym;
1337 else
1338 return sym;
1339 }
1340 bot++;
1341 }
1342 return parameter_sym; /* Will be 0 if not found. */
1343}
1344\f
1345/* Return the symbol for the function which contains a specified
1346 lexical block, described by a struct block BL. */
1347
1348struct symbol *
1349block_function (bl)
1350 struct block *bl;
1351{
1352 while (BLOCK_FUNCTION (bl) == 0 && BLOCK_SUPERBLOCK (bl) != 0)
1353 bl = BLOCK_SUPERBLOCK (bl);
1354
1355 return BLOCK_FUNCTION (bl);
1356}
1357
1358/* Subroutine of find_pc_line */
1359
1360struct symtab *
1361find_pc_symtab (pc)
1362 register CORE_ADDR pc;
1363{
1364 register struct block *b;
1365 struct blockvector *bv;
1366 register struct symtab *s;
1367 register struct partial_symtab *ps;
1368
1369 /* Search all symtabs for one whose file contains our pc */
1370
1371 for (s = symtab_list; s; s = s->next)
1372 {
1373 bv = BLOCKVECTOR (s);
3ba6a043 1374 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
bd5635a1
RP
1375 if (BLOCK_START (b) <= pc
1376 && BLOCK_END (b) > pc)
1377 break;
1378 }
1379
1380 if (!s)
1381 {
1382 ps = find_pc_psymtab (pc);
1383 if (ps && ps->readin)
1384 fatal ("Internal error: pc in read in psymtab, but not in symtab.");
1385
1386 if (ps)
1387 s = PSYMTAB_TO_SYMTAB (ps);
1388 }
1389
1390 return s;
1391}
1392
1393/* Find the source file and line number for a given PC value.
1394 Return a structure containing a symtab pointer, a line number,
1395 and a pc range for the entire source line.
1396 The value's .pc field is NOT the specified pc.
1397 NOTCURRENT nonzero means, if specified pc is on a line boundary,
1398 use the line that ends there. Otherwise, in that case, the line
1399 that begins there is used. */
1400
1401struct symtab_and_line
1402find_pc_line (pc, notcurrent)
1403 CORE_ADDR pc;
1404 int notcurrent;
1405{
1406 struct symtab *s;
1407 register struct linetable *l;
1408 register int len;
1409 register int i;
1410 register struct linetable_entry *item;
1411 struct symtab_and_line val;
1412 struct blockvector *bv;
1413
1414 /* Info on best line seen so far, and where it starts, and its file. */
1415
1416 int best_line = 0;
1417 CORE_ADDR best_pc = 0;
1418 CORE_ADDR best_end = 0;
1419 struct symtab *best_symtab = 0;
1420
1421 /* Store here the first line number
1422 of a file which contains the line at the smallest pc after PC.
1423 If we don't find a line whose range contains PC,
1424 we will use a line one less than this,
1425 with a range from the start of that file to the first line's pc. */
1426 int alt_line = 0;
1427 CORE_ADDR alt_pc = 0;
1428 struct symtab *alt_symtab = 0;
1429
1430 /* Info on best line seen in this file. */
1431
1432 int prev_line;
1433 CORE_ADDR prev_pc;
1434
1435 /* Info on first line of this file. */
1436
1437 int first_line;
1438 CORE_ADDR first_pc;
1439
1440 /* If this pc is not from the current frame,
1441 it is the address of the end of a call instruction.
1442 Quite likely that is the start of the following statement.
1443 But what we want is the statement containing the instruction.
1444 Fudge the pc to make sure we get that. */
1445
1446 if (notcurrent) pc -= 1;
1447
1448 s = find_pc_symtab (pc);
1449 if (s == 0)
1450 {
1451 val.symtab = 0;
1452 val.line = 0;
1453 val.pc = pc;
1454 val.end = 0;
1455 return val;
1456 }
1457
1458 bv = BLOCKVECTOR (s);
1459
1460 /* Look at all the symtabs that share this blockvector.
1461 They all have the same apriori range, that we found was right;
1462 but they have different line tables. */
1463
1464 for (; s && BLOCKVECTOR (s) == bv; s = s->next)
1465 {
1466 /* Find the best line in this symtab. */
1467 l = LINETABLE (s);
1468 len = l->nitems;
1469 prev_line = -1;
1470 first_line = -1;
1471 for (i = 0; i < len; i++)
1472 {
1473 item = &(l->item[i]);
1474
1475 if (first_line < 0)
1476 {
1477 first_line = item->line;
1478 first_pc = item->pc;
1479 }
1480 /* Return the last line that did not start after PC. */
1481 if (pc >= item->pc)
1482 {
1483 prev_line = item->line;
1484 prev_pc = item->pc;
1485 }
1486 else
1487 break;
1488 }
1489
1490 /* Is this file's best line closer than the best in the other files?
1491 If so, record this file, and its best line, as best so far. */
1492 if (prev_line >= 0 && prev_pc > best_pc)
1493 {
1494 best_pc = prev_pc;
1495 best_line = prev_line;
1496 best_symtab = s;
1497 if (i < len)
1498 best_end = item->pc;
1499 else
1500 best_end = 0;
1501 }
1502 /* Is this file's first line closer than the first lines of other files?
1503 If so, record this file, and its first line, as best alternate. */
1504 if (first_line >= 0 && first_pc > pc
1505 && (alt_pc == 0 || first_pc < alt_pc))
1506 {
1507 alt_pc = first_pc;
1508 alt_line = first_line;
1509 alt_symtab = s;
1510 }
1511 }
1512 if (best_symtab == 0)
1513 {
1514 val.symtab = alt_symtab;
1515 val.line = alt_line - 1;
3ba6a043 1516 val.pc = BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
bd5635a1
RP
1517 val.end = alt_pc;
1518 }
1519 else
1520 {
1521 val.symtab = best_symtab;
1522 val.line = best_line;
1523 val.pc = best_pc;
1524 val.end = (best_end ? best_end
1525 : (alt_pc ? alt_pc
3ba6a043 1526 : BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))));
bd5635a1
RP
1527 }
1528 return val;
1529}
1530\f
1531/* Find the PC value for a given source file and line number.
1532 Returns zero for invalid line number.
1533 The source file is specified with a struct symtab. */
1534
1535CORE_ADDR
1536find_line_pc (symtab, line)
1537 struct symtab *symtab;
1538 int line;
1539{
1540 register struct linetable *l;
1541 register int ind;
1542 int dummy;
1543
1544 if (symtab == 0)
1545 return 0;
1546 l = LINETABLE (symtab);
1547 ind = find_line_common(l, line, &dummy);
b203fc18 1548 return (ind >= 0) ? l->item[ind].pc : 0;
bd5635a1
RP
1549}
1550
1551/* Find the range of pc values in a line.
1552 Store the starting pc of the line into *STARTPTR
1553 and the ending pc (start of next line) into *ENDPTR.
1554 Returns 1 to indicate success.
1555 Returns 0 if could not find the specified line. */
1556
1557int
1558find_line_pc_range (symtab, thisline, startptr, endptr)
1559 struct symtab *symtab;
1560 int thisline;
1561 CORE_ADDR *startptr, *endptr;
1562{
1563 register struct linetable *l;
1564 register int ind;
1565 int exact_match; /* did we get an exact linenumber match */
1566
1567 if (symtab == 0)
1568 return 0;
1569
1570 l = LINETABLE (symtab);
1571 ind = find_line_common (l, thisline, &exact_match);
b203fc18 1572 if (ind >= 0)
bd5635a1
RP
1573 {
1574 *startptr = l->item[ind].pc;
1575 /* If we have not seen an entry for the specified line,
1576 assume that means the specified line has zero bytes. */
1577 if (!exact_match || ind == l->nitems-1)
1578 *endptr = *startptr;
1579 else
1580 /* Perhaps the following entry is for the following line.
1581 It's worth a try. */
1582 if (ind+1 < l->nitems
1583 && l->item[ind+1].line == thisline + 1)
1584 *endptr = l->item[ind+1].pc;
1585 else
1586 *endptr = find_line_pc (symtab, thisline+1);
1587 return 1;
1588 }
1589
1590 return 0;
1591}
1592
1593/* Given a line table and a line number, return the index into the line
1594 table for the pc of the nearest line whose number is >= the specified one.
b203fc18 1595 Return -1 if none is found. The value is >= 0 if it is an index.
bd5635a1
RP
1596
1597 Set *EXACT_MATCH nonzero if the value returned is an exact match. */
1598
1599static int
1600find_line_common (l, lineno, exact_match)
1601 register struct linetable *l;
1602 register int lineno;
1603 int *exact_match;
1604{
1605 register int i;
1606 register int len;
1607
1608 /* BEST is the smallest linenumber > LINENO so far seen,
1609 or 0 if none has been seen so far.
1610 BEST_INDEX identifies the item for it. */
1611
b203fc18 1612 int best_index = -1;
bd5635a1
RP
1613 int best = 0;
1614
1615 if (lineno <= 0)
b203fc18 1616 return -1;
bd5635a1
RP
1617
1618 len = l->nitems;
1619 for (i = 0; i < len; i++)
1620 {
1621 register struct linetable_entry *item = &(l->item[i]);
1622
1623 if (item->line == lineno)
1624 {
1625 *exact_match = 1;
1626 return i;
1627 }
1628
1629 if (item->line > lineno && (best == 0 || item->line < best))
1630 {
1631 best = item->line;
1632 best_index = i;
1633 }
1634 }
1635
1636 /* If we got here, we didn't get an exact match. */
1637
1638 *exact_match = 0;
1639 return best_index;
1640}
1641
1642int
1643find_pc_line_pc_range (pc, startptr, endptr)
1644 CORE_ADDR pc;
1645 CORE_ADDR *startptr, *endptr;
1646{
1647 struct symtab_and_line sal;
1648 sal = find_pc_line (pc, 0);
1649 *startptr = sal.pc;
1650 *endptr = sal.end;
1651 return sal.symtab != 0;
1652}
1653\f
d96b54ea
JK
1654/* If P is of the form "operator[ \t]+..." where `...' is
1655 some legitimate operator text, return a pointer to the
1656 beginning of the substring of the operator text.
1657 Otherwise, return "". */
1658static char *
1659operator_chars (p, end)
1660 char *p;
1661 char **end;
1662{
1663 *end = "";
1664 if (strncmp (p, "operator", 8))
1665 return *end;
1666 p += 8;
1667
1668 /* Don't get faked out by `operator' being part of a longer
1669 identifier. */
1670 if ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')
1671 || *p == '_' || *p == '$' || *p == '\0')
1672 return *end;
1673
1674 /* Allow some whitespace between `operator' and the operator symbol. */
1675 while (*p == ' ' || *p == '\t')
1676 p++;
1677
1678 switch (*p)
1679 {
1680 case '!':
1681 case '=':
1682 case '*':
1683 case '/':
1684 case '%':
1685 case '^':
1686 if (p[1] == '=')
1687 *end = p+2;
1688 else
1689 *end = p+1;
1690 return p;
1691 case '<':
1692 case '>':
1693 case '+':
1694 case '-':
1695 case '&':
1696 case '|':
1697 if (p[1] == '=' || p[1] == p[0])
1698 *end = p+2;
1699 else
1700 *end = p+1;
1701 return p;
1702 case '~':
1703 case ',':
1704 *end = p+1;
1705 return p;
1706 case '(':
1707 if (p[1] != ')')
1708 error ("`operator ()' must be specified without whitespace in `()'");
1709 *end = p+2;
1710 return p;
1711 case '?':
1712 if (p[1] != ':')
1713 error ("`operator ?:' must be specified without whitespace in `?:'");
1714 *end = p+2;
1715 return p;
1716 case '[':
1717 if (p[1] != ']')
1718 error ("`operator []' must be specified without whitespace in `[]'");
1719 *end = p+2;
1720 return p;
1721 default:
1722 error ("`operator %s' not supported", p);
1723 break;
1724 }
1725 *end = "";
1726 return *end;
1727}
1728
bd5635a1
RP
1729/* Recursive helper function for decode_line_1.
1730 * Look for methods named NAME in type T.
1731 * Return number of matches.
1732 * Put matches in PHYSNAMES and SYM_ARR (which better be big enough!).
1733 * These allocations seem to define "big enough":
1734 * sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1735 * physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1736 */
1737
1738int
1739find_methods(t, name, physnames, sym_arr)
1740 struct type *t;
1741 char *name;
1742 char **physnames;
1743 struct symbol **sym_arr;
1744{
1745 int i1 = 0;
1746 int ibase;
1747 struct symbol *sym_class;
1748 char *class_name = type_name_no_tag (t);
1749 /* Ignore this class if it doesn't have a name.
1750 This prevents core dumps, but is just a workaround
1751 because we might not find the function in
1752 certain cases, such as
1753 struct D {virtual int f();}
1754 struct C : D {virtual int g();}
1755 (in this case g++ 1.35.1- does not put out a name
1756 for D as such, it defines type 19 (for example) in
1757 the same stab as C, and then does a
1758 .stabs "D:T19" and a .stabs "D:t19".
1759 Thus
1760 "break C::f" should not be looking for field f in
1761 the class named D,
1762 but just for the field f in the baseclasses of C
1763 (no matter what their names).
1764
1765 However, I don't know how to replace the code below
1766 that depends on knowing the name of D. */
1767 if (class_name
1768 && (sym_class = lookup_symbol (class_name,
1769 (struct block *)NULL,
1770 STRUCT_NAMESPACE,
1771 (int *)NULL,
1772 (struct symtab **)NULL)))
1773 {
1774 int method_counter;
1775 t = SYMBOL_TYPE (sym_class);
1776 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1777 method_counter >= 0;
1778 --method_counter)
1779 {
1780 int field_counter;
1781 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, method_counter);
1782
1783 char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1784 if (!strcmp (name, method_name))
1785 /* Find all the fields with that name. */
1786 for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
1787 field_counter >= 0;
1788 --field_counter)
1789 {
1790 char *phys_name;
1791 if (TYPE_FLAGS (TYPE_FN_FIELD_TYPE (f, field_counter)) & TYPE_FLAG_STUB)
1792 check_stub_method (t, method_counter, field_counter);
1793 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1794 physnames[i1] = (char*) alloca (strlen (phys_name) + 1);
1795 strcpy (physnames[i1], phys_name);
1796 sym_arr[i1] = lookup_symbol (phys_name,
1797 SYMBOL_BLOCK_VALUE (sym_class),
1798 VAR_NAMESPACE,
1799 (int *) NULL,
1800 (struct symtab **) NULL);
1801 if (sym_arr[i1]) i1++;
1802 }
1803 }
1804 }
1805 /* Only search baseclasses if there is no match yet,
1806 * since names in derived classes override those in baseclasses.
1807 */
1808 if (i1)
1809 return i1;
1810 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1811 i1 += find_methods(TYPE_BASECLASS(t, ibase), name,
1812 physnames + i1, sym_arr + i1);
1813 return i1;
1814}
1815
1816/* Parse a string that specifies a line number.
1817 Pass the address of a char * variable; that variable will be
1818 advanced over the characters actually parsed.
1819
1820 The string can be:
1821
1822 LINENUM -- that line number in current file. PC returned is 0.
1823 FILE:LINENUM -- that line in that file. PC returned is 0.
1824 FUNCTION -- line number of openbrace of that function.
1825 PC returned is the start of the function.
1826 VARIABLE -- line number of definition of that variable.
1827 PC returned is 0.
1828 FILE:FUNCTION -- likewise, but prefer functions in that file.
1829 *EXPR -- line in which address EXPR appears.
1830
1831 FUNCTION may be an undebuggable function found in misc_function_vector.
1832
1833 If the argument FUNFIRSTLINE is nonzero, we want the first line
1834 of real code inside a function when a function is specified.
1835
1836 DEFAULT_SYMTAB specifies the file to use if none is specified.
1837 It defaults to current_source_symtab.
1838 DEFAULT_LINE specifies the line number to use for relative
1839 line numbers (that start with signs). Defaults to current_source_line.
1840
1841 Note that it is possible to return zero for the symtab
1842 if no file is validly specified. Callers must check that.
1843 Also, the line number returned may be invalid. */
1844
1845struct symtabs_and_lines
1846decode_line_1 (argptr, funfirstline, default_symtab, default_line)
1847 char **argptr;
1848 int funfirstline;
1849 struct symtab *default_symtab;
1850 int default_line;
1851{
1852 struct symtabs_and_lines decode_line_2 ();
1853 struct symtabs_and_lines values;
1854 struct symtab_and_line val;
1855 register char *p, *p1;
d96b54ea 1856 char *q, *q1;
bd5635a1
RP
1857 register struct symtab *s;
1858
1859 register struct symbol *sym;
1860 /* The symtab that SYM was found in. */
1861 struct symtab *sym_symtab;
1862
1863 register CORE_ADDR pc;
1864 register int i;
1865 char *copy;
1866 struct symbol *sym_class;
1867 int i1;
1868 struct symbol **sym_arr;
1869 struct type *t;
1870 char **physnames;
1871
1872 /* Defaults have defaults. */
1873
1874 if (default_symtab == 0)
1875 {
1876 default_symtab = current_source_symtab;
1877 default_line = current_source_line;
1878 }
1879
1880 /* See if arg is *PC */
1881
1882 if (**argptr == '*')
1883 {
1884 (*argptr)++;
1885 pc = parse_and_eval_address_1 (argptr);
1886 values.sals = (struct symtab_and_line *)
1887 xmalloc (sizeof (struct symtab_and_line));
1888 values.nelts = 1;
1889 values.sals[0] = find_pc_line (pc, 0);
1890 values.sals[0].pc = pc;
1891 return values;
1892 }
1893
1894 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
1895
1896 s = 0;
1897
1898 for (p = *argptr; *p; p++)
1899 {
1900 if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
1901 break;
1902 }
1903 while (p[0] == ' ' || p[0] == '\t') p++;
1904
d96b54ea 1905 q = operator_chars (*argptr, &q1);
bd5635a1
RP
1906 if (p[0] == ':')
1907 {
1908
1909 /* C++ */
1910 if (p[1] ==':')
1911 {
1912 /* Extract the class name. */
1913 p1 = p;
1914 while (p != *argptr && p[-1] == ' ') --p;
1915 copy = (char *) alloca (p - *argptr + 1);
1916 bcopy (*argptr, copy, p - *argptr);
1917 copy[p - *argptr] = 0;
1918
1919 /* Discard the class name from the arg. */
1920 p = p1 + 2;
1921 while (*p == ' ' || *p == '\t') p++;
1922 *argptr = p;
1923
1924 sym_class = lookup_symbol (copy, 0, STRUCT_NAMESPACE, 0,
1925 (struct symtab **)NULL);
1926
1927 if (sym_class &&
1928 (TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_STRUCT
1929 || TYPE_CODE (SYMBOL_TYPE (sym_class)) == TYPE_CODE_UNION))
1930 {
1931 /* Arg token is not digits => try it as a function name
1932 Find the next token (everything up to end or next whitespace). */
1933 p = *argptr;
1934 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
d96b54ea 1935 q = operator_chars (*argptr, &q1);
aec4cb91 1936
d96b54ea
JK
1937 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
1938 if (q1 - q)
1939 {
1940 copy[0] = 'o';
1941 copy[1] = 'p';
1942 copy[2] = CPLUS_MARKER;
1943 bcopy (q, copy + 3, q1 - q);
1944 copy[3 + (q1 - q)] = '\0';
1945 p = q1;
1946 }
1947 else
1948 {
1949 bcopy (*argptr, copy, p - *argptr);
1950 copy[p - *argptr] = '\0';
1951 }
bd5635a1
RP
1952
1953 /* no line number may be specified */
1954 while (*p == ' ' || *p == '\t') p++;
1955 *argptr = p;
1956
1957 sym = 0;
1958 i1 = 0; /* counter for the symbol array */
1959 t = SYMBOL_TYPE (sym_class);
1960 sym_arr = (struct symbol **) alloca(TYPE_NFN_FIELDS_TOTAL (t) * sizeof(struct symbol*));
1961 physnames = (char **) alloca (TYPE_NFN_FIELDS_TOTAL (t) * sizeof(char*));
1962
1963 if (destructor_name_p (copy, t))
1964 {
1965 /* destructors are a special case. */
1966 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, 0);
1967 int len = TYPE_FN_FIELDLIST_LENGTH (t, 0) - 1;
1968 char *phys_name = TYPE_FN_FIELD_PHYSNAME (f, len);
1969 physnames[i1] = (char *)alloca (strlen (phys_name) + 1);
1970 strcpy (physnames[i1], phys_name);
1971 sym_arr[i1] =
1972 lookup_symbol (phys_name, SYMBOL_BLOCK_VALUE (sym_class),
1973 VAR_NAMESPACE, 0, (struct symtab **)NULL);
1974 if (sym_arr[i1]) i1++;
1975 }
1976 else
1977 i1 = find_methods (t, copy, physnames, sym_arr);
1978 if (i1 == 1)
1979 {
1980 /* There is exactly one field with that name. */
1981 sym = sym_arr[0];
1982
1983 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1984 {
1985 /* Arg is the name of a function */
1986 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
1987 if (funfirstline)
1988 SKIP_PROLOGUE (pc);
1989 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
1990 values.nelts = 1;
1991 values.sals[0] = find_pc_line (pc, 0);
1992 values.sals[0].pc = (values.sals[0].end && values.sals[0].pc != pc) ? values.sals[0].end : pc;
1993 }
1994 else
1995 {
1996 values.nelts = 0;
1997 }
1998 return values;
1999 }
2000 if (i1 > 0)
2001 {
2002 /* There is more than one field with that name
2003 (overloaded). Ask the user which one to use. */
2004 return decode_line_2 (sym_arr, i1, funfirstline);
2005 }
2006 else
d96b54ea
JK
2007 {
2008 char *tmp;
2009
2010 if (OPNAME_PREFIX_P (copy))
2011 {
2012 tmp = (char *)alloca (strlen (copy+3) + 9);
2013 strcpy (tmp, "operator ");
2014 strcat (tmp, copy+3);
2015 }
2016 else
2017 tmp = copy;
2018 error ("that class does not have any method named %s", tmp);
2019 }
bd5635a1
RP
2020 }
2021 else
2022 /* The quotes are important if copy is empty. */
2023 error("No class, struct, or union named \"%s\"", copy );
2024 }
2025 /* end of C++ */
2026
2027
2028 /* Extract the file name. */
2029 p1 = p;
2030 while (p != *argptr && p[-1] == ' ') --p;
d96b54ea
JK
2031 copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
2032 if (q1 - q)
2033 {
2034 copy[0] = 'o';
2035 copy[1] = 'p';
2036 copy[2] = CPLUS_MARKER;
2037 bcopy (q, copy + 3, q1-q);
2038 copy[3 + (q1-q)] = 0;
2039 p = q1;
2040 }
2041 else
2042 {
2043 bcopy (*argptr, copy, p - *argptr);
2044 copy[p - *argptr] = 0;
2045 }
bd5635a1
RP
2046
2047 /* Find that file's data. */
2048 s = lookup_symtab (copy);
2049 if (s == 0)
2050 {
2051 if (symtab_list == 0 && partial_symtab_list == 0)
2052 error (no_symtab_msg);
2053 error ("No source file named %s.", copy);
2054 }
2055
2056 /* Discard the file name from the arg. */
2057 p = p1 + 1;
2058 while (*p == ' ' || *p == '\t') p++;
2059 *argptr = p;
2060 }
2061
2062 /* S is specified file's symtab, or 0 if no file specified.
2063 arg no longer contains the file name. */
2064
2065 /* Check whether arg is all digits (and sign) */
2066
2067 p = *argptr;
2068 if (*p == '-' || *p == '+') p++;
2069 while (*p >= '0' && *p <= '9')
2070 p++;
2071
2072 if (p != *argptr && (*p == 0 || *p == ' ' || *p == '\t' || *p == ','))
2073 {
2074 /* We found a token consisting of all digits -- at least one digit. */
2075 enum sign {none, plus, minus} sign = none;
2076
2077 /* This is where we need to make sure that we have good defaults.
2078 We must guarantee that this section of code is never executed
2079 when we are called with just a function name, since
2080 select_source_symtab calls us with such an argument */
2081
2082 if (s == 0 && default_symtab == 0)
2083 {
2084 if (symtab_list == 0 && partial_symtab_list == 0)
2085 error (no_symtab_msg);
2086 select_source_symtab (0);
2087 default_symtab = current_source_symtab;
2088 default_line = current_source_line;
2089 }
2090
2091 if (**argptr == '+')
2092 sign = plus, (*argptr)++;
2093 else if (**argptr == '-')
2094 sign = minus, (*argptr)++;
2095 val.line = atoi (*argptr);
2096 switch (sign)
2097 {
2098 case plus:
2099 if (p == *argptr)
2100 val.line = 5;
2101 if (s == 0)
2102 val.line = default_line + val.line;
2103 break;
2104 case minus:
2105 if (p == *argptr)
2106 val.line = 15;
2107 if (s == 0)
2108 val.line = default_line - val.line;
2109 else
2110 val.line = 1;
2111 break;
2112 case none:
2113 break; /* No need to adjust val.line. */
2114 }
2115
2116 while (*p == ' ' || *p == '\t') p++;
2117 *argptr = p;
2118 if (s == 0)
2119 s = default_symtab;
2120 val.symtab = s;
2121 val.pc = 0;
2122 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
2123 values.sals[0] = val;
2124 values.nelts = 1;
2125 return values;
2126 }
2127
2128 /* Arg token is not digits => try it as a variable name
2129 Find the next token (everything up to end or next whitespace). */
2130 p = *argptr;
2131 while (*p && *p != ' ' && *p != '\t' && *p != ',') p++;
2132 copy = (char *) alloca (p - *argptr + 1);
2133 bcopy (*argptr, copy, p - *argptr);
2134 copy[p - *argptr] = 0;
2135 while (*p == ' ' || *p == '\t') p++;
2136 *argptr = p;
2137
2138 /* Look up that token as a variable.
2139 If file specified, use that file's per-file block to start with. */
2140
2141 sym = lookup_symbol (copy,
3ba6a043 2142 (s ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
bd5635a1
RP
2143 : get_selected_block ()),
2144 VAR_NAMESPACE, 0, &sym_symtab);
2145
2146 if (sym != NULL)
2147 {
2148 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
2149 {
2150 /* Arg is the name of a function */
2151 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) + FUNCTION_START_OFFSET;
2152 if (funfirstline)
2153 SKIP_PROLOGUE (pc);
2154 val = find_pc_line (pc, 0);
2155#ifdef PROLOGUE_FIRSTLINE_OVERLAP
2156 /* Convex: no need to suppress code on first line, if any */
2157 val.pc = pc;
2158#else
2159 val.pc = (val.end && val.pc != pc) ? val.end : pc;
2160#endif
2161 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
2162 values.sals[0] = val;
2163 values.nelts = 1;
2164
2165 /* I think this is always the same as the line that
2166 we calculate above, but the general principle is
2167 "trust the symbols more than stuff like
2168 SKIP_PROLOGUE". */
2169 if (SYMBOL_LINE (sym) != 0)
2170 values.sals[0].line = SYMBOL_LINE (sym);
2171
2172 return values;
2173 }
2174 else if (SYMBOL_LINE (sym) != 0)
2175 {
2176 /* We know its line number. */
2177 values.sals = (struct symtab_and_line *)
2178 xmalloc (sizeof (struct symtab_and_line));
2179 values.nelts = 1;
2180 bzero (&values.sals[0], sizeof (values.sals[0]));
2181 values.sals[0].symtab = sym_symtab;
2182 values.sals[0].line = SYMBOL_LINE (sym);
2183 return values;
2184 }
2185 else
2186 /* This can happen if it is compiled with a compiler which doesn't
2187 put out line numbers for variables. */
2188 error ("Line number not known for symbol \"%s\"", copy);
2189 }
2190
2191 if (symtab_list == 0 && partial_symtab_list == 0)
2192 error (no_symtab_msg);
2193
2194 if ((i = lookup_misc_func (copy)) >= 0)
2195 {
2196 val.symtab = 0;
2197 val.line = 0;
2198 val.pc = misc_function_vector[i].address + FUNCTION_START_OFFSET;
2199 if (funfirstline)
2200 SKIP_PROLOGUE (val.pc);
2201 values.sals = (struct symtab_and_line *)xmalloc (sizeof (struct symtab_and_line));
2202 values.sals[0] = val;
2203 values.nelts = 1;
2204 return values;
2205 }
2206
2207 error ("Function %s not defined.", copy);
2208 return values; /* for lint */
2209}
2210
2211struct symtabs_and_lines
2212decode_line_spec (string, funfirstline)
2213 char *string;
2214 int funfirstline;
2215{
2216 struct symtabs_and_lines sals;
2217 if (string == 0)
2218 error ("Empty line specification.");
2219 sals = decode_line_1 (&string, funfirstline,
2220 current_source_symtab, current_source_line);
2221 if (*string)
2222 error ("Junk at end of line specification: %s", string);
2223 return sals;
2224}
2225
2226/* Given a list of NELTS symbols in sym_arr (with corresponding
2227 mangled names in physnames), return a list of lines to operate on
2228 (ask user if necessary). */
2229struct symtabs_and_lines
2230decode_line_2 (sym_arr, nelts, funfirstline)
2231 struct symbol *sym_arr[];
2232 int nelts;
2233 int funfirstline;
2234{
2235 char *getenv();
2236 struct symtabs_and_lines values, return_values;
2237 register CORE_ADDR pc;
2238 char *args, *arg1, *command_line_input ();
2239 int i;
2240 char *prompt;
2241
2242 values.sals = (struct symtab_and_line *) alloca (nelts * sizeof(struct symtab_and_line));
2243 return_values.sals = (struct symtab_and_line *) xmalloc (nelts * sizeof(struct symtab_and_line));
2244
2245 i = 0;
2246 printf("[0] cancel\n[1] all\n");
2247 while (i < nelts)
2248 {
2249 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
2250 {
2251 /* Arg is the name of a function */
2252 pc = BLOCK_START (SYMBOL_BLOCK_VALUE (sym_arr[i]))
2253 + FUNCTION_START_OFFSET;
2254 if (funfirstline)
2255 SKIP_PROLOGUE (pc);
2256 values.sals[i] = find_pc_line (pc, 0);
2257 values.sals[i].pc = (values.sals[i].end && values.sals[i].pc != pc) ?
2258 values.sals[i].end : pc;
2259 printf("[%d] file:%s; line number:%d\n",
2260 (i+2), values.sals[i].symtab->filename, values.sals[i].line);
2261 }
2262 else printf ("?HERE\n");
2263 i++;
2264 }
2265
2266 if ((prompt = getenv ("PS2")) == NULL)
2267 {
2268 prompt = ">";
2269 }
2270 printf("%s ",prompt);
2271 fflush(stdout);
2272
2273 args = command_line_input (0, 0);
2274
2275 if (args == 0)
2276 error_no_arg ("one or more choice numbers");
2277
2278 i = 0;
2279 while (*args)
2280 {
2281 int num;
2282
2283 arg1 = args;
2284 while (*arg1 >= '0' && *arg1 <= '9') arg1++;
2285 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
2286 error ("Arguments must be choice numbers.");
2287
2288 num = atoi (args);
2289
2290 if (num == 0)
2291 error ("cancelled");
2292 else if (num == 1)
2293 {
2294 bcopy (values.sals, return_values.sals, (nelts * sizeof(struct symtab_and_line)));
2295 return_values.nelts = nelts;
2296 return return_values;
2297 }
2298
2299 if (num > nelts + 2)
2300 {
2301 printf ("No choice number %d.\n", num);
2302 }
2303 else
2304 {
2305 num -= 2;
2306 if (values.sals[num].pc)
2307 {
2308 return_values.sals[i++] = values.sals[num];
2309 values.sals[num].pc = 0;
2310 }
2311 else
2312 {
2313 printf ("duplicate request for %d ignored.\n", num);
2314 }
2315 }
2316
2317 args = arg1;
2318 while (*args == ' ' || *args == '\t') args++;
2319 }
2320 return_values.nelts = i;
2321 return return_values;
2322}
2323
2324/* Return the index of misc function named NAME. */
2325
2326int
2327lookup_misc_func (name)
2328 register char *name;
2329{
2330 register int i;
2331
2332 for (i = 0; i < misc_function_count; i++)
2333 if (!strcmp (misc_function_vector[i].name, name))
2334 return i;
2335 return -1; /* not found */
2336}
2337\f
2338/* Slave routine for sources_info. Force line breaks at ,'s.
2339 NAME is the name to print and *FIRST is nonzero if this is the first
2340 name printed. Set *FIRST to zero. */
2341static void
2342output_source_filename (name, first)
2343 char *name;
2344 int *first;
2345{
2346 static int column;
2347 /* Table of files printed so far. Since a single source file can
2348 result in several partial symbol tables, we need to avoid printing
2349 it more than once. Note: if some of the psymtabs are read in and
2350 some are not, it gets printed both under "Source files for which
2351 symbols have been read" and "Source files for which symbols will
2352 be read in on demand". I consider this a reasonable way to deal
2353 with the situation. I'm not sure whether this can also happen for
2354 symtabs; it doesn't hurt to check. */
2355 static char **tab = NULL;
2356 /* Allocated size of tab in elements.
2357 Start with one 256-byte block (when using GNU malloc.c).
2358 24 is the malloc overhead when range checking is in effect. */
2359 static int tab_alloc_size = (256 - 24) / sizeof (char *);
2360 /* Current size of tab in elements. */
2361 static int tab_cur_size;
2362
2363 char **p;
2364
2365 if (*first)
2366 {
2367 if (tab == NULL)
2368 tab = (char **) xmalloc (tab_alloc_size * sizeof (*tab));
2369 tab_cur_size = 0;
2370 }
2371
2372 /* Is NAME in tab? */
2373 for (p = tab; p < tab + tab_cur_size; p++)
2374 if (strcmp (*p, name) == 0)
2375 /* Yes; don't print it again. */
2376 return;
2377 /* No; add it to tab. */
2378 if (tab_cur_size == tab_alloc_size)
2379 {
2380 tab_alloc_size *= 2;
2381 tab = (char **) xrealloc (tab, tab_alloc_size * sizeof (*tab));
2382 }
2383 tab[tab_cur_size++] = name;
2384
2385 if (*first)
2386 {
2387 column = 0;
2388 *first = 0;
2389 }
2390 else
2391 {
2392 printf_filtered (",");
2393 column++;
2394 }
2395
2396 if (column != 0 && column + strlen (name) >= 70)
2397 {
2398 printf_filtered ("\n");
2399 column = 0;
2400 }
2401 else if (column != 0)
2402 {
2403 printf_filtered (" ");
2404 column++;
2405 }
2406 fputs_filtered (name, stdout);
2407 column += strlen (name);
2408}
2409
2410static void
2411sources_info ()
2412{
2413 register struct symtab *s;
2414 register struct partial_symtab *ps;
2415 int first;
2416
2417 if (symtab_list == 0 && partial_symtab_list == 0)
2418 {
2419 printf (no_symtab_msg);
2420 return;
2421 }
2422
2423 printf_filtered ("Source files for which symbols have been read in:\n\n");
2424
2425 first = 1;
2426 for (s = symtab_list; s; s = s->next)
2427 output_source_filename (s->filename, &first);
2428 printf_filtered ("\n\n");
2429
2430 printf_filtered ("Source files for which symbols will be read in on demand:\n\n");
2431
2432 first = 1;
2433 for (ps = partial_symtab_list; ps; ps = ps->next)
2434 if (!ps->readin)
2435 output_source_filename (ps->filename, &first);
2436 printf_filtered ("\n");
2437}
2438
2439/* List all symbols (if REGEXP is 0) or all symbols matching REGEXP.
2440 If CLASS is zero, list all symbols except functions and type names.
2441 If CLASS is 1, list only functions.
2442 If CLASS is 2, list only type names.
2443
2444 BPT is non-zero if we should set a breakpoint at the functions
2445 we find. */
2446
2447static void
2448list_symbols (regexp, class, bpt)
2449 char *regexp;
2450 int class;
2451 int bpt;
2452{
2453 register struct symtab *s;
2454 register struct partial_symtab *ps;
2455 register struct blockvector *bv;
2456 struct blockvector *prev_bv = 0;
2457 register struct block *b;
2458 register int i, j;
2459 register struct symbol *sym;
2460 struct partial_symbol *psym;
2461 char *val;
2462 static char *classnames[]
2463 = {"variable", "function", "type", "method"};
2464 int found_in_file = 0;
2465
2466 if (regexp)
2467 if (0 != (val = (char *) re_comp (regexp)))
2468 error ("Invalid regexp (%s): %s", val, regexp);
2469
2470 /* Search through the partial_symtab_list *first* for all symbols
2471 matching the regexp. That way we don't have to reproduce all of
2472 the machinery below. */
2473 for (ps = partial_symtab_list; ps; ps = ps->next)
2474 {
2475 struct partial_symbol *bound, *gbound, *sbound;
2476 int keep_going = 1;
2477
2478 if (ps->readin) continue;
2479
2480 gbound = global_psymbols.list + ps->globals_offset + ps->n_global_syms;
2481 sbound = static_psymbols.list + ps->statics_offset + ps->n_static_syms;
2482 bound = gbound;
2483
2484 /* Go through all of the symbols stored in a partial
2485 symtab in one loop. */
2486 psym = global_psymbols.list + ps->globals_offset;
2487 while (keep_going)
2488 {
2489 if (psym >= bound)
2490 {
2491 if (bound == gbound && ps->n_static_syms != 0)
2492 {
2493 psym = static_psymbols.list + ps->statics_offset;
2494 bound = sbound;
2495 }
2496 else
2497 keep_going = 0;
3ba6a043 2498 continue;
bd5635a1
RP
2499 }
2500 else
2501 {
2502 QUIT;
2503
2504 /* If it would match (logic taken from loop below)
2505 load the file and go on to the next one */
2506 if ((regexp == 0 || re_exec (SYMBOL_NAME (psym)))
2507 && ((class == 0 && SYMBOL_CLASS (psym) != LOC_TYPEDEF
2508 && SYMBOL_CLASS (psym) != LOC_BLOCK)
2509 || (class == 1 && SYMBOL_CLASS (psym) == LOC_BLOCK)
2510 || (class == 2 && SYMBOL_CLASS (psym) == LOC_TYPEDEF)
2511 || (class == 3 && SYMBOL_CLASS (psym) == LOC_BLOCK)))
2512 {
2513 (void) PSYMTAB_TO_SYMTAB(ps);
2514 keep_going = 0;
2515 }
2516 }
2517 psym++;
2518 }
2519 }
2520
2521 /* Here, *if* the class is correct (function only, right now), we
2522 search through the misc function vector for symbols that
2523 match, and call find_pc_symtab on them to force their symbols to
2524 be read. The symbol will then be found during the scan of symtabs
2525 below. */
2526
2527 if (class == 1)
2528 {
2529 for (i = 0; i < misc_function_count; i++)
2530 if (regexp == 0 || re_exec (misc_function_vector[i].name))
2531 {
2532 (void) find_pc_symtab (misc_function_vector[i].address);
2533 }
2534 }
2535
2536 /* Printout here so as to get after the "Reading in symbols"
2537 messages which will be generated above. */
2538 if (!bpt)
2539 printf_filtered (regexp
2540 ? "All %ss matching regular expression \"%s\":\n"
2541 : "All defined %ss:\n",
2542 classnames[class],
2543 regexp);
2544
2545 for (s = symtab_list; s; s = s->next)
2546 {
2547 found_in_file = 0;
2548 bv = BLOCKVECTOR (s);
2549 /* Often many files share a blockvector.
2550 Scan each blockvector only once so that
2551 we don't get every symbol many times.
2552 It happens that the first symtab in the list
2553 for any given blockvector is the main file. */
2554 if (bv != prev_bv)
3ba6a043 2555 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
bd5635a1
RP
2556 {
2557 b = BLOCKVECTOR_BLOCK (bv, i);
2558 /* Skip the sort if this block is always sorted. */
2559 if (!BLOCK_SHOULD_SORT (b))
2560 sort_block_syms (b);
2561 for (j = 0; j < BLOCK_NSYMS (b); j++)
2562 {
2563 QUIT;
2564 sym = BLOCK_SYM (b, j);
2565 if ((regexp == 0 || re_exec (SYMBOL_NAME (sym)))
2566 && ((class == 0 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
2567 && SYMBOL_CLASS (sym) != LOC_BLOCK)
2568 || (class == 1 && SYMBOL_CLASS (sym) == LOC_BLOCK)
2569 || (class == 2 && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2570 || (class == 3 && SYMBOL_CLASS (sym) == LOC_BLOCK)))
2571 {
2572 if (bpt)
2573 {
2574 /* Set a breakpoint here, if it's a function */
2575 if (class == 1)
2576 break_command (SYMBOL_NAME(sym), 0);
2577 }
2578 else if (!found_in_file)
2579 {
2580 fputs_filtered ("\nFile ", stdout);
2581 fputs_filtered (s->filename, stdout);
2582 fputs_filtered (":\n", stdout);
2583 }
2584 found_in_file = 1;
2585
3ba6a043 2586 if (class != 2 && i == STATIC_BLOCK)
bd5635a1
RP
2587 printf_filtered ("static ");
2588 if (class == 2
2589 && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
2590 printf_filtered ("typedef ");
2591
2592 if (class < 3)
2593 {
2594 type_print (SYMBOL_TYPE (sym),
2595 (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2596 ? "" : SYMBOL_NAME (sym)),
2597 stdout, 0);
2598
2599 if (class == 2
2600 && SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE
2601 && (TYPE_NAME ((SYMBOL_TYPE (sym))) == 0
2602 || 0 != strcmp (TYPE_NAME ((SYMBOL_TYPE (sym))),
2603 SYMBOL_NAME (sym))))
2604 {
2605 fputs_filtered (" ", stdout);
2606 fprint_symbol (stdout, SYMBOL_NAME (sym));
2607 }
2608
2609 printf_filtered (";\n");
2610 }
2611 else
2612 {
2613# if 0
2614 char buf[1024];
2615 type_print_base (TYPE_FN_FIELD_TYPE(t, i), stdout, 0, 0);
2616 type_print_varspec_prefix (TYPE_FN_FIELD_TYPE(t, i), stdout, 0);
2617 sprintf (buf, " %s::", type_name_no_tag (t));
2618 type_print_method_args (TYPE_FN_FIELD_ARGS (t, i), buf, name, stdout);
2619# endif
2620 }
2621 }
2622 }
2623 }
2624 prev_bv = bv;
2625 }
2626}
2627
2628static void
2629variables_info (regexp)
2630 char *regexp;
2631{
2632 list_symbols (regexp, 0, 0);
2633}
2634
2635static void
2636functions_info (regexp)
2637 char *regexp;
2638{
2639 list_symbols (regexp, 1, 0);
2640}
2641
bd5635a1
RP
2642static void
2643types_info (regexp)
2644 char *regexp;
2645{
2646 list_symbols (regexp, 2, 0);
2647}
bd5635a1
RP
2648
2649#if 0
2650/* Tiemann says: "info methods was never implemented." */
2651static void
2652methods_info (regexp)
2653 char *regexp;
2654{
2655 list_symbols (regexp, 3, 0);
2656}
2657#endif /* 0 */
2658
2659/* Breakpoint all functions matching regular expression. */
2660static void
2661rbreak_command (regexp)
2662 char *regexp;
2663{
2664 list_symbols (regexp, 1, 1);
2665}
2666\f
2667/* Initialize the standard C scalar types. */
2668
2669static
2670struct type *
2671init_type (code, length, uns, name)
2672 enum type_code code;
2673 int length, uns;
2674 char *name;
2675{
2676 register struct type *type;
2677
2678 type = (struct type *) xmalloc (sizeof (struct type));
2679 bzero (type, sizeof *type);
2680 TYPE_MAIN_VARIANT (type) = type;
2681 TYPE_CODE (type) = code;
2682 TYPE_LENGTH (type) = length;
2683 TYPE_FLAGS (type) = uns ? TYPE_FLAG_UNSIGNED : 0;
2684 TYPE_FLAGS (type) |= TYPE_FLAG_PERM;
2685 TYPE_NFIELDS (type) = 0;
2686 TYPE_NAME (type) = name;
2687
2688 /* C++ fancies. */
2689 TYPE_NFN_FIELDS (type) = 0;
2690 TYPE_N_BASECLASSES (type) = 0;
2691 return type;
2692}
2693
2694/* Return Nonzero if block a is lexically nested within block b,
2695 or if a and b have the same pc range.
2696 Return zero otherwise. */
2697int
2698contained_in (a, b)
2699 struct block *a, *b;
2700{
2701 if (!a || !b)
2702 return 0;
2703 return BLOCK_START (a) >= BLOCK_START (b)
2704 && BLOCK_END (a) <= BLOCK_END (b);
2705}
2706
2707\f
2708/* Helper routine for make_symbol_completion_list. */
2709
2710int return_val_size, return_val_index;
2711char **return_val;
2712
2713void
2714completion_list_add_symbol (symname)
2715 char *symname;
2716{
2717 if (return_val_index + 3 > return_val_size)
2718 return_val =
2719 (char **)xrealloc (return_val,
2720 (return_val_size *= 2) * sizeof (char *));
2721
2722 return_val[return_val_index] =
2723 (char *)xmalloc (1 + strlen (symname));
2724
2725 strcpy (return_val[return_val_index], symname);
2726
2727 return_val[++return_val_index] = (char *)NULL;
2728}
2729
2730/* Return a NULL terminated array of all symbols (regardless of class) which
2731 begin by matching TEXT. If the answer is no symbols, then the return value
2732 is an array which contains only a NULL pointer.
2733
2734 Problem: All of the symbols have to be copied because readline
2735 frees them. I'm not going to worry about this; hopefully there
2736 won't be that many. */
2737
2738char **
2739make_symbol_completion_list (text)
2740 char *text;
2741{
2742 register struct symtab *s;
2743 register struct partial_symtab *ps;
2744 register struct block *b, *surrounding_static_block = 0;
2745 extern struct block *get_selected_block ();
2746 register int i, j;
2747 struct partial_symbol *psym;
2748
2749 int text_len = strlen (text);
2750 return_val_size = 100;
2751 return_val_index = 0;
2752 return_val =
2753 (char **)xmalloc ((1 + return_val_size) *sizeof (char *));
2754 return_val[0] = (char *)NULL;
2755
2756 /* Look through the partial symtabs for all symbols which begin
2757 by matching TEXT. Add each one that you find to the list. */
2758
2759 for (ps = partial_symtab_list; ps; ps = ps->next)
2760 {
2761 /* If the psymtab's been read in we'll get it when we search
2762 through the blockvector. */
2763 if (ps->readin) continue;
2764
2765 for (psym = global_psymbols.list + ps->globals_offset;
2766 psym < (global_psymbols.list + ps->globals_offset
2767 + ps->n_global_syms);
2768 psym++)
2769 {
2770 QUIT; /* If interrupted, then quit. */
2771 if ((strncmp (SYMBOL_NAME (psym), text, text_len) == 0))
2772 completion_list_add_symbol (SYMBOL_NAME (psym));
2773 }
2774
2775 for (psym = static_psymbols.list + ps->statics_offset;
2776 psym < (static_psymbols.list + ps->statics_offset
2777 + ps->n_static_syms);
2778 psym++)
2779 {
2780 QUIT;
2781 if ((strncmp (SYMBOL_NAME (psym), text, text_len) == 0))
2782 completion_list_add_symbol (SYMBOL_NAME (psym));
2783 }
2784 }
2785
2786 /* At this point scan through the misc function vector and add each
2787 symbol you find to the list. Eventually we want to ignore
2788 anything that isn't a text symbol (everything else will be
2789 handled by the psymtab code above). */
2790
2791 for (i = 0; i < misc_function_count; i++)
2792 if (!strncmp (text, misc_function_vector[i].name, text_len))
2793 completion_list_add_symbol (misc_function_vector[i].name);
2794
2795 /* Search upwards from currently selected frame (so that we can
2796 complete on local vars. */
2797 for (b = get_selected_block (); b; b = BLOCK_SUPERBLOCK (b))
2798 {
2799 if (!BLOCK_SUPERBLOCK (b))
2800 surrounding_static_block = b; /* For elmin of dups */
2801
2802 /* Also catch fields of types defined in this places which
2803 match our text string. Only complete on types visible
2804 from current context. */
2805 for (i = 0; i < BLOCK_NSYMS (b); i++)
2806 {
2807 register struct symbol *sym = BLOCK_SYM (b, i);
2808
2809 if (!strncmp (SYMBOL_NAME (sym), text, text_len))
2810 completion_list_add_symbol (SYMBOL_NAME (sym));
2811
2812 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2813 {
2814 struct type *t = SYMBOL_TYPE (sym);
2815 enum type_code c = TYPE_CODE (t);
2816
2817 if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT)
2818 for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++)
2819 if (TYPE_FIELD_NAME (t, j) &&
2820 !strncmp (TYPE_FIELD_NAME (t, j), text, text_len))
2821 completion_list_add_symbol (TYPE_FIELD_NAME (t, j));
2822 }
2823 }
2824 }
2825
2826 /* Go through the symtabs and check the externs and statics for
2827 symbols which match. */
2828
2829 for (s = symtab_list; s; s = s->next)
2830 {
3ba6a043 2831 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
bd5635a1
RP
2832
2833 for (i = 0; i < BLOCK_NSYMS (b); i++)
2834 if (!strncmp (SYMBOL_NAME (BLOCK_SYM (b, i)), text, text_len))
2835 completion_list_add_symbol (SYMBOL_NAME (BLOCK_SYM (b, i)));
2836 }
2837
2838 for (s = symtab_list; s; s = s->next)
2839 {
3ba6a043 2840 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
bd5635a1
RP
2841
2842 /* Don't do this block twice. */
2843 if (b == surrounding_static_block) continue;
2844
2845 for (i = 0; i < BLOCK_NSYMS (b); i++)
2846 if (!strncmp (SYMBOL_NAME (BLOCK_SYM (b, i)), text, text_len))
2847 completion_list_add_symbol (SYMBOL_NAME (BLOCK_SYM (b, i)));
2848 }
2849
2850 return (return_val);
2851}
2852\f
2853void
2854_initialize_symtab ()
2855{
2856 add_info ("variables", variables_info,
2857 "All global and static variable names, or those matching REGEXP.");
2858 add_info ("functions", functions_info,
2859 "All function names, or those matching REGEXP.");
3ba6a043
JG
2860
2861 /* FIXME: This command has at least the following problems:
bd5635a1
RP
2862 1. It prints builtin types (in a very strange and confusing fashion).
2863 2. It doesn't print right, e.g. with
2864 typedef struct foo *FOO
2865 type_print prints "FOO" when we want to make it (in this situation)
2866 print "struct foo *".
2867 I also think "ptype" or "whatis" is more likely to be useful (but if
2868 there is much disagreement "info types" can be fixed). */
2869 add_info ("types", types_info,
2870 "All types names, or those matching REGEXP.");
3ba6a043 2871
bd5635a1
RP
2872#if 0
2873 add_info ("methods", methods_info,
2874 "All method names, or those matching REGEXP::REGEXP.\n\
2875If the class qualifier is ommited, it is assumed to be the current scope.\n\
2876If the first REGEXP is ommited, then all methods matching the second REGEXP\n\
2877are listed.");
2878#endif
2879 add_info ("sources", sources_info,
2880 "Source files in the program.");
2881
2882 add_com ("rbreak", no_class, rbreak_command,
2883 "Set a breakpoint for all functions matching REGEXP.");
2884
2885 /* FIXME: The code below assumes that the sizes of the basic data
2886 types are the same on the host and target machines!!! */
2887
2888 builtin_type_void = init_type (TYPE_CODE_VOID, 1, 0, "void");
2889
2890 builtin_type_float = init_type (TYPE_CODE_FLT, sizeof (float), 0, "float");
2891 builtin_type_double = init_type (TYPE_CODE_FLT, sizeof (double), 0, "double");
2892
2893 builtin_type_char = init_type (TYPE_CODE_INT, sizeof (char), 0, "char");
2894 builtin_type_short = init_type (TYPE_CODE_INT, sizeof (short), 0, "short");
2895 builtin_type_long = init_type (TYPE_CODE_INT, sizeof (long), 0, "long");
2896 builtin_type_int = init_type (TYPE_CODE_INT, sizeof (int), 0, "int");
2897
2898 builtin_type_unsigned_char = init_type (TYPE_CODE_INT, sizeof (char), 1, "unsigned char");
2899 builtin_type_unsigned_short = init_type (TYPE_CODE_INT, sizeof (short), 1, "unsigned short");
2900 builtin_type_unsigned_long = init_type (TYPE_CODE_INT, sizeof (long), 1, "unsigned long");
2901 builtin_type_unsigned_int = init_type (TYPE_CODE_INT, sizeof (int), 1, "unsigned int");
d96b54ea 2902
bd5635a1 2903 builtin_type_long_long =
d96b54ea
JK
2904 init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
2905 0, "long long");
bd5635a1 2906 builtin_type_unsigned_long_long =
d96b54ea
JK
2907 init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
2908 1, "unsigned long long");
2909
bd5635a1
RP
2910 builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0, "<unknown type>");
2911}
2912
This page took 0.137511 seconds and 4 git commands to generate.