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