]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - binutils/debug.c
* Many files: Changes to avoid gcc warnings: Add ATTRIBUTE_UNUSED
[thirdparty/binutils-gdb.git] / binutils / debug.c
1 /* debug.c -- Handle generic debugging information.
2 Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
3 Written by Ian Lance Taylor <ian@cygnus.com>.
4
5 This file is part of GNU Binutils.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
21
22 /* This file implements a generic debugging format. We may eventually
23 have readers which convert different formats into this generic
24 format, and writers which write it out. The initial impetus for
25 this was writing a convertor from stabs to HP IEEE-695 debugging
26 format. */
27
28 #include <stdio.h>
29 #include <assert.h>
30
31 #include "bfd.h"
32 #include "bucomm.h"
33 #include "libiberty.h"
34 #include "debug.h"
35
36 /* Global information we keep for debugging. A pointer to this
37 structure is the debugging handle passed to all the routines. */
38
39 struct debug_handle
40 {
41 /* A linked list of compilation units. */
42 struct debug_unit *units;
43 /* The current compilation unit. */
44 struct debug_unit *current_unit;
45 /* The current source file. */
46 struct debug_file *current_file;
47 /* The current function. */
48 struct debug_function *current_function;
49 /* The current block. */
50 struct debug_block *current_block;
51 /* The current line number information for the current unit. */
52 struct debug_lineno *current_lineno;
53 /* Mark. This is used by debug_write. */
54 unsigned int mark;
55 /* A struct/class ID used by debug_write. */
56 unsigned int class_id;
57 /* The base for class_id for this call to debug_write. */
58 unsigned int base_id;
59 /* The current line number in debug_write. */
60 struct debug_lineno *current_write_lineno;
61 unsigned int current_write_lineno_index;
62 /* A list of classes which have assigned ID's during debug_write.
63 This is linked through the next_id field of debug_class_type. */
64 struct debug_class_id *id_list;
65 /* A list used to avoid recursion during debug_type_samep. */
66 struct debug_type_compare_list *compare_list;
67 };
68
69 /* Information we keep for a single compilation unit. */
70
71 struct debug_unit
72 {
73 /* The next compilation unit. */
74 struct debug_unit *next;
75 /* A list of files included in this compilation unit. The first
76 file is always the main one, and that is where the main file name
77 is stored. */
78 struct debug_file *files;
79 /* Line number information for this compilation unit. This is not
80 stored by function, because assembler code may have line number
81 information without function information. */
82 struct debug_lineno *linenos;
83 };
84
85 /* Information kept for a single source file. */
86
87 struct debug_file
88 {
89 /* The next source file in this compilation unit. */
90 struct debug_file *next;
91 /* The name of the source file. */
92 const char *filename;
93 /* Global functions, variables, types, etc. */
94 struct debug_namespace *globals;
95 };
96
97 /* A type. */
98
99 struct debug_type
100 {
101 /* Kind of type. */
102 enum debug_type_kind kind;
103 /* Size of type (0 if not known). */
104 unsigned int size;
105 /* Type which is a pointer to this type. */
106 debug_type pointer;
107 /* Tagged union with additional information about the type. */
108 union
109 {
110 /* DEBUG_KIND_INDIRECT. */
111 struct debug_indirect_type *kindirect;
112 /* DEBUG_KIND_INT. */
113 /* Whether the integer is unsigned. */
114 boolean kint;
115 /* DEBUG_KIND_STRUCT, DEBUG_KIND_UNION, DEBUG_KIND_CLASS,
116 DEBUG_KIND_UNION_CLASS. */
117 struct debug_class_type *kclass;
118 /* DEBUG_KIND_ENUM. */
119 struct debug_enum_type *kenum;
120 /* DEBUG_KIND_POINTER. */
121 struct debug_type *kpointer;
122 /* DEBUG_KIND_FUNCTION. */
123 struct debug_function_type *kfunction;
124 /* DEBUG_KIND_REFERENCE. */
125 struct debug_type *kreference;
126 /* DEBUG_KIND_RANGE. */
127 struct debug_range_type *krange;
128 /* DEBUG_KIND_ARRAY. */
129 struct debug_array_type *karray;
130 /* DEBUG_KIND_SET. */
131 struct debug_set_type *kset;
132 /* DEBUG_KIND_OFFSET. */
133 struct debug_offset_type *koffset;
134 /* DEBUG_KIND_METHOD. */
135 struct debug_method_type *kmethod;
136 /* DEBUG_KIND_CONST. */
137 struct debug_type *kconst;
138 /* DEBUG_KIND_VOLATILE. */
139 struct debug_type *kvolatile;
140 /* DEBUG_KIND_NAMED, DEBUG_KIND_TAGGED. */
141 struct debug_named_type *knamed;
142 } u;
143 };
144
145 /* Information kept for an indirect type. */
146
147 struct debug_indirect_type
148 {
149 /* Slot where the final type will appear. */
150 debug_type *slot;
151 /* Tag. */
152 const char *tag;
153 };
154
155 /* Information kept for a struct, union, or class. */
156
157 struct debug_class_type
158 {
159 /* NULL terminated array of fields. */
160 debug_field *fields;
161 /* A mark field which indicates whether the struct has already been
162 printed. */
163 unsigned int mark;
164 /* This is used to uniquely identify unnamed structs when printing. */
165 unsigned int id;
166 /* The remaining fields are only used for DEBUG_KIND_CLASS and
167 DEBUG_KIND_UNION_CLASS. */
168 /* NULL terminated array of base classes. */
169 debug_baseclass *baseclasses;
170 /* NULL terminated array of methods. */
171 debug_method *methods;
172 /* The type of the class providing the virtual function table for
173 this class. This may point to the type itself. */
174 debug_type vptrbase;
175 };
176
177 /* Information kept for an enum. */
178
179 struct debug_enum_type
180 {
181 /* NULL terminated array of names. */
182 const char **names;
183 /* Array of corresponding values. */
184 bfd_signed_vma *values;
185 };
186
187 /* Information kept for a function. FIXME: We should be able to
188 record the parameter types. */
189
190 struct debug_function_type
191 {
192 /* Return type. */
193 debug_type return_type;
194 /* NULL terminated array of argument types. */
195 debug_type *arg_types;
196 /* Whether the function takes a variable number of arguments. */
197 boolean varargs;
198 };
199
200 /* Information kept for a range. */
201
202 struct debug_range_type
203 {
204 /* Range base type. */
205 debug_type type;
206 /* Lower bound. */
207 bfd_signed_vma lower;
208 /* Upper bound. */
209 bfd_signed_vma upper;
210 };
211
212 /* Information kept for an array. */
213
214 struct debug_array_type
215 {
216 /* Element type. */
217 debug_type element_type;
218 /* Range type. */
219 debug_type range_type;
220 /* Lower bound. */
221 bfd_signed_vma lower;
222 /* Upper bound. */
223 bfd_signed_vma upper;
224 /* Whether this array is really a string. */
225 boolean stringp;
226 };
227
228 /* Information kept for a set. */
229
230 struct debug_set_type
231 {
232 /* Base type. */
233 debug_type type;
234 /* Whether this set is really a bitstring. */
235 boolean bitstringp;
236 };
237
238 /* Information kept for an offset type (a based pointer). */
239
240 struct debug_offset_type
241 {
242 /* The type the pointer is an offset from. */
243 debug_type base_type;
244 /* The type the pointer points to. */
245 debug_type target_type;
246 };
247
248 /* Information kept for a method type. */
249
250 struct debug_method_type
251 {
252 /* The return type. */
253 debug_type return_type;
254 /* The object type which this method is for. */
255 debug_type domain_type;
256 /* A NULL terminated array of argument types. */
257 debug_type *arg_types;
258 /* Whether the method takes a variable number of arguments. */
259 boolean varargs;
260 };
261
262 /* Information kept for a named type. */
263
264 struct debug_named_type
265 {
266 /* Name. */
267 struct debug_name *name;
268 /* Real type. */
269 debug_type type;
270 };
271
272 /* A field in a struct or union. */
273
274 struct debug_field
275 {
276 /* Name of the field. */
277 const char *name;
278 /* Type of the field. */
279 struct debug_type *type;
280 /* Visibility of the field. */
281 enum debug_visibility visibility;
282 /* Whether this is a static member. */
283 boolean static_member;
284 union
285 {
286 /* If static_member is false. */
287 struct
288 {
289 /* Bit position of the field in the struct. */
290 unsigned int bitpos;
291 /* Size of the field in bits. */
292 unsigned int bitsize;
293 } f;
294 /* If static_member is true. */
295 struct
296 {
297 const char *physname;
298 } s;
299 } u;
300 };
301
302 /* A base class for an object. */
303
304 struct debug_baseclass
305 {
306 /* Type of the base class. */
307 struct debug_type *type;
308 /* Bit position of the base class in the object. */
309 unsigned int bitpos;
310 /* Whether the base class is virtual. */
311 boolean virtual;
312 /* Visibility of the base class. */
313 enum debug_visibility visibility;
314 };
315
316 /* A method of an object. */
317
318 struct debug_method
319 {
320 /* The name of the method. */
321 const char *name;
322 /* A NULL terminated array of different types of variants. */
323 struct debug_method_variant **variants;
324 };
325
326 /* The variants of a method function of an object. These indicate
327 which method to run. */
328
329 struct debug_method_variant
330 {
331 /* The physical name of the function. */
332 const char *physname;
333 /* The type of the function. */
334 struct debug_type *type;
335 /* The visibility of the function. */
336 enum debug_visibility visibility;
337 /* Whether the function is const. */
338 boolean constp;
339 /* Whether the function is volatile. */
340 boolean volatilep;
341 /* The offset to the function in the virtual function table. */
342 bfd_vma voffset;
343 /* If voffset is VOFFSET_STATIC_METHOD, this is a static method. */
344 #define VOFFSET_STATIC_METHOD ((bfd_vma) -1)
345 /* Context of a virtual method function. */
346 struct debug_type *context;
347 };
348
349 /* A variable. This is the information we keep for a variable object.
350 This has no name; a name is associated with a variable in a
351 debug_name structure. */
352
353 struct debug_variable
354 {
355 /* Kind of variable. */
356 enum debug_var_kind kind;
357 /* Type. */
358 debug_type type;
359 /* Value. The interpretation of the value depends upon kind. */
360 bfd_vma val;
361 };
362
363 /* A function. This has no name; a name is associated with a function
364 in a debug_name structure. */
365
366 struct debug_function
367 {
368 /* Return type. */
369 debug_type return_type;
370 /* Parameter information. */
371 struct debug_parameter *parameters;
372 /* Block information. The first structure on the list is the main
373 block of the function, and describes function local variables. */
374 struct debug_block *blocks;
375 };
376
377 /* A function parameter. */
378
379 struct debug_parameter
380 {
381 /* Next parameter. */
382 struct debug_parameter *next;
383 /* Name. */
384 const char *name;
385 /* Type. */
386 debug_type type;
387 /* Kind. */
388 enum debug_parm_kind kind;
389 /* Value (meaning depends upon kind). */
390 bfd_vma val;
391 };
392
393 /* A typed constant. */
394
395 struct debug_typed_constant
396 {
397 /* Type. */
398 debug_type type;
399 /* Value. FIXME: We may eventually need to support non-integral
400 values. */
401 bfd_vma val;
402 };
403
404 /* Information about a block within a function. */
405
406 struct debug_block
407 {
408 /* Next block with the same parent. */
409 struct debug_block *next;
410 /* Parent block. */
411 struct debug_block *parent;
412 /* List of child blocks. */
413 struct debug_block *children;
414 /* Start address of the block. */
415 bfd_vma start;
416 /* End address of the block. */
417 bfd_vma end;
418 /* Local variables. */
419 struct debug_namespace *locals;
420 };
421
422 /* Line number information we keep for a compilation unit. FIXME:
423 This structure is easy to create, but can be very space
424 inefficient. */
425
426 struct debug_lineno
427 {
428 /* More line number information for this block. */
429 struct debug_lineno *next;
430 /* Source file. */
431 struct debug_file *file;
432 /* Line numbers, terminated by a -1 or the end of the array. */
433 #define DEBUG_LINENO_COUNT 10
434 unsigned long linenos[DEBUG_LINENO_COUNT];
435 /* Addresses for the line numbers. */
436 bfd_vma addrs[DEBUG_LINENO_COUNT];
437 };
438
439 /* A namespace. This is a mapping from names to objects. FIXME: This
440 should be implemented as a hash table. */
441
442 struct debug_namespace
443 {
444 /* List of items in this namespace. */
445 struct debug_name *list;
446 /* Pointer to where the next item in this namespace should go. */
447 struct debug_name **tail;
448 };
449
450 /* Kinds of objects that appear in a namespace. */
451
452 enum debug_object_kind
453 {
454 /* A type. */
455 DEBUG_OBJECT_TYPE,
456 /* A tagged type (really a different sort of namespace). */
457 DEBUG_OBJECT_TAG,
458 /* A variable. */
459 DEBUG_OBJECT_VARIABLE,
460 /* A function. */
461 DEBUG_OBJECT_FUNCTION,
462 /* An integer constant. */
463 DEBUG_OBJECT_INT_CONSTANT,
464 /* A floating point constant. */
465 DEBUG_OBJECT_FLOAT_CONSTANT,
466 /* A typed constant. */
467 DEBUG_OBJECT_TYPED_CONSTANT
468 };
469
470 /* Linkage of an object that appears in a namespace. */
471
472 enum debug_object_linkage
473 {
474 /* Local variable. */
475 DEBUG_LINKAGE_AUTOMATIC,
476 /* Static--either file static or function static, depending upon the
477 namespace is. */
478 DEBUG_LINKAGE_STATIC,
479 /* Global. */
480 DEBUG_LINKAGE_GLOBAL,
481 /* No linkage. */
482 DEBUG_LINKAGE_NONE
483 };
484
485 /* A name in a namespace. */
486
487 struct debug_name
488 {
489 /* Next name in this namespace. */
490 struct debug_name *next;
491 /* Name. */
492 const char *name;
493 /* Mark. This is used by debug_write. */
494 unsigned int mark;
495 /* Kind of object. */
496 enum debug_object_kind kind;
497 /* Linkage of object. */
498 enum debug_object_linkage linkage;
499 /* Tagged union with additional information about the object. */
500 union
501 {
502 /* DEBUG_OBJECT_TYPE. */
503 struct debug_type *type;
504 /* DEBUG_OBJECT_TAG. */
505 struct debug_type *tag;
506 /* DEBUG_OBJECT_VARIABLE. */
507 struct debug_variable *variable;
508 /* DEBUG_OBJECT_FUNCTION. */
509 struct debug_function *function;
510 /* DEBUG_OBJECT_INT_CONSTANT. */
511 bfd_vma int_constant;
512 /* DEBUG_OBJECT_FLOAT_CONSTANT. */
513 double float_constant;
514 /* DEBUG_OBJECT_TYPED_CONSTANT. */
515 struct debug_typed_constant *typed_constant;
516 } u;
517 };
518
519 /* During debug_write, a linked list of these structures is used to
520 keep track of ID numbers that have been assigned to classes. */
521
522 struct debug_class_id
523 {
524 /* Next ID number. */
525 struct debug_class_id *next;
526 /* The type with the ID. */
527 struct debug_type *type;
528 /* The tag; NULL if no tag. */
529 const char *tag;
530 };
531
532 /* During debug_type_samep, a linked list of these structures is kept
533 on the stack to avoid infinite recursion. */
534
535 struct debug_type_compare_list
536 {
537 /* Next type on list. */
538 struct debug_type_compare_list *next;
539 /* The types we are comparing. */
540 struct debug_type *t1;
541 struct debug_type *t2;
542 };
543
544 /* During debug_get_real_type, a linked list of these structures is
545 kept on the stack to avoid infinite recursion. */
546
547 struct debug_type_real_list
548 {
549 /* Next type on list. */
550 struct debug_type_real_list *next;
551 /* The type we are checking. */
552 struct debug_type *t;
553 };
554
555 /* Local functions. */
556
557 static void debug_error PARAMS ((const char *));
558 static struct debug_name *debug_add_to_namespace
559 PARAMS ((struct debug_handle *, struct debug_namespace **, const char *,
560 enum debug_object_kind, enum debug_object_linkage));
561 static struct debug_name *debug_add_to_current_namespace
562 PARAMS ((struct debug_handle *, const char *, enum debug_object_kind,
563 enum debug_object_linkage));
564 static struct debug_type *debug_make_type
565 PARAMS ((struct debug_handle *, enum debug_type_kind, unsigned int));
566 static struct debug_type *debug_get_real_type
567 PARAMS ((PTR, debug_type, struct debug_type_real_list *));
568 static boolean debug_write_name
569 PARAMS ((struct debug_handle *, const struct debug_write_fns *, PTR,
570 struct debug_name *));
571 static boolean debug_write_type
572 PARAMS ((struct debug_handle *, const struct debug_write_fns *, PTR,
573 struct debug_type *, struct debug_name *));
574 static boolean debug_write_class_type
575 PARAMS ((struct debug_handle *, const struct debug_write_fns *, PTR,
576 struct debug_type *, const char *));
577 static boolean debug_write_function
578 PARAMS ((struct debug_handle *, const struct debug_write_fns *, PTR,
579 const char *, enum debug_object_linkage, struct debug_function *));
580 static boolean debug_write_block
581 PARAMS ((struct debug_handle *, const struct debug_write_fns *, PTR,
582 struct debug_block *));
583 static boolean debug_write_linenos
584 PARAMS ((struct debug_handle *, const struct debug_write_fns *, PTR,
585 bfd_vma));
586 static boolean debug_set_class_id
587 PARAMS ((struct debug_handle *, const char *, struct debug_type *));
588 static boolean debug_type_samep
589 PARAMS ((struct debug_handle *, struct debug_type *, struct debug_type *));
590 static boolean debug_class_type_samep
591 PARAMS ((struct debug_handle *, struct debug_type *, struct debug_type *));
592 \f
593 /* Issue an error message. */
594
595 static void
596 debug_error (message)
597 const char *message;
598 {
599 fprintf (stderr, "%s\n", message);
600 }
601
602 /* Add an object to a namespace. */
603
604 static struct debug_name *
605 debug_add_to_namespace (info, nsp, name, kind, linkage)
606 struct debug_handle *info ATTRIBUTE_UNUSED;
607 struct debug_namespace **nsp;
608 const char *name;
609 enum debug_object_kind kind;
610 enum debug_object_linkage linkage;
611 {
612 struct debug_name *n;
613 struct debug_namespace *ns;
614
615 n = (struct debug_name *) xmalloc (sizeof *n);
616 memset (n, 0, sizeof *n);
617
618 n->name = name;
619 n->kind = kind;
620 n->linkage = linkage;
621
622 ns = *nsp;
623 if (ns == NULL)
624 {
625 ns = (struct debug_namespace *) xmalloc (sizeof *ns);
626 memset (ns, 0, sizeof *ns);
627
628 ns->tail = &ns->list;
629
630 *nsp = ns;
631 }
632
633 *ns->tail = n;
634 ns->tail = &n->next;
635
636 return n;
637 }
638
639 /* Add an object to the current namespace. */
640
641 static struct debug_name *
642 debug_add_to_current_namespace (info, name, kind, linkage)
643 struct debug_handle *info;
644 const char *name;
645 enum debug_object_kind kind;
646 enum debug_object_linkage linkage;
647 {
648 struct debug_namespace **nsp;
649
650 if (info->current_unit == NULL
651 || info->current_file == NULL)
652 {
653 debug_error (_("debug_add_to_current_namespace: no current file"));
654 return NULL;
655 }
656
657 if (info->current_block != NULL)
658 nsp = &info->current_block->locals;
659 else
660 nsp = &info->current_file->globals;
661
662 return debug_add_to_namespace (info, nsp, name, kind, linkage);
663 }
664 \f
665 /* Return a handle for debugging information. */
666
667 PTR
668 debug_init ()
669 {
670 struct debug_handle *ret;
671
672 ret = (struct debug_handle *) xmalloc (sizeof *ret);
673 memset (ret, 0, sizeof *ret);
674 return (PTR) ret;
675 }
676
677 /* Set the source filename. This implicitly starts a new compilation
678 unit. */
679
680 boolean
681 debug_set_filename (handle, name)
682 PTR handle;
683 const char *name;
684 {
685 struct debug_handle *info = (struct debug_handle *) handle;
686 struct debug_file *nfile;
687 struct debug_unit *nunit;
688
689 if (name == NULL)
690 name = "";
691
692 nfile = (struct debug_file *) xmalloc (sizeof *nfile);
693 memset (nfile, 0, sizeof *nfile);
694
695 nfile->filename = name;
696
697 nunit = (struct debug_unit *) xmalloc (sizeof *nunit);
698 memset (nunit, 0, sizeof *nunit);
699
700 nunit->files = nfile;
701 info->current_file = nfile;
702
703 if (info->current_unit != NULL)
704 info->current_unit->next = nunit;
705 else
706 {
707 assert (info->units == NULL);
708 info->units = nunit;
709 }
710
711 info->current_unit = nunit;
712
713 info->current_function = NULL;
714 info->current_block = NULL;
715 info->current_lineno = NULL;
716
717 return true;
718 }
719
720 /* Change source files to the given file name. This is used for
721 include files in a single compilation unit. */
722
723 boolean
724 debug_start_source (handle, name)
725 PTR handle;
726 const char *name;
727 {
728 struct debug_handle *info = (struct debug_handle *) handle;
729 struct debug_file *f, **pf;
730
731 if (name == NULL)
732 name = "";
733
734 if (info->current_unit == NULL)
735 {
736 debug_error (_("debug_start_source: no debug_set_filename call"));
737 return false;
738 }
739
740 for (f = info->current_unit->files; f != NULL; f = f->next)
741 {
742 if (f->filename[0] == name[0]
743 && f->filename[1] == name[1]
744 && strcmp (f->filename, name) == 0)
745 {
746 info->current_file = f;
747 return true;
748 }
749 }
750
751 f = (struct debug_file *) xmalloc (sizeof *f);
752 memset (f, 0, sizeof *f);
753
754 f->filename = name;
755
756 for (pf = &info->current_file->next;
757 *pf != NULL;
758 pf = &(*pf)->next)
759 ;
760 *pf = f;
761
762 info->current_file = f;
763
764 return true;
765 }
766
767 /* Record a function definition. This implicitly starts a function
768 block. The debug_type argument is the type of the return value.
769 The boolean indicates whether the function is globally visible.
770 The bfd_vma is the address of the start of the function. Currently
771 the parameter types are specified by calls to
772 debug_record_parameter. FIXME: There is no way to specify nested
773 functions. */
774
775 boolean
776 debug_record_function (handle, name, return_type, global, addr)
777 PTR handle;
778 const char *name;
779 debug_type return_type;
780 boolean global;
781 bfd_vma addr;
782 {
783 struct debug_handle *info = (struct debug_handle *) handle;
784 struct debug_function *f;
785 struct debug_block *b;
786 struct debug_name *n;
787
788 if (name == NULL)
789 name = "";
790 if (return_type == NULL)
791 return false;
792
793 if (info->current_unit == NULL)
794 {
795 debug_error (_("debug_record_function: no debug_set_filename call"));
796 return false;
797 }
798
799 f = (struct debug_function *) xmalloc (sizeof *f);
800 memset (f, 0, sizeof *f);
801
802 f->return_type = return_type;
803
804 b = (struct debug_block *) xmalloc (sizeof *b);
805 memset (b, 0, sizeof *b);
806
807 b->start = addr;
808 b->end = (bfd_vma) -1;
809
810 f->blocks = b;
811
812 info->current_function = f;
813 info->current_block = b;
814
815 /* FIXME: If we could handle nested functions, this would be the
816 place: we would want to use a different namespace. */
817 n = debug_add_to_namespace (info,
818 &info->current_file->globals,
819 name,
820 DEBUG_OBJECT_FUNCTION,
821 (global
822 ? DEBUG_LINKAGE_GLOBAL
823 : DEBUG_LINKAGE_STATIC));
824 if (n == NULL)
825 return false;
826
827 n->u.function = f;
828
829 return true;
830 }
831
832 /* Record a parameter for the current function. */
833
834 boolean
835 debug_record_parameter (handle, name, type, kind, val)
836 PTR handle;
837 const char *name;
838 debug_type type;
839 enum debug_parm_kind kind;
840 bfd_vma val;
841 {
842 struct debug_handle *info = (struct debug_handle *) handle;
843 struct debug_parameter *p, **pp;
844
845 if (name == NULL || type == NULL)
846 return false;
847
848 if (info->current_unit == NULL
849 || info->current_function == NULL)
850 {
851 debug_error (_("debug_record_parameter: no current function"));
852 return false;
853 }
854
855 p = (struct debug_parameter *) xmalloc (sizeof *p);
856 memset (p, 0, sizeof *p);
857
858 p->name = name;
859 p->type = type;
860 p->kind = kind;
861 p->val = val;
862
863 for (pp = &info->current_function->parameters;
864 *pp != NULL;
865 pp = &(*pp)->next)
866 ;
867 *pp = p;
868
869 return true;
870 }
871
872 /* End a function. FIXME: This should handle function nesting. */
873
874 boolean
875 debug_end_function (handle, addr)
876 PTR handle;
877 bfd_vma addr;
878 {
879 struct debug_handle *info = (struct debug_handle *) handle;
880
881 if (info->current_unit == NULL
882 || info->current_block == NULL
883 || info->current_function == NULL)
884 {
885 debug_error (_("debug_end_function: no current function"));
886 return false;
887 }
888
889 if (info->current_block->parent != NULL)
890 {
891 debug_error (_("debug_end_function: some blocks were not closed"));
892 return false;
893 }
894
895 info->current_block->end = addr;
896
897 info->current_function = NULL;
898 info->current_block = NULL;
899
900 return true;
901 }
902
903 /* Start a block in a function. All local information will be
904 recorded in this block, until the matching call to debug_end_block.
905 debug_start_block and debug_end_block may be nested. The bfd_vma
906 argument is the address at which this block starts. */
907
908 boolean
909 debug_start_block (handle, addr)
910 PTR handle;
911 bfd_vma addr;
912 {
913 struct debug_handle *info = (struct debug_handle *) handle;
914 struct debug_block *b, **pb;
915
916 /* We must always have a current block: debug_record_function sets
917 one up. */
918 if (info->current_unit == NULL
919 || info->current_block == NULL)
920 {
921 debug_error (_("debug_start_block: no current block"));
922 return false;
923 }
924
925 b = (struct debug_block *) xmalloc (sizeof *b);
926 memset (b, 0, sizeof *b);
927
928 b->parent = info->current_block;
929 b->start = addr;
930 b->end = (bfd_vma) -1;
931
932 /* This new block is a child of the current block. */
933 for (pb = &info->current_block->children;
934 *pb != NULL;
935 pb = &(*pb)->next)
936 ;
937 *pb = b;
938
939 info->current_block = b;
940
941 return true;
942 }
943
944 /* Finish a block in a function. This matches the call to
945 debug_start_block. The argument is the address at which this block
946 ends. */
947
948 boolean
949 debug_end_block (handle, addr)
950 PTR handle;
951 bfd_vma addr;
952 {
953 struct debug_handle *info = (struct debug_handle *) handle;
954 struct debug_block *parent;
955
956 if (info->current_unit == NULL
957 || info->current_block == NULL)
958 {
959 debug_error (_("debug_end_block: no current block"));
960 return false;
961 }
962
963 parent = info->current_block->parent;
964 if (parent == NULL)
965 {
966 debug_error (_("debug_end_block: attempt to close top level block"));
967 return false;
968 }
969
970 info->current_block->end = addr;
971
972 info->current_block = parent;
973
974 return true;
975 }
976
977 /* Associate a line number in the current source file and function
978 with a given address. */
979
980 boolean
981 debug_record_line (handle, lineno, addr)
982 PTR handle;
983 unsigned long lineno;
984 bfd_vma addr;
985 {
986 struct debug_handle *info = (struct debug_handle *) handle;
987 struct debug_lineno *l;
988 unsigned int i;
989
990 if (info->current_unit == NULL)
991 {
992 debug_error (_("debug_record_line: no current unit"));
993 return false;
994 }
995
996 l = info->current_lineno;
997 if (l != NULL && l->file == info->current_file)
998 {
999 for (i = 0; i < DEBUG_LINENO_COUNT; i++)
1000 {
1001 if (l->linenos[i] == (unsigned long) -1)
1002 {
1003 l->linenos[i] = lineno;
1004 l->addrs[i] = addr;
1005 return true;
1006 }
1007 }
1008 }
1009
1010 /* If we get here, then either 1) there is no current_lineno
1011 structure, which means this is the first line number in this
1012 compilation unit, 2) the current_lineno structure is for a
1013 different file, or 3) the current_lineno structure is full.
1014 Regardless, we want to allocate a new debug_lineno structure, put
1015 it in the right place, and make it the new current_lineno
1016 structure. */
1017
1018 l = (struct debug_lineno *) xmalloc (sizeof *l);
1019 memset (l, 0, sizeof *l);
1020
1021 l->file = info->current_file;
1022 l->linenos[0] = lineno;
1023 l->addrs[0] = addr;
1024 for (i = 1; i < DEBUG_LINENO_COUNT; i++)
1025 l->linenos[i] = (unsigned long) -1;
1026
1027 if (info->current_lineno != NULL)
1028 info->current_lineno->next = l;
1029 else
1030 info->current_unit->linenos = l;
1031
1032 info->current_lineno = l;
1033
1034 return true;
1035 }
1036
1037 /* Start a named common block. This is a block of variables that may
1038 move in memory. */
1039
1040 boolean
1041 debug_start_common_block (handle, name)
1042 PTR handle ATTRIBUTE_UNUSED;
1043 const char *name ATTRIBUTE_UNUSED;
1044 {
1045 /* FIXME */
1046 debug_error (_("debug_start_common_block: not implemented"));
1047 return false;
1048 }
1049
1050 /* End a named common block. */
1051
1052 boolean
1053 debug_end_common_block (handle, name)
1054 PTR handle ATTRIBUTE_UNUSED;
1055 const char *name ATTRIBUTE_UNUSED;
1056 {
1057 /* FIXME */
1058 debug_error (_("debug_end_common_block: not implemented"));
1059 return false;
1060 }
1061
1062 /* Record a named integer constant. */
1063
1064 boolean
1065 debug_record_int_const (handle, name, val)
1066 PTR handle;
1067 const char *name;
1068 bfd_vma val;
1069 {
1070 struct debug_handle *info = (struct debug_handle *) handle;
1071 struct debug_name *n;
1072
1073 if (name == NULL)
1074 return false;
1075
1076 n = debug_add_to_current_namespace (info, name, DEBUG_OBJECT_INT_CONSTANT,
1077 DEBUG_LINKAGE_NONE);
1078 if (n == NULL)
1079 return false;
1080
1081 n->u.int_constant = val;
1082
1083 return true;
1084 }
1085
1086 /* Record a named floating point constant. */
1087
1088 boolean
1089 debug_record_float_const (handle, name, val)
1090 PTR handle;
1091 const char *name;
1092 double val;
1093 {
1094 struct debug_handle *info = (struct debug_handle *) handle;
1095 struct debug_name *n;
1096
1097 if (name == NULL)
1098 return false;
1099
1100 n = debug_add_to_current_namespace (info, name, DEBUG_OBJECT_FLOAT_CONSTANT,
1101 DEBUG_LINKAGE_NONE);
1102 if (n == NULL)
1103 return false;
1104
1105 n->u.float_constant = val;
1106
1107 return true;
1108 }
1109
1110 /* Record a typed constant with an integral value. */
1111
1112 boolean
1113 debug_record_typed_const (handle, name, type, val)
1114 PTR handle;
1115 const char *name;
1116 debug_type type;
1117 bfd_vma val;
1118 {
1119 struct debug_handle *info = (struct debug_handle *) handle;
1120 struct debug_name *n;
1121 struct debug_typed_constant *tc;
1122
1123 if (name == NULL || type == NULL)
1124 return false;
1125
1126 n = debug_add_to_current_namespace (info, name, DEBUG_OBJECT_TYPED_CONSTANT,
1127 DEBUG_LINKAGE_NONE);
1128 if (n == NULL)
1129 return false;
1130
1131 tc = (struct debug_typed_constant *) xmalloc (sizeof *tc);
1132 memset (tc, 0, sizeof *tc);
1133
1134 tc->type = type;
1135 tc->val = val;
1136
1137 n->u.typed_constant = tc;
1138
1139 return true;
1140 }
1141
1142 /* Record a label. */
1143
1144 boolean
1145 debug_record_label (handle, name, type, addr)
1146 PTR handle ATTRIBUTE_UNUSED;
1147 const char *name ATTRIBUTE_UNUSED;
1148 debug_type type ATTRIBUTE_UNUSED;
1149 bfd_vma addr ATTRIBUTE_UNUSED;
1150 {
1151 /* FIXME. */
1152 debug_error (_("debug_record_label not implemented"));
1153 return false;
1154 }
1155
1156 /* Record a variable. */
1157
1158 boolean
1159 debug_record_variable (handle, name, type, kind, val)
1160 PTR handle;
1161 const char *name;
1162 debug_type type;
1163 enum debug_var_kind kind;
1164 bfd_vma val;
1165 {
1166 struct debug_handle *info = (struct debug_handle *) handle;
1167 struct debug_namespace **nsp;
1168 enum debug_object_linkage linkage;
1169 struct debug_name *n;
1170 struct debug_variable *v;
1171
1172 if (name == NULL || type == NULL)
1173 return false;
1174
1175 if (info->current_unit == NULL
1176 || info->current_file == NULL)
1177 {
1178 debug_error (_("debug_record_variable: no current file"));
1179 return false;
1180 }
1181
1182 if (kind == DEBUG_GLOBAL || kind == DEBUG_STATIC)
1183 {
1184 nsp = &info->current_file->globals;
1185 if (kind == DEBUG_GLOBAL)
1186 linkage = DEBUG_LINKAGE_GLOBAL;
1187 else
1188 linkage = DEBUG_LINKAGE_STATIC;
1189 }
1190 else
1191 {
1192 if (info->current_block == NULL)
1193 {
1194 debug_error (_("debug_record_variable: no current block"));
1195 return false;
1196 }
1197 nsp = &info->current_block->locals;
1198 linkage = DEBUG_LINKAGE_AUTOMATIC;
1199 }
1200
1201 n = debug_add_to_namespace (info, nsp, name, DEBUG_OBJECT_VARIABLE, linkage);
1202 if (n == NULL)
1203 return false;
1204
1205 v = (struct debug_variable *) xmalloc (sizeof *v);
1206 memset (v, 0, sizeof *v);
1207
1208 v->kind = kind;
1209 v->type = type;
1210 v->val = val;
1211
1212 n->u.variable = v;
1213
1214 return true;
1215 }
1216
1217 /* Make a type with a given kind and size. */
1218
1219 /*ARGSUSED*/
1220 static struct debug_type *
1221 debug_make_type (info, kind, size)
1222 struct debug_handle *info ATTRIBUTE_UNUSED;
1223 enum debug_type_kind kind;
1224 unsigned int size;
1225 {
1226 struct debug_type *t;
1227
1228 t = (struct debug_type *) xmalloc (sizeof *t);
1229 memset (t, 0, sizeof *t);
1230
1231 t->kind = kind;
1232 t->size = size;
1233
1234 return t;
1235 }
1236
1237 /* Make an indirect type which may be used as a placeholder for a type
1238 which is referenced before it is defined. */
1239
1240 debug_type
1241 debug_make_indirect_type (handle, slot, tag)
1242 PTR handle;
1243 debug_type *slot;
1244 const char *tag;
1245 {
1246 struct debug_handle *info = (struct debug_handle *) handle;
1247 struct debug_type *t;
1248 struct debug_indirect_type *i;
1249
1250 t = debug_make_type (info, DEBUG_KIND_INDIRECT, 0);
1251 if (t == NULL)
1252 return DEBUG_TYPE_NULL;
1253
1254 i = (struct debug_indirect_type *) xmalloc (sizeof *i);
1255 memset (i, 0, sizeof *i);
1256
1257 i->slot = slot;
1258 i->tag = tag;
1259
1260 t->u.kindirect = i;
1261
1262 return t;
1263 }
1264
1265 /* Make a void type. There is only one of these. */
1266
1267 debug_type
1268 debug_make_void_type (handle)
1269 PTR handle;
1270 {
1271 struct debug_handle *info = (struct debug_handle *) handle;
1272
1273 return debug_make_type (info, DEBUG_KIND_VOID, 0);
1274 }
1275
1276 /* Make an integer type of a given size. The boolean argument is true
1277 if the integer is unsigned. */
1278
1279 debug_type
1280 debug_make_int_type (handle, size, unsignedp)
1281 PTR handle;
1282 unsigned int size;
1283 boolean unsignedp;
1284 {
1285 struct debug_handle *info = (struct debug_handle *) handle;
1286 struct debug_type *t;
1287
1288 t = debug_make_type (info, DEBUG_KIND_INT, size);
1289 if (t == NULL)
1290 return DEBUG_TYPE_NULL;
1291
1292 t->u.kint = unsignedp;
1293
1294 return t;
1295 }
1296
1297 /* Make a floating point type of a given size. FIXME: On some
1298 platforms, like an Alpha, you probably need to be able to specify
1299 the format. */
1300
1301 debug_type
1302 debug_make_float_type (handle, size)
1303 PTR handle;
1304 unsigned int size;
1305 {
1306 struct debug_handle *info = (struct debug_handle *) handle;
1307
1308 return debug_make_type (info, DEBUG_KIND_FLOAT, size);
1309 }
1310
1311 /* Make a boolean type of a given size. */
1312
1313 debug_type
1314 debug_make_bool_type (handle, size)
1315 PTR handle;
1316 unsigned int size;
1317 {
1318 struct debug_handle *info = (struct debug_handle *) handle;
1319
1320 return debug_make_type (info, DEBUG_KIND_BOOL, size);
1321 }
1322
1323 /* Make a complex type of a given size. */
1324
1325 debug_type
1326 debug_make_complex_type (handle, size)
1327 PTR handle;
1328 unsigned int size;
1329 {
1330 struct debug_handle *info = (struct debug_handle *) handle;
1331
1332 return debug_make_type (info, DEBUG_KIND_COMPLEX, size);
1333 }
1334
1335 /* Make a structure type. The second argument is true for a struct,
1336 false for a union. The third argument is the size of the struct.
1337 The fourth argument is a NULL terminated array of fields. */
1338
1339 debug_type
1340 debug_make_struct_type (handle, structp, size, fields)
1341 PTR handle;
1342 boolean structp;
1343 bfd_vma size;
1344 debug_field *fields;
1345 {
1346 struct debug_handle *info = (struct debug_handle *) handle;
1347 struct debug_type *t;
1348 struct debug_class_type *c;
1349
1350 t = debug_make_type (info,
1351 structp ? DEBUG_KIND_STRUCT : DEBUG_KIND_UNION,
1352 size);
1353 if (t == NULL)
1354 return DEBUG_TYPE_NULL;
1355
1356 c = (struct debug_class_type *) xmalloc (sizeof *c);
1357 memset (c, 0, sizeof *c);
1358
1359 c->fields = fields;
1360
1361 t->u.kclass = c;
1362
1363 return t;
1364 }
1365
1366 /* Make an object type. The first three arguments after the handle
1367 are the same as for debug_make_struct_type. The next arguments are
1368 a NULL terminated array of base classes, a NULL terminated array of
1369 methods, the type of the object holding the virtual function table
1370 if it is not this object, and a boolean which is true if this
1371 object has its own virtual function table. */
1372
1373 debug_type
1374 debug_make_object_type (handle, structp, size, fields, baseclasses,
1375 methods, vptrbase, ownvptr)
1376 PTR handle;
1377 boolean structp;
1378 bfd_vma size;
1379 debug_field *fields;
1380 debug_baseclass *baseclasses;
1381 debug_method *methods;
1382 debug_type vptrbase;
1383 boolean ownvptr;
1384 {
1385 struct debug_handle *info = (struct debug_handle *) handle;
1386 struct debug_type *t;
1387 struct debug_class_type *c;
1388
1389 t = debug_make_type (info,
1390 structp ? DEBUG_KIND_CLASS : DEBUG_KIND_UNION_CLASS,
1391 size);
1392 if (t == NULL)
1393 return DEBUG_TYPE_NULL;
1394
1395 c = (struct debug_class_type *) xmalloc (sizeof *c);
1396 memset (c, 0, sizeof *c);
1397
1398 c->fields = fields;
1399 c->baseclasses = baseclasses;
1400 c->methods = methods;
1401 if (ownvptr)
1402 c->vptrbase = t;
1403 else
1404 c->vptrbase = vptrbase;
1405
1406 t->u.kclass = c;
1407
1408 return t;
1409 }
1410
1411 /* Make an enumeration type. The arguments are a null terminated
1412 array of strings, and an array of corresponding values. */
1413
1414 debug_type
1415 debug_make_enum_type (handle, names, values)
1416 PTR handle;
1417 const char **names;
1418 bfd_signed_vma *values;
1419 {
1420 struct debug_handle *info = (struct debug_handle *) handle;
1421 struct debug_type *t;
1422 struct debug_enum_type *e;
1423
1424 t = debug_make_type (info, DEBUG_KIND_ENUM, 0);
1425 if (t == NULL)
1426 return DEBUG_TYPE_NULL;
1427
1428 e = (struct debug_enum_type *) xmalloc (sizeof *e);
1429 memset (e, 0, sizeof *e);
1430
1431 e->names = names;
1432 e->values = values;
1433
1434 t->u.kenum = e;
1435
1436 return t;
1437 }
1438
1439 /* Make a pointer to a given type. */
1440
1441 debug_type
1442 debug_make_pointer_type (handle, type)
1443 PTR handle;
1444 debug_type type;
1445 {
1446 struct debug_handle *info = (struct debug_handle *) handle;
1447 struct debug_type *t;
1448
1449 if (type == NULL)
1450 return DEBUG_TYPE_NULL;
1451
1452 if (type->pointer != DEBUG_TYPE_NULL)
1453 return type->pointer;
1454
1455 t = debug_make_type (info, DEBUG_KIND_POINTER, 0);
1456 if (t == NULL)
1457 return DEBUG_TYPE_NULL;
1458
1459 t->u.kpointer = type;
1460
1461 type->pointer = t;
1462
1463 return t;
1464 }
1465
1466 /* Make a function returning a given type. FIXME: We should be able
1467 to record the parameter types. */
1468
1469 debug_type
1470 debug_make_function_type (handle, type, arg_types, varargs)
1471 PTR handle;
1472 debug_type type;
1473 debug_type *arg_types;
1474 boolean varargs;
1475 {
1476 struct debug_handle *info = (struct debug_handle *) handle;
1477 struct debug_type *t;
1478 struct debug_function_type *f;
1479
1480 if (type == NULL)
1481 return DEBUG_TYPE_NULL;
1482
1483 t = debug_make_type (info, DEBUG_KIND_FUNCTION, 0);
1484 if (t == NULL)
1485 return DEBUG_TYPE_NULL;
1486
1487 f = (struct debug_function_type *) xmalloc (sizeof *f);
1488 memset (f, 0, sizeof *f);
1489
1490 f->return_type = type;
1491 f->arg_types = arg_types;
1492 f->varargs = varargs;
1493
1494 t->u.kfunction = f;
1495
1496 return t;
1497 }
1498
1499 /* Make a reference to a given type. */
1500
1501 debug_type
1502 debug_make_reference_type (handle, type)
1503 PTR handle;
1504 debug_type type;
1505 {
1506 struct debug_handle *info = (struct debug_handle *) handle;
1507 struct debug_type *t;
1508
1509 if (type == NULL)
1510 return DEBUG_TYPE_NULL;
1511
1512 t = debug_make_type (info, DEBUG_KIND_REFERENCE, 0);
1513 if (t == NULL)
1514 return DEBUG_TYPE_NULL;
1515
1516 t->u.kreference = type;
1517
1518 return t;
1519 }
1520
1521 /* Make a range of a given type from a lower to an upper bound. */
1522
1523 debug_type
1524 debug_make_range_type (handle, type, lower, upper)
1525 PTR handle;
1526 debug_type type;
1527 bfd_signed_vma lower;
1528 bfd_signed_vma upper;
1529 {
1530 struct debug_handle *info = (struct debug_handle *) handle;
1531 struct debug_type *t;
1532 struct debug_range_type *r;
1533
1534 if (type == NULL)
1535 return DEBUG_TYPE_NULL;
1536
1537 t = debug_make_type (info, DEBUG_KIND_RANGE, 0);
1538 if (t == NULL)
1539 return DEBUG_TYPE_NULL;
1540
1541 r = (struct debug_range_type *) xmalloc (sizeof *r);
1542 memset (r, 0, sizeof *r);
1543
1544 r->type = type;
1545 r->lower = lower;
1546 r->upper = upper;
1547
1548 t->u.krange = r;
1549
1550 return t;
1551 }
1552
1553 /* Make an array type. The second argument is the type of an element
1554 of the array. The third argument is the type of a range of the
1555 array. The fourth and fifth argument are the lower and upper
1556 bounds, respectively. The sixth argument is true if this array is
1557 actually a string, as in C. */
1558
1559 debug_type
1560 debug_make_array_type (handle, element_type, range_type, lower, upper,
1561 stringp)
1562 PTR handle;
1563 debug_type element_type;
1564 debug_type range_type;
1565 bfd_signed_vma lower;
1566 bfd_signed_vma upper;
1567 boolean stringp;
1568 {
1569 struct debug_handle *info = (struct debug_handle *) handle;
1570 struct debug_type *t;
1571 struct debug_array_type *a;
1572
1573 if (element_type == NULL || range_type == NULL)
1574 return DEBUG_TYPE_NULL;
1575
1576 t = debug_make_type (info, DEBUG_KIND_ARRAY, 0);
1577 if (t == NULL)
1578 return DEBUG_TYPE_NULL;
1579
1580 a = (struct debug_array_type *) xmalloc (sizeof *a);
1581 memset (a, 0, sizeof *a);
1582
1583 a->element_type = element_type;
1584 a->range_type = range_type;
1585 a->lower = lower;
1586 a->upper = upper;
1587 a->stringp = stringp;
1588
1589 t->u.karray = a;
1590
1591 return t;
1592 }
1593
1594 /* Make a set of a given type. For example, a Pascal set type. The
1595 boolean argument is true if this set is actually a bitstring, as in
1596 CHILL. */
1597
1598 debug_type
1599 debug_make_set_type (handle, type, bitstringp)
1600 PTR handle;
1601 debug_type type;
1602 boolean bitstringp;
1603 {
1604 struct debug_handle *info = (struct debug_handle *) handle;
1605 struct debug_type *t;
1606 struct debug_set_type *s;
1607
1608 if (type == NULL)
1609 return DEBUG_TYPE_NULL;
1610
1611 t = debug_make_type (info, DEBUG_KIND_SET, 0);
1612 if (t == NULL)
1613 return DEBUG_TYPE_NULL;
1614
1615 s = (struct debug_set_type *) xmalloc (sizeof *s);
1616 memset (s, 0, sizeof *s);
1617
1618 s->type = type;
1619 s->bitstringp = bitstringp;
1620
1621 t->u.kset = s;
1622
1623 return t;
1624 }
1625
1626 /* Make a type for a pointer which is relative to an object. The
1627 second argument is the type of the object to which the pointer is
1628 relative. The third argument is the type that the pointer points
1629 to. */
1630
1631 debug_type
1632 debug_make_offset_type (handle, base_type, target_type)
1633 PTR handle;
1634 debug_type base_type;
1635 debug_type target_type;
1636 {
1637 struct debug_handle *info = (struct debug_handle *) handle;
1638 struct debug_type *t;
1639 struct debug_offset_type *o;
1640
1641 if (base_type == NULL || target_type == NULL)
1642 return DEBUG_TYPE_NULL;
1643
1644 t = debug_make_type (info, DEBUG_KIND_OFFSET, 0);
1645 if (t == NULL)
1646 return DEBUG_TYPE_NULL;
1647
1648 o = (struct debug_offset_type *) xmalloc (sizeof *o);
1649 memset (o, 0, sizeof *o);
1650
1651 o->base_type = base_type;
1652 o->target_type = target_type;
1653
1654 t->u.koffset = o;
1655
1656 return t;
1657 }
1658
1659 /* Make a type for a method function. The second argument is the
1660 return type, the third argument is the domain, and the fourth
1661 argument is a NULL terminated array of argument types. */
1662
1663 debug_type
1664 debug_make_method_type (handle, return_type, domain_type, arg_types, varargs)
1665 PTR handle;
1666 debug_type return_type;
1667 debug_type domain_type;
1668 debug_type *arg_types;
1669 boolean varargs;
1670 {
1671 struct debug_handle *info = (struct debug_handle *) handle;
1672 struct debug_type *t;
1673 struct debug_method_type *m;
1674
1675 if (return_type == NULL)
1676 return DEBUG_TYPE_NULL;
1677
1678 t = debug_make_type (info, DEBUG_KIND_METHOD, 0);
1679 if (t == NULL)
1680 return DEBUG_TYPE_NULL;
1681
1682 m = (struct debug_method_type *) xmalloc (sizeof *m);
1683 memset (m, 0, sizeof *m);
1684
1685 m->return_type = return_type;
1686 m->domain_type = domain_type;
1687 m->arg_types = arg_types;
1688 m->varargs = varargs;
1689
1690 t->u.kmethod = m;
1691
1692 return t;
1693 }
1694
1695 /* Make a const qualified version of a given type. */
1696
1697 debug_type
1698 debug_make_const_type (handle, type)
1699 PTR handle;
1700 debug_type type;
1701 {
1702 struct debug_handle *info = (struct debug_handle *) handle;
1703 struct debug_type *t;
1704
1705 if (type == NULL)
1706 return DEBUG_TYPE_NULL;
1707
1708 t = debug_make_type (info, DEBUG_KIND_CONST, 0);
1709 if (t == NULL)
1710 return DEBUG_TYPE_NULL;
1711
1712 t->u.kconst = type;
1713
1714 return t;
1715 }
1716
1717 /* Make a volatile qualified version of a given type. */
1718
1719 debug_type
1720 debug_make_volatile_type (handle, type)
1721 PTR handle;
1722 debug_type type;
1723 {
1724 struct debug_handle *info = (struct debug_handle *) handle;
1725 struct debug_type *t;
1726
1727 if (type == NULL)
1728 return DEBUG_TYPE_NULL;
1729
1730 t = debug_make_type (info, DEBUG_KIND_VOLATILE, 0);
1731 if (t == NULL)
1732 return DEBUG_TYPE_NULL;
1733
1734 t->u.kvolatile = type;
1735
1736 return t;
1737 }
1738
1739 /* Make an undefined tagged type. For example, a struct which has
1740 been mentioned, but not defined. */
1741
1742 debug_type
1743 debug_make_undefined_tagged_type (handle, name, kind)
1744 PTR handle;
1745 const char *name;
1746 enum debug_type_kind kind;
1747 {
1748 struct debug_handle *info = (struct debug_handle *) handle;
1749 struct debug_type *t;
1750
1751 if (name == NULL)
1752 return DEBUG_TYPE_NULL;
1753
1754 switch (kind)
1755 {
1756 case DEBUG_KIND_STRUCT:
1757 case DEBUG_KIND_UNION:
1758 case DEBUG_KIND_CLASS:
1759 case DEBUG_KIND_UNION_CLASS:
1760 case DEBUG_KIND_ENUM:
1761 break;
1762
1763 default:
1764 debug_error (_("debug_make_undefined_type: unsupported kind"));
1765 return DEBUG_TYPE_NULL;
1766 }
1767
1768 t = debug_make_type (info, kind, 0);
1769 if (t == NULL)
1770 return DEBUG_TYPE_NULL;
1771
1772 return debug_tag_type (handle, name, t);
1773 }
1774
1775 /* Make a base class for an object. The second argument is the base
1776 class type. The third argument is the bit position of this base
1777 class in the object (always 0 unless doing multiple inheritance).
1778 The fourth argument is whether this is a virtual class. The fifth
1779 argument is the visibility of the base class. */
1780
1781 /*ARGSUSED*/
1782 debug_baseclass
1783 debug_make_baseclass (handle, type, bitpos, virtual, visibility)
1784 PTR handle ATTRIBUTE_UNUSED;
1785 debug_type type;
1786 bfd_vma bitpos;
1787 boolean virtual;
1788 enum debug_visibility visibility;
1789 {
1790 struct debug_baseclass *b;
1791
1792 b = (struct debug_baseclass *) xmalloc (sizeof *b);
1793 memset (b, 0, sizeof *b);
1794
1795 b->type = type;
1796 b->bitpos = bitpos;
1797 b->virtual = virtual;
1798 b->visibility = visibility;
1799
1800 return b;
1801 }
1802
1803 /* Make a field for a struct. The second argument is the name. The
1804 third argument is the type of the field. The fourth argument is
1805 the bit position of the field. The fifth argument is the size of
1806 the field (it may be zero). The sixth argument is the visibility
1807 of the field. */
1808
1809 /*ARGSUSED*/
1810 debug_field
1811 debug_make_field (handle, name, type, bitpos, bitsize, visibility)
1812 PTR handle ATTRIBUTE_UNUSED;
1813 const char *name;
1814 debug_type type;
1815 bfd_vma bitpos;
1816 bfd_vma bitsize;
1817 enum debug_visibility visibility;
1818 {
1819 struct debug_field *f;
1820
1821 f = (struct debug_field *) xmalloc (sizeof *f);
1822 memset (f, 0, sizeof *f);
1823
1824 f->name = name;
1825 f->type = type;
1826 f->static_member = false;
1827 f->u.f.bitpos = bitpos;
1828 f->u.f.bitsize = bitsize;
1829 f->visibility = visibility;
1830
1831 return f;
1832 }
1833
1834 /* Make a static member of an object. The second argument is the
1835 name. The third argument is the type of the member. The fourth
1836 argument is the physical name of the member (i.e., the name as a
1837 global variable). The fifth argument is the visibility of the
1838 member. */
1839
1840 /*ARGSUSED*/
1841 debug_field
1842 debug_make_static_member (handle, name, type, physname, visibility)
1843 PTR handle ATTRIBUTE_UNUSED;
1844 const char *name;
1845 debug_type type;
1846 const char *physname;
1847 enum debug_visibility visibility;
1848 {
1849 struct debug_field *f;
1850
1851 f = (struct debug_field *) xmalloc (sizeof *f);
1852 memset (f, 0, sizeof *f);
1853
1854 f->name = name;
1855 f->type = type;
1856 f->static_member = true;
1857 f->u.s.physname = physname;
1858 f->visibility = visibility;
1859
1860 return f;
1861 }
1862
1863 /* Make a method. The second argument is the name, and the third
1864 argument is a NULL terminated array of method variants. */
1865
1866 /*ARGSUSED*/
1867 debug_method
1868 debug_make_method (handle, name, variants)
1869 PTR handle ATTRIBUTE_UNUSED;
1870 const char *name;
1871 debug_method_variant *variants;
1872 {
1873 struct debug_method *m;
1874
1875 m = (struct debug_method *) xmalloc (sizeof *m);
1876 memset (m, 0, sizeof *m);
1877
1878 m->name = name;
1879 m->variants = variants;
1880
1881 return m;
1882 }
1883
1884 /* Make a method argument. The second argument is the real name of
1885 the function. The third argument is the type of the function. The
1886 fourth argument is the visibility. The fifth argument is whether
1887 this is a const function. The sixth argument is whether this is a
1888 volatile function. The seventh argument is the offset in the
1889 virtual function table, if any. The eighth argument is the virtual
1890 function context. FIXME: Are the const and volatile arguments
1891 necessary? Could we just use debug_make_const_type? */
1892
1893 /*ARGSUSED*/
1894 debug_method_variant
1895 debug_make_method_variant (handle, physname, type, visibility, constp,
1896 volatilep, voffset, context)
1897 PTR handle ATTRIBUTE_UNUSED;
1898 const char *physname;
1899 debug_type type;
1900 enum debug_visibility visibility;
1901 boolean constp;
1902 boolean volatilep;
1903 bfd_vma voffset;
1904 debug_type context;
1905 {
1906 struct debug_method_variant *m;
1907
1908 m = (struct debug_method_variant *) xmalloc (sizeof *m);
1909 memset (m, 0, sizeof *m);
1910
1911 m->physname = physname;
1912 m->type = type;
1913 m->visibility = visibility;
1914 m->constp = constp;
1915 m->volatilep = volatilep;
1916 m->voffset = voffset;
1917 m->context = context;
1918
1919 return m;
1920 }
1921
1922 /* Make a static method argument. The arguments are the same as for
1923 debug_make_method_variant, except that the last two are omitted
1924 since a static method can not also be virtual. */
1925
1926 debug_method_variant
1927 debug_make_static_method_variant (handle, physname, type, visibility,
1928 constp, volatilep)
1929 PTR handle ATTRIBUTE_UNUSED;
1930 const char *physname;
1931 debug_type type;
1932 enum debug_visibility visibility;
1933 boolean constp;
1934 boolean volatilep;
1935 {
1936 struct debug_method_variant *m;
1937
1938 m = (struct debug_method_variant *) xmalloc (sizeof *m);
1939 memset (m, 0, sizeof *m);
1940
1941 m->physname = physname;
1942 m->type = type;
1943 m->visibility = visibility;
1944 m->constp = constp;
1945 m->volatilep = volatilep;
1946 m->voffset = VOFFSET_STATIC_METHOD;
1947
1948 return m;
1949 }
1950
1951 /* Name a type. */
1952
1953 debug_type
1954 debug_name_type (handle, name, type)
1955 PTR handle;
1956 const char *name;
1957 debug_type type;
1958 {
1959 struct debug_handle *info = (struct debug_handle *) handle;
1960 struct debug_type *t;
1961 struct debug_named_type *n;
1962 struct debug_name *nm;
1963
1964 if (name == NULL || type == NULL)
1965 return DEBUG_TYPE_NULL;
1966
1967 if (info->current_unit == NULL
1968 || info->current_file == NULL)
1969 {
1970 debug_error (_("debug_name_type: no current file"));
1971 return DEBUG_TYPE_NULL;
1972 }
1973
1974 t = debug_make_type (info, DEBUG_KIND_NAMED, 0);
1975 if (t == NULL)
1976 return DEBUG_TYPE_NULL;
1977
1978 n = (struct debug_named_type *) xmalloc (sizeof *n);
1979 memset (n, 0, sizeof *n);
1980
1981 n->type = type;
1982
1983 t->u.knamed = n;
1984
1985 /* We always add the name to the global namespace. This is probably
1986 wrong in some cases, but it seems to be right for stabs. FIXME. */
1987
1988 nm = debug_add_to_namespace (info, &info->current_file->globals, name,
1989 DEBUG_OBJECT_TYPE, DEBUG_LINKAGE_NONE);
1990 if (nm == NULL)
1991 return false;
1992
1993 nm->u.type = t;
1994
1995 n->name = nm;
1996
1997 return t;
1998 }
1999
2000 /* Tag a type. */
2001
2002 debug_type
2003 debug_tag_type (handle, name, type)
2004 PTR handle;
2005 const char *name;
2006 debug_type type;
2007 {
2008 struct debug_handle *info = (struct debug_handle *) handle;
2009 struct debug_type *t;
2010 struct debug_named_type *n;
2011 struct debug_name *nm;
2012
2013 if (name == NULL || type == NULL)
2014 return DEBUG_TYPE_NULL;
2015
2016 if (info->current_file == NULL)
2017 {
2018 debug_error (_("debug_tag_type: no current file"));
2019 return DEBUG_TYPE_NULL;
2020 }
2021
2022 if (type->kind == DEBUG_KIND_TAGGED)
2023 {
2024 if (strcmp (type->u.knamed->name->name, name) == 0)
2025 return type;
2026 debug_error (_("debug_tag_type: extra tag attempted"));
2027 return DEBUG_TYPE_NULL;
2028 }
2029
2030 t = debug_make_type (info, DEBUG_KIND_TAGGED, 0);
2031 if (t == NULL)
2032 return DEBUG_TYPE_NULL;
2033
2034 n = (struct debug_named_type *) xmalloc (sizeof *n);
2035 memset (n, 0, sizeof *n);
2036
2037 n->type = type;
2038
2039 t->u.knamed = n;
2040
2041 /* We keep a global namespace of tags for each compilation unit. I
2042 don't know if that is the right thing to do. */
2043
2044 nm = debug_add_to_namespace (info, &info->current_file->globals, name,
2045 DEBUG_OBJECT_TAG, DEBUG_LINKAGE_NONE);
2046 if (nm == NULL)
2047 return false;
2048
2049 nm->u.tag = t;
2050
2051 n->name = nm;
2052
2053 return t;
2054 }
2055
2056 /* Record the size of a given type. */
2057
2058 /*ARGSUSED*/
2059 boolean
2060 debug_record_type_size (handle, type, size)
2061 PTR handle ATTRIBUTE_UNUSED;
2062 debug_type type;
2063 unsigned int size;
2064 {
2065 if (type->size != 0 && type->size != size)
2066 fprintf (stderr, _("Warning: changing type size from %d to %d\n"),
2067 type->size, size);
2068
2069 type->size = size;
2070
2071 return true;
2072 }
2073
2074 /* Find a named type. */
2075
2076 debug_type
2077 debug_find_named_type (handle, name)
2078 PTR handle;
2079 const char *name;
2080 {
2081 struct debug_handle *info = (struct debug_handle *) handle;
2082 struct debug_block *b;
2083 struct debug_file *f;
2084
2085 /* We only search the current compilation unit. I don't know if
2086 this is right or not. */
2087
2088 if (info->current_unit == NULL)
2089 {
2090 debug_error (_("debug_find_named_type: no current compilation unit"));
2091 return DEBUG_TYPE_NULL;
2092 }
2093
2094 for (b = info->current_block; b != NULL; b = b->parent)
2095 {
2096 if (b->locals != NULL)
2097 {
2098 struct debug_name *n;
2099
2100 for (n = b->locals->list; n != NULL; n = n->next)
2101 {
2102 if (n->kind == DEBUG_OBJECT_TYPE
2103 && n->name[0] == name[0]
2104 && strcmp (n->name, name) == 0)
2105 return n->u.type;
2106 }
2107 }
2108 }
2109
2110 for (f = info->current_unit->files; f != NULL; f = f->next)
2111 {
2112 if (f->globals != NULL)
2113 {
2114 struct debug_name *n;
2115
2116 for (n = f->globals->list; n != NULL; n = n->next)
2117 {
2118 if (n->kind == DEBUG_OBJECT_TYPE
2119 && n->name[0] == name[0]
2120 && strcmp (n->name, name) == 0)
2121 return n->u.type;
2122 }
2123 }
2124 }
2125
2126 return DEBUG_TYPE_NULL;
2127 }
2128
2129 /* Find a tagged type. */
2130
2131 debug_type
2132 debug_find_tagged_type (handle, name, kind)
2133 PTR handle;
2134 const char *name;
2135 enum debug_type_kind kind;
2136 {
2137 struct debug_handle *info = (struct debug_handle *) handle;
2138 struct debug_unit *u;
2139
2140 /* We search the globals of all the compilation units. I don't know
2141 if this is correct or not. It would be easy to change. */
2142
2143 for (u = info->units; u != NULL; u = u->next)
2144 {
2145 struct debug_file *f;
2146
2147 for (f = u->files; f != NULL; f = f->next)
2148 {
2149 struct debug_name *n;
2150
2151 if (f->globals != NULL)
2152 {
2153 for (n = f->globals->list; n != NULL; n = n->next)
2154 {
2155 if (n->kind == DEBUG_OBJECT_TAG
2156 && (kind == DEBUG_KIND_ILLEGAL
2157 || n->u.tag->kind == kind)
2158 && n->name[0] == name[0]
2159 && strcmp (n->name, name) == 0)
2160 return n->u.tag;
2161 }
2162 }
2163 }
2164 }
2165
2166 return DEBUG_TYPE_NULL;
2167 }
2168
2169 /* Get a base type. We build a linked list on the stack to avoid
2170 crashing if the type is defined circularly. */
2171
2172 static struct debug_type *
2173 debug_get_real_type (handle, type, list)
2174 PTR handle;
2175 debug_type type;
2176 struct debug_type_real_list *list;
2177 {
2178 struct debug_type_real_list *l;
2179 struct debug_type_real_list rl;
2180
2181 switch (type->kind)
2182 {
2183 default:
2184 return type;
2185
2186 case DEBUG_KIND_INDIRECT:
2187 case DEBUG_KIND_NAMED:
2188 case DEBUG_KIND_TAGGED:
2189 break;
2190 }
2191
2192 for (l = list; l != NULL; l = l->next)
2193 {
2194 if (l->t == type)
2195 {
2196 fprintf (stderr,
2197 _("debug_get_real_type: circular debug information for %s\n"),
2198 debug_get_type_name (handle, type));
2199 return NULL;
2200 }
2201 }
2202
2203 rl.next = list;
2204 rl.t = type;
2205
2206 switch (type->kind)
2207 {
2208 /* The default case is just here to avoid warnings. */
2209 default:
2210 case DEBUG_KIND_INDIRECT:
2211 if (*type->u.kindirect->slot != NULL)
2212 return debug_get_real_type (handle, *type->u.kindirect->slot, &rl);
2213 return type;
2214 case DEBUG_KIND_NAMED:
2215 case DEBUG_KIND_TAGGED:
2216 return debug_get_real_type (handle, type->u.knamed->type, &rl);
2217 }
2218 /*NOTREACHED*/
2219 }
2220
2221 /* Get the kind of a type. */
2222
2223 enum debug_type_kind
2224 debug_get_type_kind (handle, type)
2225 PTR handle;
2226 debug_type type;
2227 {
2228 if (type == NULL)
2229 return DEBUG_KIND_ILLEGAL;
2230 type = debug_get_real_type (handle, type, NULL);
2231 if (type == NULL)
2232 return DEBUG_KIND_ILLEGAL;
2233 return type->kind;
2234 }
2235
2236 /* Get the name of a type. */
2237
2238 const char *
2239 debug_get_type_name (handle, type)
2240 PTR handle;
2241 debug_type type;
2242 {
2243 if (type->kind == DEBUG_KIND_INDIRECT)
2244 {
2245 if (*type->u.kindirect->slot != NULL)
2246 return debug_get_type_name (handle, *type->u.kindirect->slot);
2247 return type->u.kindirect->tag;
2248 }
2249 if (type->kind == DEBUG_KIND_NAMED
2250 || type->kind == DEBUG_KIND_TAGGED)
2251 return type->u.knamed->name->name;
2252 return NULL;
2253 }
2254
2255 /* Get the size of a type. */
2256
2257 bfd_vma
2258 debug_get_type_size (handle, type)
2259 PTR handle;
2260 debug_type type;
2261 {
2262 if (type == NULL)
2263 return 0;
2264
2265 /* We don't call debug_get_real_type, because somebody might have
2266 called debug_record_type_size on a named or indirect type. */
2267
2268 if (type->size != 0)
2269 return type->size;
2270
2271 switch (type->kind)
2272 {
2273 default:
2274 return 0;
2275 case DEBUG_KIND_INDIRECT:
2276 if (*type->u.kindirect->slot != NULL)
2277 return debug_get_type_size (handle, *type->u.kindirect->slot);
2278 return 0;
2279 case DEBUG_KIND_NAMED:
2280 case DEBUG_KIND_TAGGED:
2281 return debug_get_type_size (handle, type->u.knamed->type);
2282 }
2283 /*NOTREACHED*/
2284 }
2285
2286 /* Get the return type of a function or method type. */
2287
2288 debug_type
2289 debug_get_return_type (handle, type)
2290 PTR handle;
2291 debug_type type;
2292 {
2293 if (type == NULL)
2294 return DEBUG_TYPE_NULL;
2295 type = debug_get_real_type (handle, type, NULL);
2296 if (type == NULL)
2297 return DEBUG_TYPE_NULL;
2298 switch (type->kind)
2299 {
2300 default:
2301 return DEBUG_TYPE_NULL;
2302 case DEBUG_KIND_FUNCTION:
2303 return type->u.kfunction->return_type;
2304 case DEBUG_KIND_METHOD:
2305 return type->u.kmethod->return_type;
2306 }
2307 /*NOTREACHED*/
2308 }
2309
2310 /* Get the parameter types of a function or method type (except that
2311 we don't currently store the parameter types of a function). */
2312
2313 const debug_type *
2314 debug_get_parameter_types (handle, type, pvarargs)
2315 PTR handle;
2316 debug_type type;
2317 boolean *pvarargs;
2318 {
2319 if (type == NULL)
2320 return NULL;
2321 type = debug_get_real_type (handle, type, NULL);
2322 if (type == NULL)
2323 return NULL;
2324 switch (type->kind)
2325 {
2326 default:
2327 return NULL;
2328 case DEBUG_KIND_FUNCTION:
2329 *pvarargs = type->u.kfunction->varargs;
2330 return type->u.kfunction->arg_types;
2331 case DEBUG_KIND_METHOD:
2332 *pvarargs = type->u.kmethod->varargs;
2333 return type->u.kmethod->arg_types;
2334 }
2335 /*NOTREACHED*/
2336 }
2337
2338 /* Get the target type of a type. */
2339
2340 debug_type
2341 debug_get_target_type (handle, type)
2342 PTR handle;
2343 debug_type type;
2344 {
2345 if (type == NULL)
2346 return NULL;
2347 type = debug_get_real_type (handle, type, NULL);
2348 if (type == NULL)
2349 return NULL;
2350 switch (type->kind)
2351 {
2352 default:
2353 return NULL;
2354 case DEBUG_KIND_POINTER:
2355 return type->u.kpointer;
2356 case DEBUG_KIND_REFERENCE:
2357 return type->u.kreference;
2358 case DEBUG_KIND_CONST:
2359 return type->u.kconst;
2360 case DEBUG_KIND_VOLATILE:
2361 return type->u.kvolatile;
2362 }
2363 /*NOTREACHED*/
2364 }
2365
2366 /* Get the NULL terminated array of fields for a struct, union, or
2367 class. */
2368
2369 const debug_field *
2370 debug_get_fields (handle, type)
2371 PTR handle;
2372 debug_type type;
2373 {
2374 if (type == NULL)
2375 return NULL;
2376 type = debug_get_real_type (handle, type, NULL);
2377 if (type == NULL)
2378 return NULL;
2379 switch (type->kind)
2380 {
2381 default:
2382 return NULL;
2383 case DEBUG_KIND_STRUCT:
2384 case DEBUG_KIND_UNION:
2385 case DEBUG_KIND_CLASS:
2386 case DEBUG_KIND_UNION_CLASS:
2387 return type->u.kclass->fields;
2388 }
2389 /*NOTREACHED*/
2390 }
2391
2392 /* Get the type of a field. */
2393
2394 /*ARGSUSED*/
2395 debug_type
2396 debug_get_field_type (handle, field)
2397 PTR handle ATTRIBUTE_UNUSED;
2398 debug_field field;
2399 {
2400 if (field == NULL)
2401 return NULL;
2402 return field->type;
2403 }
2404
2405 /* Get the name of a field. */
2406
2407 /*ARGSUSED*/
2408 const char *
2409 debug_get_field_name (handle, field)
2410 PTR handle ATTRIBUTE_UNUSED;
2411 debug_field field;
2412 {
2413 if (field == NULL)
2414 return NULL;
2415 return field->name;
2416 }
2417
2418 /* Get the bit position of a field. */
2419
2420 /*ARGSUSED*/
2421 bfd_vma
2422 debug_get_field_bitpos (handle, field)
2423 PTR handle ATTRIBUTE_UNUSED;
2424 debug_field field;
2425 {
2426 if (field == NULL || field->static_member)
2427 return (bfd_vma) -1;
2428 return field->u.f.bitpos;
2429 }
2430
2431 /* Get the bit size of a field. */
2432
2433 /*ARGSUSED*/
2434 bfd_vma
2435 debug_get_field_bitsize (handle, field)
2436 PTR handle ATTRIBUTE_UNUSED;
2437 debug_field field;
2438 {
2439 if (field == NULL || field->static_member)
2440 return (bfd_vma) -1;
2441 return field->u.f.bitsize;
2442 }
2443
2444 /* Get the visibility of a field. */
2445
2446 /*ARGSUSED*/
2447 enum debug_visibility
2448 debug_get_field_visibility (handle, field)
2449 PTR handle ATTRIBUTE_UNUSED;
2450 debug_field field;
2451 {
2452 if (field == NULL)
2453 return DEBUG_VISIBILITY_IGNORE;
2454 return field->visibility;
2455 }
2456
2457 /* Get the physical name of a field. */
2458
2459 const char *
2460 debug_get_field_physname (handle, field)
2461 PTR handle ATTRIBUTE_UNUSED;
2462 debug_field field;
2463 {
2464 if (field == NULL || ! field->static_member)
2465 return NULL;
2466 return field->u.s.physname;
2467 }
2468 \f
2469 /* Write out the debugging information. This is given a handle to
2470 debugging information, and a set of function pointers to call. */
2471
2472 boolean
2473 debug_write (handle, fns, fhandle)
2474 PTR handle;
2475 const struct debug_write_fns *fns;
2476 PTR fhandle;
2477 {
2478 struct debug_handle *info = (struct debug_handle *) handle;
2479 struct debug_unit *u;
2480
2481 /* We use a mark to tell whether we have already written out a
2482 particular name. We use an integer, so that we don't have to
2483 clear the mark fields if we happen to write out the same
2484 information more than once. */
2485 ++info->mark;
2486
2487 /* The base_id field holds an ID value which will never be used, so
2488 that we can tell whether we have assigned an ID during this call
2489 to debug_write. */
2490 info->base_id = info->class_id;
2491
2492 /* We keep a linked list of classes for which was have assigned ID's
2493 during this call to debug_write. */
2494 info->id_list = NULL;
2495
2496 for (u = info->units; u != NULL; u = u->next)
2497 {
2498 struct debug_file *f;
2499 boolean first_file;
2500
2501 info->current_write_lineno = u->linenos;
2502 info->current_write_lineno_index = 0;
2503
2504 if (! (*fns->start_compilation_unit) (fhandle, u->files->filename))
2505 return false;
2506
2507 first_file = true;
2508 for (f = u->files; f != NULL; f = f->next)
2509 {
2510 struct debug_name *n;
2511
2512 if (first_file)
2513 first_file = false;
2514 else
2515 {
2516 if (! (*fns->start_source) (fhandle, f->filename))
2517 return false;
2518 }
2519
2520 if (f->globals != NULL)
2521 {
2522 for (n = f->globals->list; n != NULL; n = n->next)
2523 {
2524 if (! debug_write_name (info, fns, fhandle, n))
2525 return false;
2526 }
2527 }
2528 }
2529
2530 /* Output any line number information which hasn't already been
2531 handled. */
2532 if (! debug_write_linenos (info, fns, fhandle, (bfd_vma) -1))
2533 return false;
2534 }
2535
2536 return true;
2537 }
2538
2539 /* Write out an element in a namespace. */
2540
2541 static boolean
2542 debug_write_name (info, fns, fhandle, n)
2543 struct debug_handle *info;
2544 const struct debug_write_fns *fns;
2545 PTR fhandle;
2546 struct debug_name *n;
2547 {
2548 switch (n->kind)
2549 {
2550 case DEBUG_OBJECT_TYPE:
2551 if (! debug_write_type (info, fns, fhandle, n->u.type, n)
2552 || ! (*fns->typdef) (fhandle, n->name))
2553 return false;
2554 return true;
2555 case DEBUG_OBJECT_TAG:
2556 if (! debug_write_type (info, fns, fhandle, n->u.tag, n))
2557 return false;
2558 return (*fns->tag) (fhandle, n->name);
2559 case DEBUG_OBJECT_VARIABLE:
2560 if (! debug_write_type (info, fns, fhandle, n->u.variable->type,
2561 (struct debug_name *) NULL))
2562 return false;
2563 return (*fns->variable) (fhandle, n->name, n->u.variable->kind,
2564 n->u.variable->val);
2565 case DEBUG_OBJECT_FUNCTION:
2566 return debug_write_function (info, fns, fhandle, n->name,
2567 n->linkage, n->u.function);
2568 case DEBUG_OBJECT_INT_CONSTANT:
2569 return (*fns->int_constant) (fhandle, n->name, n->u.int_constant);
2570 case DEBUG_OBJECT_FLOAT_CONSTANT:
2571 return (*fns->float_constant) (fhandle, n->name, n->u.float_constant);
2572 case DEBUG_OBJECT_TYPED_CONSTANT:
2573 if (! debug_write_type (info, fns, fhandle, n->u.typed_constant->type,
2574 (struct debug_name *) NULL))
2575 return false;
2576 return (*fns->typed_constant) (fhandle, n->name,
2577 n->u.typed_constant->val);
2578 default:
2579 abort ();
2580 return false;
2581 }
2582 /*NOTREACHED*/
2583 }
2584
2585 /* Write out a type. If the type is DEBUG_KIND_NAMED or
2586 DEBUG_KIND_TAGGED, then the name argument is the name for which we
2587 are about to call typedef or tag. If the type is anything else,
2588 then the name argument is a tag from a DEBUG_KIND_TAGGED type which
2589 points to this one. */
2590
2591 static boolean
2592 debug_write_type (info, fns, fhandle, type, name)
2593 struct debug_handle *info;
2594 const struct debug_write_fns *fns;
2595 PTR fhandle;
2596 struct debug_type *type;
2597 struct debug_name *name;
2598 {
2599 unsigned int i;
2600 int is;
2601 const char *tag = NULL;
2602
2603 /* If we have a name for this type, just output it. We only output
2604 typedef names after they have been defined. We output type tags
2605 whenever we are not actually defining them. */
2606 if ((type->kind == DEBUG_KIND_NAMED
2607 || type->kind == DEBUG_KIND_TAGGED)
2608 && (type->u.knamed->name->mark == info->mark
2609 || (type->kind == DEBUG_KIND_TAGGED
2610 && type->u.knamed->name != name)))
2611 {
2612 if (type->kind == DEBUG_KIND_NAMED)
2613 return (*fns->typedef_type) (fhandle, type->u.knamed->name->name);
2614 else
2615 {
2616 struct debug_type *real;
2617 unsigned int id;
2618
2619 real = debug_get_real_type ((PTR) info, type, NULL);
2620 if (real == NULL)
2621 return (*fns->empty_type) (fhandle);
2622 id = 0;
2623 if ((real->kind == DEBUG_KIND_STRUCT
2624 || real->kind == DEBUG_KIND_UNION
2625 || real->kind == DEBUG_KIND_CLASS
2626 || real->kind == DEBUG_KIND_UNION_CLASS)
2627 && real->u.kclass != NULL)
2628 {
2629 if (real->u.kclass->id <= info->base_id)
2630 {
2631 if (! debug_set_class_id (info,
2632 type->u.knamed->name->name,
2633 real))
2634 return false;
2635 }
2636 id = real->u.kclass->id;
2637 }
2638
2639 return (*fns->tag_type) (fhandle, type->u.knamed->name->name, id,
2640 real->kind);
2641 }
2642 }
2643
2644 /* Mark the name after we have already looked for a known name, so
2645 that we don't just define a type in terms of itself. We need to
2646 mark the name here so that a struct containing a pointer to
2647 itself will work. */
2648 if (name != NULL)
2649 name->mark = info->mark;
2650
2651 if (name != NULL
2652 && type->kind != DEBUG_KIND_NAMED
2653 && type->kind != DEBUG_KIND_TAGGED)
2654 {
2655 assert (name->kind == DEBUG_OBJECT_TAG);
2656 tag = name->name;
2657 }
2658
2659 switch (type->kind)
2660 {
2661 case DEBUG_KIND_ILLEGAL:
2662 debug_error (_("debug_write_type: illegal type encountered"));
2663 return false;
2664 case DEBUG_KIND_INDIRECT:
2665 if (*type->u.kindirect->slot == DEBUG_TYPE_NULL)
2666 return (*fns->empty_type) (fhandle);
2667 return debug_write_type (info, fns, fhandle, *type->u.kindirect->slot,
2668 name);
2669 case DEBUG_KIND_VOID:
2670 return (*fns->void_type) (fhandle);
2671 case DEBUG_KIND_INT:
2672 return (*fns->int_type) (fhandle, type->size, type->u.kint);
2673 case DEBUG_KIND_FLOAT:
2674 return (*fns->float_type) (fhandle, type->size);
2675 case DEBUG_KIND_COMPLEX:
2676 return (*fns->complex_type) (fhandle, type->size);
2677 case DEBUG_KIND_BOOL:
2678 return (*fns->bool_type) (fhandle, type->size);
2679 case DEBUG_KIND_STRUCT:
2680 case DEBUG_KIND_UNION:
2681 if (type->u.kclass != NULL)
2682 {
2683 if (type->u.kclass->id <= info->base_id)
2684 {
2685 if (! debug_set_class_id (info, tag, type))
2686 return false;
2687 }
2688
2689 if (info->mark == type->u.kclass->mark)
2690 {
2691 /* We are currently outputting this struct, or we have
2692 already output it. I don't know if this can happen,
2693 but it can happen for a class. */
2694 assert (type->u.kclass->id > info->base_id);
2695 return (*fns->tag_type) (fhandle, tag, type->u.kclass->id,
2696 type->kind);
2697 }
2698 type->u.kclass->mark = info->mark;
2699 }
2700
2701 if (! (*fns->start_struct_type) (fhandle, tag,
2702 (type->u.kclass != NULL
2703 ? type->u.kclass->id
2704 : 0),
2705 type->kind == DEBUG_KIND_STRUCT,
2706 type->size))
2707 return false;
2708 if (type->u.kclass != NULL
2709 && type->u.kclass->fields != NULL)
2710 {
2711 for (i = 0; type->u.kclass->fields[i] != NULL; i++)
2712 {
2713 struct debug_field *f;
2714
2715 f = type->u.kclass->fields[i];
2716 if (! debug_write_type (info, fns, fhandle, f->type,
2717 (struct debug_name *) NULL)
2718 || ! (*fns->struct_field) (fhandle, f->name, f->u.f.bitpos,
2719 f->u.f.bitsize, f->visibility))
2720 return false;
2721 }
2722 }
2723 return (*fns->end_struct_type) (fhandle);
2724 case DEBUG_KIND_CLASS:
2725 case DEBUG_KIND_UNION_CLASS:
2726 return debug_write_class_type (info, fns, fhandle, type, tag);
2727 case DEBUG_KIND_ENUM:
2728 if (type->u.kenum == NULL)
2729 return (*fns->enum_type) (fhandle, tag, (const char **) NULL,
2730 (bfd_signed_vma *) NULL);
2731 return (*fns->enum_type) (fhandle, tag, type->u.kenum->names,
2732 type->u.kenum->values);
2733 case DEBUG_KIND_POINTER:
2734 if (! debug_write_type (info, fns, fhandle, type->u.kpointer,
2735 (struct debug_name *) NULL))
2736 return false;
2737 return (*fns->pointer_type) (fhandle);
2738 case DEBUG_KIND_FUNCTION:
2739 if (! debug_write_type (info, fns, fhandle,
2740 type->u.kfunction->return_type,
2741 (struct debug_name *) NULL))
2742 return false;
2743 if (type->u.kfunction->arg_types == NULL)
2744 is = -1;
2745 else
2746 {
2747 for (is = 0; type->u.kfunction->arg_types[is] != NULL; is++)
2748 if (! debug_write_type (info, fns, fhandle,
2749 type->u.kfunction->arg_types[is],
2750 (struct debug_name *) NULL))
2751 return false;
2752 }
2753 return (*fns->function_type) (fhandle, is,
2754 type->u.kfunction->varargs);
2755 case DEBUG_KIND_REFERENCE:
2756 if (! debug_write_type (info, fns, fhandle, type->u.kreference,
2757 (struct debug_name *) NULL))
2758 return false;
2759 return (*fns->reference_type) (fhandle);
2760 case DEBUG_KIND_RANGE:
2761 if (! debug_write_type (info, fns, fhandle, type->u.krange->type,
2762 (struct debug_name *) NULL))
2763 return false;
2764 return (*fns->range_type) (fhandle, type->u.krange->lower,
2765 type->u.krange->upper);
2766 case DEBUG_KIND_ARRAY:
2767 if (! debug_write_type (info, fns, fhandle, type->u.karray->element_type,
2768 (struct debug_name *) NULL)
2769 || ! debug_write_type (info, fns, fhandle,
2770 type->u.karray->range_type,
2771 (struct debug_name *) NULL))
2772 return false;
2773 return (*fns->array_type) (fhandle, type->u.karray->lower,
2774 type->u.karray->upper,
2775 type->u.karray->stringp);
2776 case DEBUG_KIND_SET:
2777 if (! debug_write_type (info, fns, fhandle, type->u.kset->type,
2778 (struct debug_name *) NULL))
2779 return false;
2780 return (*fns->set_type) (fhandle, type->u.kset->bitstringp);
2781 case DEBUG_KIND_OFFSET:
2782 if (! debug_write_type (info, fns, fhandle, type->u.koffset->base_type,
2783 (struct debug_name *) NULL)
2784 || ! debug_write_type (info, fns, fhandle,
2785 type->u.koffset->target_type,
2786 (struct debug_name *) NULL))
2787 return false;
2788 return (*fns->offset_type) (fhandle);
2789 case DEBUG_KIND_METHOD:
2790 if (! debug_write_type (info, fns, fhandle,
2791 type->u.kmethod->return_type,
2792 (struct debug_name *) NULL))
2793 return false;
2794 if (type->u.kmethod->arg_types == NULL)
2795 is = -1;
2796 else
2797 {
2798 for (is = 0; type->u.kmethod->arg_types[is] != NULL; is++)
2799 if (! debug_write_type (info, fns, fhandle,
2800 type->u.kmethod->arg_types[is],
2801 (struct debug_name *) NULL))
2802 return false;
2803 }
2804 if (type->u.kmethod->domain_type != NULL)
2805 {
2806 if (! debug_write_type (info, fns, fhandle,
2807 type->u.kmethod->domain_type,
2808 (struct debug_name *) NULL))
2809 return false;
2810 }
2811 return (*fns->method_type) (fhandle,
2812 type->u.kmethod->domain_type != NULL,
2813 is,
2814 type->u.kmethod->varargs);
2815 case DEBUG_KIND_CONST:
2816 if (! debug_write_type (info, fns, fhandle, type->u.kconst,
2817 (struct debug_name *) NULL))
2818 return false;
2819 return (*fns->const_type) (fhandle);
2820 case DEBUG_KIND_VOLATILE:
2821 if (! debug_write_type (info, fns, fhandle, type->u.kvolatile,
2822 (struct debug_name *) NULL))
2823 return false;
2824 return (*fns->volatile_type) (fhandle);
2825 case DEBUG_KIND_NAMED:
2826 return debug_write_type (info, fns, fhandle, type->u.knamed->type,
2827 (struct debug_name *) NULL);
2828 case DEBUG_KIND_TAGGED:
2829 return debug_write_type (info, fns, fhandle, type->u.knamed->type,
2830 type->u.knamed->name);
2831 default:
2832 abort ();
2833 return false;
2834 }
2835 }
2836
2837 /* Write out a class type. */
2838
2839 static boolean
2840 debug_write_class_type (info, fns, fhandle, type, tag)
2841 struct debug_handle *info;
2842 const struct debug_write_fns *fns;
2843 PTR fhandle;
2844 struct debug_type *type;
2845 const char *tag;
2846 {
2847 unsigned int i;
2848 unsigned int id;
2849 struct debug_type *vptrbase;
2850
2851 if (type->u.kclass == NULL)
2852 {
2853 id = 0;
2854 vptrbase = NULL;
2855 }
2856 else
2857 {
2858 if (type->u.kclass->id <= info->base_id)
2859 {
2860 if (! debug_set_class_id (info, tag, type))
2861 return false;
2862 }
2863
2864 if (info->mark == type->u.kclass->mark)
2865 {
2866 /* We are currently outputting this class, or we have
2867 already output it. This can happen when there are
2868 methods for an anonymous class. */
2869 assert (type->u.kclass->id > info->base_id);
2870 return (*fns->tag_type) (fhandle, tag, type->u.kclass->id,
2871 type->kind);
2872 }
2873 type->u.kclass->mark = info->mark;
2874 id = type->u.kclass->id;
2875
2876 vptrbase = type->u.kclass->vptrbase;
2877 if (vptrbase != NULL && vptrbase != type)
2878 {
2879 if (! debug_write_type (info, fns, fhandle, vptrbase,
2880 (struct debug_name *) NULL))
2881 return false;
2882 }
2883 }
2884
2885 if (! (*fns->start_class_type) (fhandle, tag, id,
2886 type->kind == DEBUG_KIND_CLASS,
2887 type->size,
2888 vptrbase != NULL,
2889 vptrbase == type))
2890 return false;
2891
2892 if (type->u.kclass != NULL)
2893 {
2894 if (type->u.kclass->fields != NULL)
2895 {
2896 for (i = 0; type->u.kclass->fields[i] != NULL; i++)
2897 {
2898 struct debug_field *f;
2899
2900 f = type->u.kclass->fields[i];
2901 if (! debug_write_type (info, fns, fhandle, f->type,
2902 (struct debug_name *) NULL))
2903 return false;
2904 if (f->static_member)
2905 {
2906 if (! (*fns->class_static_member) (fhandle, f->name,
2907 f->u.s.physname,
2908 f->visibility))
2909 return false;
2910 }
2911 else
2912 {
2913 if (! (*fns->struct_field) (fhandle, f->name, f->u.f.bitpos,
2914 f->u.f.bitsize, f->visibility))
2915 return false;
2916 }
2917 }
2918 }
2919
2920 if (type->u.kclass->baseclasses != NULL)
2921 {
2922 for (i = 0; type->u.kclass->baseclasses[i] != NULL; i++)
2923 {
2924 struct debug_baseclass *b;
2925
2926 b = type->u.kclass->baseclasses[i];
2927 if (! debug_write_type (info, fns, fhandle, b->type,
2928 (struct debug_name *) NULL))
2929 return false;
2930 if (! (*fns->class_baseclass) (fhandle, b->bitpos, b->virtual,
2931 b->visibility))
2932 return false;
2933 }
2934 }
2935
2936 if (type->u.kclass->methods != NULL)
2937 {
2938 for (i = 0; type->u.kclass->methods[i] != NULL; i++)
2939 {
2940 struct debug_method *m;
2941 unsigned int j;
2942
2943 m = type->u.kclass->methods[i];
2944 if (! (*fns->class_start_method) (fhandle, m->name))
2945 return false;
2946 for (j = 0; m->variants[j] != NULL; j++)
2947 {
2948 struct debug_method_variant *v;
2949
2950 v = m->variants[j];
2951 if (v->context != NULL)
2952 {
2953 if (! debug_write_type (info, fns, fhandle, v->context,
2954 (struct debug_name *) NULL))
2955 return false;
2956 }
2957 if (! debug_write_type (info, fns, fhandle, v->type,
2958 (struct debug_name *) NULL))
2959 return false;
2960 if (v->voffset != VOFFSET_STATIC_METHOD)
2961 {
2962 if (! (*fns->class_method_variant) (fhandle, v->physname,
2963 v->visibility,
2964 v->constp,
2965 v->volatilep,
2966 v->voffset,
2967 v->context != NULL))
2968 return false;
2969 }
2970 else
2971 {
2972 if (! (*fns->class_static_method_variant) (fhandle,
2973 v->physname,
2974 v->visibility,
2975 v->constp,
2976 v->volatilep))
2977 return false;
2978 }
2979 }
2980 if (! (*fns->class_end_method) (fhandle))
2981 return false;
2982 }
2983 }
2984 }
2985
2986 return (*fns->end_class_type) (fhandle);
2987 }
2988
2989 /* Write out information for a function. */
2990
2991 static boolean
2992 debug_write_function (info, fns, fhandle, name, linkage, function)
2993 struct debug_handle *info;
2994 const struct debug_write_fns *fns;
2995 PTR fhandle;
2996 const char *name;
2997 enum debug_object_linkage linkage;
2998 struct debug_function *function;
2999 {
3000 struct debug_parameter *p;
3001 struct debug_block *b;
3002
3003 if (! debug_write_linenos (info, fns, fhandle, function->blocks->start))
3004 return false;
3005
3006 if (! debug_write_type (info, fns, fhandle, function->return_type,
3007 (struct debug_name *) NULL))
3008 return false;
3009
3010 if (! (*fns->start_function) (fhandle, name,
3011 linkage == DEBUG_LINKAGE_GLOBAL))
3012 return false;
3013
3014 for (p = function->parameters; p != NULL; p = p->next)
3015 {
3016 if (! debug_write_type (info, fns, fhandle, p->type,
3017 (struct debug_name *) NULL)
3018 || ! (*fns->function_parameter) (fhandle, p->name, p->kind, p->val))
3019 return false;
3020 }
3021
3022 for (b = function->blocks; b != NULL; b = b->next)
3023 {
3024 if (! debug_write_block (info, fns, fhandle, b))
3025 return false;
3026 }
3027
3028 return (*fns->end_function) (fhandle);
3029 }
3030
3031 /* Write out information for a block. */
3032
3033 static boolean
3034 debug_write_block (info, fns, fhandle, block)
3035 struct debug_handle *info;
3036 const struct debug_write_fns *fns;
3037 PTR fhandle;
3038 struct debug_block *block;
3039 {
3040 struct debug_name *n;
3041 struct debug_block *b;
3042
3043 if (! debug_write_linenos (info, fns, fhandle, block->start))
3044 return false;
3045
3046 /* I can't see any point to writing out a block with no local
3047 variables, so we don't bother, except for the top level block. */
3048 if (block->locals != NULL || block->parent == NULL)
3049 {
3050 if (! (*fns->start_block) (fhandle, block->start))
3051 return false;
3052 }
3053
3054 if (block->locals != NULL)
3055 {
3056 for (n = block->locals->list; n != NULL; n = n->next)
3057 {
3058 if (! debug_write_name (info, fns, fhandle, n))
3059 return false;
3060 }
3061 }
3062
3063 for (b = block->children; b != NULL; b = b->next)
3064 {
3065 if (! debug_write_block (info, fns, fhandle, b))
3066 return false;
3067 }
3068
3069 if (! debug_write_linenos (info, fns, fhandle, block->end))
3070 return false;
3071
3072 if (block->locals != NULL || block->parent == NULL)
3073 {
3074 if (! (*fns->end_block) (fhandle, block->end))
3075 return false;
3076 }
3077
3078 return true;
3079 }
3080
3081 /* Write out line number information up to ADDRESS. */
3082
3083 static boolean
3084 debug_write_linenos (info, fns, fhandle, address)
3085 struct debug_handle *info;
3086 const struct debug_write_fns *fns;
3087 PTR fhandle;
3088 bfd_vma address;
3089 {
3090 while (info->current_write_lineno != NULL)
3091 {
3092 struct debug_lineno *l;
3093
3094 l = info->current_write_lineno;
3095
3096 while (info->current_write_lineno_index < DEBUG_LINENO_COUNT)
3097 {
3098 if (l->linenos[info->current_write_lineno_index]
3099 == (unsigned long) -1)
3100 break;
3101
3102 if (l->addrs[info->current_write_lineno_index] >= address)
3103 return true;
3104
3105 if (! (*fns->lineno) (fhandle, l->file->filename,
3106 l->linenos[info->current_write_lineno_index],
3107 l->addrs[info->current_write_lineno_index]))
3108 return false;
3109
3110 ++info->current_write_lineno_index;
3111 }
3112
3113 info->current_write_lineno = l->next;
3114 info->current_write_lineno_index = 0;
3115 }
3116
3117 return true;
3118 }
3119
3120 /* Get the ID number for a class. If during the same call to
3121 debug_write we find a struct with the same definition with the same
3122 name, we use the same ID. This type of things happens because the
3123 same struct will be defined by multiple compilation units. */
3124
3125 static boolean
3126 debug_set_class_id (info, tag, type)
3127 struct debug_handle *info;
3128 const char *tag;
3129 struct debug_type *type;
3130 {
3131 struct debug_class_type *c;
3132 struct debug_class_id *l;
3133
3134 assert (type->kind == DEBUG_KIND_STRUCT
3135 || type->kind == DEBUG_KIND_UNION
3136 || type->kind == DEBUG_KIND_CLASS
3137 || type->kind == DEBUG_KIND_UNION_CLASS);
3138
3139 c = type->u.kclass;
3140
3141 if (c->id > info->base_id)
3142 return true;
3143
3144 for (l = info->id_list; l != NULL; l = l->next)
3145 {
3146 if (l->type->kind != type->kind)
3147 continue;
3148
3149 if (tag == NULL)
3150 {
3151 if (l->tag != NULL)
3152 continue;
3153 }
3154 else
3155 {
3156 if (l->tag == NULL
3157 || l->tag[0] != tag[0]
3158 || strcmp (l->tag, tag) != 0)
3159 continue;
3160 }
3161
3162 if (debug_type_samep (info, l->type, type))
3163 {
3164 c->id = l->type->u.kclass->id;
3165 return true;
3166 }
3167 }
3168
3169 /* There are no identical types. Use a new ID, and add it to the
3170 list. */
3171 ++info->class_id;
3172 c->id = info->class_id;
3173
3174 l = (struct debug_class_id *) xmalloc (sizeof *l);
3175 memset (l, 0, sizeof *l);
3176
3177 l->type = type;
3178 l->tag = tag;
3179
3180 l->next = info->id_list;
3181 info->id_list = l;
3182
3183 return true;
3184 }
3185
3186 /* See if two types are the same. At this point, we don't care about
3187 tags and the like. */
3188
3189 static boolean
3190 debug_type_samep (info, t1, t2)
3191 struct debug_handle *info;
3192 struct debug_type *t1;
3193 struct debug_type *t2;
3194 {
3195 struct debug_type_compare_list *l;
3196 struct debug_type_compare_list top;
3197 boolean ret;
3198
3199 if (t1 == NULL)
3200 return t2 == NULL;
3201 if (t2 == NULL)
3202 return false;
3203
3204 while (t1->kind == DEBUG_KIND_INDIRECT)
3205 {
3206 t1 = *t1->u.kindirect->slot;
3207 if (t1 == NULL)
3208 return false;
3209 }
3210 while (t2->kind == DEBUG_KIND_INDIRECT)
3211 {
3212 t2 = *t2->u.kindirect->slot;
3213 if (t2 == NULL)
3214 return false;
3215 }
3216
3217 if (t1 == t2)
3218 return true;
3219
3220 /* As a special case, permit a typedef to match a tag, since C++
3221 debugging output will sometimes add a typedef where C debugging
3222 output will not. */
3223 if (t1->kind == DEBUG_KIND_NAMED
3224 && t2->kind == DEBUG_KIND_TAGGED)
3225 return debug_type_samep (info, t1->u.knamed->type, t2);
3226 else if (t1->kind == DEBUG_KIND_TAGGED
3227 && t2->kind == DEBUG_KIND_NAMED)
3228 return debug_type_samep (info, t1, t2->u.knamed->type);
3229
3230 if (t1->kind != t2->kind
3231 || t1->size != t2->size)
3232 return false;
3233
3234 /* Get rid of the trivial cases first. */
3235 switch (t1->kind)
3236 {
3237 default:
3238 break;
3239 case DEBUG_KIND_VOID:
3240 case DEBUG_KIND_FLOAT:
3241 case DEBUG_KIND_COMPLEX:
3242 case DEBUG_KIND_BOOL:
3243 return true;
3244 case DEBUG_KIND_INT:
3245 return t1->u.kint == t2->u.kint;
3246 }
3247
3248 /* We have to avoid an infinite recursion. We do this by keeping a
3249 list of types which we are comparing. We just keep the list on
3250 the stack. If we encounter a pair of types we are currently
3251 comparing, we just assume that they are equal. */
3252 for (l = info->compare_list; l != NULL; l = l->next)
3253 {
3254 if (l->t1 == t1 && l->t2 == t2)
3255 return true;
3256 }
3257
3258 top.t1 = t1;
3259 top.t2 = t2;
3260 top.next = info->compare_list;
3261 info->compare_list = &top;
3262
3263 switch (t1->kind)
3264 {
3265 default:
3266 abort ();
3267 ret = false;
3268 break;
3269
3270 case DEBUG_KIND_STRUCT:
3271 case DEBUG_KIND_UNION:
3272 case DEBUG_KIND_CLASS:
3273 case DEBUG_KIND_UNION_CLASS:
3274 if (t1->u.kclass == NULL)
3275 ret = t2->u.kclass == NULL;
3276 else if (t2->u.kclass == NULL)
3277 ret = false;
3278 else if (t1->u.kclass->id > info->base_id
3279 && t1->u.kclass->id == t2->u.kclass->id)
3280 ret = true;
3281 else
3282 ret = debug_class_type_samep (info, t1, t2);
3283 break;
3284
3285 case DEBUG_KIND_ENUM:
3286 if (t1->u.kenum == NULL)
3287 ret = t2->u.kenum == NULL;
3288 else if (t2->u.kenum == NULL)
3289 ret = false;
3290 else
3291 {
3292 const char **pn1, **pn2;
3293 bfd_signed_vma *pv1, *pv2;
3294
3295 pn1 = t1->u.kenum->names;
3296 pn2 = t2->u.kenum->names;
3297 pv1 = t1->u.kenum->values;
3298 pv2 = t2->u.kenum->values;
3299 while (*pn1 != NULL && *pn2 != NULL)
3300 {
3301 if (**pn1 != **pn2
3302 || *pv1 != *pv2
3303 || strcmp (*pn1, *pn2) != 0)
3304 break;
3305 ++pn1;
3306 ++pn2;
3307 ++pv1;
3308 ++pv2;
3309 }
3310 ret = *pn1 == NULL && *pn2 == NULL;
3311 }
3312 break;
3313
3314 case DEBUG_KIND_POINTER:
3315 ret = debug_type_samep (info, t1->u.kpointer, t2->u.kpointer);
3316 break;
3317
3318 case DEBUG_KIND_FUNCTION:
3319 if (t1->u.kfunction->varargs != t2->u.kfunction->varargs
3320 || ! debug_type_samep (info, t1->u.kfunction->return_type,
3321 t2->u.kfunction->return_type)
3322 || ((t1->u.kfunction->arg_types == NULL)
3323 != (t2->u.kfunction->arg_types == NULL)))
3324 ret = false;
3325 else if (t1->u.kfunction->arg_types == NULL)
3326 ret = true;
3327 else
3328 {
3329 struct debug_type **a1, **a2;
3330
3331 a1 = t1->u.kfunction->arg_types;
3332 a2 = t2->u.kfunction->arg_types;
3333 while (*a1 != NULL && *a2 != NULL)
3334 {
3335 if (! debug_type_samep (info, *a1, *a2))
3336 break;
3337 ++a1;
3338 ++a2;
3339 }
3340 ret = *a1 == NULL && *a2 == NULL;
3341 }
3342 break;
3343
3344 case DEBUG_KIND_REFERENCE:
3345 ret = debug_type_samep (info, t1->u.kreference, t2->u.kreference);
3346 break;
3347
3348 case DEBUG_KIND_RANGE:
3349 ret = (t1->u.krange->lower == t2->u.krange->lower
3350 && t1->u.krange->upper == t2->u.krange->upper
3351 && debug_type_samep (info, t1->u.krange->type,
3352 t2->u.krange->type));
3353
3354 case DEBUG_KIND_ARRAY:
3355 ret = (t1->u.karray->lower == t2->u.karray->lower
3356 && t1->u.karray->upper == t2->u.karray->upper
3357 && t1->u.karray->stringp == t2->u.karray->stringp
3358 && debug_type_samep (info, t1->u.karray->element_type,
3359 t2->u.karray->element_type));
3360 break;
3361
3362 case DEBUG_KIND_SET:
3363 ret = (t1->u.kset->bitstringp == t2->u.kset->bitstringp
3364 && debug_type_samep (info, t1->u.kset->type, t2->u.kset->type));
3365 break;
3366
3367 case DEBUG_KIND_OFFSET:
3368 ret = (debug_type_samep (info, t1->u.koffset->base_type,
3369 t2->u.koffset->base_type)
3370 && debug_type_samep (info, t1->u.koffset->target_type,
3371 t2->u.koffset->target_type));
3372 break;
3373
3374 case DEBUG_KIND_METHOD:
3375 if (t1->u.kmethod->varargs != t2->u.kmethod->varargs
3376 || ! debug_type_samep (info, t1->u.kmethod->return_type,
3377 t2->u.kmethod->return_type)
3378 || ! debug_type_samep (info, t1->u.kmethod->domain_type,
3379 t2->u.kmethod->domain_type)
3380 || ((t1->u.kmethod->arg_types == NULL)
3381 != (t2->u.kmethod->arg_types == NULL)))
3382 ret = false;
3383 else if (t1->u.kmethod->arg_types == NULL)
3384 ret = true;
3385 else
3386 {
3387 struct debug_type **a1, **a2;
3388
3389 a1 = t1->u.kmethod->arg_types;
3390 a2 = t2->u.kmethod->arg_types;
3391 while (*a1 != NULL && *a2 != NULL)
3392 {
3393 if (! debug_type_samep (info, *a1, *a2))
3394 break;
3395 ++a1;
3396 ++a2;
3397 }
3398 ret = *a1 == NULL && *a2 == NULL;
3399 }
3400 break;
3401
3402 case DEBUG_KIND_CONST:
3403 ret = debug_type_samep (info, t1->u.kconst, t2->u.kconst);
3404 break;
3405
3406 case DEBUG_KIND_VOLATILE:
3407 ret = debug_type_samep (info, t1->u.kvolatile, t2->u.kvolatile);
3408 break;
3409
3410 case DEBUG_KIND_NAMED:
3411 case DEBUG_KIND_TAGGED:
3412 ret = (strcmp (t1->u.knamed->name->name, t2->u.knamed->name->name) == 0
3413 && debug_type_samep (info, t1->u.knamed->type,
3414 t2->u.knamed->type));
3415 break;
3416 }
3417
3418 info->compare_list = top.next;
3419
3420 return ret;
3421 }
3422
3423 /* See if two classes are the same. This is a subroutine of
3424 debug_type_samep. */
3425
3426 static boolean
3427 debug_class_type_samep (info, t1, t2)
3428 struct debug_handle *info;
3429 struct debug_type *t1;
3430 struct debug_type *t2;
3431 {
3432 struct debug_class_type *c1, *c2;
3433
3434 c1 = t1->u.kclass;
3435 c2 = t2->u.kclass;
3436
3437 if ((c1->fields == NULL) != (c2->fields == NULL)
3438 || (c1->baseclasses == NULL) != (c2->baseclasses == NULL)
3439 || (c1->methods == NULL) != (c2->methods == NULL)
3440 || (c1->vptrbase == NULL) != (c2->vptrbase == NULL))
3441 return false;
3442
3443 if (c1->fields != NULL)
3444 {
3445 struct debug_field **pf1, **pf2;
3446
3447 for (pf1 = c1->fields, pf2 = c2->fields;
3448 *pf1 != NULL && *pf2 != NULL;
3449 pf1++, pf2++)
3450 {
3451 struct debug_field *f1, *f2;
3452
3453 f1 = *pf1;
3454 f2 = *pf2;
3455 if (f1->name[0] != f2->name[0]
3456 || f1->visibility != f2->visibility
3457 || f1->static_member != f2->static_member)
3458 return false;
3459 if (f1->static_member)
3460 {
3461 if (strcmp (f1->u.s.physname, f2->u.s.physname) != 0)
3462 return false;
3463 }
3464 else
3465 {
3466 if (f1->u.f.bitpos != f2->u.f.bitpos
3467 || f1->u.f.bitsize != f2->u.f.bitsize)
3468 return false;
3469 }
3470 /* We do the checks which require function calls last. We
3471 don't require that the types of fields have the same
3472 names, since that sometimes fails in the presence of
3473 typedefs and we really don't care. */
3474 if (strcmp (f1->name, f2->name) != 0
3475 || ! debug_type_samep (info,
3476 debug_get_real_type ((PTR) info,
3477 f1->type, NULL),
3478 debug_get_real_type ((PTR) info,
3479 f2->type, NULL)))
3480 return false;
3481 }
3482 if (*pf1 != NULL || *pf2 != NULL)
3483 return false;
3484 }
3485
3486 if (c1->vptrbase != NULL)
3487 {
3488 if (! debug_type_samep (info, c1->vptrbase, c2->vptrbase))
3489 return false;
3490 }
3491
3492 if (c1->baseclasses != NULL)
3493 {
3494 struct debug_baseclass **pb1, **pb2;
3495
3496 for (pb1 = c1->baseclasses, pb2 = c2->baseclasses;
3497 *pb1 != NULL && *pb2 != NULL;
3498 ++pb1, ++pb2)
3499 {
3500 struct debug_baseclass *b1, *b2;
3501
3502 b1 = *pb1;
3503 b2 = *pb2;
3504 if (b1->bitpos != b2->bitpos
3505 || b1->virtual != b2->virtual
3506 || b1->visibility != b2->visibility
3507 || ! debug_type_samep (info, b1->type, b2->type))
3508 return false;
3509 }
3510 if (*pb1 != NULL || *pb2 != NULL)
3511 return false;
3512 }
3513
3514 if (c1->methods != NULL)
3515 {
3516 struct debug_method **pm1, **pm2;
3517
3518 for (pm1 = c1->methods, pm2 = c2->methods;
3519 *pm1 != NULL && *pm2 != NULL;
3520 ++pm1, ++pm2)
3521 {
3522 struct debug_method *m1, *m2;
3523
3524 m1 = *pm1;
3525 m2 = *pm2;
3526 if (m1->name[0] != m2->name[0]
3527 || strcmp (m1->name, m2->name) != 0
3528 || (m1->variants == NULL) != (m2->variants == NULL))
3529 return false;
3530 if (m1->variants == NULL)
3531 {
3532 struct debug_method_variant **pv1, **pv2;
3533
3534 for (pv1 = m1->variants, pv2 = m2->variants;
3535 *pv1 != NULL && *pv2 != NULL;
3536 ++pv1, ++pv2)
3537 {
3538 struct debug_method_variant *v1, *v2;
3539
3540 v1 = *pv1;
3541 v2 = *pv2;
3542 if (v1->physname[0] != v2->physname[0]
3543 || v1->visibility != v2->visibility
3544 || v1->constp != v2->constp
3545 || v1->volatilep != v2->volatilep
3546 || v1->voffset != v2->voffset
3547 || (v1->context == NULL) != (v2->context == NULL)
3548 || strcmp (v1->physname, v2->physname) != 0
3549 || ! debug_type_samep (info, v1->type, v2->type))
3550 return false;
3551 if (v1->context != NULL)
3552 {
3553 if (! debug_type_samep (info, v1->context,
3554 v2->context))
3555 return false;
3556 }
3557 }
3558 if (*pv1 != NULL || *pv2 != NULL)
3559 return false;
3560 }
3561 }
3562 if (*pm1 != NULL || *pm2 != NULL)
3563 return false;
3564 }
3565
3566 return true;
3567 }