This commit was generated by cvs2svn to track changes on a CVS vendor
[platform/upstream/binutils.git] / binutils / ieee.c
1 /* ieee.c -- Read and write IEEE-695 debugging information.
2    Copyright (C) 1996 Free Software Foundation, Inc.
3    Written by Ian Lance Taylor <ian@cygnus.com>.
4
5    This file is part of GNU Binutils.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 /* This file reads and writes IEEE-695 debugging information.  */
23
24 #include <stdio.h>
25 #include <assert.h>
26
27 #include "bfd.h"
28 #include "ieee.h"
29 #include "bucomm.h"
30 #include "libiberty.h"
31 #include "debug.h"
32 #include "budbg.h"
33
34 /* This structure holds an entry on the block stack.  */
35
36 struct ieee_block
37 {
38   /* The kind of block.  */
39   int kind;
40   /* The source file name, for a BB5 block.  */
41   const char *filename;
42   /* The index of the function type, for a BB4 or BB6 block.  */
43   unsigned int fnindx;
44   /* True if this function is being skipped.  */
45   boolean skip;
46 };
47
48 /* This structure is the block stack.  */
49
50 #define BLOCKSTACK_SIZE (16)
51
52 struct ieee_blockstack
53 {
54   /* The stack pointer.  */
55   struct ieee_block *bsp;
56   /* The stack.  */
57   struct ieee_block stack[BLOCKSTACK_SIZE];
58 };
59
60 /* This structure holds information for a variable.  */
61
62 struct ieee_var
63 {
64   /* Start of name.  */
65   const char *name;
66   /* Length of name.  */
67   unsigned long namlen;
68   /* Type.  */
69   debug_type type;
70   /* Slot if we make an indirect type.  */
71   debug_type *pslot;
72   /* Kind of variable or function.  */
73   enum
74     {
75       IEEE_UNKNOWN,
76       IEEE_EXTERNAL,
77       IEEE_GLOBAL,
78       IEEE_STATIC,
79       IEEE_LOCAL,
80       IEEE_FUNCTION
81     } kind;
82 };
83
84 /* This structure holds all the variables.  */
85
86 struct ieee_vars
87 {
88   /* Number of slots allocated.  */
89   unsigned int alloc;
90   /* Variables.  */
91   struct ieee_var *vars;
92 };
93
94 /* This structure holds information for a type.  We need this because
95    we don't want to represent bitfields as real types.  */
96
97 struct ieee_type
98 {
99   /* Type.  */
100   debug_type type;
101   /* Slot if this is type is referenced before it is defined.  */
102   debug_type *pslot;
103   /* Slots for arguments if we make indirect types for them.  */
104   debug_type *arg_slots;
105   /* If this is a bitfield, this is the size in bits.  If this is not
106      a bitfield, this is zero.  */
107   unsigned long bitsize;
108 };
109
110 /* This structure holds all the type information.  */
111
112 struct ieee_types
113 {
114   /* Number of slots allocated.  */
115   unsigned int alloc;
116   /* Types.  */
117   struct ieee_type *types;
118   /* Builtin types.  */
119 #define BUILTIN_TYPE_COUNT (60)
120   debug_type builtins[BUILTIN_TYPE_COUNT];
121 };
122
123 /* This structure holds a linked last of structs with their tag names,
124    so that we can convert them to C++ classes if necessary.  */
125
126 struct ieee_tag
127 {
128   /* Next tag.  */
129   struct ieee_tag *next;
130   /* This tag name.  */
131   const char *name;
132   /* The type of the tag.  */
133   debug_type type;
134   /* The tagged type is an indirect type pointing at this slot.  */
135   debug_type slot;
136   /* This is an array of slots used when a field type is converted
137      into a indirect type, in case it needs to be later converted into
138      a reference type.  */
139   debug_type *fslots;
140 };
141
142 /* This structure holds the information we pass around to the parsing
143    functions.  */
144
145 struct ieee_info
146 {
147   /* The debugging handle.  */
148   PTR dhandle;
149   /* The BFD.  */
150   bfd *abfd;
151   /* The start of the bytes to be parsed.  */
152   const bfd_byte *bytes;
153   /* The end of the bytes to be parsed.  */
154   const bfd_byte *pend;
155   /* The block stack.  */
156   struct ieee_blockstack blockstack;
157   /* Whether we have seen a BB1 or BB2.  */
158   boolean saw_filename;
159   /* The variables.  */
160   struct ieee_vars vars;
161   /* The global variables, after a global typedef block.  */
162   struct ieee_vars *global_vars;
163   /* The types.  */
164   struct ieee_types types;
165   /* The global types, after a global typedef block.  */
166   struct ieee_types *global_types;
167   /* The list of tagged structs.  */
168   struct ieee_tag *tags;
169 };
170
171 /* Basic builtin types, not including the pointers.  */
172
173 enum builtin_types
174 {
175   builtin_unknown = 0,
176   builtin_void = 1,
177   builtin_signed_char = 2,
178   builtin_unsigned_char = 3,
179   builtin_signed_short_int = 4,
180   builtin_unsigned_short_int = 5,
181   builtin_signed_long = 6,
182   builtin_unsigned_long = 7,
183   builtin_signed_long_long = 8,
184   builtin_unsigned_long_long = 9,
185   builtin_float = 10,
186   builtin_double = 11,
187   builtin_long_double = 12,
188   builtin_long_long_double = 13,
189   builtin_quoted_string = 14,
190   builtin_instruction_address = 15,
191   builtin_int = 16,
192   builtin_unsigned = 17,
193   builtin_unsigned_int = 18,
194   builtin_char = 19,
195   builtin_long = 20,
196   builtin_short = 21,
197   builtin_unsigned_short = 22,
198   builtin_short_int = 23,
199   builtin_signed_short = 24,
200   builtin_bcd_float = 25
201 };
202
203 /* These are the values found in the derivation flags of a 'b'
204    component record of a 'T' type extension record in a C++ pmisc
205    record.  These are bitmasks.  */
206
207 /* Set for a private base class, clear for a public base class.
208    Protected base classes are not supported.  */
209 #define BASEFLAGS_PRIVATE (0x1)
210 /* Set for a virtual base class.  */
211 #define BASEFLAGS_VIRTUAL (0x2)
212 /* Set for a friend class, clear for a base class.  */
213 #define BASEFLAGS_FRIEND (0x10)
214
215 /* These are the values found in the specs flags of a 'd', 'm', or 'v'
216    component record of a 'T' type extension record in a C++ pmisc
217    record.  The same flags are used for a 'M' record in a C++ pmisc
218    record.  */
219
220 /* The lower two bits hold visibility information.  */
221 #define CXXFLAGS_VISIBILITY (0x3)
222 /* This value in the lower two bits indicates a public member.  */
223 #define CXXFLAGS_VISIBILITY_PUBLIC (0x0)
224 /* This value in the lower two bits indicates a private member.  */
225 #define CXXFLAGS_VISIBILITY_PRIVATE (0x1)
226 /* This value in the lower two bits indicates a protected member.  */
227 #define CXXFLAGS_VISIBILITY_PROTECTED (0x2)
228 /* Set for a static member.  */
229 #define CXXFLAGS_STATIC (0x4)
230 /* Set for a virtual override.  */
231 #define CXXFLAGS_OVERRIDE (0x8)
232 /* Set for a friend function.  */
233 #define CXXFLAGS_FRIEND (0x10)
234 /* Set for a const function.  */
235 #define CXXFLAGS_CONST (0x20)
236 /* Set for a volatile function.  */
237 #define CXXFLAGS_VOLATILE (0x40)
238 /* Set for an overloaded function.  */
239 #define CXXFLAGS_OVERLOADED (0x80)
240 /* Set for an operator function.  */
241 #define CXXFLAGS_OPERATOR (0x100)
242 /* Set for a constructor or destructor.  */
243 #define CXXFLAGS_CTORDTOR (0x400)
244 /* Set for a constructor.  */
245 #define CXXFLAGS_CTOR (0x200)
246 /* Set for an inline function.  */
247 #define CXXFLAGS_INLINE (0x800)
248
249 /* Local functions.  */
250
251 static void ieee_error
252   PARAMS ((struct ieee_info *, const bfd_byte *, const char *));
253 static void ieee_eof PARAMS ((struct ieee_info *));
254 static char *savestring PARAMS ((const char *, unsigned long));
255 static boolean ieee_read_number
256   PARAMS ((struct ieee_info *, const bfd_byte **, bfd_vma *));
257 static boolean ieee_read_optional_number
258   PARAMS ((struct ieee_info *, const bfd_byte **, bfd_vma *, boolean *));
259 static boolean ieee_read_id
260   PARAMS ((struct ieee_info *, const bfd_byte **, const char **,
261            unsigned long *));
262 static boolean ieee_read_optional_id
263   PARAMS ((struct ieee_info *, const bfd_byte **, const char **,
264            unsigned long *, boolean *));
265 static boolean ieee_read_expression
266   PARAMS ((struct ieee_info *, const bfd_byte **, bfd_vma *));
267 static debug_type ieee_builtin_type
268   PARAMS ((struct ieee_info *, const bfd_byte *, unsigned int));
269 static boolean ieee_alloc_type
270   PARAMS ((struct ieee_info *, unsigned int, boolean));
271 static boolean ieee_read_type_index
272   PARAMS ((struct ieee_info *, const bfd_byte **, debug_type *));
273 static int ieee_regno_to_genreg PARAMS ((bfd *, int));
274 static int ieee_genreg_to_regno PARAMS ((bfd *, int));
275 static boolean parse_ieee_bb PARAMS ((struct ieee_info *, const bfd_byte **));
276 static boolean parse_ieee_be PARAMS ((struct ieee_info *, const bfd_byte **));
277 static boolean parse_ieee_nn PARAMS ((struct ieee_info *, const bfd_byte **));
278 static boolean parse_ieee_ty PARAMS ((struct ieee_info *, const bfd_byte **));
279 static boolean parse_ieee_atn PARAMS ((struct ieee_info *, const bfd_byte **));
280 static boolean ieee_read_cxx_misc
281   PARAMS ((struct ieee_info *, const bfd_byte **, unsigned long));
282 static boolean ieee_read_cxx_class
283   PARAMS ((struct ieee_info *, const bfd_byte **, unsigned long));
284 static boolean ieee_read_cxx_defaults
285   PARAMS ((struct ieee_info *, const bfd_byte **, unsigned long));
286 static boolean ieee_read_reference
287   PARAMS ((struct ieee_info *, const bfd_byte **));
288 static boolean ieee_require_asn
289   PARAMS ((struct ieee_info *, const bfd_byte **, bfd_vma *));
290 static boolean ieee_require_atn65
291   PARAMS ((struct ieee_info *, const bfd_byte **, const char **,
292            unsigned long *));
293
294 /* Report an error in the IEEE debugging information.  */
295
296 static void
297 ieee_error (info, p, s)
298      struct ieee_info *info;
299      const bfd_byte *p;
300      const char *s;
301 {
302   if (p != NULL)
303     fprintf (stderr, "%s: 0x%lx: %s (0x%x)\n", bfd_get_filename (info->abfd),
304              (unsigned long) (p - info->bytes), s, *p);
305   else
306     fprintf (stderr, "%s: %s\n", bfd_get_filename (info->abfd), s);
307 }
308
309 /* Report an unexpected EOF in the IEEE debugging information.  */
310
311 static void
312 ieee_eof (info)
313      struct ieee_info *info;
314 {
315   ieee_error (info, (const bfd_byte *) NULL,
316               "unexpected end of debugging information");
317 }
318
319 /* Save a string in memory.  */
320
321 static char *
322 savestring (start, len)
323      const char *start;
324      unsigned long len;
325 {
326   char *ret;
327
328   ret = (char *) xmalloc (len + 1);
329   memcpy (ret, start, len);
330   ret[len] = '\0';
331   return ret;
332 }
333
334 /* Read a number which must be present in an IEEE file.  */
335
336 static boolean
337 ieee_read_number (info, pp, pv)
338      struct ieee_info *info;
339      const bfd_byte **pp;
340      bfd_vma *pv;
341 {
342   return ieee_read_optional_number (info, pp, pv, (boolean *) NULL);
343 }
344
345 /* Read a number in an IEEE file.  If ppresent is not NULL, the number
346    need not be there. */
347
348 static boolean
349 ieee_read_optional_number (info, pp, pv, ppresent)
350      struct ieee_info *info;
351      const bfd_byte **pp;
352      bfd_vma *pv;
353      boolean *ppresent;
354 {
355   ieee_record_enum_type b;
356
357   if (*pp >= info->pend)
358     {
359       if (ppresent != NULL)
360         {
361           *ppresent = false;
362           return true;
363         }
364       ieee_eof (info);
365       return false;
366     }
367
368   b = (ieee_record_enum_type) **pp;
369   ++*pp;
370
371   if (b <= ieee_number_end_enum)
372     {
373       *pv = (bfd_vma) b;
374       if (ppresent != NULL)
375         *ppresent = true;
376       return true;
377     }
378
379   if (b >= ieee_number_repeat_start_enum && b <= ieee_number_repeat_end_enum)
380     {
381       unsigned int i;
382
383       i = (int) b - (int) ieee_number_repeat_start_enum;
384       if (*pp + i - 1 >= info->pend)
385         {
386           ieee_eof (info);
387           return false;
388         }
389
390       *pv = 0;
391       for (; i > 0; i--)
392         {
393           *pv <<= 8;
394           *pv += **pp;
395           ++*pp;
396         }
397
398       if (ppresent != NULL)
399         *ppresent = true;
400
401       return true;
402     }
403
404   if (ppresent != NULL)
405     {
406       --*pp;
407       *ppresent = false;
408       return true;
409     }
410
411   ieee_error (info, *pp - 1, "invalid number");
412   return false;  
413 }
414
415 /* Read a required string from an IEEE file.  */
416
417 static boolean
418 ieee_read_id (info, pp, pname, pnamlen)
419      struct ieee_info *info;
420      const bfd_byte **pp;
421      const char **pname;
422      unsigned long *pnamlen;
423 {
424   return ieee_read_optional_id (info, pp, pname, pnamlen, (boolean *) NULL);
425 }
426
427 /* Read a string from an IEEE file.  If ppresent is not NULL, the
428    string is optional.  */
429
430 static boolean
431 ieee_read_optional_id (info, pp, pname, pnamlen, ppresent)
432      struct ieee_info *info;
433      const bfd_byte **pp;
434      const char **pname;
435      unsigned long *pnamlen;
436      boolean *ppresent;
437 {
438   bfd_byte b;
439   unsigned long len;
440
441   if (*pp >= info->pend)
442     {
443       ieee_eof (info);
444       return false;
445     }
446
447   b = **pp;
448   ++*pp;
449
450   if (b <= 0x7f)
451     len = b;
452   else if ((ieee_record_enum_type) b == ieee_extension_length_1_enum)
453     {
454       len = **pp;
455       ++*pp;
456     }
457   else if ((ieee_record_enum_type) b == ieee_extension_length_2_enum)
458     {
459       len = (**pp << 8) + (*pp)[1];
460       *pp += 2;
461     }
462   else
463     {
464       if (ppresent != NULL)
465         {
466           --*pp;
467           *ppresent = false;
468           return true;
469         }
470       ieee_error (info, *pp - 1, "invalid string length");
471       return false;
472     }
473
474   if ((unsigned long) (info->pend - *pp) < len)
475     {
476       ieee_eof (info);
477       return false;
478     }
479
480   *pname = (const char *) *pp;
481   *pnamlen = len;
482   *pp += len;
483
484   if (ppresent != NULL)
485     *ppresent = true;
486
487   return true;
488 }
489
490 /* Read an expression from an IEEE file.  Since this code is only used
491    to parse debugging information, I haven't bothered to write a full
492    blown IEEE expression parser.  I've only thrown in the things I've
493    seen in debugging information.  This can be easily extended if
494    necessary.  */
495
496 static boolean
497 ieee_read_expression (info, pp, pv)
498      struct ieee_info *info;
499      const bfd_byte **pp;
500      bfd_vma *pv;
501 {
502   const bfd_byte *expr_start;
503 #define EXPR_STACK_SIZE (10)
504   bfd_vma expr_stack[EXPR_STACK_SIZE];
505   bfd_vma *esp;
506
507   expr_start = *pp;
508
509   esp = expr_stack;
510
511   while (1)
512     {
513       const bfd_byte *start;
514       bfd_vma val;
515       boolean present;
516       ieee_record_enum_type c;
517
518       start = *pp;
519
520       if (! ieee_read_optional_number (info, pp, &val, &present))
521         return false;
522
523       if (present)
524         {
525           if (esp - expr_stack >= EXPR_STACK_SIZE)
526             {
527               ieee_error (info, start, "expression stack overflow");
528               return false;
529             }
530           *esp++ = val;
531           continue;
532         }
533
534       c = (ieee_record_enum_type) **pp;
535
536       if (c >= ieee_module_beginning_enum)
537         break;
538
539       ++*pp;
540
541       if (c == ieee_comma)
542         break;
543
544       switch (c)
545         {
546         default:
547           ieee_error (info, start, "unsupported IEEE expression operator");
548           break;
549
550         case ieee_variable_R_enum:
551           {
552             bfd_vma indx;
553             asection *s;
554
555             if (! ieee_read_number (info, pp, &indx))
556               return false;
557             for (s = info->abfd->sections; s != NULL; s = s->next)
558               if ((bfd_vma) s->target_index == indx)
559                 break;
560             if (s == NULL)
561               {
562                 ieee_error (info, start, "unknown section");
563                 return false;
564               }
565             
566             if (esp - expr_stack >= EXPR_STACK_SIZE)
567               {
568                 ieee_error (info, start, "expression stack overflow");
569                 return false;
570               }
571
572             *esp++ = bfd_get_section_vma (info->abfd, s);
573           }
574           break;
575
576         case ieee_function_plus_enum:
577         case ieee_function_minus_enum:
578           {
579             bfd_vma v1, v2;
580
581             if (esp - expr_stack < 2)
582               {
583                 ieee_error (info, start, "expression stack underflow");
584                 return false;
585               }
586
587             v1 = *--esp;
588             v2 = *--esp;
589             *esp++ = v1 + v2;
590           }
591           break;
592         }
593     }
594
595   if (esp - 1 != expr_stack)
596     {
597       ieee_error (info, expr_start, "expression stack mismatch");
598       return false;
599     }
600
601   *pv = *--esp;
602
603   return true;
604 }
605
606 /* Return an IEEE builtin type.  */
607
608 static debug_type
609 ieee_builtin_type (info, p, indx)
610      struct ieee_info *info;
611      const bfd_byte *p;
612      unsigned int indx;
613 {
614   PTR dhandle;
615   debug_type type;
616   const char *name;
617
618   if (indx < BUILTIN_TYPE_COUNT
619       && info->types.builtins[indx] != DEBUG_TYPE_NULL)
620     return info->types.builtins[indx];
621
622   dhandle = info->dhandle;
623
624   if (indx >= 32 && indx < 64)
625     {
626       type = debug_make_pointer_type (dhandle,
627                                       ieee_builtin_type (info, p, indx - 32));
628       assert (indx < BUILTIN_TYPE_COUNT);
629       info->types.builtins[indx] = type;
630       return type;
631     }
632
633   switch ((enum builtin_types) indx)
634     {
635     default:
636       ieee_error (info, p, "unknown builtin type");
637       return NULL;
638
639     case builtin_unknown:
640       type = debug_make_void_type (dhandle);
641       name = NULL;
642       break;
643
644     case builtin_void:
645       type = debug_make_void_type (dhandle);
646       name = "void";
647       break;
648
649     case builtin_signed_char:
650       type = debug_make_int_type (dhandle, 1, false);
651       name = "signed char";
652       break;
653
654     case builtin_unsigned_char:
655       type = debug_make_int_type (dhandle, 1, true);
656       name = "unsigned char";
657       break;
658
659     case builtin_signed_short_int:
660       type = debug_make_int_type (dhandle, 2, false);
661       name = "signed short int";
662       break;
663
664     case builtin_unsigned_short_int:
665       type = debug_make_int_type (dhandle, 2, true);
666       name = "unsigned short int";
667       break;
668
669     case builtin_signed_long:
670       type = debug_make_int_type (dhandle, 4, false);
671       name = "signed long";
672       break;
673
674     case builtin_unsigned_long:
675       type = debug_make_int_type (dhandle, 4, true);
676       name = "unsigned long";
677       break;
678
679     case builtin_signed_long_long:
680       type = debug_make_int_type (dhandle, 8, false);
681       name = "signed long long";
682       break;
683
684     case builtin_unsigned_long_long:
685       type = debug_make_int_type (dhandle, 8, true);
686       name = "unsigned long long";
687       break;
688
689     case builtin_float:
690       type = debug_make_float_type (dhandle, 4);
691       name = "float";
692       break;
693
694     case builtin_double:
695       type = debug_make_float_type (dhandle, 8);
696       name = "double";
697       break;
698
699     case builtin_long_double:
700       /* FIXME: The size for this type should depend upon the
701          processor.  */
702       type = debug_make_float_type (dhandle, 12);
703       name = "long double";
704       break;
705
706     case builtin_long_long_double:
707       type = debug_make_float_type (dhandle, 16);
708       name = "long long double";
709       break;
710
711     case builtin_quoted_string:
712       type = debug_make_array_type (dhandle,
713                                     ieee_builtin_type (info, p,
714                                                        ((unsigned int)
715                                                         builtin_char)),
716                                     ieee_builtin_type (info, p,
717                                                        ((unsigned int)
718                                                         builtin_int)),
719                                     0, -1, true);
720       name = "QUOTED STRING";
721       break;
722
723     case builtin_instruction_address:
724       /* FIXME: This should be a code address.  */
725       type = debug_make_int_type (dhandle, 4, true);
726       name = "instruction address";
727       break;
728
729     case builtin_int:
730       /* FIXME: The size for this type should depend upon the
731          processor.  */
732       type = debug_make_int_type (dhandle, 4, false);
733       name = "int";
734       break;
735
736     case builtin_unsigned:
737       /* FIXME: The size for this type should depend upon the
738          processor.  */
739       type = debug_make_int_type (dhandle, 4, true);
740       name = "unsigned";
741       break;
742
743     case builtin_unsigned_int:
744       /* FIXME: The size for this type should depend upon the
745          processor.  */
746       type = debug_make_int_type (dhandle, 4, true);
747       name = "unsigned int";
748       break;
749
750     case builtin_char:
751       type = debug_make_int_type (dhandle, 1, false);
752       name = "char";
753       break;
754
755     case builtin_long:
756       type = debug_make_int_type (dhandle, 4, false);
757       name = "long";
758       break;
759
760     case builtin_short:
761       type = debug_make_int_type (dhandle, 2, false);
762       name = "short";
763       break;
764
765     case builtin_unsigned_short:
766       type = debug_make_int_type (dhandle, 2, true);
767       name = "unsigned short";
768       break;
769
770     case builtin_short_int:
771       type = debug_make_int_type (dhandle, 2, false);
772       name = "short int";
773       break;
774
775     case builtin_signed_short:
776       type = debug_make_int_type (dhandle, 2, false);
777       name = "signed short";
778       break;
779
780     case builtin_bcd_float:
781       ieee_error (info, p, "BCD float type not supported");
782       return false;
783     }
784
785   if (name != NULL)
786     type = debug_name_type (dhandle, name, type);
787
788   assert (indx < BUILTIN_TYPE_COUNT);
789
790   info->types.builtins[indx] = type;
791
792   return type;
793 }
794
795 /* Allocate more space in the type table.  If ref is true, this is a
796    reference to the type; if it is not already defined, we should set
797    up an indirect type.  */
798
799 static boolean
800 ieee_alloc_type (info, indx, ref)
801      struct ieee_info *info;
802      unsigned int indx;
803      boolean ref;
804 {
805   unsigned int nalloc;
806   register struct ieee_type *t;
807   struct ieee_type *tend;
808
809   if (indx >= info->types.alloc)
810     {
811       nalloc = info->types.alloc;
812       if (nalloc == 0)
813         nalloc = 4;
814       while (indx >= nalloc)
815         nalloc *= 2;
816
817       info->types.types = ((struct ieee_type *)
818                            xrealloc (info->types.types,
819                                      nalloc * sizeof *info->types.types));
820
821       memset (info->types.types + info->types.alloc, 0,
822               (nalloc - info->types.alloc) * sizeof *info->types.types);
823
824       tend = info->types.types + nalloc;
825       for (t = info->types.types + info->types.alloc; t < tend; t++)
826         t->type = DEBUG_TYPE_NULL;
827
828       info->types.alloc = nalloc;
829     }
830
831   if (ref)
832     {
833       t = info->types.types + indx;
834       if (t->type == NULL)
835         {
836           t->pslot = (debug_type *) xmalloc (sizeof *t->pslot);
837           *t->pslot = DEBUG_TYPE_NULL;
838           t->type = debug_make_indirect_type (info->dhandle, t->pslot,
839                                               (const char *) NULL);
840           if (t->type == NULL)
841             return false;
842         }
843     }
844
845   return true;
846 }
847
848 /* Read a type index and return the corresponding type.  */
849
850 static boolean
851 ieee_read_type_index (info, pp, ptype)
852      struct ieee_info *info;
853      const bfd_byte **pp;
854      debug_type *ptype;
855 {
856   const bfd_byte *start;
857   bfd_vma indx;
858
859   start = *pp;
860
861   if (! ieee_read_number (info, pp, &indx))
862     return false;
863
864   if (indx < 256)
865     {
866       *ptype = ieee_builtin_type (info, start, indx);
867       if (*ptype == NULL)
868         return false;
869       return true;
870     }
871
872   indx -= 256;
873   if (! ieee_alloc_type (info, indx, true))
874     return false;
875
876   *ptype = info->types.types[indx].type;
877
878   return true;
879 }
880
881 /* Parse IEEE debugging information for a file.  This is passed the
882    bytes which compose the Debug Information Part of an IEEE file.  */
883
884 boolean
885 parse_ieee (dhandle, abfd, bytes, len)
886      PTR dhandle;
887      bfd *abfd;
888      const bfd_byte *bytes;
889      bfd_size_type len;
890 {
891   struct ieee_info info;
892   unsigned int i;
893   const bfd_byte *p, *pend;
894
895   info.dhandle = dhandle;
896   info.abfd = abfd;
897   info.bytes = bytes;
898   info.pend = bytes + len;
899   info.blockstack.bsp = info.blockstack.stack;
900   info.saw_filename = false;
901   info.vars.alloc = 0;
902   info.vars.vars = NULL;
903   info.types.alloc = 0;
904   info.types.types = NULL;
905   info.tags = NULL;
906   for (i = 0; i < BUILTIN_TYPE_COUNT; i++)
907     info.types.builtins[i] = DEBUG_TYPE_NULL;
908
909   p = bytes;
910   pend = info.pend;
911   while (p < pend)
912     {
913       const bfd_byte *record_start;
914       ieee_record_enum_type c;
915
916       record_start = p;
917
918       c = (ieee_record_enum_type) *p++;
919
920       if (c == ieee_at_record_enum)
921         c = (ieee_record_enum_type) (((unsigned int) c << 8) | *p++);
922
923       if (c <= ieee_number_repeat_end_enum)
924         {
925           ieee_error (&info, record_start, "unexpected number");
926           return false;
927         }
928
929       switch (c)
930         {
931         default:
932           ieee_error (&info, record_start, "unexpected record type");
933           return false;
934
935         case ieee_bb_record_enum:
936           if (! parse_ieee_bb (&info, &p))
937             return false;
938           break;
939
940         case ieee_be_record_enum:
941           if (! parse_ieee_be (&info, &p))
942             return false;
943           break;
944
945         case ieee_nn_record:
946           if (! parse_ieee_nn (&info, &p))
947             return false;
948           break;
949
950         case ieee_ty_record_enum:
951           if (! parse_ieee_ty (&info, &p))
952             return false;
953           break;
954
955         case ieee_atn_record_enum:
956           if (! parse_ieee_atn (&info, &p))
957             return false;
958           break;
959         }
960     }
961
962   if (info.blockstack.bsp != info.blockstack.stack)
963     {
964       ieee_error (&info, (const bfd_byte *) NULL,
965                   "blocks left on stack at end");
966       return false;
967     }
968
969   return true;
970 }
971
972 /* Handle an IEEE BB record.  */
973
974 static boolean
975 parse_ieee_bb (info, pp)
976      struct ieee_info *info;
977      const bfd_byte **pp;
978 {
979   const bfd_byte *block_start;
980   bfd_byte b;
981   bfd_vma size;
982   const char *name;
983   unsigned long namlen;
984   char *namcopy;
985   unsigned int fnindx;
986   boolean skip;
987
988   block_start = *pp;
989
990   b = **pp;
991   ++*pp;
992
993   if (! ieee_read_number (info, pp, &size)
994       || ! ieee_read_id (info, pp, &name, &namlen))
995     return false;
996
997   fnindx = (unsigned int) -1;
998   skip = false;
999
1000   switch (b)
1001     {
1002     case 1:
1003       /* BB1: Type definitions local to a module.  */
1004       namcopy = savestring (name, namlen);
1005       if (namcopy == NULL)
1006         return false;
1007       if (! debug_set_filename (info->dhandle, namcopy))
1008         return false;
1009       info->saw_filename = true;
1010
1011       /* Discard any variables or types we may have seen before.  */
1012       if (info->vars.vars != NULL)
1013         free (info->vars.vars);
1014       info->vars.vars = NULL;
1015       info->vars.alloc = 0;
1016       if (info->types.types != NULL)
1017         free (info->types.types);
1018       info->types.types = NULL;
1019       info->types.alloc = 0;
1020
1021       /* Initialize the types to the global types.  */
1022       if (info->global_types != NULL)
1023         {
1024           info->types.alloc = info->global_types->alloc;
1025           info->types.types = ((struct ieee_type *)
1026                                xmalloc (info->types.alloc
1027                                         * sizeof (*info->types.types)));
1028           memcpy (info->types.types, info->global_types->types,
1029                   info->types.alloc * sizeof (*info->types.types));
1030         }
1031
1032       break;
1033
1034     case 2:
1035       /* BB2: Global type definitions.  The name is supposed to be
1036          empty, but we don't check. */
1037       if (! debug_set_filename (info->dhandle, "*global*"))
1038         return false;
1039       info->saw_filename = true;
1040       break;
1041
1042     case 3:
1043       /* BB3: High level module block begin.  We don't have to do
1044          anything here.  The name is supposed to be the same as for
1045          the BB1, but we don't check.  */
1046       break;
1047
1048     case 4:
1049       /* BB4: Global function.  */
1050       {
1051         bfd_vma stackspace, typindx, offset;
1052         debug_type return_type;
1053
1054         if (! ieee_read_number (info, pp, &stackspace)
1055             || ! ieee_read_number (info, pp, &typindx)
1056             || ! ieee_read_expression (info, pp, &offset))
1057           return false;
1058
1059         /* We have no way to record the stack space.  FIXME.  */
1060
1061         if (typindx < 256)
1062           {
1063             return_type = ieee_builtin_type (info, block_start, typindx);
1064             if (return_type == DEBUG_TYPE_NULL)
1065               return false;
1066           }
1067         else
1068           {
1069             typindx -= 256;
1070             if (! ieee_alloc_type (info, typindx, true))
1071               return false;
1072             fnindx = typindx;
1073             return_type = info->types.types[typindx].type;
1074             if (debug_get_type_kind (info->dhandle, return_type)
1075                 == DEBUG_KIND_FUNCTION)
1076               return_type = debug_get_return_type (info->dhandle,
1077                                                    return_type);
1078           }
1079
1080         namcopy = savestring (name, namlen);
1081         if (namcopy == NULL)
1082           return false;
1083         if (! debug_record_function (info->dhandle, namcopy, return_type,
1084                                      true, offset))
1085           return false;
1086       }
1087       break;
1088
1089     case 5:
1090       /* BB5: File name for source line numbers.  */
1091       {
1092         unsigned int i;
1093
1094         /* We ignore the date and time.  FIXME.  */
1095         for (i = 0; i < 6; i++)
1096           {
1097             bfd_vma ignore;
1098             boolean present;
1099
1100             if (! ieee_read_optional_number (info, pp, &ignore, &present))
1101               return false;
1102             if (! present)
1103               break;
1104           }
1105
1106         namcopy = savestring (name, namlen);
1107         if (namcopy == NULL)
1108           return false;
1109         if (! debug_start_source (info->dhandle, namcopy))
1110           return false;
1111       }
1112       break;
1113
1114     case 6:
1115       /* BB6: Local function or block.  */
1116       {
1117         bfd_vma stackspace, typindx, offset;
1118
1119         if (! ieee_read_number (info, pp, &stackspace)
1120             || ! ieee_read_number (info, pp, &typindx)
1121             || ! ieee_read_expression (info, pp, &offset))
1122           return false;
1123
1124         /* We have no way to record the stack space.  FIXME.  */
1125
1126         if (namlen == 0)
1127           {
1128             if (! debug_start_block (info->dhandle, offset))
1129               return false;
1130             /* Change b to indicate that this is a block
1131                rather than a function.  */
1132             b = 0x86;
1133           }
1134         else
1135           {
1136             /* The MRI C++ compiler will output a fake function named
1137                __XRYCPP to hold C++ debugging information.  We skip
1138                that function.  This is not crucial, but it makes
1139                converting from IEEE to other debug formats work
1140                better.  */
1141             if (strncmp (name, "__XRYCPP", namlen) == 0)
1142               skip = true;
1143             else
1144               {
1145                 debug_type return_type;
1146
1147                 if (typindx < 256)
1148                   {
1149                     return_type = ieee_builtin_type (info, block_start,
1150                                                      typindx);
1151                     if (return_type == NULL)
1152                       return false;
1153                   }
1154                 else
1155                   {
1156                     typindx -= 256;
1157                     if (! ieee_alloc_type (info, typindx, true))
1158                       return false;
1159                     fnindx = typindx;
1160                     return_type = info->types.types[typindx].type;
1161                     if (debug_get_type_kind (info->dhandle, return_type)
1162                         == DEBUG_KIND_FUNCTION)
1163                       return_type = debug_get_return_type (info->dhandle,
1164                                                            return_type);
1165                   }
1166
1167                 namcopy = savestring (name, namlen);
1168                 if (namcopy == NULL)
1169                   return false;
1170                 if (! debug_record_function (info->dhandle, namcopy,
1171                                              return_type, false, offset))
1172                   return false;
1173               }
1174           }
1175       }
1176       break;
1177
1178     case 10:
1179       /* BB10: Assembler module scope.  In the normal case, we
1180          completely ignore all this information.  FIXME.  */
1181       {
1182         const char *inam, *vstr;
1183         unsigned long inamlen, vstrlen;
1184         bfd_vma tool_type;
1185         boolean present;
1186         unsigned int i;
1187
1188         if (! info->saw_filename)
1189           {
1190             namcopy = savestring (name, namlen);
1191             if (namcopy == NULL)
1192               return false;
1193             if (! debug_set_filename (info->dhandle, namcopy))
1194               return false;
1195             info->saw_filename = true;
1196           }
1197
1198         if (! ieee_read_id (info, pp, &inam, &inamlen)
1199             || ! ieee_read_number (info, pp, &tool_type)
1200             || ! ieee_read_optional_id (info, pp, &vstr, &vstrlen, &present))
1201           return false;
1202         for (i = 0; i < 6; i++)
1203           {
1204             bfd_vma ignore;
1205
1206             if (! ieee_read_optional_number (info, pp, &ignore, &present))
1207               return false;
1208             if (! present)
1209               break;
1210           }
1211       }
1212       break;
1213
1214     case 11:
1215       /* BB11: Module section.  We completely ignore all this
1216          information.  FIXME.  */
1217       {
1218         bfd_vma sectype, secindx, offset, map;
1219         boolean present;
1220
1221         if (! ieee_read_number (info, pp, &sectype)
1222             || ! ieee_read_number (info, pp, &secindx)
1223             || ! ieee_read_expression (info, pp, &offset)
1224             || ! ieee_read_optional_number (info, pp, &map, &present))
1225           return false;
1226       }
1227       break;
1228
1229     default:
1230       ieee_error (info, block_start, "unknown BB type");
1231       return false;
1232     }
1233
1234
1235   /* Push this block on the block stack.  */
1236
1237   if (info->blockstack.bsp >= info->blockstack.stack + BLOCKSTACK_SIZE)
1238     {
1239       ieee_error (info, (const bfd_byte *) NULL, "stack overflow");
1240       return false;
1241     }
1242
1243   info->blockstack.bsp->kind = b;
1244   if (b == 5)
1245     info->blockstack.bsp->filename = namcopy;
1246   info->blockstack.bsp->fnindx = fnindx;
1247   info->blockstack.bsp->skip = skip;
1248   ++info->blockstack.bsp;
1249
1250   return true;
1251 }
1252
1253 /* Handle an IEEE BE record.  */
1254
1255 static boolean
1256 parse_ieee_be (info, pp)
1257      struct ieee_info *info;
1258      const bfd_byte **pp;
1259 {
1260   bfd_vma offset;
1261
1262   if (info->blockstack.bsp <= info->blockstack.stack)
1263     {
1264       ieee_error (info, *pp, "stack underflow");
1265       return false;
1266     }
1267   --info->blockstack.bsp;
1268
1269   switch (info->blockstack.bsp->kind)
1270     {
1271     case 2:
1272       /* When we end the global typedefs block, we copy out the the
1273          contents of info->vars.  This is because the variable indices
1274          may be reused in the local blocks.  However, we need to
1275          preserve them so that we can locate a function returning a
1276          reference variable whose type is named in the global typedef
1277          block.  */
1278       info->global_vars = ((struct ieee_vars *)
1279                            xmalloc (sizeof *info->global_vars));
1280       info->global_vars->alloc = info->vars.alloc;
1281       info->global_vars->vars = ((struct ieee_var *)
1282                                  xmalloc (info->vars.alloc
1283                                           * sizeof (*info->vars.vars)));
1284       memcpy (info->global_vars->vars, info->vars.vars,
1285               info->vars.alloc * sizeof (*info->vars.vars));
1286
1287       /* We also copy out the non builtin parts of info->types, since
1288          the types are discarded when we start a new block.  */
1289       info->global_types = ((struct ieee_types *)
1290                             xmalloc (sizeof *info->global_types));
1291       info->global_types->alloc = info->types.alloc;
1292       info->global_types->types = ((struct ieee_type *)
1293                                    xmalloc (info->types.alloc
1294                                             * sizeof (*info->types.types)));
1295       memcpy (info->global_types->types, info->types.types,
1296               info->types.alloc * sizeof (*info->types.types));
1297       memset (info->global_types->builtins, 0,
1298               sizeof (info->global_types->builtins));
1299
1300       break;
1301
1302     case 4:
1303     case 6:
1304       if (! ieee_read_expression (info, pp, &offset))
1305         return false;
1306       if (! info->blockstack.bsp->skip)
1307         {
1308           if (! debug_end_function (info->dhandle, offset + 1))
1309             return false;
1310         }
1311       break;
1312
1313     case 0x86:
1314       /* This is BE6 when BB6 started a block rather than a local
1315          function.  */
1316       if (! ieee_read_expression (info, pp, &offset))
1317         return false;
1318       if (! debug_end_block (info->dhandle, offset + 1))
1319         return false;
1320       break;
1321
1322     case 5:
1323       /* When we end a BB5, we look up the stack for the last BB5, if
1324          there is one, so that we can call debug_start_source.  */
1325       if (info->blockstack.bsp > info->blockstack.stack)
1326         {
1327           struct ieee_block *bl;
1328
1329           bl = info->blockstack.bsp;
1330           do
1331             {
1332               --bl;
1333               if (bl->kind == 5)
1334                 {
1335                   if (! debug_start_source (info->dhandle, bl->filename))
1336                     return false;
1337                   break;
1338                 }
1339             }
1340           while (bl != info->blockstack.stack);
1341         }
1342       break;
1343
1344     case 11:
1345       if (! ieee_read_expression (info, pp, &offset))
1346         return false;
1347       /* We just ignore the module size.  FIXME.  */
1348       break;
1349
1350     default:
1351       /* Other block types do not have any trailing information.  */
1352       break;
1353     }
1354
1355   return true;
1356 }
1357
1358 /* Parse an NN record.  */
1359
1360 static boolean
1361 parse_ieee_nn (info, pp)
1362      struct ieee_info *info;
1363      const bfd_byte **pp;
1364 {
1365   const bfd_byte *nn_start;
1366   bfd_vma varindx;
1367   const char *name;
1368   unsigned long namlen;
1369
1370   nn_start = *pp;
1371
1372   if (! ieee_read_number (info, pp, &varindx)
1373       || ! ieee_read_id (info, pp, &name, &namlen))
1374     return false;
1375
1376   if (varindx < 32)
1377     {
1378       ieee_error (info, nn_start, "illegal variable index");
1379       return false;
1380     }
1381   varindx -= 32;
1382
1383   if (varindx >= info->vars.alloc)
1384     {
1385       unsigned int alloc;
1386
1387       alloc = info->vars.alloc;
1388       if (alloc == 0)
1389         alloc = 4;
1390       while (varindx >= alloc)
1391         alloc *= 2;
1392       info->vars.vars = ((struct ieee_var *)
1393                          xrealloc (info->vars.vars,
1394                                    alloc * sizeof *info->vars.vars));
1395       memset (info->vars.vars + info->vars.alloc, 0,
1396               (alloc - info->vars.alloc) * sizeof *info->vars.vars);
1397       info->vars.alloc = alloc;
1398     }
1399
1400   info->vars.vars[varindx].name = name;
1401   info->vars.vars[varindx].namlen = namlen;
1402
1403   return true;
1404 }
1405
1406 /* Parse a TY record.  */
1407
1408 static boolean
1409 parse_ieee_ty (info, pp)
1410      struct ieee_info *info;
1411      const bfd_byte **pp;
1412 {
1413   const bfd_byte *ty_start, *ty_var_start, *ty_code_start;
1414   bfd_vma typeindx, varindx, tc;
1415   PTR dhandle;
1416   boolean tag, typdef;
1417   debug_type *arg_slots;
1418   unsigned long type_bitsize;
1419   debug_type type;
1420
1421   ty_start = *pp;
1422
1423   if (! ieee_read_number (info, pp, &typeindx))
1424     return false;
1425
1426   if (typeindx < 256)
1427     {
1428       ieee_error (info, ty_start, "illegal type index");
1429       return false;
1430     }
1431
1432   typeindx -= 256;
1433   if (! ieee_alloc_type (info, typeindx, false))
1434     return false;
1435
1436   if (**pp != 0xce)
1437     {
1438       ieee_error (info, *pp, "unknown TY code");
1439       return false;
1440     }
1441   ++*pp;
1442
1443   ty_var_start = *pp;
1444
1445   if (! ieee_read_number (info, pp, &varindx))
1446     return false;
1447
1448   if (varindx < 32)
1449     {
1450       ieee_error (info, ty_var_start, "illegal variable index");
1451       return false;
1452     }
1453   varindx -= 32;
1454
1455   if (varindx >= info->vars.alloc || info->vars.vars[varindx].name == NULL)
1456     {
1457       ieee_error (info, ty_var_start, "undefined variable in TY");
1458       return false;
1459     }
1460
1461   ty_code_start = *pp;
1462
1463   if (! ieee_read_number (info, pp, &tc))
1464     return false;
1465
1466   dhandle = info->dhandle;
1467
1468   tag = false;
1469   typdef = false;
1470   arg_slots = NULL;
1471   type_bitsize = 0;
1472   switch (tc)
1473     {
1474     default:
1475       ieee_error (info, ty_code_start, "unknown TY code");
1476       return false;
1477
1478     case '!':
1479       /* Unknown type, with size.  We treat it as int.  FIXME.  */
1480       {
1481         bfd_vma size;
1482
1483         if (! ieee_read_number (info, pp, &size))
1484           return false;
1485         type = debug_make_int_type (dhandle, size, false);
1486       }
1487       break;
1488
1489     case 'A': /* Array.  */
1490     case 'a': /* FORTRAN array in column/row order.  FIXME: Not
1491                  distinguished from normal array.  */
1492       {
1493         debug_type ele_type;
1494         bfd_vma lower, upper;
1495
1496         if (! ieee_read_type_index (info, pp, &ele_type)
1497             || ! ieee_read_number (info, pp, &lower)
1498             || ! ieee_read_number (info, pp, &upper))
1499           return false;
1500         type = debug_make_array_type (dhandle, ele_type,
1501                                       ieee_builtin_type (info, ty_code_start,
1502                                                          ((unsigned int)
1503                                                           builtin_int)),
1504                                       (bfd_signed_vma) lower,
1505                                       (bfd_signed_vma) upper,
1506                                       false);
1507       }
1508       break;
1509
1510     case 'E':
1511       /* Simple enumeration.  */
1512       {
1513         bfd_vma size;
1514         unsigned int alloc;
1515         const char **names;
1516         unsigned int c;
1517         bfd_signed_vma *vals;
1518         unsigned int i;
1519
1520         if (! ieee_read_number (info, pp, &size))
1521           return false;
1522         /* FIXME: we ignore the enumeration size.  */
1523
1524         alloc = 10;
1525         names = (const char **) xmalloc (alloc * sizeof *names);
1526         memset (names, 0, alloc * sizeof *names);
1527         c = 0;
1528         while (1)
1529           {
1530             const char *name;
1531             unsigned long namlen;
1532             boolean present;
1533
1534             if (! ieee_read_optional_id (info, pp, &name, &namlen, &present))
1535               return false;
1536             if (! present)
1537               break;
1538
1539             if (c + 1 >= alloc)
1540               {
1541                 alloc += 10;
1542                 names = ((const char **)
1543                          xrealloc (names, alloc * sizeof *names));
1544               }
1545
1546             names[c] = savestring (name, namlen);
1547             if (names[c] == NULL)
1548               return false;
1549             ++c;
1550           }
1551
1552         names[c] = NULL;
1553
1554         vals = (bfd_signed_vma *) xmalloc (c * sizeof *vals);
1555         for (i = 0; i < c; i++)
1556           vals[i] = i;
1557
1558         type = debug_make_enum_type (dhandle, names, vals);
1559         tag = true;
1560       }
1561       break;
1562
1563     case 'G':
1564       /* Struct with bit fields.  */
1565       {
1566         bfd_vma size;
1567         unsigned int alloc;
1568         debug_field *fields;
1569         unsigned int c;
1570
1571         if (! ieee_read_number (info, pp, &size))
1572           return false;
1573
1574         alloc = 10;
1575         fields = (debug_field *) xmalloc (alloc * sizeof *fields);
1576         c = 0;
1577         while (1)
1578           {
1579             const char *name;
1580             unsigned long namlen;
1581             boolean present;
1582             debug_type ftype;
1583             bfd_vma bitpos, bitsize;
1584
1585             if (! ieee_read_optional_id (info, pp, &name, &namlen, &present))
1586               return false;
1587             if (! present)
1588               break;
1589             if (! ieee_read_type_index (info, pp, &ftype)
1590                 || ! ieee_read_number (info, pp, &bitpos)
1591                 || ! ieee_read_number (info, pp, &bitsize))
1592               return false;
1593
1594             if (c + 1 >= alloc)
1595               {
1596                 alloc += 10;
1597                 fields = ((debug_field *)
1598                           xrealloc (fields, alloc * sizeof *fields));
1599               }
1600
1601             fields[c] = debug_make_field (dhandle, savestring (name, namlen),
1602                                           ftype, bitpos, bitsize,
1603                                           DEBUG_VISIBILITY_PUBLIC);
1604             if (fields[c] == NULL)
1605               return false;
1606             ++c;
1607           }
1608
1609         fields[c] = NULL;
1610
1611         type = debug_make_struct_type (dhandle, true, size, fields);
1612         tag = true;
1613       }
1614       break;
1615
1616     case 'N':
1617       /* Enumeration.  */
1618       {
1619         unsigned int alloc;
1620         const char **names;
1621         bfd_signed_vma *vals;
1622         unsigned int c;
1623
1624         alloc = 10;
1625         names = (const char **) xmalloc (alloc * sizeof *names);
1626         vals = (bfd_signed_vma *) xmalloc (alloc * sizeof *names);
1627         c = 0;
1628         while (1)
1629           {
1630             const char *name;
1631             unsigned long namlen;
1632             boolean present;
1633             bfd_vma val;
1634
1635             if (! ieee_read_optional_id (info, pp, &name, &namlen, &present))
1636               return false;
1637             if (! present)
1638               break;
1639             if (! ieee_read_number (info, pp, &val))
1640               return false;
1641
1642             /* If the length of the name is zero, then the value is
1643                actually the size of the enum.  We ignore this
1644                information.  FIXME.  */
1645             if (namlen == 0)
1646               continue;
1647
1648             if (c + 1 >= alloc)
1649               {
1650                 alloc += 10;
1651                 names = ((const char **)
1652                          xrealloc (names, alloc * sizeof *names));
1653                 vals = ((bfd_signed_vma *)
1654                         xrealloc (vals, alloc * sizeof *vals));
1655               }
1656
1657             names[c] = savestring (name, namlen);
1658             if (names[c] == NULL)
1659               return false;
1660             vals[c] = (bfd_signed_vma) val;
1661             ++c;
1662           }
1663
1664         names[c] = NULL;
1665
1666         type = debug_make_enum_type (dhandle, names, vals);
1667         tag = true;
1668       }
1669       break;
1670
1671     case 'O': /* Small pointer.  We don't distinguish small and large
1672                  pointers.  FIXME.  */
1673     case 'P': /* Large pointer.  */
1674       {
1675         debug_type t;
1676
1677         if (! ieee_read_type_index (info, pp, &t))
1678           return false;
1679         type = debug_make_pointer_type (dhandle, t);
1680       }
1681       break;
1682
1683     case 'R':
1684       /* Range.  */
1685       {
1686         bfd_vma low, high, signedp, size;
1687
1688         if (! ieee_read_number (info, pp, &low)
1689             || ! ieee_read_number (info, pp, &high)
1690             || ! ieee_read_number (info, pp, &signedp)
1691             || ! ieee_read_number (info, pp, &size))
1692           return false;
1693
1694         type = debug_make_range_type (dhandle,
1695                                       debug_make_int_type (dhandle, size,
1696                                                            ! signedp),
1697                                       (bfd_signed_vma) low,
1698                                       (bfd_signed_vma) high);
1699       }
1700       break;
1701
1702     case 'S': /* Struct.  */
1703     case 'U': /* Union.  */
1704       {
1705         bfd_vma size;
1706         unsigned int alloc;
1707         debug_field *fields;
1708         unsigned int c;
1709
1710         if (! ieee_read_number (info, pp, &size))
1711           return false;
1712
1713         alloc = 10;
1714         fields = (debug_field *) xmalloc (alloc * sizeof *fields);
1715         c = 0;
1716         while (1)
1717           {
1718             const char *name;
1719             unsigned long namlen;
1720             boolean present;
1721             bfd_vma tindx;
1722             bfd_vma offset;
1723             debug_type ftype;
1724             bfd_vma bitsize;
1725
1726             if (! ieee_read_optional_id (info, pp, &name, &namlen, &present))
1727               return false;
1728             if (! present)
1729               break;
1730             if (! ieee_read_number (info, pp, &tindx)
1731                 || ! ieee_read_number (info, pp, &offset))
1732               return false;
1733
1734             if (tindx < 256)
1735               {
1736                 ftype = ieee_builtin_type (info, ty_code_start, tindx);
1737                 bitsize = 0;
1738                 offset *= 8;
1739               }
1740             else
1741               {
1742                 struct ieee_type *t;
1743
1744                 tindx -= 256;
1745                 if (! ieee_alloc_type (info, tindx, true))
1746                   return false;
1747                 t = info->types.types + tindx;
1748                 ftype = t->type;
1749                 bitsize = t->bitsize;
1750                 if (bitsize == 0)
1751                   offset *= 8;
1752               }
1753
1754             if (c + 1 >= alloc)
1755               {
1756                 alloc += 10;
1757                 fields = ((debug_field *)
1758                           xrealloc (fields, alloc * sizeof *fields));
1759               }
1760
1761             fields[c] = debug_make_field (dhandle, savestring (name, namlen),
1762                                           ftype, offset, bitsize,
1763                                           DEBUG_VISIBILITY_PUBLIC);
1764             if (fields[c] == NULL)
1765               return false;
1766             ++c;
1767           }
1768
1769         fields[c] = NULL;
1770
1771         type = debug_make_struct_type (dhandle, tc == 'S', size, fields);
1772         tag = true;
1773       }
1774       break;
1775
1776     case 'T':
1777       /* Typedef.  */
1778       if (! ieee_read_type_index (info, pp, &type))
1779         return false;
1780       typdef = true;
1781       break;
1782
1783     case 'X':
1784       /* Procedure.  FIXME: This is an extern declaration, which we
1785          have no way of representing.  */
1786       {
1787         bfd_vma attr;
1788         debug_type rtype;
1789         bfd_vma nargs;
1790         boolean present;
1791         struct ieee_var *pv;
1792
1793         /* FIXME: We ignore the attribute and the argument names.  */
1794
1795         if (! ieee_read_number (info, pp, &attr)
1796             || ! ieee_read_type_index (info, pp, &rtype)
1797             || ! ieee_read_number (info, pp, &nargs))
1798           return false;
1799         do
1800           {
1801             const char *name;
1802             unsigned long namlen;
1803
1804             if (! ieee_read_optional_id (info, pp, &name, &namlen, &present))
1805               return false;
1806           }
1807         while (present);
1808
1809         pv = info->vars.vars + varindx;
1810         pv->kind = IEEE_EXTERNAL;
1811         if (pv->namlen > 0
1812             && debug_get_type_kind (dhandle, rtype) == DEBUG_KIND_POINTER)
1813           {
1814             /* Set up the return type as an indirect type pointing to
1815                the variable slot, so that we can change it to a
1816                reference later if appropriate.  */
1817             pv->pslot = (debug_type *) xmalloc (sizeof *pv->pslot);
1818             *pv->pslot = rtype;
1819             rtype = debug_make_indirect_type (dhandle, pv->pslot,
1820                                               (const char *) NULL);
1821           }
1822
1823         type = debug_make_function_type (dhandle, rtype, (debug_type *) NULL,
1824                                          false);
1825       }
1826       break;
1827
1828     case 'V':
1829       /* Void.  This is not documented, but the MRI compiler emits it.  */
1830       type = debug_make_void_type (dhandle);
1831       break;
1832
1833     case 'Z':
1834       /* Array with 0 lower bound.  */
1835       {
1836         debug_type etype;
1837         bfd_vma high;
1838
1839         if (! ieee_read_type_index (info, pp, &etype)
1840             || ! ieee_read_number (info, pp, &high))
1841           return false;
1842
1843         type = debug_make_array_type (dhandle, etype,
1844                                       ieee_builtin_type (info, ty_code_start,
1845                                                          ((unsigned int)
1846                                                           builtin_int)),
1847                                       0, (bfd_signed_vma) high, false);
1848       }
1849       break;
1850
1851     case 'c': /* Complex.  */
1852     case 'd': /* Double complex.  */
1853       {
1854         const char *name;
1855         unsigned long namlen;
1856
1857         /* FIXME: I don't know what the name means.  */
1858
1859         if (! ieee_read_id (info, pp, &name, &namlen))
1860           return false;
1861
1862         type = debug_make_complex_type (dhandle, tc == 'c' ? 4 : 8);
1863       }
1864       break;
1865
1866     case 'f':
1867       /* Pascal file name.  FIXME.  */
1868       ieee_error (info, ty_code_start, "Pascal file name not supported");
1869       return false;
1870
1871     case 'g':
1872       /* Bitfield type.  */
1873       {
1874         bfd_vma signedp, bitsize, dummy;
1875         const bfd_byte *hold;
1876         boolean present;
1877
1878         if (! ieee_read_number (info, pp, &signedp)
1879             || ! ieee_read_number (info, pp, &bitsize))
1880           return false;
1881
1882         /* I think the documentation says that there is a type index,
1883            but some actual files do not have one.  */
1884         hold = *pp;
1885         if (! ieee_read_optional_number (info, pp, &dummy, &present))
1886           return false;
1887         if (! present)
1888           {
1889             /* FIXME: This is just a guess.  */
1890             type = debug_make_int_type (dhandle, 4,
1891                                         signedp ? false : true);
1892           }
1893         else
1894           {
1895             *pp = hold;
1896             if (! ieee_read_type_index (info, pp, &type))
1897               return false;
1898           }
1899         type_bitsize = bitsize;
1900       }
1901       break;
1902
1903     case 'n':
1904       /* Qualifier.  */
1905       {
1906         bfd_vma kind;
1907         debug_type t;
1908
1909         if (! ieee_read_number (info, pp, &kind)
1910             || ! ieee_read_type_index (info, pp, &t))
1911           return false;
1912
1913         switch (kind)
1914           {
1915           default:
1916             ieee_error (info, ty_start, "unsupported qualifer");
1917             return false;
1918
1919           case 1:
1920             type = debug_make_const_type (dhandle, t);
1921             break;
1922
1923           case 2:
1924             type = debug_make_volatile_type (dhandle, t);
1925             break;
1926           }
1927       }
1928       break;
1929
1930     case 's':
1931       /* Set.  */
1932       {
1933         bfd_vma size;
1934         debug_type etype;
1935
1936         if (! ieee_read_number (info, pp, &size)
1937             || ! ieee_read_type_index (info, pp, &etype))
1938           return false;
1939
1940         /* FIXME: We ignore the size.  */
1941
1942         type = debug_make_set_type (dhandle, etype, false);
1943       }
1944       break;
1945
1946     case 'x':
1947       /* Procedure with compiler dependencies.  */
1948       {
1949         struct ieee_var *pv;
1950         bfd_vma attr, frame_type, push_mask, nargs, level, father;
1951         debug_type rtype;
1952         debug_type *arg_types;
1953         boolean varargs;
1954         boolean present;
1955
1956         /* FIXME: We ignore some of this information.  */
1957
1958         pv = info->vars.vars + varindx;
1959
1960         if (! ieee_read_number (info, pp, &attr)
1961             || ! ieee_read_number (info, pp, &frame_type)
1962             || ! ieee_read_number (info, pp, &push_mask)
1963             || ! ieee_read_type_index (info, pp, &rtype)
1964             || ! ieee_read_number (info, pp, &nargs))
1965           return false;
1966         if (nargs == (bfd_vma) -1)
1967           {
1968             arg_types = NULL;
1969             varargs = false;
1970           }
1971         else
1972           {
1973             unsigned int i;
1974
1975             arg_types = ((debug_type *)
1976                          xmalloc ((nargs + 1) * sizeof *arg_types));
1977             for (i = 0; i < nargs; i++)
1978               if (! ieee_read_type_index (info, pp, arg_types + i))
1979                 return false;
1980
1981             /* If the last type is pointer to void, this is really a
1982                varargs function.  */
1983             varargs = false;
1984             if (nargs > 0)
1985               {
1986                 debug_type last;
1987
1988                 last = arg_types[nargs - 1];
1989                 if (debug_get_type_kind (dhandle, last) == DEBUG_KIND_POINTER
1990                     && (debug_get_type_kind (dhandle,
1991                                              debug_get_target_type (dhandle,
1992                                                                     last))
1993                         == DEBUG_KIND_VOID))
1994                   {
1995                     --nargs;
1996                     varargs = true;
1997                   }
1998               }
1999
2000             /* If there are any pointer arguments, turn them into
2001                indirect types in case we later need to convert them to
2002                reference types.  */
2003             for (i = 0; i < nargs; i++)
2004               {
2005                 if (debug_get_type_kind (dhandle, arg_types[i])
2006                     == DEBUG_KIND_POINTER)
2007                   {
2008                     if (arg_slots == NULL)
2009                       {
2010                         arg_slots = ((debug_type *)
2011                                      xmalloc (nargs * sizeof *arg_slots));
2012                         memset (arg_slots, 0, nargs * sizeof *arg_slots);
2013                       }
2014                     arg_slots[i] = arg_types[i];
2015                     arg_types[i] =
2016                       debug_make_indirect_type (dhandle,
2017                                                 arg_slots + i,
2018                                                 (const char *) NULL);
2019                   }
2020               }
2021
2022             arg_types[nargs] = DEBUG_TYPE_NULL;
2023           }
2024         if (! ieee_read_number (info, pp, &level)
2025             || ! ieee_read_optional_number (info, pp, &father, &present))
2026           return false;
2027
2028         /* We can't distinguish between a global function and a static
2029            function.  */
2030         pv->kind = IEEE_FUNCTION;
2031
2032         if (pv->namlen > 0
2033             && debug_get_type_kind (dhandle, rtype) == DEBUG_KIND_POINTER)
2034           {
2035             /* Set up the return type as an indirect type pointing to
2036                the variable slot, so that we can change it to a
2037                reference later if appropriate.  */
2038             pv->pslot = (debug_type *) xmalloc (sizeof *pv->pslot);
2039             *pv->pslot = rtype;
2040             rtype = debug_make_indirect_type (dhandle, pv->pslot,
2041                                               (const char *) NULL);
2042           }
2043
2044         type = debug_make_function_type (dhandle, rtype, arg_types, varargs);
2045       }
2046       break;
2047     }
2048
2049   /* Record the type in the table.  */
2050
2051   if (type == DEBUG_TYPE_NULL)
2052     return false;
2053
2054   info->vars.vars[varindx].type = type;
2055
2056   if ((tag || typdef)
2057       && info->vars.vars[varindx].namlen > 0)
2058     {
2059       const char *name;
2060
2061       name = savestring (info->vars.vars[varindx].name,
2062                          info->vars.vars[varindx].namlen);
2063       if (typdef)
2064         type = debug_name_type (dhandle, name, type);
2065       else if (tc == 'E' || tc == 'N')
2066         type = debug_tag_type (dhandle, name, type);
2067       else
2068         {
2069           struct ieee_tag *it;
2070
2071           /* We must allocate all struct tags as indirect types, so
2072              that if we later see a definition of the tag as a C++
2073              record we can update the indirect slot and automatically
2074              change all the existing references.  */
2075           it = (struct ieee_tag *) xmalloc (sizeof *it);
2076           memset (it, 0, sizeof *it);
2077           it->next = info->tags;
2078           info->tags = it;
2079           it->name = name;
2080           it->slot = type;
2081
2082           type = debug_make_indirect_type (dhandle, &it->slot, name);
2083           type = debug_tag_type (dhandle, name, type);
2084
2085           it->type = type;
2086         }
2087       if (type == NULL)
2088         return false;
2089     }
2090
2091   info->types.types[typeindx].type = type;
2092   info->types.types[typeindx].arg_slots = arg_slots;
2093   info->types.types[typeindx].bitsize = type_bitsize;
2094
2095   /* We may have already allocated type as an indirect type pointing
2096      to slot.  It does no harm to replace the indirect type with the
2097      real type.  Filling in slot as well handles the indirect types
2098      which are already hanging around.  */
2099   if (info->types.types[typeindx].pslot != NULL)
2100     *info->types.types[typeindx].pslot = type;
2101
2102   return true;
2103 }
2104
2105 /* Parse an ATN record.  */
2106
2107 static boolean
2108 parse_ieee_atn (info, pp)
2109      struct ieee_info *info;
2110      const bfd_byte **pp;
2111 {
2112   const bfd_byte *atn_start, *atn_code_start;
2113   bfd_vma varindx;
2114   struct ieee_var *pvar;
2115   debug_type type;
2116   bfd_vma atn_code;
2117   PTR dhandle;
2118   bfd_vma v, v2, v3, v4, v5;
2119   const char *name;
2120   unsigned long namlen;
2121   char *namcopy;
2122   boolean present;
2123   int blocktype;
2124
2125   atn_start = *pp;
2126
2127   if (! ieee_read_number (info, pp, &varindx)
2128       || ! ieee_read_type_index (info, pp, &type))
2129     return false;
2130
2131   atn_code_start = *pp;
2132
2133   if (! ieee_read_number (info, pp, &atn_code))
2134     return false;
2135
2136   if (varindx == 0)
2137     {
2138       pvar = NULL;
2139       name = "";
2140       namlen = 0;
2141     }
2142   else if (varindx < 32)
2143     {
2144       ieee_error (info, atn_start, "illegal variable index");
2145       return false;
2146     }
2147   else
2148     {
2149       varindx -= 32;
2150       if (varindx >= info->vars.alloc
2151           || info->vars.vars[varindx].name == NULL)
2152         {
2153           /* The MRI compiler or linker sometimes omits the NN record
2154              for a pmisc record.  */
2155           if (atn_code == 62)
2156             {
2157               if (varindx >= info->vars.alloc)
2158                 {
2159                   unsigned int alloc;
2160
2161                   alloc = info->vars.alloc;
2162                   if (alloc == 0)
2163                     alloc = 4;
2164                   while (varindx >= alloc)
2165                     alloc *= 2;
2166                   info->vars.vars = ((struct ieee_var *)
2167                                      xrealloc (info->vars.vars,
2168                                                (alloc
2169                                                 * sizeof *info->vars.vars)));
2170                   memset (info->vars.vars + info->vars.alloc, 0,
2171                           ((alloc - info->vars.alloc)
2172                            * sizeof *info->vars.vars));
2173                   info->vars.alloc = alloc;
2174                 }
2175
2176               pvar = info->vars.vars + varindx;
2177               pvar->name = "";
2178               pvar->namlen = 0;
2179             }
2180           else
2181             {
2182               ieee_error (info, atn_start, "undefined variable in ATN");
2183               return false;
2184             }
2185         }
2186
2187       pvar = info->vars.vars + varindx;
2188
2189       pvar->type = type;
2190
2191       name = pvar->name;
2192       namlen = pvar->namlen;
2193     }
2194
2195   dhandle = info->dhandle;
2196
2197   /* If we are going to call debug_record_variable with a pointer
2198      type, change the type to an indirect type so that we can later
2199      change it to a reference type if we encounter a C++ pmisc 'R'
2200      record.  */
2201   if (pvar != NULL
2202       && type != DEBUG_TYPE_NULL
2203       && debug_get_type_kind (dhandle, type) == DEBUG_KIND_POINTER)
2204     {
2205       switch (atn_code)
2206         {
2207         case 1:
2208         case 2:
2209         case 3:
2210         case 5:
2211         case 8:
2212         case 10:
2213           pvar->pslot = (debug_type *) xmalloc (sizeof *pvar->pslot);
2214           *pvar->pslot = type;
2215           type = debug_make_indirect_type (dhandle, pvar->pslot,
2216                                            (const char *) NULL);
2217           pvar->type = type;
2218           break;
2219         }
2220     }
2221
2222   switch (atn_code)
2223     {
2224     default:
2225       ieee_error (info, atn_code_start, "unknown ATN type");
2226       return false;
2227
2228     case 1:
2229       /* Automatic variable.  */
2230       if (! ieee_read_number (info, pp, &v))
2231         return false;
2232       namcopy = savestring (name, namlen);
2233       if (type == NULL)
2234         type = debug_make_void_type (dhandle);
2235       if (pvar != NULL)
2236         pvar->kind = IEEE_LOCAL;
2237       return debug_record_variable (dhandle, namcopy, type, DEBUG_LOCAL, v);
2238
2239     case 2:
2240       /* Register variable.  */
2241       if (! ieee_read_number (info, pp, &v))
2242         return false;
2243       namcopy = savestring (name, namlen);
2244       if (type == NULL)
2245         type = debug_make_void_type (dhandle);
2246       if (pvar != NULL)
2247         pvar->kind = IEEE_LOCAL;
2248       return debug_record_variable (dhandle, namcopy, type, DEBUG_REGISTER,
2249                                     ieee_regno_to_genreg (info->abfd, v));
2250
2251     case 3:
2252       /* Static variable.  */
2253       if (! ieee_require_asn (info, pp, &v))
2254         return false;
2255       namcopy = savestring (name, namlen);
2256       if (type == NULL)
2257         type = debug_make_void_type (dhandle);
2258       if (info->blockstack.bsp <= info->blockstack.stack)
2259         blocktype = 0;
2260       else
2261         blocktype = info->blockstack.bsp[-1].kind;
2262       if (pvar != NULL)
2263         {
2264           if (blocktype == 4 || blocktype == 6)
2265             pvar->kind = IEEE_LOCAL;
2266           else
2267             pvar->kind = IEEE_STATIC;
2268         }
2269       return debug_record_variable (dhandle, namcopy, type,
2270                                     (blocktype == 4 || blocktype == 6
2271                                      ? DEBUG_LOCAL_STATIC
2272                                      : DEBUG_STATIC),
2273                                     v);
2274
2275     case 4:
2276       /* External function.  We don't currently record these.  FIXME.  */
2277       if (pvar != NULL)
2278         pvar->kind = IEEE_EXTERNAL;
2279       return true;
2280
2281     case 5:
2282       /* External variable.  We don't currently record these.  FIXME.  */
2283       if (pvar != NULL)
2284         pvar->kind = IEEE_EXTERNAL;
2285       return true;
2286
2287     case 7:
2288       if (! ieee_read_number (info, pp, &v)
2289           || ! ieee_read_number (info, pp, &v2)
2290           || ! ieee_read_optional_number (info, pp, &v3, &present))
2291         return false;
2292       if (present)
2293         {
2294           if (! ieee_read_optional_number (info, pp, &v4, &present))
2295             return false;
2296         }
2297
2298       /* We just ignore the two optional fields in v3 and v4, since
2299          they are not defined.  */
2300
2301       if (! ieee_require_asn (info, pp, &v3))
2302         return false;
2303
2304       /* We have no way to record the column number.  FIXME.  */
2305
2306       return debug_record_line (dhandle, v, v3);
2307
2308     case 8:
2309       /* Global variable.  */
2310       if (! ieee_require_asn (info, pp, &v))
2311         return false;
2312       namcopy = savestring (name, namlen);
2313       if (type == NULL)
2314         type = debug_make_void_type (dhandle);
2315       if (pvar != NULL)
2316         pvar->kind = IEEE_GLOBAL;
2317       return debug_record_variable (dhandle, namcopy, type, DEBUG_GLOBAL, v);
2318
2319     case 9:
2320       /* Variable lifetime information.  */
2321       if (! ieee_read_number (info, pp, &v))
2322         return false;
2323
2324       /* We have no way to record this information.  FIXME.  */
2325       return true;
2326
2327     case 10:
2328       /* Locked register.  The spec says that there are two required
2329          fields, but at least on occasion the MRI compiler only emits
2330          one.  */
2331       if (! ieee_read_number (info, pp, &v)
2332           || ! ieee_read_optional_number (info, pp, &v2, &present))
2333         return false;
2334
2335       /* I think this means a variable that is both in a register and
2336          a frame slot.  We ignore the frame slot.  FIXME.  */
2337
2338       namcopy = savestring (name, namlen);
2339       if (type == NULL)
2340         type = debug_make_void_type (dhandle);
2341       if (pvar != NULL)
2342         pvar->kind = IEEE_LOCAL;
2343       return debug_record_variable (dhandle, namcopy, type, DEBUG_REGISTER, v);
2344
2345     case 11:
2346       /* Reserved for FORTRAN common.  */
2347       ieee_error (info, atn_code_start, "unsupported ATN11");
2348
2349       /* Return true to keep going.  */
2350       return true;
2351
2352     case 12:
2353       /* Based variable.  */
2354       v3 = 0;
2355       v4 = 0x80;
2356       v5 = 0;
2357       if (! ieee_read_number (info, pp, &v)
2358           || ! ieee_read_number (info, pp, &v2)
2359           || ! ieee_read_optional_number (info, pp, &v3, &present))
2360         return false;
2361       if (present)
2362         {
2363           if (! ieee_read_optional_number (info, pp, &v4, &present))
2364             return false;
2365           if (present)
2366             {
2367               if (! ieee_read_optional_number (info, pp, &v5, &present))
2368                 return false;
2369             }
2370         }
2371
2372       /* We have no way to record this information.  FIXME.  */
2373
2374       ieee_error (info, atn_code_start, "unsupported ATN12");
2375
2376       /* Return true to keep going.  */
2377       return true;
2378
2379     case 16:
2380       /* Constant.  The description of this that I have is ambiguous,
2381          so I'm not going to try to implement it.  */
2382       if (! ieee_read_number (info, pp, &v)
2383           || ! ieee_read_optional_number (info, pp, &v2, &present))
2384         return false;
2385       if (present)
2386         {
2387           if (! ieee_read_optional_number (info, pp, &v2, &present))
2388             return false;
2389           if (present)
2390             {
2391               if (! ieee_read_optional_id (info, pp, &name, &namlen, &present))
2392                 return false;
2393             }
2394         }
2395
2396       if ((ieee_record_enum_type) **pp == ieee_e2_first_byte_enum)
2397         {
2398           if (! ieee_require_asn (info, pp, &v3))
2399             return false;
2400         }
2401
2402       return true;
2403
2404     case 19:
2405       /* Static variable from assembler.  */
2406       v2 = 0;
2407       if (! ieee_read_number (info, pp, &v)
2408           || ! ieee_read_optional_number (info, pp, &v2, &present)
2409           || ! ieee_require_asn (info, pp, &v3))
2410         return false;
2411       namcopy = savestring (name, namlen);
2412       /* We don't really handle this correctly.  FIXME.  */
2413       return debug_record_variable (dhandle, namcopy,
2414                                     debug_make_void_type (dhandle),
2415                                     v2 != 0 ? DEBUG_GLOBAL : DEBUG_STATIC,
2416                                     v3);
2417
2418     case 62:
2419       /* Procedure miscellaneous information.  */
2420     case 63:
2421       /* Variable miscellaneous information.  */
2422     case 64:
2423       /* Module miscellaneous information.  */
2424       if (! ieee_read_number (info, pp, &v)
2425           || ! ieee_read_number (info, pp, &v2)
2426           || ! ieee_read_optional_id (info, pp, &name, &namlen, &present))
2427         return false;
2428
2429       if (atn_code == 62 && v == 80)
2430         {
2431           if (present)
2432             {
2433               ieee_error (info, atn_code_start,
2434                           "unexpected string in C++ misc");
2435               return false;
2436             }
2437           return ieee_read_cxx_misc (info, pp, v2);
2438         }
2439
2440       /* We just ignore all of this stuff.  FIXME.  */
2441
2442       for (; v2 > 0; --v2)
2443         {
2444           switch ((ieee_record_enum_type) **pp)
2445             {
2446             default:
2447               ieee_error (info, *pp, "bad misc record");
2448               return false;
2449
2450             case ieee_at_record_enum:
2451               if (! ieee_require_atn65 (info, pp, &name, &namlen))
2452                 return false;
2453               break;
2454
2455             case ieee_e2_first_byte_enum:
2456               if (! ieee_require_asn (info, pp, &v3))
2457                 return false;
2458               break;
2459             }
2460         }
2461
2462       return true;
2463     }
2464
2465   /*NOTREACHED*/
2466 }
2467
2468 /* Handle C++ debugging miscellaneous records.  This is called for
2469    procedure miscellaneous records of type 80.  */
2470
2471 static boolean
2472 ieee_read_cxx_misc (info, pp, count)
2473      struct ieee_info *info;
2474      const bfd_byte **pp;
2475      unsigned long count;
2476 {
2477   const bfd_byte *start;
2478   bfd_vma category;
2479
2480   start = *pp;
2481
2482   /* Get the category of C++ misc record.  */
2483   if (! ieee_require_asn (info, pp, &category))
2484     return false;
2485   --count;
2486
2487   switch (category)
2488     {
2489     default:
2490       ieee_error (info, start, "unrecognized C++ misc record");
2491       return false;
2492
2493     case 'T':
2494       if (! ieee_read_cxx_class (info, pp, count))
2495         return false;
2496       break;
2497
2498     case 'M':
2499       {
2500         bfd_vma flags;
2501         const char *name;
2502         unsigned long namlen;
2503
2504         /* The IEEE spec indicates that the 'M' record only has a
2505            flags field.  The MRI compiler also emits the name of the
2506            function.  */
2507
2508         if (! ieee_require_asn (info, pp, &flags))
2509           return false;
2510         if (*pp < info->pend
2511             && (ieee_record_enum_type) **pp == ieee_at_record_enum)
2512           {
2513             if (! ieee_require_atn65 (info, pp, &name, &namlen))
2514               return false;
2515           }
2516
2517         /* This is emitted for method functions, but I don't think we
2518            care very much.  It might help if it told us useful
2519            information like the class with which this function is
2520            associated, but it doesn't, so it isn't helpful.  */
2521       }
2522       break;
2523
2524     case 'B':
2525       if (! ieee_read_cxx_defaults (info, pp, count))
2526         return false;
2527       break;
2528
2529     case 'z':
2530       {
2531         const char *name, *mangled, *class;
2532         unsigned long namlen, mangledlen, classlen;
2533         bfd_vma control;
2534
2535         /* Pointer to member.  */
2536
2537         if (! ieee_require_atn65 (info, pp, &name, &namlen)
2538             || ! ieee_require_atn65 (info, pp, &mangled, &mangledlen)
2539             || ! ieee_require_atn65 (info, pp, &class, &classlen)
2540             || ! ieee_require_asn (info, pp, &control))
2541           return false;
2542
2543         /* FIXME: We should now track down name and change its type.  */
2544       }
2545       break;
2546
2547     case 'R':
2548       if (! ieee_read_reference (info, pp))
2549         return false;
2550       break;
2551     }
2552
2553   return true;
2554 }
2555
2556 /* Read a C++ class definition.  This is a pmisc type 80 record of
2557    category 'T'.  */
2558
2559 static boolean
2560 ieee_read_cxx_class (info, pp, count)
2561      struct ieee_info *info;
2562      const bfd_byte **pp;
2563      unsigned long count;
2564 {
2565   const bfd_byte *start;
2566   bfd_vma class;
2567   const char *tag;
2568   unsigned long taglen;
2569   struct ieee_tag *it;
2570   PTR dhandle;
2571   debug_field *fields;
2572   unsigned int field_count, field_alloc;
2573   debug_baseclass *baseclasses;
2574   unsigned int baseclasses_count, baseclasses_alloc;
2575   const debug_field *structfields;
2576   struct ieee_method
2577     {
2578       const char *name;
2579       unsigned long namlen;
2580       debug_method_variant *variants;
2581       unsigned count;
2582       unsigned int alloc;
2583     } *methods;
2584   unsigned int methods_count, methods_alloc;
2585   debug_type vptrbase;
2586   boolean ownvptr;
2587   debug_method *dmethods;
2588
2589   start = *pp;
2590
2591   if (! ieee_require_asn (info, pp, &class))
2592     return false;
2593   --count;
2594
2595   if (! ieee_require_atn65 (info, pp, &tag, &taglen))
2596     return false;
2597   --count;
2598
2599   /* Find the C struct with this name.  */
2600   for (it = info->tags; it != NULL; it = it->next)
2601     if (it->name[0] == tag[0]
2602         && strncmp (it->name, tag, taglen) == 0
2603         && strlen (it->name) == taglen)
2604       break;
2605   if (it == NULL)
2606     {
2607       ieee_error (info, start, "undefined C++ object");
2608       return false;
2609     }
2610
2611   dhandle = info->dhandle;
2612
2613   fields = NULL;
2614   field_count = 0;
2615   field_alloc = 0;
2616   baseclasses = NULL;
2617   baseclasses_count = 0;
2618   baseclasses_alloc = 0;
2619   methods = NULL;
2620   methods_count = 0;
2621   methods_alloc = 0;
2622   vptrbase = DEBUG_TYPE_NULL;
2623   ownvptr = false;
2624
2625   structfields = debug_get_fields (dhandle, it->type);
2626
2627   while (count > 0)
2628     {
2629       bfd_vma id;
2630       const bfd_byte *spec_start;
2631
2632       spec_start = *pp;
2633
2634       if (! ieee_require_asn (info, pp, &id))
2635         return false;
2636       --count;
2637
2638       switch (id)
2639         {
2640         default:
2641           ieee_error (info, spec_start, "unrecognized C++ object spec");
2642           return false;
2643
2644         case 'b':
2645           {
2646             bfd_vma flags, cinline;
2647             const char *basename, *fieldname;
2648             unsigned long baselen, fieldlen;
2649             char *basecopy;
2650             debug_type basetype;
2651             bfd_vma bitpos;
2652             boolean virtualp;
2653             enum debug_visibility visibility;
2654             debug_baseclass baseclass;
2655
2656             /* This represents a base or friend class.  */
2657
2658             if (! ieee_require_asn (info, pp, &flags)
2659                 || ! ieee_require_atn65 (info, pp, &basename, &baselen)
2660                 || ! ieee_require_asn (info, pp, &cinline)
2661                 || ! ieee_require_atn65 (info, pp, &fieldname, &fieldlen))
2662               return false;
2663             count -= 4;
2664
2665             /* We have no way of recording friend information, so we
2666                just ignore it.  */
2667             if ((flags & BASEFLAGS_FRIEND) != 0)
2668               break;
2669
2670             /* I assume that either all of the members of the
2671                baseclass are included in the object, starting at the
2672                beginning of the object, or that none of them are
2673                included.  */
2674
2675             if ((fieldlen == 0) == (cinline == 0))
2676               {
2677                 ieee_error (info, start, "unsupported C++ object type");
2678                 return false;
2679               }
2680
2681             basecopy = savestring (basename, baselen);
2682             basetype = debug_find_tagged_type (dhandle, basecopy,
2683                                                DEBUG_KIND_ILLEGAL);
2684             free (basecopy);
2685             if (basetype == DEBUG_TYPE_NULL)
2686               {
2687                 ieee_error (info, start, "C++ base class not defined");
2688                 return false;
2689               }
2690
2691             if (fieldlen == 0)
2692               bitpos = 0;
2693             else
2694               {
2695                 const debug_field *pf;
2696
2697                 if (structfields == NULL)
2698                   {
2699                     ieee_error (info, start, "C++ object has no fields");
2700                     return false;
2701                   }
2702
2703                 for (pf = structfields; *pf != DEBUG_FIELD_NULL; pf++)
2704                   {
2705                     const char *fname;
2706
2707                     fname = debug_get_field_name (dhandle, *pf);
2708                     if (fname == NULL)
2709                       return false;
2710                     if (fname[0] == fieldname[0]
2711                         && strncmp (fname, fieldname, fieldlen) == 0
2712                         && strlen (fname) == fieldlen)
2713                       break;
2714                   }
2715                 if (*pf == DEBUG_FIELD_NULL)
2716                   {
2717                     ieee_error (info, start,
2718                                 "C++ base class not found in container");
2719                     return false;
2720                   }
2721
2722                 bitpos = debug_get_field_bitpos (dhandle, *pf);
2723               }
2724
2725             if ((flags & BASEFLAGS_VIRTUAL) != 0)
2726               virtualp = true;
2727             else
2728               virtualp = false;
2729             if ((flags & BASEFLAGS_PRIVATE) != 0)
2730               visibility = DEBUG_VISIBILITY_PRIVATE;
2731             else
2732               visibility = DEBUG_VISIBILITY_PUBLIC;
2733
2734             baseclass = debug_make_baseclass (dhandle, basetype, bitpos,
2735                                               virtualp, visibility);
2736             if (baseclass == DEBUG_BASECLASS_NULL)
2737               return false;
2738
2739             if (baseclasses_count + 1 >= baseclasses_alloc)
2740               {
2741                 baseclasses_alloc += 10;
2742                 baseclasses = ((debug_baseclass *)
2743                                xrealloc (baseclasses,
2744                                          (baseclasses_alloc
2745                                           * sizeof *baseclasses)));
2746               }
2747
2748             baseclasses[baseclasses_count] = baseclass;
2749             ++baseclasses_count;
2750             baseclasses[baseclasses_count] = DEBUG_BASECLASS_NULL;
2751           }
2752           break;
2753
2754         case 'd':
2755           {
2756             bfd_vma flags;
2757             const char *fieldname, *mangledname;
2758             unsigned long fieldlen, mangledlen;
2759             char *fieldcopy;
2760             boolean staticp;
2761             debug_type ftype;
2762             const debug_field *pf;
2763             enum debug_visibility visibility;
2764             debug_field field;
2765
2766             /* This represents a data member.  */
2767
2768             if (! ieee_require_asn (info, pp, &flags)
2769                 || ! ieee_require_atn65 (info, pp, &fieldname, &fieldlen)
2770                 || ! ieee_require_atn65 (info, pp, &mangledname, &mangledlen))
2771               return false;
2772             count -= 3;
2773
2774             fieldcopy = savestring (fieldname, fieldlen);
2775
2776             staticp = (flags & CXXFLAGS_STATIC) != 0 ? true : false;
2777
2778             if (staticp)
2779               {
2780                 struct ieee_var *pv, *pvend;
2781
2782                 /* See if we can find a definition for this variable.  */
2783                 pv = info->vars.vars;
2784                 pvend = pv + info->vars.alloc;
2785                 for (; pv < pvend; pv++)
2786                   if (pv->namlen == mangledlen
2787                       && strncmp (pv->name, mangledname, mangledlen) == 0)
2788                     break;
2789                 if (pv < pvend)
2790                   ftype = pv->type;
2791                 else
2792                   {
2793                     /* This can happen if the variable is never used.  */
2794                     ftype = ieee_builtin_type (info, start,
2795                                                (unsigned int) builtin_void);
2796                   }
2797               }
2798             else
2799               {
2800                 unsigned int findx;
2801
2802                 if (structfields == NULL)
2803                   {
2804                     ieee_error (info, start, "C++ object has no fields");
2805                     return false;
2806                   }
2807
2808                 for (pf = structfields, findx = 0;
2809                      *pf != DEBUG_FIELD_NULL;
2810                      pf++, findx++)
2811                   {
2812                     const char *fname;
2813
2814                     fname = debug_get_field_name (dhandle, *pf);
2815                     if (fname == NULL)
2816                       return false;
2817                     if (fname[0] == mangledname[0]
2818                         && strncmp (fname, mangledname, mangledlen) == 0
2819                         && strlen (fname) == mangledlen)
2820                       break;
2821                   }
2822                 if (*pf == DEBUG_FIELD_NULL)
2823                   {
2824                     ieee_error (info, start,
2825                                 "C++ data member not found in container");
2826                     return false;
2827                   }
2828
2829                 ftype = debug_get_field_type (dhandle, *pf);
2830
2831                 if (debug_get_type_kind (dhandle, ftype) == DEBUG_KIND_POINTER)
2832                   {
2833                     /* We might need to convert this field into a
2834                        reference type later on, so make it an indirect
2835                        type.  */
2836                     if (it->fslots == NULL)
2837                       {
2838                         unsigned int fcnt;
2839                         const debug_field *pfcnt;
2840
2841                         fcnt = 0;
2842                         for (pfcnt = structfields;
2843                              *pfcnt != DEBUG_FIELD_NULL;
2844                              pfcnt++)
2845                           ++fcnt;
2846                         it->fslots = ((debug_type *)
2847                                       xmalloc (fcnt * sizeof *it->fslots));
2848                         memset (it->fslots, 0,
2849                                 fcnt * sizeof *it->fslots);
2850                       }
2851
2852                     if (ftype == DEBUG_TYPE_NULL)
2853                       return false;
2854                     it->fslots[findx] = ftype;
2855                     ftype = debug_make_indirect_type (dhandle,
2856                                                       it->fslots + findx,
2857                                                       (const char *) NULL);
2858                   }
2859               }
2860             if (ftype == DEBUG_TYPE_NULL)
2861               return false;
2862
2863             switch (flags & CXXFLAGS_VISIBILITY)
2864               {
2865               default:
2866                 ieee_error (info, start, "unknown C++ visibility");
2867                 return false;
2868
2869               case CXXFLAGS_VISIBILITY_PUBLIC:
2870                 visibility = DEBUG_VISIBILITY_PUBLIC;
2871                 break;
2872
2873               case CXXFLAGS_VISIBILITY_PRIVATE:
2874                 visibility = DEBUG_VISIBILITY_PRIVATE;
2875                 break;
2876
2877               case CXXFLAGS_VISIBILITY_PROTECTED:
2878                 visibility = DEBUG_VISIBILITY_PROTECTED;
2879                 break;
2880               }
2881
2882             if (staticp)
2883               {
2884                 char *mangledcopy;
2885
2886                 mangledcopy = savestring (mangledname, mangledlen);
2887
2888                 field = debug_make_static_member (dhandle, fieldcopy,
2889                                                   ftype, mangledcopy,
2890                                                   visibility);
2891               }
2892             else
2893               {
2894                 bfd_vma bitpos, bitsize;
2895
2896                 bitpos = debug_get_field_bitpos (dhandle, *pf);
2897                 bitsize = debug_get_field_bitsize (dhandle, *pf);
2898                 if (bitpos == (bfd_vma) -1 || bitsize == (bfd_vma) -1)
2899                   {
2900                     ieee_error (info, start, "bad C++ field bit pos or size");
2901                     return false;
2902                   }
2903                 field = debug_make_field (dhandle, fieldcopy, ftype, bitpos,
2904                                           bitsize, visibility);
2905               }
2906
2907             if (field == DEBUG_FIELD_NULL)
2908               return false;
2909
2910             if (field_count + 1 >= field_alloc)
2911               {
2912                 field_alloc += 10;
2913                 fields = ((debug_field *)
2914                           xrealloc (fields, field_alloc * sizeof *fields));
2915               }
2916
2917             fields[field_count] = field;
2918             ++field_count;
2919             fields[field_count] = DEBUG_FIELD_NULL;
2920           }
2921           break;
2922
2923         case 'm':
2924         case 'v':
2925           {
2926             bfd_vma flags, voffset, control;
2927             const char *name, *mangled;
2928             unsigned long namlen, mangledlen;
2929             struct ieee_var *pv, *pvend;
2930             debug_type type;
2931             enum debug_visibility visibility;
2932             boolean constp, volatilep;
2933             char *mangledcopy;
2934             debug_method_variant mv;
2935             struct ieee_method *meth;
2936             unsigned int im;
2937
2938             if (! ieee_require_asn (info, pp, &flags)
2939                 || ! ieee_require_atn65 (info, pp, &name, &namlen)
2940                 || ! ieee_require_atn65 (info, pp, &mangled, &mangledlen))
2941               return false;
2942             count -= 3;
2943             if (id != 'v')
2944               voffset = 0;
2945             else
2946               {
2947                 if (! ieee_require_asn (info, pp, &voffset))
2948                   return false;
2949                 --count;
2950               }
2951             if (! ieee_require_asn (info, pp, &control))
2952               return false;
2953             --count;
2954
2955             /* We just ignore the control information.  */
2956
2957             /* We have no way to represent friend information, so we
2958                just ignore it.  */
2959             if ((flags & CXXFLAGS_FRIEND) != 0)
2960               break;
2961
2962             /* We should already have seen a type for the function.  */
2963             pv = info->vars.vars;
2964             pvend = pv + info->vars.alloc;
2965             for (; pv < pvend; pv++)
2966               if (pv->namlen == mangledlen
2967                   && strncmp (pv->name, mangled, mangledlen) == 0)
2968                 break;
2969
2970             if (pv >= pvend)
2971               {
2972                 /* We won't have type information for this function if
2973                    it is not included in this file.  We don't try to
2974                    handle this case.  FIXME.  */
2975                 type = (debug_make_function_type
2976                         (dhandle,
2977                          ieee_builtin_type (info, start,
2978                                             (unsigned int) builtin_void),
2979                          (debug_type *) NULL,
2980                          false));
2981               }
2982             else
2983               {
2984                 debug_type return_type;
2985                 const debug_type *arg_types;
2986                 boolean varargs;
2987
2988                 if (debug_get_type_kind (dhandle, pv->type)
2989                     != DEBUG_KIND_FUNCTION)
2990                   {
2991                     ieee_error (info, start,
2992                                 "bad type for C++ method function");
2993                     return false;
2994                   }
2995
2996                 return_type = debug_get_return_type (dhandle, pv->type);
2997                 arg_types = debug_get_parameter_types (dhandle, pv->type,
2998                                                        &varargs);
2999                 if (return_type == DEBUG_TYPE_NULL || arg_types == NULL)
3000                   {
3001                     ieee_error (info, start,
3002                                 "no type information for C++ method function");
3003                     return false;
3004                   }
3005
3006                 type = debug_make_method_type (dhandle, return_type, it->type,
3007                                                (debug_type *) arg_types,
3008                                                varargs);
3009               }
3010             if (type == DEBUG_TYPE_NULL)
3011               return false;
3012
3013             switch (flags & CXXFLAGS_VISIBILITY)
3014               {
3015               default:
3016                 ieee_error (info, start, "unknown C++ visibility");
3017                 return false;
3018
3019               case CXXFLAGS_VISIBILITY_PUBLIC:
3020                 visibility = DEBUG_VISIBILITY_PUBLIC;
3021                 break;
3022
3023               case CXXFLAGS_VISIBILITY_PRIVATE:
3024                 visibility = DEBUG_VISIBILITY_PRIVATE;
3025                 break;
3026
3027               case CXXFLAGS_VISIBILITY_PROTECTED:
3028                 visibility = DEBUG_VISIBILITY_PROTECTED;
3029                 break;
3030               }
3031
3032             constp = (flags & CXXFLAGS_CONST) != 0 ? true : false;
3033             volatilep = (flags & CXXFLAGS_VOLATILE) != 0 ? true : false;
3034
3035             mangledcopy = savestring (mangled, mangledlen);
3036
3037             if ((flags & CXXFLAGS_STATIC) != 0)
3038               {
3039                 if (id == 'v')
3040                   {
3041                     ieee_error (info, start, "C++ static virtual method");
3042                     return false;
3043                   }
3044                 mv = debug_make_static_method_variant (dhandle, mangledcopy,
3045                                                        type, visibility,
3046                                                        constp, volatilep);
3047               }
3048             else
3049               {
3050                 debug_type vcontext;
3051
3052                 if (id != 'v')
3053                   vcontext = DEBUG_TYPE_NULL;
3054                 else
3055                   {
3056                     /* FIXME: How can we calculate this correctly?  */
3057                     vcontext = it->type;
3058                   }
3059                 mv = debug_make_method_variant (dhandle, mangledcopy, type,
3060                                                 visibility, constp,
3061                                                 volatilep, voffset,
3062                                                 vcontext);
3063               }
3064             if (mv == DEBUG_METHOD_VARIANT_NULL)
3065               return false;
3066
3067             for (meth = methods, im = 0; im < methods_count; meth++, im++)
3068               if (meth->namlen == namlen
3069                   && strncmp (meth->name, name, namlen) == 0)
3070                 break;
3071             if (im >= methods_count)
3072               {
3073                 if (methods_count >= methods_alloc)
3074                   {
3075                     methods_alloc += 10;
3076                     methods = ((struct ieee_method *)
3077                                xrealloc (methods,
3078                                          methods_alloc * sizeof *methods));
3079                   }
3080                 methods[methods_count].name = name;
3081                 methods[methods_count].namlen = namlen;
3082                 methods[methods_count].variants = NULL;
3083                 methods[methods_count].count = 0;
3084                 methods[methods_count].alloc = 0;
3085                 meth = methods + methods_count;
3086                 ++methods_count;
3087               }
3088
3089             if (meth->count + 1 >= meth->alloc)
3090               {
3091                 meth->alloc += 10;
3092                 meth->variants = ((debug_method_variant *)
3093                                   xrealloc (meth->variants,
3094                                             (meth->alloc
3095                                              * sizeof *meth->variants)));
3096               }
3097
3098             meth->variants[meth->count] = mv;
3099             ++meth->count;
3100             meth->variants[meth->count] = DEBUG_METHOD_VARIANT_NULL;
3101           }
3102           break;
3103
3104         case 'o':
3105           {
3106             bfd_vma spec;
3107
3108             /* We have no way to store this information, so we just
3109                ignore it.  */
3110             if (! ieee_require_asn (info, pp, &spec))
3111               return false;
3112             --count;
3113             if ((spec & 4) != 0)
3114               {
3115                 const char *filename;
3116                 unsigned long filenamlen;
3117                 bfd_vma lineno;
3118
3119                 if (! ieee_require_atn65 (info, pp, &filename, &filenamlen)
3120                     || ! ieee_require_asn (info, pp, &lineno))
3121                   return false;
3122                 count -= 2;
3123               }
3124             else if ((spec & 8) != 0)
3125               {
3126                 const char *mangled;
3127                 unsigned long mangledlen;
3128
3129                 if (! ieee_require_atn65 (info, pp, &mangled, &mangledlen))
3130                   return false;
3131                 --count;
3132               }
3133             else
3134               {
3135                 ieee_error (info, start,
3136                             "unrecognized C++ object overhead spec");
3137                 return false;
3138               }
3139           }
3140           break;
3141
3142         case 'z':
3143           {
3144             const char *vname, *basename;
3145             unsigned long vnamelen, baselen;
3146             bfd_vma vsize, control;
3147
3148             /* A virtual table pointer.  */
3149
3150             if (! ieee_require_atn65 (info, pp, &vname, &vnamelen)
3151                 || ! ieee_require_asn (info, pp, &vsize)
3152                 || ! ieee_require_atn65 (info, pp, &basename, &baselen)
3153                 || ! ieee_require_asn (info, pp, &control))
3154               return false;
3155             count -= 4;
3156
3157             /* We just ignore the control number.  We don't care what
3158                the virtual table name is.  We have no way to store the
3159                virtual table size, and I don't think we care anyhow.  */
3160
3161             /* FIXME: We can't handle multiple virtual table pointers.  */
3162
3163             if (baselen == 0)
3164               ownvptr = true;
3165             else
3166               {
3167                 char *basecopy;
3168
3169                 basecopy = savestring (basename, baselen);
3170                 vptrbase = debug_find_tagged_type (dhandle, basecopy,
3171                                                    DEBUG_KIND_ILLEGAL);
3172                 free (basecopy);
3173                 if (vptrbase == DEBUG_TYPE_NULL)
3174                   {
3175                     ieee_error (info, start, "undefined C++ vtable");
3176                     return false;
3177                   }
3178               }
3179           }
3180           break;
3181         }
3182     }
3183
3184   /* Now that we have seen all the method variants, we can call
3185      debug_make_method for each one.  */
3186
3187   if (methods_count == 0)
3188     dmethods = NULL;
3189   else
3190     {
3191       unsigned int i;
3192
3193       dmethods = ((debug_method *)
3194                   xmalloc ((methods_count + 1) * sizeof *dmethods));
3195       for (i = 0; i < methods_count; i++)
3196         {
3197           char *namcopy;
3198
3199           namcopy = savestring (methods[i].name, methods[i].namlen);
3200           dmethods[i] = debug_make_method (dhandle, namcopy,
3201                                            methods[i].variants);
3202           if (dmethods[i] == DEBUG_METHOD_NULL)
3203             return false;
3204         }
3205       dmethods[i] = DEBUG_METHOD_NULL;
3206       free (methods);
3207     }
3208
3209   /* The struct type was created as an indirect type pointing at
3210      it->slot.  We update it->slot to automatically update all
3211      references to this struct.  */
3212   it->slot = debug_make_object_type (dhandle,
3213                                      class != 'u',
3214                                      debug_get_type_size (dhandle,
3215                                                           it->slot),
3216                                      fields, baseclasses, dmethods,
3217                                      vptrbase, ownvptr);
3218   if (it->slot == DEBUG_TYPE_NULL)
3219     return false;
3220
3221   return true;
3222 }
3223
3224 /* Read C++ default argument value and reference type information.  */
3225
3226 static boolean
3227 ieee_read_cxx_defaults (info, pp, count)
3228      struct ieee_info *info;
3229      const bfd_byte **pp;
3230      unsigned long count;
3231 {
3232   const bfd_byte *start;
3233   const char *fnname;
3234   unsigned long fnlen;
3235   bfd_vma defcount;
3236
3237   start = *pp;
3238
3239   /* Giving the function name before the argument count is an addendum
3240      to the spec.  The function name is demangled, though, so this
3241      record must always refer to the current function.  */
3242
3243   if (info->blockstack.bsp <= info->blockstack.stack
3244       || info->blockstack.bsp[-1].fnindx == (unsigned int) -1)
3245     {
3246       ieee_error (info, start, "C++ default values not in a function");
3247       return false;
3248     }
3249
3250   if (! ieee_require_atn65 (info, pp, &fnname, &fnlen)
3251       || ! ieee_require_asn (info, pp, &defcount))
3252     return false;
3253   count -= 2;
3254
3255   while (defcount-- > 0)
3256     {
3257       bfd_vma type, val;
3258       const char *strval;
3259       unsigned long strvallen;
3260
3261       if (! ieee_require_asn (info, pp, &type))
3262         return false;
3263       --count;
3264
3265       switch (type)
3266         {
3267         case 0:
3268         case 4:
3269           break;
3270
3271         case 1:
3272         case 2:
3273           if (! ieee_require_asn (info, pp, &val))
3274             return false;
3275           --count;
3276           break;
3277
3278         case 3:
3279         case 7:
3280           if (! ieee_require_atn65 (info, pp, &strval, &strvallen))
3281             return false;
3282           --count;
3283           break;
3284
3285         default:
3286           ieee_error (info, start, "unrecognized C++ default type");
3287           return false;
3288         }
3289
3290       /* We have no way to record the default argument values, so we
3291          just ignore them.  FIXME.  */
3292     }
3293
3294   /* Any remaining arguments are indices of parameters that are really
3295      reference type.  */
3296   if (count > 0)
3297     {
3298       PTR dhandle;
3299       debug_type *arg_slots;
3300
3301       dhandle = info->dhandle;
3302       arg_slots = info->types.types[info->blockstack.bsp[-1].fnindx].arg_slots;
3303       while (count-- > 0)
3304         {
3305           bfd_vma indx;
3306           debug_type target;
3307
3308           if (! ieee_require_asn (info, pp, &indx))
3309             return false;
3310           /* The index is 1 based.  */
3311           --indx;
3312           if (arg_slots == NULL
3313               || arg_slots[indx] == DEBUG_TYPE_NULL
3314               || (debug_get_type_kind (dhandle, arg_slots[indx])
3315                   != DEBUG_KIND_POINTER))
3316             {
3317               ieee_error (info, start, "reference parameter is not a pointer");
3318               return false;
3319             }
3320
3321           target = debug_get_target_type (dhandle, arg_slots[indx]);
3322           arg_slots[indx] = debug_make_reference_type (dhandle, target);
3323           if (arg_slots[indx] == DEBUG_TYPE_NULL)
3324             return false;
3325         }
3326     }
3327
3328   return true;
3329 }
3330
3331 /* Read a C++ reference definition.  */
3332
3333 static boolean
3334 ieee_read_reference (info, pp)
3335      struct ieee_info *info;
3336      const bfd_byte **pp;
3337 {
3338   const bfd_byte *start;
3339   bfd_vma flags;
3340   const char *class, *name;
3341   unsigned long classlen, namlen;
3342   debug_type *pslot;
3343   debug_type target;
3344
3345   start = *pp;
3346
3347   if (! ieee_require_asn (info, pp, &flags))
3348     return false;
3349
3350   /* Giving the class name before the member name is in an addendum to
3351      the spec.  */
3352   if (flags == 3)
3353     {
3354       if (! ieee_require_atn65 (info, pp, &class, &classlen))
3355         return false;
3356     }
3357
3358   if (! ieee_require_atn65 (info, pp, &name, &namlen))
3359     return false;
3360
3361   pslot = NULL;
3362   if (flags != 3)
3363     {
3364       int pass;
3365
3366       /* We search from the last variable indices to the first in
3367          hopes of finding local variables correctly.  We search the
3368          local variables on the first pass, and the global variables
3369          on the second.  FIXME: This probably won't work in all cases.
3370          On the other hand, I don't know what will.  */
3371       for (pass = 0; pass < 2; pass++)
3372         {
3373           struct ieee_vars *vars;
3374           int i;
3375           struct ieee_var *pv = NULL;
3376
3377           if (pass == 0)
3378             vars = &info->vars;
3379           else
3380             {
3381               vars = info->global_vars;
3382               if (vars == NULL)
3383                 break;
3384             }
3385
3386           for (i = (int) vars->alloc - 1; i >= 0; i--)
3387             {
3388               boolean found;
3389
3390               pv = vars->vars + i;
3391
3392               if (pv->pslot == NULL
3393                   || pv->namlen != namlen
3394                   || strncmp (pv->name, name, namlen) != 0)
3395                 continue;
3396
3397               found = false;
3398               switch (flags)
3399                 {
3400                 default:
3401                   ieee_error (info, start,
3402                               "unrecognized C++ reference type");
3403                   return false;
3404
3405                 case 0:
3406                   /* Global variable or function.  */
3407                   if (pv->kind == IEEE_GLOBAL
3408                       || pv->kind == IEEE_EXTERNAL
3409                       || pv->kind == IEEE_FUNCTION)
3410                     found = true;
3411                   break;
3412
3413                 case 1:
3414                   /* Global static variable or function.  */
3415                   if (pv->kind == IEEE_STATIC
3416                       || pv->kind == IEEE_FUNCTION)
3417                     found = true;
3418                   break;
3419
3420                 case 2:
3421                   /* Local variable.  */
3422                   if (pv->kind == IEEE_LOCAL)
3423                     found = true;
3424                   break;
3425                 }
3426
3427               if (found)
3428                 break;
3429             }
3430
3431           if (i >= 0)
3432             {
3433               pslot = pv->pslot;
3434               break;
3435             }
3436         }
3437     }
3438   else
3439     {
3440       struct ieee_tag *it;
3441
3442       for (it = info->tags; it != NULL; it = it->next)
3443         {
3444           if (it->name[0] == class[0]
3445               && strncmp (it->name, class, classlen) == 0
3446               && strlen (it->name) == classlen)
3447             {
3448               if (it->fslots != NULL)
3449                 {
3450                   const debug_field *pf;
3451                   unsigned int findx;
3452
3453                   pf = debug_get_fields (info->dhandle, it->type);
3454                   if (pf == NULL)
3455                     {
3456                       ieee_error (info, start,
3457                                   "C++ reference in class with no fields");
3458                       return false;
3459                     }
3460
3461                   for (findx = 0; *pf != DEBUG_FIELD_NULL; pf++, findx++)
3462                     {
3463                       const char *fname;
3464
3465                       fname = debug_get_field_name (info->dhandle, *pf);
3466                       if (fname == NULL)
3467                         return false;
3468                       if (strncmp (fname, name, namlen) == 0
3469                           && strlen (fname) == namlen)
3470                         {
3471                           pslot = it->fslots + findx;
3472                           break;
3473                         }
3474                     }
3475                 }
3476
3477               break;
3478             }
3479         }
3480     }
3481
3482   if (pslot == NULL)
3483     {
3484       ieee_error (info, start, "C++ reference not found");
3485       return false;
3486     }
3487
3488   /* We allocated the type of the object as an indirect type pointing
3489      to *pslot, which we can now update to be a reference type.  */
3490   if (debug_get_type_kind (info->dhandle, *pslot) != DEBUG_KIND_POINTER)
3491     {
3492       ieee_error (info, start, "C++ reference is not pointer");
3493       return false;
3494     }
3495
3496   target = debug_get_target_type (info->dhandle, *pslot);
3497   *pslot = debug_make_reference_type (info->dhandle, target);
3498   if (*pslot == DEBUG_TYPE_NULL)
3499     return false;
3500
3501   return true;
3502 }
3503
3504 /* Require an ASN record.  */
3505
3506 static boolean
3507 ieee_require_asn (info, pp, pv)
3508      struct ieee_info *info;
3509      const bfd_byte **pp;
3510      bfd_vma *pv;
3511 {
3512   const bfd_byte *start;
3513   ieee_record_enum_type c;
3514   bfd_vma varindx;
3515
3516   start = *pp;
3517
3518   c = (ieee_record_enum_type) **pp;
3519   if (c != ieee_e2_first_byte_enum)
3520     {
3521       ieee_error (info, start, "missing required ASN");
3522       return false;
3523     }
3524   ++*pp;
3525
3526   c = (ieee_record_enum_type) (((unsigned int) c << 8) | **pp);
3527   if (c != ieee_asn_record_enum)
3528     {
3529       ieee_error (info, start, "missing required ASN");
3530       return false;
3531     }
3532   ++*pp;
3533
3534   /* Just ignore the variable index.  */
3535   if (! ieee_read_number (info, pp, &varindx))
3536     return false;
3537
3538   return ieee_read_expression (info, pp, pv);
3539 }
3540
3541 /* Require an ATN65 record.  */
3542
3543 static boolean
3544 ieee_require_atn65 (info, pp, pname, pnamlen)
3545      struct ieee_info *info;
3546      const bfd_byte **pp;
3547      const char **pname;
3548      unsigned long *pnamlen;
3549 {
3550   const bfd_byte *start;
3551   ieee_record_enum_type c;
3552   bfd_vma name_indx, type_indx, atn_code;
3553
3554   start = *pp;
3555
3556   c = (ieee_record_enum_type) **pp;
3557   if (c != ieee_at_record_enum)
3558     {
3559       ieee_error (info, start, "missing required ATN65");
3560       return false;
3561     }
3562   ++*pp;
3563
3564   c = (ieee_record_enum_type) (((unsigned int) c << 8) | **pp);
3565   if (c != ieee_atn_record_enum)
3566     {
3567       ieee_error (info, start, "missing required ATN65");
3568       return false;
3569     }
3570   ++*pp;
3571
3572   if (! ieee_read_number (info, pp, &name_indx)
3573       || ! ieee_read_number (info, pp, &type_indx)
3574       || ! ieee_read_number (info, pp, &atn_code))
3575     return false;
3576
3577   /* Just ignore name_indx.  */
3578
3579   if (type_indx != 0 || atn_code != 65)
3580     {
3581       ieee_error (info, start, "bad ATN65 record");
3582       return false;
3583     }
3584
3585   return ieee_read_id (info, pp, pname, pnamlen);
3586 }
3587 \f
3588 /* Convert a register number in IEEE debugging information into a
3589    generic register number.  */
3590
3591 static int
3592 ieee_regno_to_genreg (abfd, r)
3593      bfd *abfd;
3594      int r;
3595 {
3596   switch (bfd_get_arch (abfd))
3597     {
3598     case bfd_arch_m68k:
3599       /* For some reasons stabs adds 2 to the floating point register
3600          numbers.  */
3601       if (r >= 16)
3602         r += 2;
3603       break;
3604
3605     case bfd_arch_i960:
3606       /* Stabs uses 0 to 15 for r0 to r15, 16 to 31 for g0 to g15, and
3607          32 to 35 for fp0 to fp3.  */
3608       --r;
3609       break;
3610
3611     default:
3612       break;
3613     }
3614
3615   return r;
3616 }
3617
3618 /* Convert a generic register number to an IEEE specific one.  */
3619
3620 static int
3621 ieee_genreg_to_regno (abfd, r)
3622      bfd *abfd;
3623      int r;
3624 {
3625   switch (bfd_get_arch (abfd))
3626     {
3627     case bfd_arch_m68k:
3628       /* For some reason stabs add 2 to the floating point register
3629          numbers.  */
3630       if (r >= 18)
3631         r -= 2;
3632       break;
3633
3634     case bfd_arch_i960:
3635       /* Stabs uses 0 to 15 for r0 to r15, 16 to 31 for g0 to g15, and
3636          32 to 35 for fp0 to fp3.  */
3637       ++r;
3638       break;
3639
3640     default:
3641       break;
3642     }
3643
3644   return r;
3645 }
3646 \f
3647 /* These routines build IEEE debugging information out of the generic
3648    debugging information.  */
3649
3650 /* We build the IEEE debugging information byte by byte.  Rather than
3651    waste time copying data around, we use a linked list of buffers to
3652    hold the data.  */
3653
3654 #define IEEE_BUFSIZE (490)
3655
3656 struct ieee_buf
3657 {
3658   /* Next buffer.  */
3659   struct ieee_buf *next;
3660   /* Number of data bytes in this buffer.  */
3661   unsigned int c;
3662   /* Bytes.  */
3663   bfd_byte buf[IEEE_BUFSIZE];
3664 };
3665
3666 /* A list of buffers.  */
3667
3668 struct ieee_buflist
3669 {
3670   /* Head of list.  */
3671   struct ieee_buf *head;
3672   /* Tail--last buffer on list.  */
3673   struct ieee_buf *tail;
3674 };
3675
3676 /* In order to generate the BB11 blocks required by the HP emulator,
3677    we keep track of ranges of addresses which correspond to a given
3678    compilation unit.  */
3679
3680 struct ieee_range
3681 {
3682   /* Next range.  */
3683   struct ieee_range *next;
3684   /* Low address.  */
3685   bfd_vma low;
3686   /* High address.  */
3687   bfd_vma high;
3688 };
3689
3690 /* This structure holds information for a class on the type stack.  */
3691
3692 struct ieee_type_class
3693 {
3694   /* The name index in the debugging information.  */
3695   unsigned int indx;
3696   /* The pmisc records for the class.  */
3697   struct ieee_buflist pmiscbuf;
3698   /* The number of pmisc records.  */
3699   unsigned int pmisccount;
3700   /* The name of the class holding the virtual table, if not this
3701      class.  */
3702   const char *vclass;
3703   /* Whether this class holds its own virtual table.  */
3704   boolean ownvptr;
3705   /* The largest virtual table offset seen so far.  */
3706   bfd_vma voffset;
3707   /* The current method.  */
3708   const char *method;
3709   /* Additional pmisc records used to record fields of reference type.  */
3710   struct ieee_buflist refs;
3711 };
3712
3713 /* This is how we store types for the writing routines.  Most types
3714    are simply represented by a type index.  */
3715
3716 struct ieee_write_type
3717 {
3718   /* Type index.  */
3719   unsigned int indx;
3720   /* The size of the type, if known.  */
3721   unsigned int size;
3722   /* The name of the type, if any.  */
3723   const char *name;
3724   /* If this is a function or method type, we build the type here, and
3725      only add it to the output buffers if we need it.  */
3726   struct ieee_buflist fndef;
3727   /* If this is a struct, this is where the struct definition is
3728      built.  */
3729   struct ieee_buflist strdef;
3730   /* If this is a class, this is where the class information is built.  */
3731   struct ieee_type_class *classdef;
3732   /* Whether the type is unsigned.  */
3733   unsigned int unsignedp : 1;
3734   /* Whether this is a reference type.  */
3735   unsigned int referencep : 1;
3736   /* Whether this is in the local type block.  */
3737   unsigned int localp : 1;
3738   /* Whether this is a duplicate struct definition which we are
3739      ignoring.  */
3740   unsigned int ignorep : 1;
3741 };
3742
3743 /* This is the type stack used by the debug writing routines.  FIXME:
3744    We could generate more efficient output if we remembered when we
3745    have output a particular type before.  */
3746
3747 struct ieee_type_stack
3748 {
3749   /* Next entry on stack.  */
3750   struct ieee_type_stack *next;
3751   /* Type information.  */
3752   struct ieee_write_type type;
3753 };
3754
3755 /* This is a list of associations between a name and some types.
3756    These are used for typedefs and tags.  */
3757
3758 struct ieee_name_type
3759 {
3760   /* Next type for this name.  */
3761   struct ieee_name_type *next;
3762   /* ID number.  For a typedef, this is the index of the type to which
3763      this name is typedefed.  */
3764   unsigned int id;
3765   /* Type.  */
3766   struct ieee_write_type type;
3767   /* If this is a tag which has not yet been defined, this is the
3768      kind.  If the tag has been defined, this is DEBUG_KIND_ILLEGAL.  */
3769   enum debug_type_kind kind;
3770 };
3771
3772 /* We use a hash table to associate names and types.  */
3773
3774 struct ieee_name_type_hash_table
3775 {
3776   struct bfd_hash_table root;
3777 };
3778
3779 struct ieee_name_type_hash_entry
3780 {
3781   struct bfd_hash_entry root;
3782   /* Information for this name.  */
3783   struct ieee_name_type *types;
3784 };
3785
3786 /* This is a list of enums.  */
3787
3788 struct ieee_defined_enum
3789 {
3790   /* Next enum.  */
3791   struct ieee_defined_enum *next;
3792   /* Type index.  */
3793   unsigned int indx;
3794   /* Whether this enum has been defined.  */
3795   boolean defined;
3796   /* Tag.  */
3797   const char *tag;
3798   /* Names.  */
3799   const char **names;
3800   /* Values.  */
3801   bfd_signed_vma *vals;
3802 };
3803
3804 /* We keep a list of modified versions of types, so that we don't
3805    output them more than once.  */
3806
3807 struct ieee_modified_type
3808 {
3809   /* Pointer to this type.  */
3810   unsigned int pointer;
3811   /* Function with unknown arguments returning this type.  */
3812   unsigned int function;
3813   /* Const version of this type.  */
3814   unsigned int const_qualified;
3815   /* Volatile version of this type.  */
3816   unsigned int volatile_qualified;
3817   /* List of arrays of this type of various bounds.  */
3818   struct ieee_modified_array_type *arrays;
3819 };
3820
3821 /* A list of arrays bounds.  */
3822
3823 struct ieee_modified_array_type
3824 {
3825   /* Next array bounds.  */
3826   struct ieee_modified_array_type *next;
3827   /* Type index with these bounds.  */
3828   unsigned int indx;
3829   /* Low bound.  */
3830   bfd_signed_vma low;
3831   /* High bound.  */
3832   bfd_signed_vma high;
3833 };
3834
3835 /* This is a list of pending function parameter information.  We don't
3836    output them until we see the first block.  */
3837
3838 struct ieee_pending_parm
3839 {
3840   /* Next pending parameter.  */
3841   struct ieee_pending_parm *next;
3842   /* Name.  */
3843   const char *name;
3844   /* Type index.  */
3845   unsigned int type;
3846   /* Whether the type is a reference.  */
3847   boolean referencep;
3848   /* Kind.  */
3849   enum debug_parm_kind kind;
3850   /* Value.  */
3851   bfd_vma val;
3852 };
3853
3854 /* This is the handle passed down by debug_write.  */
3855
3856 struct ieee_handle
3857 {
3858   /* BFD we are writing to.  */
3859   bfd *abfd;
3860   /* Whether we got an error in a subroutine called via traverse or
3861      map_over_sections.  */
3862   boolean error;
3863   /* Current data buffer list.  */
3864   struct ieee_buflist *current;
3865   /* Current data buffer.  */
3866   struct ieee_buf *curbuf;
3867   /* Filename of current compilation unit.  */
3868   const char *filename;
3869   /* Module name of current compilation unit.  */
3870   const char *modname;
3871   /* List of buffer for global types.  */
3872   struct ieee_buflist global_types;
3873   /* List of finished data buffers.  */
3874   struct ieee_buflist data;
3875   /* List of buffers for typedefs in the current compilation unit.  */
3876   struct ieee_buflist types;
3877   /* List of buffers for variables and functions in the current
3878      compilation unit.  */
3879   struct ieee_buflist vars;
3880   /* List of buffers for C++ class definitions in the current
3881      compilation unit.  */
3882   struct ieee_buflist cxx;
3883   /* List of buffers for line numbers in the current compilation unit.  */
3884   struct ieee_buflist linenos;
3885   /* Ranges for the current compilation unit.  */
3886   struct ieee_range *ranges;
3887   /* Ranges for all debugging information.  */
3888   struct ieee_range *global_ranges;
3889   /* Nested pending ranges.  */
3890   struct ieee_range *pending_ranges;
3891   /* Type stack.  */
3892   struct ieee_type_stack *type_stack;
3893   /* Next unallocated type index.  */
3894   unsigned int type_indx;
3895   /* Next unallocated name index.  */
3896   unsigned int name_indx;
3897   /* Typedefs.  */
3898   struct ieee_name_type_hash_table typedefs;
3899   /* Tags.  */
3900   struct ieee_name_type_hash_table tags;
3901   /* Enums.  */
3902   struct ieee_defined_enum *enums;
3903   /* Modified versions of types.  */
3904   struct ieee_modified_type *modified;
3905   /* Number of entries allocated in modified.  */
3906   unsigned int modified_alloc;
3907   /* 4 byte complex type.  */
3908   unsigned int complex_float_index;
3909   /* 8 byte complex type.  */
3910   unsigned int complex_double_index;
3911   /* The depth of block nesting.  This is 0 outside a function, and 1
3912      just after start_function is called.  */
3913   unsigned int block_depth;
3914   /* The name of the current function.  */
3915   const char *fnname;
3916   /* List of buffers for the type of the function we are currently
3917      writing out.  */
3918   struct ieee_buflist fntype;
3919   /* List of buffers for the parameters of the function we are
3920      currently writing out.  */
3921   struct ieee_buflist fnargs;
3922   /* Number of arguments written to fnargs.  */
3923   unsigned int fnargcount;
3924   /* Pending function parameters.  */
3925   struct ieee_pending_parm *pending_parms;
3926   /* Current line number filename.  */
3927   const char *lineno_filename;
3928   /* Line number name index.  */
3929   unsigned int lineno_name_indx;
3930   /* Filename of pending line number.  */
3931   const char *pending_lineno_filename;
3932   /* Pending line number.  */
3933   unsigned long pending_lineno;
3934   /* Address of pending line number.  */
3935   bfd_vma pending_lineno_addr;
3936   /* Highest address seen at end of procedure.  */
3937   bfd_vma highaddr;
3938 };
3939
3940 static boolean ieee_init_buffer
3941   PARAMS ((struct ieee_handle *, struct ieee_buflist *));
3942 static boolean ieee_change_buffer
3943   PARAMS ((struct ieee_handle *, struct ieee_buflist *));
3944 static boolean ieee_append_buffer
3945   PARAMS ((struct ieee_handle *, struct ieee_buflist *,
3946            struct ieee_buflist *));
3947 static boolean ieee_real_write_byte PARAMS ((struct ieee_handle *, int));
3948 static boolean ieee_write_2bytes PARAMS ((struct ieee_handle *, int));
3949 static boolean ieee_write_number PARAMS ((struct ieee_handle *, bfd_vma));
3950 static boolean ieee_write_id PARAMS ((struct ieee_handle *, const char *));
3951 static boolean ieee_write_asn
3952   PARAMS ((struct ieee_handle *, unsigned int, bfd_vma));
3953 static boolean ieee_write_atn65
3954   PARAMS ((struct ieee_handle *, unsigned int, const char *));
3955 static boolean ieee_push_type
3956   PARAMS ((struct ieee_handle *, unsigned int, unsigned int, boolean,
3957            boolean));
3958 static unsigned int ieee_pop_type PARAMS ((struct ieee_handle *));
3959 static void ieee_pop_unused_type PARAMS ((struct ieee_handle *));
3960 static unsigned int ieee_pop_type_used
3961   PARAMS ((struct ieee_handle *, boolean));
3962 static boolean ieee_add_range
3963   PARAMS ((struct ieee_handle *, boolean, bfd_vma, bfd_vma));
3964 static boolean ieee_start_range PARAMS ((struct ieee_handle *, bfd_vma));
3965 static boolean ieee_end_range PARAMS ((struct ieee_handle *, bfd_vma));
3966 static boolean ieee_define_type
3967   PARAMS ((struct ieee_handle *, unsigned int, boolean, boolean));
3968 static boolean ieee_define_named_type
3969   PARAMS ((struct ieee_handle *, const char *, unsigned int, unsigned int,
3970            boolean, boolean, struct ieee_buflist *));
3971 static struct ieee_modified_type *ieee_get_modified_info
3972   PARAMS ((struct ieee_handle *, unsigned int));
3973 static struct bfd_hash_entry *ieee_name_type_newfunc
3974   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
3975 static boolean ieee_write_undefined_tag
3976   PARAMS ((struct ieee_name_type_hash_entry *, PTR));
3977 static boolean ieee_finish_compilation_unit PARAMS ((struct ieee_handle *));
3978 static void ieee_add_bb11_blocks PARAMS ((bfd *, asection *, PTR));
3979 static boolean ieee_add_bb11
3980   PARAMS ((struct ieee_handle *, asection *, bfd_vma, bfd_vma));
3981 static boolean ieee_output_pending_parms PARAMS ((struct ieee_handle *));
3982 static unsigned int ieee_vis_to_flags PARAMS ((enum debug_visibility));
3983 static boolean ieee_class_method_var
3984   PARAMS ((struct ieee_handle *, const char *, enum debug_visibility, boolean,
3985            boolean, boolean, bfd_vma, boolean));
3986
3987 static boolean ieee_start_compilation_unit PARAMS ((PTR, const char *));
3988 static boolean ieee_start_source PARAMS ((PTR, const char *));
3989 static boolean ieee_empty_type PARAMS ((PTR));
3990 static boolean ieee_void_type PARAMS ((PTR));
3991 static boolean ieee_int_type PARAMS ((PTR, unsigned int, boolean));
3992 static boolean ieee_float_type PARAMS ((PTR, unsigned int));
3993 static boolean ieee_complex_type PARAMS ((PTR, unsigned int));
3994 static boolean ieee_bool_type PARAMS ((PTR, unsigned int));
3995 static boolean ieee_enum_type
3996   PARAMS ((PTR, const char *, const char **, bfd_signed_vma *));
3997 static boolean ieee_pointer_type PARAMS ((PTR));
3998 static boolean ieee_function_type PARAMS ((PTR, int, boolean));
3999 static boolean ieee_reference_type PARAMS ((PTR));
4000 static boolean ieee_range_type PARAMS ((PTR, bfd_signed_vma, bfd_signed_vma));
4001 static boolean ieee_array_type
4002   PARAMS ((PTR, bfd_signed_vma, bfd_signed_vma, boolean));
4003 static boolean ieee_set_type PARAMS ((PTR, boolean));
4004 static boolean ieee_offset_type PARAMS ((PTR));
4005 static boolean ieee_method_type PARAMS ((PTR, boolean, int, boolean));
4006 static boolean ieee_const_type PARAMS ((PTR));
4007 static boolean ieee_volatile_type PARAMS ((PTR));
4008 static boolean ieee_start_struct_type
4009   PARAMS ((PTR, const char *, unsigned int, boolean, unsigned int));
4010 static boolean ieee_struct_field
4011   PARAMS ((PTR, const char *, bfd_vma, bfd_vma, enum debug_visibility));
4012 static boolean ieee_end_struct_type PARAMS ((PTR));
4013 static boolean ieee_start_class_type
4014   PARAMS ((PTR, const char *, unsigned int, boolean, unsigned int, boolean,
4015            boolean));
4016 static boolean ieee_class_static_member
4017   PARAMS ((PTR, const char *, const char *, enum debug_visibility));
4018 static boolean ieee_class_baseclass
4019   PARAMS ((PTR, bfd_vma, boolean, enum debug_visibility));
4020 static boolean ieee_class_start_method PARAMS ((PTR, const char *));
4021 static boolean ieee_class_method_variant
4022   PARAMS ((PTR, const char *, enum debug_visibility, boolean, boolean,
4023            bfd_vma, boolean));
4024 static boolean ieee_class_static_method_variant
4025   PARAMS ((PTR, const char *, enum debug_visibility, boolean, boolean));
4026 static boolean ieee_class_end_method PARAMS ((PTR));
4027 static boolean ieee_end_class_type PARAMS ((PTR));
4028 static boolean ieee_typedef_type PARAMS ((PTR, const char *));
4029 static boolean ieee_tag_type
4030   PARAMS ((PTR, const char *, unsigned int, enum debug_type_kind));
4031 static boolean ieee_typdef PARAMS ((PTR, const char *));
4032 static boolean ieee_tag PARAMS ((PTR, const char *));
4033 static boolean ieee_int_constant PARAMS ((PTR, const char *, bfd_vma));
4034 static boolean ieee_float_constant PARAMS ((PTR, const char *, double));
4035 static boolean ieee_typed_constant PARAMS ((PTR, const char *, bfd_vma));
4036 static boolean ieee_variable
4037   PARAMS ((PTR, const char *, enum debug_var_kind, bfd_vma));
4038 static boolean ieee_start_function PARAMS ((PTR, const char *, boolean));
4039 static boolean ieee_function_parameter
4040   PARAMS ((PTR, const char *, enum debug_parm_kind, bfd_vma));
4041 static boolean ieee_start_block PARAMS ((PTR, bfd_vma));
4042 static boolean ieee_end_block PARAMS ((PTR, bfd_vma));
4043 static boolean ieee_end_function PARAMS ((PTR));
4044 static boolean ieee_lineno
4045   PARAMS ((PTR, const char *, unsigned long, bfd_vma));
4046
4047 static const struct debug_write_fns ieee_fns =
4048 {
4049   ieee_start_compilation_unit,
4050   ieee_start_source,
4051   ieee_empty_type,
4052   ieee_void_type,
4053   ieee_int_type,
4054   ieee_float_type,
4055   ieee_complex_type,
4056   ieee_bool_type,
4057   ieee_enum_type,
4058   ieee_pointer_type,
4059   ieee_function_type,
4060   ieee_reference_type,
4061   ieee_range_type,
4062   ieee_array_type,
4063   ieee_set_type,
4064   ieee_offset_type,
4065   ieee_method_type,
4066   ieee_const_type,
4067   ieee_volatile_type,
4068   ieee_start_struct_type,
4069   ieee_struct_field,
4070   ieee_end_struct_type,
4071   ieee_start_class_type,
4072   ieee_class_static_member,
4073   ieee_class_baseclass,
4074   ieee_class_start_method,
4075   ieee_class_method_variant,
4076   ieee_class_static_method_variant,
4077   ieee_class_end_method,
4078   ieee_end_class_type,
4079   ieee_typedef_type,
4080   ieee_tag_type,
4081   ieee_typdef,
4082   ieee_tag,
4083   ieee_int_constant,
4084   ieee_float_constant,
4085   ieee_typed_constant,
4086   ieee_variable,
4087   ieee_start_function,
4088   ieee_function_parameter,
4089   ieee_start_block,
4090   ieee_end_block,
4091   ieee_end_function,
4092   ieee_lineno
4093 };
4094
4095 /* Initialize a buffer to be empty.  */
4096
4097 /*ARGSUSED*/
4098 static boolean
4099 ieee_init_buffer (info, buflist)
4100      struct ieee_handle *info;
4101      struct ieee_buflist *buflist;
4102 {
4103   buflist->head = NULL;
4104   buflist->tail = NULL;
4105   return true;
4106 }
4107
4108 /* See whether a buffer list has any data.  */
4109
4110 #define ieee_buffer_emptyp(buflist) ((buflist)->head == NULL)
4111
4112 /* Change the current buffer to a specified buffer chain.  */
4113
4114 static boolean
4115 ieee_change_buffer (info, buflist)
4116      struct ieee_handle *info;
4117      struct ieee_buflist *buflist;
4118 {
4119   if (buflist->head == NULL)
4120     {
4121       struct ieee_buf *buf;
4122
4123       buf = (struct ieee_buf *) xmalloc (sizeof *buf);
4124       buf->next = NULL;
4125       buf->c = 0;
4126       buflist->head = buf;
4127       buflist->tail = buf;
4128     }
4129
4130   info->current = buflist;
4131   info->curbuf = buflist->tail;
4132
4133   return true;
4134 }
4135
4136 /* Append a buffer chain.  */
4137
4138 /*ARGSUSED*/
4139 static boolean
4140 ieee_append_buffer (info, mainbuf, newbuf)
4141      struct ieee_handle *info;
4142      struct ieee_buflist *mainbuf;
4143      struct ieee_buflist *newbuf;
4144 {
4145   if (newbuf->head != NULL)
4146     {
4147       if (mainbuf->head == NULL)
4148         mainbuf->head = newbuf->head;
4149       else
4150         mainbuf->tail->next = newbuf->head;
4151       mainbuf->tail = newbuf->tail;
4152     }
4153   return true;
4154 }
4155
4156 /* Write a byte into the buffer.  We use a macro for speed and a
4157    function for the complex cases.  */
4158
4159 #define ieee_write_byte(info, b)                                \
4160   ((info)->curbuf->c < IEEE_BUFSIZE                             \
4161    ? ((info)->curbuf->buf[(info)->curbuf->c++] = (b), true)     \
4162    : ieee_real_write_byte ((info), (b)))
4163
4164 static boolean
4165 ieee_real_write_byte (info, b)
4166      struct ieee_handle *info;
4167      int b;
4168 {
4169   if (info->curbuf->c >= IEEE_BUFSIZE)
4170     {
4171       struct ieee_buf *n;
4172
4173       n = (struct ieee_buf *) xmalloc (sizeof *n);
4174       n->next = NULL;
4175       n->c = 0;
4176       if (info->current->head == NULL)
4177         info->current->head = n;
4178       else
4179         info->current->tail->next = n;
4180       info->current->tail = n;
4181       info->curbuf = n;
4182     }
4183
4184   info->curbuf->buf[info->curbuf->c] = b;
4185   ++info->curbuf->c;
4186
4187   return true;
4188 }
4189
4190 /* Write out two bytes.  */
4191
4192 static boolean
4193 ieee_write_2bytes (info, i)
4194      struct ieee_handle *info;
4195      int i;
4196 {
4197   return (ieee_write_byte (info, i >> 8)
4198           && ieee_write_byte (info, i & 0xff));
4199 }
4200
4201 /* Write out an integer.  */
4202
4203 static boolean
4204 ieee_write_number (info, v)
4205      struct ieee_handle *info;
4206      bfd_vma v;
4207 {
4208   bfd_vma t;
4209   bfd_byte ab[20];
4210   bfd_byte *p;
4211   unsigned int c;
4212
4213   if (v <= (bfd_vma) ieee_number_end_enum)
4214     return ieee_write_byte (info, (int) v);
4215
4216   t = v;
4217   p = ab + sizeof ab;
4218   while (t != 0)
4219     {
4220       *--p = t & 0xff;
4221       t >>= 8;
4222     }
4223   c = (ab + 20) - p;
4224
4225   if (c > (unsigned int) (ieee_number_repeat_end_enum
4226                           - ieee_number_repeat_start_enum))
4227     {
4228       fprintf (stderr, "IEEE numeric overflow: 0x");
4229       fprintf_vma (stderr, v);
4230       fprintf (stderr, "\n");
4231       return false;
4232     }
4233
4234   if (! ieee_write_byte (info, (int) ieee_number_repeat_start_enum + c))
4235     return false;
4236   for (; c > 0; --c, ++p)
4237     {
4238       if (! ieee_write_byte (info, *p))
4239         return false;
4240     }
4241
4242   return true;
4243 }
4244
4245 /* Write out a string.  */
4246
4247 static boolean
4248 ieee_write_id (info, s)
4249      struct ieee_handle *info;
4250      const char *s;
4251 {
4252   unsigned int len;
4253
4254   len = strlen (s);
4255   if (len <= 0x7f)
4256     {
4257       if (! ieee_write_byte (info, len))
4258         return false;
4259     }
4260   else if (len <= 0xff)
4261     {
4262       if (! ieee_write_byte (info, (int) ieee_extension_length_1_enum)
4263           || ! ieee_write_byte (info, len))
4264         return false;
4265     }
4266   else if (len <= 0xffff)
4267     {
4268       if (! ieee_write_byte (info, (int) ieee_extension_length_2_enum)
4269           || ! ieee_write_2bytes (info, len))
4270         return false;
4271     }
4272   else
4273     {
4274       fprintf (stderr, "IEEE string length overflow: %u\n", len);
4275       return false;
4276     }
4277
4278   for (; *s != '\0'; s++)
4279     if (! ieee_write_byte (info, *s))
4280       return false;
4281
4282   return true;
4283 }
4284
4285 /* Write out an ASN record.  */
4286
4287 static boolean
4288 ieee_write_asn (info, indx, val)
4289      struct ieee_handle *info;
4290      unsigned int indx;
4291      bfd_vma val;
4292 {
4293   return (ieee_write_2bytes (info, (int) ieee_asn_record_enum)
4294           && ieee_write_number (info, indx)
4295           && ieee_write_number (info, val));
4296 }
4297
4298 /* Write out an ATN65 record.  */
4299
4300 static boolean
4301 ieee_write_atn65 (info, indx, s)
4302      struct ieee_handle *info;
4303      unsigned int indx;
4304      const char *s;
4305 {
4306   return (ieee_write_2bytes (info, (int) ieee_atn_record_enum)
4307           && ieee_write_number (info, indx)
4308           && ieee_write_number (info, 0)
4309           && ieee_write_number (info, 65)
4310           && ieee_write_id (info, s));
4311 }
4312
4313 /* Push a type index onto the type stack.  */
4314
4315 static boolean
4316 ieee_push_type (info, indx, size, unsignedp, localp)
4317      struct ieee_handle *info;
4318      unsigned int indx;
4319      unsigned int size;
4320      boolean unsignedp;
4321      boolean localp;
4322 {
4323   struct ieee_type_stack *ts;
4324
4325   ts = (struct ieee_type_stack *) xmalloc (sizeof *ts);
4326   memset (ts, 0, sizeof *ts);
4327
4328   ts->type.indx = indx;
4329   ts->type.size = size;
4330   ts->type.unsignedp = unsignedp;
4331   ts->type.localp = localp;
4332
4333   ts->next = info->type_stack;
4334   info->type_stack = ts;
4335
4336   return true;
4337 }
4338
4339 /* Pop a type index off the type stack.  */
4340
4341 static unsigned int
4342 ieee_pop_type (info)
4343      struct ieee_handle *info;
4344 {
4345   return ieee_pop_type_used (info, true);
4346 }
4347
4348 /* Pop an unused type index off the type stack.  */
4349
4350 static void
4351 ieee_pop_unused_type (info)
4352      struct ieee_handle *info;
4353 {
4354   (void) ieee_pop_type_used (info, false);
4355 }
4356
4357 /* Pop a used or unused type index off the type stack.  */
4358
4359 static unsigned int
4360 ieee_pop_type_used (info, used)
4361      struct ieee_handle *info;
4362      boolean used;
4363 {
4364   struct ieee_type_stack *ts;
4365   unsigned int ret;
4366
4367   ts = info->type_stack;
4368   assert (ts != NULL);
4369
4370   /* If this is a function type, and we need it, we need to append the
4371      actual definition to the typedef block now.  */
4372   if (used && ! ieee_buffer_emptyp (&ts->type.fndef))
4373     {
4374       struct ieee_buflist *buflist;
4375
4376       if (ts->type.localp)
4377         {
4378           /* Make sure we have started the types block.  */
4379           if (ieee_buffer_emptyp (&info->types))
4380             {
4381               if (! ieee_change_buffer (info, &info->types)
4382                   || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
4383                   || ! ieee_write_byte (info, 1)
4384                   || ! ieee_write_number (info, 0)
4385                   || ! ieee_write_id (info, info->modname))
4386                 return false;
4387             }
4388           buflist = &info->types;
4389         }
4390       else
4391         {
4392           /* Make sure we started the global type block.  */
4393           if (ieee_buffer_emptyp (&info->global_types))
4394             {
4395               if (! ieee_change_buffer (info, &info->global_types)
4396                   || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
4397                   || ! ieee_write_byte (info, 2)
4398                   || ! ieee_write_number (info, 0)
4399                   || ! ieee_write_id (info, ""))
4400                 return false;
4401             }
4402           buflist = &info->global_types;
4403         }
4404
4405       if (! ieee_append_buffer (info, buflist, &ts->type.fndef))
4406         return false;
4407     }
4408
4409   ret = ts->type.indx;
4410   info->type_stack = ts->next;
4411   free (ts);
4412   return ret;
4413 }
4414
4415 /* Add a range of bytes included in the current compilation unit.  */
4416
4417 static boolean
4418 ieee_add_range (info, global, low, high)
4419      struct ieee_handle *info;
4420      boolean global;
4421      bfd_vma low;
4422      bfd_vma high;
4423 {
4424   struct ieee_range **plist, *r, **pr;
4425
4426   if (low == (bfd_vma) -1 || high == (bfd_vma) -1 || low == high)
4427     return true;
4428
4429   if (global)
4430     plist = &info->global_ranges;
4431   else
4432     plist = &info->ranges;
4433
4434   for (r = *plist; r != NULL; r = r->next)
4435     {
4436       if (high >= r->low && low <= r->high)
4437         {
4438           /* The new range overlaps r.  */
4439           if (low < r->low)
4440             r->low = low;
4441           if (high > r->high)
4442             r->high = high;
4443           pr = &r->next;
4444           while (*pr != NULL && (*pr)->low <= r->high)
4445             {
4446               struct ieee_range *n;
4447
4448               if ((*pr)->high > r->high)
4449                 r->high = (*pr)->high;
4450               n = (*pr)->next;
4451               free (*pr);
4452               *pr = n;
4453             }
4454           return true;
4455         }
4456     }
4457
4458   r = (struct ieee_range *) xmalloc (sizeof *r);
4459   memset (r, 0, sizeof *r);
4460
4461   r->low = low;
4462   r->high = high;
4463
4464   /* Store the ranges sorted by address.  */
4465   for (pr = plist; *pr != NULL; pr = &(*pr)->next)
4466     if ((*pr)->low > high)
4467       break;
4468   r->next = *pr;
4469   *pr = r;
4470
4471   return true;
4472 }
4473
4474 /* Start a new range for which we only have the low address.  */
4475
4476 static boolean
4477 ieee_start_range (info, low)
4478      struct ieee_handle *info;
4479      bfd_vma low;
4480 {
4481   struct ieee_range *r;
4482
4483   r = (struct ieee_range *) xmalloc (sizeof *r);
4484   memset (r, 0, sizeof *r);
4485   r->low = low;
4486   r->next = info->pending_ranges;
4487   info->pending_ranges = r;
4488   return true;
4489 }  
4490
4491 /* Finish a range started by ieee_start_range.  */
4492
4493 static boolean
4494 ieee_end_range (info, high)
4495      struct ieee_handle *info;
4496      bfd_vma high;
4497 {
4498   struct ieee_range *r;
4499   bfd_vma low;
4500
4501   assert (info->pending_ranges != NULL);
4502   r = info->pending_ranges;
4503   low = r->low;
4504   info->pending_ranges = r->next;
4505   free (r);
4506   return ieee_add_range (info, false, low, high);
4507 }
4508
4509 /* Start defining a type.  */
4510
4511 static boolean
4512 ieee_define_type (info, size, unsignedp, localp)
4513      struct ieee_handle *info;
4514      unsigned int size;
4515      boolean unsignedp;
4516      boolean localp;
4517 {
4518   return ieee_define_named_type (info, (const char *) NULL,
4519                                  (unsigned int) -1, size, unsignedp,
4520                                  localp, (struct ieee_buflist *) NULL);
4521 }
4522
4523 /* Start defining a named type.  */
4524
4525 static boolean
4526 ieee_define_named_type (info, name, indx, size, unsignedp, localp, buflist)
4527      struct ieee_handle *info;
4528      const char *name;
4529      unsigned int indx;
4530      unsigned int size;
4531      boolean unsignedp;
4532      boolean localp;
4533      struct ieee_buflist *buflist;
4534 {
4535   unsigned int type_indx;
4536   unsigned int name_indx;
4537
4538   if (indx != (unsigned int) -1)
4539     type_indx = indx;
4540   else
4541     {
4542       type_indx = info->type_indx;
4543       ++info->type_indx;
4544     }
4545
4546   name_indx = info->name_indx;
4547   ++info->name_indx;
4548
4549   if (name == NULL)
4550     name = "";
4551
4552   /* If we were given a buffer, use it; otherwise, use either the
4553      local or the global type information, and make sure that the type
4554      block is started.  */
4555   if (buflist != NULL)
4556     {
4557       if (! ieee_change_buffer (info, buflist))
4558         return false;
4559     }
4560   else if (localp)
4561     {
4562       if (! ieee_buffer_emptyp (&info->types))
4563         {
4564           if (! ieee_change_buffer (info, &info->types))
4565             return false;
4566         }
4567       else
4568         {
4569           if (! ieee_change_buffer (info, &info->types)
4570               || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
4571               || ! ieee_write_byte (info, 1)
4572               || ! ieee_write_number (info, 0)
4573               || ! ieee_write_id (info, info->modname))
4574             return false;
4575         }
4576     }
4577   else
4578     {
4579       if (! ieee_buffer_emptyp (&info->global_types))
4580         {
4581           if (! ieee_change_buffer (info, &info->global_types))
4582             return false;
4583         }
4584       else
4585         {
4586           if (! ieee_change_buffer (info, &info->global_types)
4587               || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
4588               || ! ieee_write_byte (info, 2)
4589               || ! ieee_write_number (info, 0)
4590               || ! ieee_write_id (info, ""))
4591             return false;
4592         }
4593     }
4594
4595   /* Push the new type on the type stack, write out an NN record, and
4596      write out the start of a TY record.  The caller will then finish
4597      the TY record.  */
4598   if (! ieee_push_type (info, type_indx, size, unsignedp, localp))
4599     return false;
4600
4601   return (ieee_write_byte (info, (int) ieee_nn_record)
4602           && ieee_write_number (info, name_indx)
4603           && ieee_write_id (info, name)
4604           && ieee_write_byte (info, (int) ieee_ty_record_enum)
4605           && ieee_write_number (info, type_indx)
4606           && ieee_write_byte (info, 0xce)
4607           && ieee_write_number (info, name_indx));
4608 }
4609
4610 /* Get an entry to the list of modified versions of a type.  */
4611
4612 static struct ieee_modified_type *
4613 ieee_get_modified_info (info, indx)
4614      struct ieee_handle *info;
4615      unsigned int indx;
4616 {
4617   if (indx >= info->modified_alloc)
4618     {
4619       unsigned int nalloc;
4620
4621       nalloc = info->modified_alloc;
4622       if (nalloc == 0)
4623         nalloc = 16;
4624       while (indx >= nalloc)
4625         nalloc *= 2;
4626       info->modified = ((struct ieee_modified_type *)
4627                         xrealloc (info->modified,
4628                                   nalloc * sizeof *info->modified));
4629       memset (info->modified + info->modified_alloc, 0,
4630               (nalloc - info->modified_alloc) * sizeof *info->modified);
4631       info->modified_alloc = nalloc;
4632     }
4633
4634   return info->modified + indx;
4635 }
4636 \f
4637 /* Routines for the hash table mapping names to types.  */
4638
4639 /* Initialize an entry in the hash table.  */
4640
4641 static struct bfd_hash_entry *
4642 ieee_name_type_newfunc (entry, table, string)
4643      struct bfd_hash_entry *entry;
4644      struct bfd_hash_table *table;
4645      const char *string;
4646 {
4647   struct ieee_name_type_hash_entry *ret =
4648     (struct ieee_name_type_hash_entry *) entry;
4649
4650   /* Allocate the structure if it has not already been allocated by a
4651      subclass.  */
4652   if (ret == NULL)
4653     ret = ((struct ieee_name_type_hash_entry *)
4654            bfd_hash_allocate (table, sizeof *ret));
4655   if (ret == NULL)
4656     return NULL;
4657
4658   /* Call the allocation method of the superclass.  */
4659   ret = ((struct ieee_name_type_hash_entry *)
4660          bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
4661   if (ret)
4662     {
4663       /* Set local fields.  */
4664       ret->types = NULL;
4665     }
4666
4667   return (struct bfd_hash_entry *) ret;
4668 }
4669
4670 /* Look up an entry in the hash table.  */
4671
4672 #define ieee_name_type_hash_lookup(table, string, create, copy) \
4673   ((struct ieee_name_type_hash_entry *) \
4674    bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
4675
4676 /* Traverse the hash table.  */
4677
4678 #define ieee_name_type_hash_traverse(table, func, info)                 \
4679   (bfd_hash_traverse                                                    \
4680    (&(table)->root,                                                     \
4681     (boolean (*) PARAMS ((struct bfd_hash_entry *, PTR))) (func),       \
4682     (info)))
4683 \f
4684 /* The general routine to write out IEEE debugging information.  */
4685
4686 boolean
4687 write_ieee_debugging_info (abfd, dhandle)
4688      bfd *abfd;
4689      PTR dhandle;
4690 {
4691   struct ieee_handle info;
4692   asection *s;
4693   const char *err;
4694   struct ieee_buf *b;
4695
4696   memset (&info, 0, sizeof info);
4697   info.abfd = abfd;
4698   info.type_indx = 256;
4699   info.name_indx = 32;
4700
4701   if (! bfd_hash_table_init (&info.typedefs.root, ieee_name_type_newfunc)
4702       || ! bfd_hash_table_init (&info.tags.root, ieee_name_type_newfunc))
4703     return false;
4704
4705   if (! ieee_init_buffer (&info, &info.global_types)
4706       || ! ieee_init_buffer (&info, &info.data)
4707       || ! ieee_init_buffer (&info, &info.types)
4708       || ! ieee_init_buffer (&info, &info.vars)
4709       || ! ieee_init_buffer (&info, &info.cxx)
4710       || ! ieee_init_buffer (&info, &info.linenos)
4711       || ! ieee_init_buffer (&info, &info.fntype)
4712       || ! ieee_init_buffer (&info, &info.fnargs))
4713     return false;
4714
4715   if (! debug_write (dhandle, &ieee_fns, (PTR) &info))
4716     return false;
4717
4718   if (info.filename != NULL)
4719     {
4720       if (! ieee_finish_compilation_unit (&info))
4721         return false;
4722     }
4723
4724   /* Put any undefined tags in the global typedef information.  */
4725   info.error = false;
4726   ieee_name_type_hash_traverse (&info.tags,
4727                                 ieee_write_undefined_tag,
4728                                 (PTR) &info);
4729   if (info.error)
4730     return false;
4731
4732   /* Prepend the global typedef information to the other data.  */
4733   if (! ieee_buffer_emptyp (&info.global_types))
4734     {
4735       /* The HP debugger seems to have a bug in which it ignores the
4736          last entry in the global types, so we add a dummy entry.  */
4737       if (! ieee_change_buffer (&info, &info.global_types)
4738           || ! ieee_write_byte (&info, (int) ieee_nn_record)
4739           || ! ieee_write_number (&info, info.name_indx)
4740           || ! ieee_write_id (&info, "")
4741           || ! ieee_write_byte (&info, (int) ieee_ty_record_enum)
4742           || ! ieee_write_number (&info, info.type_indx)
4743           || ! ieee_write_byte (&info, 0xce)
4744           || ! ieee_write_number (&info, info.name_indx)
4745           || ! ieee_write_number (&info, 'P')
4746           || ! ieee_write_number (&info, (int) builtin_void + 32)
4747           || ! ieee_write_byte (&info, (int) ieee_be_record_enum))
4748         return false;
4749
4750       if (! ieee_append_buffer (&info, &info.global_types, &info.data))
4751         return false;
4752       info.data = info.global_types;
4753     }
4754
4755   /* Make sure that we have declare BB11 blocks for each range in the
4756      file.  They are added to info->vars.  */
4757   info.error = false;
4758   if (! ieee_init_buffer (&info, &info.vars))
4759     return false;
4760   bfd_map_over_sections (abfd, ieee_add_bb11_blocks, (PTR) &info);
4761   if (info.error)
4762     return false;
4763   if (! ieee_buffer_emptyp (&info.vars))
4764     {
4765       if (! ieee_change_buffer (&info, &info.vars)
4766           || ! ieee_write_byte (&info, (int) ieee_be_record_enum))
4767         return false;
4768
4769       if (! ieee_append_buffer (&info, &info.data, &info.vars))
4770         return false;
4771     }
4772
4773   /* Now all the data is in info.data.  Write it out to the BFD.  We
4774      normally would need to worry about whether all the other sections
4775      are set up yet, but the IEEE backend will handle this particular
4776      case correctly regardless.  */
4777   if (ieee_buffer_emptyp (&info.data))
4778     {
4779       /* There is no debugging information.  */
4780       return true;
4781     }
4782   err = NULL;
4783   s = bfd_make_section (abfd, ".debug");
4784   if (s == NULL)
4785     err = "bfd_make_section";
4786   if (err == NULL)
4787     {
4788       if (! bfd_set_section_flags (abfd, s, SEC_DEBUGGING | SEC_HAS_CONTENTS))
4789         err = "bfd_set_section_flags";
4790     }
4791   if (err == NULL)
4792     {
4793       bfd_size_type size;
4794
4795       size = 0;
4796       for (b = info.data.head; b != NULL; b = b->next)
4797         size += b->c;
4798       if (! bfd_set_section_size (abfd, s, size))
4799         err = "bfd_set_section_size";
4800     }
4801   if (err == NULL)
4802     {
4803       file_ptr offset;
4804
4805       offset = 0;
4806       for (b = info.data.head; b != NULL; b = b->next)
4807         {
4808           if (! bfd_set_section_contents (abfd, s, b->buf, offset, b->c))
4809             {
4810               err = "bfd_set_section_contents";
4811               break;
4812             }
4813           offset += b->c;
4814         }
4815     }
4816
4817   if (err != NULL)
4818     {
4819       fprintf (stderr, "%s: %s: %s\n", bfd_get_filename (abfd), err,
4820                bfd_errmsg (bfd_get_error ()));
4821       return false;
4822     }
4823
4824   bfd_hash_table_free (&info.typedefs.root);
4825   bfd_hash_table_free (&info.tags.root);
4826
4827   return true;
4828 }
4829
4830 /* Write out information for an undefined tag.  This is called via
4831    ieee_name_type_hash_traverse.  */
4832
4833 static boolean
4834 ieee_write_undefined_tag (h, p)
4835      struct ieee_name_type_hash_entry *h;
4836      PTR p;
4837 {
4838   struct ieee_handle *info = (struct ieee_handle *) p;
4839   struct ieee_name_type *nt;
4840
4841   for (nt = h->types; nt != NULL; nt = nt->next)
4842     {
4843       unsigned int name_indx;
4844       char code;
4845
4846       if (nt->kind == DEBUG_KIND_ILLEGAL)
4847         continue;
4848
4849       if (ieee_buffer_emptyp (&info->global_types))
4850         {
4851           if (! ieee_change_buffer (info, &info->global_types)
4852               || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
4853               || ! ieee_write_byte (info, 2)
4854               || ! ieee_write_number (info, 0)
4855               || ! ieee_write_id (info, ""))
4856             {
4857               info->error = true;
4858               return false;
4859             }
4860         }
4861       else
4862         {
4863           if (! ieee_change_buffer (info, &info->global_types))
4864             {
4865               info->error = true;
4866               return false;
4867             }
4868         }
4869
4870       name_indx = info->name_indx;
4871       ++info->name_indx;
4872       if (! ieee_write_byte (info, (int) ieee_nn_record)
4873           || ! ieee_write_number (info, name_indx)
4874           || ! ieee_write_id (info, nt->type.name)
4875           || ! ieee_write_byte (info, (int) ieee_ty_record_enum)
4876           || ! ieee_write_number (info, nt->type.indx)
4877           || ! ieee_write_byte (info, 0xce)
4878           || ! ieee_write_number (info, name_indx))
4879         {
4880           info->error = true;
4881           return false;
4882         }
4883
4884       switch (nt->kind)
4885         {
4886         default:
4887           abort ();
4888           info->error = true;
4889           return false;
4890         case DEBUG_KIND_STRUCT:
4891         case DEBUG_KIND_CLASS:
4892           code = 'S';
4893           break;
4894         case DEBUG_KIND_UNION:
4895         case DEBUG_KIND_UNION_CLASS:
4896           code = 'U';
4897           break;
4898         case DEBUG_KIND_ENUM:
4899           code = 'E';
4900           break;
4901         }
4902       if (! ieee_write_number (info, code)
4903           || ! ieee_write_number (info, 0))
4904         {
4905           info->error = true;
4906           return false;
4907         }
4908     }
4909
4910   return true;
4911 }
4912
4913 /* Start writing out information for a compilation unit.  */
4914
4915 static boolean
4916 ieee_start_compilation_unit (p, filename)
4917      PTR p;
4918      const char *filename;
4919 {
4920   struct ieee_handle *info = (struct ieee_handle *) p;
4921   const char *modname;
4922   char *c, *s;
4923   unsigned int nindx;
4924
4925   if (info->filename != NULL)
4926     {
4927       if (! ieee_finish_compilation_unit (info))
4928         return false;
4929     }
4930
4931   info->filename = filename;
4932   modname = strrchr (filename, '/');
4933   if (modname != NULL)
4934     ++modname;
4935   else
4936     {
4937       modname = strrchr (filename, '\\');
4938       if (modname != NULL)
4939         ++modname;
4940       else
4941         modname = filename;
4942     }
4943   c = xstrdup (modname);
4944   s = strrchr (c, '.');
4945   if (s != NULL)
4946     *s = '\0';
4947   info->modname = c;
4948
4949   if (! ieee_init_buffer (info, &info->types)
4950       || ! ieee_init_buffer (info, &info->vars)
4951       || ! ieee_init_buffer (info, &info->cxx)
4952       || ! ieee_init_buffer (info, &info->linenos))
4953     return false;
4954   info->ranges = NULL;
4955
4956   /* Always include a BB1 and a BB3 block.  That is what the output of
4957      the MRI linker seems to look like.  */
4958   if (! ieee_change_buffer (info, &info->types)
4959       || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
4960       || ! ieee_write_byte (info, 1)
4961       || ! ieee_write_number (info, 0)
4962       || ! ieee_write_id (info, info->modname))
4963     return false;
4964
4965   nindx = info->name_indx;
4966   ++info->name_indx;
4967   if (! ieee_change_buffer (info, &info->vars)
4968       || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
4969       || ! ieee_write_byte (info, 3)
4970       || ! ieee_write_number (info, 0)
4971       || ! ieee_write_id (info, info->modname))
4972     return false;
4973
4974   return true;
4975 }
4976
4977 /* Finish up a compilation unit.  */
4978
4979 static boolean
4980 ieee_finish_compilation_unit (info)
4981      struct ieee_handle *info;
4982 {
4983   struct ieee_range *r;
4984
4985   if (! ieee_buffer_emptyp (&info->types))
4986     {
4987       if (! ieee_change_buffer (info, &info->types)
4988           || ! ieee_write_byte (info, (int) ieee_be_record_enum))
4989         return false;
4990     }
4991
4992   if (! ieee_buffer_emptyp (&info->cxx))
4993     {
4994       /* Append any C++ information to the global function and
4995          variable information.  */
4996       assert (! ieee_buffer_emptyp (&info->vars));
4997       if (! ieee_change_buffer (info, &info->vars))
4998         return false;
4999
5000       /* We put the pmisc records in a dummy procedure, just as the
5001          MRI compiler does.  */
5002       if (! ieee_write_byte (info, (int) ieee_bb_record_enum)
5003           || ! ieee_write_byte (info, 6)
5004           || ! ieee_write_number (info, 0)
5005           || ! ieee_write_id (info, "__XRYCPP")
5006           || ! ieee_write_number (info, 0)
5007           || ! ieee_write_number (info, 0)
5008           || ! ieee_write_number (info, info->highaddr - 1)
5009           || ! ieee_append_buffer (info, &info->vars, &info->cxx)
5010           || ! ieee_change_buffer (info, &info->vars)
5011           || ! ieee_write_byte (info, (int) ieee_be_record_enum)
5012           || ! ieee_write_number (info, info->highaddr - 1))
5013         return false;
5014     }
5015
5016   if (! ieee_buffer_emptyp (&info->vars))
5017     {
5018       if (! ieee_change_buffer (info, &info->vars)
5019           || ! ieee_write_byte (info, (int) ieee_be_record_enum))
5020         return false;
5021     }
5022
5023   if (info->pending_lineno_filename != NULL)
5024     {
5025       /* Force out the pending line number.  */
5026       if (! ieee_lineno ((PTR) info, (const char *) NULL, 0, (bfd_vma) -1))
5027         return false;
5028     }
5029   if (! ieee_buffer_emptyp (&info->linenos))
5030     {
5031       if (! ieee_change_buffer (info, &info->linenos)
5032           || ! ieee_write_byte (info, (int) ieee_be_record_enum))
5033         return false;
5034       if (strcmp (info->filename, info->lineno_filename) != 0)
5035         {
5036           /* We were not in the main file.  We just closed the
5037              included line number block, and now we must close the
5038              main line number block.  */
5039           if (! ieee_write_byte (info, (int) ieee_be_record_enum))
5040             return false;
5041         }
5042     }
5043
5044   if (! ieee_append_buffer (info, &info->data, &info->types)
5045       || ! ieee_append_buffer (info, &info->data, &info->vars)
5046       || ! ieee_append_buffer (info, &info->data, &info->linenos))
5047     return false;
5048
5049   /* Build BB10/BB11 blocks based on the ranges we recorded.  */
5050   if (! ieee_change_buffer (info, &info->data))
5051     return false;
5052
5053   if (! ieee_write_byte (info, (int) ieee_bb_record_enum)
5054       || ! ieee_write_byte (info, 10)
5055       || ! ieee_write_number (info, 0)
5056       || ! ieee_write_id (info, info->modname)
5057       || ! ieee_write_id (info, "")
5058       || ! ieee_write_number (info, 0)
5059       || ! ieee_write_id (info, "GNU objcopy"))
5060     return false;
5061
5062   for (r = info->ranges; r != NULL; r = r->next)
5063     {
5064       bfd_vma low, high;
5065       asection *s;
5066       int kind;
5067
5068       low = r->low;
5069       high = r->high;
5070
5071       /* Find the section corresponding to this range.  */
5072       for (s = info->abfd->sections; s != NULL; s = s->next)
5073         {
5074           if (bfd_get_section_vma (info->abfd, s) <= low
5075               && high <= (bfd_get_section_vma (info->abfd, s)
5076                           + bfd_section_size (info->abfd, s)))
5077             break;
5078         }
5079
5080       if (s == NULL)
5081         {
5082           /* Just ignore this range.  */
5083           continue;
5084         }
5085
5086       /* Coalesce ranges if it seems reasonable.  */
5087       while (r->next != NULL
5088              && high + 0x1000 >= r->next->low
5089              && (r->next->high
5090                  <= (bfd_get_section_vma (info->abfd, s)
5091                      + bfd_section_size (info->abfd, s))))
5092         {
5093           r = r->next;
5094           high = r->high;
5095         }
5096
5097       if ((s->flags & SEC_CODE) != 0)
5098         kind = 1;
5099       else if ((s->flags & SEC_READONLY) != 0)
5100         kind = 3;
5101       else
5102         kind = 2;
5103
5104       if (! ieee_write_byte (info, (int) ieee_bb_record_enum)
5105           || ! ieee_write_byte (info, 11)
5106           || ! ieee_write_number (info, 0)
5107           || ! ieee_write_id (info, "")
5108           || ! ieee_write_number (info, kind)
5109           || ! ieee_write_number (info, s->index + IEEE_SECTION_NUMBER_BASE)
5110           || ! ieee_write_number (info, low)
5111           || ! ieee_write_byte (info, (int) ieee_be_record_enum)
5112           || ! ieee_write_number (info, high - low))
5113         return false;
5114
5115       /* Add this range to the list of global ranges.  */
5116       if (! ieee_add_range (info, true, low, high))
5117         return false;
5118     }
5119
5120   if (! ieee_write_byte (info, (int) ieee_be_record_enum))
5121     return false;
5122
5123   return true;
5124 }
5125
5126 /* Add BB11 blocks describing each range that we have not already
5127    described.  */
5128
5129 static void
5130 ieee_add_bb11_blocks (abfd, sec, data)
5131      bfd *abfd;
5132      asection *sec;
5133      PTR data;
5134 {
5135   struct ieee_handle *info = (struct ieee_handle *) data;
5136   bfd_vma low, high;
5137   struct ieee_range *r;
5138
5139   low = bfd_get_section_vma (abfd, sec);
5140   high = low + bfd_section_size (abfd, sec);
5141
5142   /* Find the first range at or after this section.  The ranges are
5143      sorted by address.  */
5144   for (r = info->global_ranges; r != NULL; r = r->next)
5145     if (r->high > low)
5146       break;
5147
5148   while (low < high)
5149     {
5150       if (r == NULL || r->low >= high)
5151         {
5152           if (! ieee_add_bb11 (info, sec, low, high))
5153             info->error = true;
5154           return;
5155         }
5156
5157       if (low < r->low
5158           && r->low - low > 0x100)
5159         {
5160           if (! ieee_add_bb11 (info, sec, low, r->low))
5161             {
5162               info->error = true;
5163               return;
5164             }
5165         }
5166       low = r->high;
5167
5168       r = r->next;
5169     }
5170 }
5171
5172 /* Add a single BB11 block for a range.  We add it to info->vars.  */
5173
5174 static boolean
5175 ieee_add_bb11 (info, sec, low, high)
5176      struct ieee_handle *info;
5177      asection *sec;
5178      bfd_vma low;
5179      bfd_vma high;
5180 {
5181   int kind;
5182
5183   if (! ieee_buffer_emptyp (&info->vars))
5184     {
5185       if (! ieee_change_buffer (info, &info->vars))
5186         return false;
5187     }
5188   else
5189     {
5190       const char *filename, *modname;
5191       char *c, *s;
5192
5193       /* Start the enclosing BB10 block.  */
5194       filename = bfd_get_filename (info->abfd);
5195       modname = strrchr (filename, '/');
5196       if (modname != NULL)
5197         ++modname;
5198       else
5199         {
5200           modname = strrchr (filename, '\\');
5201           if (modname != NULL)
5202             ++modname;
5203           else
5204             modname = filename;
5205         }
5206       c = xstrdup (modname);
5207       s = strrchr (c, '.');
5208       if (s != NULL)
5209         *s = '\0';
5210
5211       if (! ieee_change_buffer (info, &info->vars)
5212           || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
5213           || ! ieee_write_byte (info, 10)
5214           || ! ieee_write_number (info, 0)
5215           || ! ieee_write_id (info, c)
5216           || ! ieee_write_id (info, "")
5217           || ! ieee_write_number (info, 0)
5218           || ! ieee_write_id (info, "GNU objcopy"))
5219         return false;
5220
5221       free (c);
5222     }
5223
5224   if ((sec->flags & SEC_CODE) != 0)
5225     kind = 1;
5226   else if ((sec->flags & SEC_READONLY) != 0)
5227     kind = 3;
5228   else
5229     kind = 2;
5230
5231   if (! ieee_write_byte (info, (int) ieee_bb_record_enum)
5232       || ! ieee_write_byte (info, 11)
5233       || ! ieee_write_number (info, 0)
5234       || ! ieee_write_id (info, "")
5235       || ! ieee_write_number (info, kind)
5236       || ! ieee_write_number (info, sec->index + IEEE_SECTION_NUMBER_BASE)
5237       || ! ieee_write_number (info, low)
5238       || ! ieee_write_byte (info, (int) ieee_be_record_enum)
5239       || ! ieee_write_number (info, high - low))
5240     return false;
5241
5242   return true;
5243 }
5244
5245 /* Start recording information from a particular source file.  This is
5246    used to record which file defined which types, variables, etc.  It
5247    is not used for line numbers, since the lineno entry point passes
5248    down the file name anyhow.  IEEE debugging information doesn't seem
5249    to store this information anywhere.  */
5250
5251 /*ARGSUSED*/
5252 static boolean
5253 ieee_start_source (p, filename)
5254      PTR p;
5255      const char *filename;
5256 {
5257   return true;
5258 }
5259
5260 /* Make an empty type.  */
5261
5262 static boolean
5263 ieee_empty_type (p)
5264      PTR p;
5265 {
5266   struct ieee_handle *info = (struct ieee_handle *) p;
5267
5268   return ieee_push_type (info, (int) builtin_unknown, 0, false, false);
5269 }
5270
5271 /* Make a void type.  */
5272
5273 static boolean
5274 ieee_void_type (p)
5275      PTR p;
5276 {
5277   struct ieee_handle *info = (struct ieee_handle *) p;
5278
5279   return ieee_push_type (info, (int) builtin_void, 0, false, false);
5280 }
5281
5282 /* Make an integer type.  */
5283
5284 static boolean
5285 ieee_int_type (p, size, unsignedp)
5286      PTR p;
5287      unsigned int size;
5288      boolean unsignedp;
5289 {
5290   struct ieee_handle *info = (struct ieee_handle *) p;
5291   unsigned int indx;
5292
5293   switch (size)
5294     {
5295     case 1:
5296       indx = (int) builtin_signed_char;
5297       break;
5298     case 2:
5299       indx = (int) builtin_signed_short_int;
5300       break;
5301     case 4:
5302       indx = (int) builtin_signed_long;
5303       break;
5304     case 8:
5305       indx = (int) builtin_signed_long_long;
5306       break;
5307     default:
5308       fprintf (stderr, "IEEE unsupported integer type size %u\n", size);
5309       return false;
5310     }
5311
5312   if (unsignedp)
5313     ++indx;
5314
5315   return ieee_push_type (info, indx, size, unsignedp, false);
5316 }
5317
5318 /* Make a floating point type.  */
5319
5320 static boolean
5321 ieee_float_type (p, size)
5322      PTR p;
5323      unsigned int size;
5324 {
5325   struct ieee_handle *info = (struct ieee_handle *) p;
5326   unsigned int indx;
5327
5328   switch (size)
5329     {
5330     case 4:
5331       indx = (int) builtin_float;
5332       break;
5333     case 8:
5334       indx = (int) builtin_double;
5335       break;
5336     case 12:
5337       /* FIXME: This size really depends upon the processor.  */
5338       indx = (int) builtin_long_double;
5339       break;
5340     case 16:
5341       indx = (int) builtin_long_long_double;
5342       break;
5343     default:
5344       fprintf (stderr, "IEEE unsupported float type size %u\n", size);
5345       return false;
5346     }
5347
5348   return ieee_push_type (info, indx, size, false, false);
5349 }
5350
5351 /* Make a complex type.  */
5352
5353 static boolean
5354 ieee_complex_type (p, size)
5355      PTR p;
5356      unsigned int size;
5357 {
5358   struct ieee_handle *info = (struct ieee_handle *) p;
5359   char code;
5360
5361   switch (size)
5362     {
5363     case 4:
5364       if (info->complex_float_index != 0)
5365         return ieee_push_type (info, info->complex_float_index, size * 2,
5366                                false, false);
5367       code = 'c';
5368       break;
5369     case 12:
5370     case 16:
5371       /* These cases can be output by gcc -gstabs.  Outputting the
5372          wrong type is better than crashing.  */
5373     case 8:
5374       if (info->complex_double_index != 0)
5375         return ieee_push_type (info, info->complex_double_index, size * 2,
5376                                false, false);
5377       code = 'd';
5378       break;
5379     default:
5380       fprintf (stderr, "IEEE unsupported complex type size %u\n", size);
5381       return false;
5382     }
5383
5384   /* FIXME: I don't know what the string is for.  */
5385   if (! ieee_define_type (info, size * 2, false, false)
5386       || ! ieee_write_number (info, code)
5387       || ! ieee_write_id (info, ""))
5388     return false;
5389
5390   if (size == 4)
5391     info->complex_float_index = info->type_stack->type.indx;
5392   else
5393     info->complex_double_index = info->type_stack->type.indx;
5394
5395   return true;
5396 }
5397
5398 /* Make a boolean type.  IEEE doesn't support these, so we just make
5399    an integer type instead.  */
5400
5401 static boolean
5402 ieee_bool_type (p, size)
5403      PTR p;
5404      unsigned int size;
5405 {
5406   return ieee_int_type (p, size, true);
5407 }
5408
5409 /* Make an enumeration.  */
5410
5411 static boolean
5412 ieee_enum_type (p, tag, names, vals)
5413      PTR p;
5414      const char *tag;
5415      const char **names;
5416      bfd_signed_vma *vals;
5417 {
5418   struct ieee_handle *info = (struct ieee_handle *) p;
5419   struct ieee_defined_enum *e;
5420   boolean localp, simple;
5421   unsigned int indx;
5422   int i;
5423
5424   localp = false;
5425   indx = (unsigned int) -1;
5426   for (e = info->enums; e != NULL; e = e->next)
5427     {
5428       if (tag == NULL)
5429         {
5430           if (e->tag != NULL)
5431             continue;
5432         }
5433       else
5434         {
5435           if (e->tag == NULL
5436               || tag[0] != e->tag[0]
5437               || strcmp (tag, e->tag) != 0)
5438             continue;
5439         }
5440
5441       if (! e->defined)
5442         {
5443           /* This enum tag has been seen but not defined.  */
5444           indx = e->indx;
5445           break;
5446         }
5447
5448       if (names != NULL && e->names != NULL)
5449         {
5450           for (i = 0; names[i] != NULL && e->names[i] != NULL; i++)
5451             {
5452               if (names[i][0] != e->names[i][0]
5453                   || vals[i] != e->vals[i]
5454                   || strcmp (names[i], e->names[i]) != 0)
5455                 break;
5456             }
5457         }
5458
5459       if ((names == NULL && e->names == NULL)
5460           || (names != NULL
5461               && e->names != NULL
5462               && names[i] == NULL
5463               && e->names[i] == NULL))
5464         {
5465           /* We've seen this enum before.  */
5466           return ieee_push_type (info, e->indx, 0, true, false);
5467         }
5468
5469       if (tag != NULL)
5470         {
5471           /* We've already seen an enum of the same name, so we must make
5472              sure to output this one locally.  */
5473           localp = true;
5474           break;
5475         }
5476     }
5477
5478   /* If this is a simple enumeration, in which the values start at 0
5479      and always increment by 1, we can use type E.  Otherwise we must
5480      use type N.  */
5481
5482   simple = true;
5483   if (names != NULL)
5484     {
5485       for (i = 0; names[i] != NULL; i++)
5486         {
5487           if (vals[i] != i)
5488             {
5489               simple = false;
5490               break;
5491             }
5492         }
5493     }
5494
5495   if (! ieee_define_named_type (info, tag, indx, 0, true, localp,
5496                                 (struct ieee_buflist *) NULL)
5497       || ! ieee_write_number (info, simple ? 'E' : 'N'))
5498     return false;
5499   if (simple)
5500     {
5501       /* FIXME: This is supposed to be the enumeration size, but we
5502          don't store that.  */
5503       if (! ieee_write_number (info, 4))
5504         return false;
5505     }
5506   if (names != NULL)
5507     {
5508       for (i = 0; names[i] != NULL; i++)
5509         {
5510           if (! ieee_write_id (info, names[i]))
5511             return false;
5512           if (! simple)
5513             {
5514               if (! ieee_write_number (info, vals[i]))
5515                 return false;
5516             }
5517         }
5518     }
5519
5520   if (! localp)
5521     {
5522       if (indx == (unsigned int) -1)
5523         {
5524           e = (struct ieee_defined_enum *) xmalloc (sizeof *e);
5525           memset (e, 0, sizeof *e);
5526           e->indx = info->type_stack->type.indx;
5527           e->tag = tag;
5528
5529           e->next = info->enums;
5530           info->enums = e;
5531         }
5532
5533       e->names = names;
5534       e->vals = vals;
5535       e->defined = true;
5536     }
5537
5538   return true;
5539 }
5540
5541 /* Make a pointer type.  */
5542
5543 static boolean
5544 ieee_pointer_type (p)
5545      PTR p;
5546 {
5547   struct ieee_handle *info = (struct ieee_handle *) p;
5548   boolean localp;
5549   unsigned int indx;
5550   struct ieee_modified_type *m = NULL;
5551
5552   localp = info->type_stack->type.localp;
5553   indx = ieee_pop_type (info);
5554
5555   /* A pointer to a simple builtin type can be obtained by adding 32.
5556      FIXME: Will this be a short pointer, and will that matter?  */
5557   if (indx < 32)
5558     return ieee_push_type (info, indx + 32, 0, true, false);
5559
5560   if (! localp)
5561     {
5562       m = ieee_get_modified_info (p, indx);
5563       if (m == NULL)
5564         return false;
5565
5566       /* FIXME: The size should depend upon the architecture.  */
5567       if (m->pointer > 0)
5568         return ieee_push_type (info, m->pointer, 4, true, false);
5569     }
5570
5571   if (! ieee_define_type (info, 4, true, localp)
5572       || ! ieee_write_number (info, 'P')
5573       || ! ieee_write_number (info, indx))
5574     return false;
5575
5576   if (! localp)
5577     m->pointer = info->type_stack->type.indx;
5578
5579   return true;
5580 }
5581
5582 /* Make a function type.  This will be called for a method, but we
5583    don't want to actually add it to the type table in that case.  We
5584    handle this by defining the type in a private buffer, and only
5585    adding that buffer to the typedef block if we are going to use it.  */
5586
5587 static boolean
5588 ieee_function_type (p, argcount, varargs)
5589      PTR p;
5590      int argcount;
5591      boolean varargs;
5592 {
5593   struct ieee_handle *info = (struct ieee_handle *) p;
5594   boolean localp;
5595   unsigned int *args = NULL;
5596   int i;
5597   unsigned int retindx;
5598   struct ieee_buflist fndef;
5599   struct ieee_modified_type *m;
5600
5601   localp = false;
5602
5603   if (argcount > 0)
5604     {
5605       args = (unsigned int *) xmalloc (argcount * sizeof *args);
5606       for (i = argcount - 1; i >= 0; i--)
5607         {
5608           if (info->type_stack->type.localp)
5609             localp = true;
5610           args[i] = ieee_pop_type (info);
5611         }
5612     }
5613   else if (argcount < 0)
5614     varargs = false;
5615
5616   if (info->type_stack->type.localp)
5617     localp = true;
5618   retindx = ieee_pop_type (info);
5619
5620   m = NULL;
5621   if (argcount < 0 && ! localp)
5622     {
5623       m = ieee_get_modified_info (p, retindx);
5624       if (m == NULL)
5625         return false;
5626
5627       if (m->function > 0)
5628         return ieee_push_type (info, m->function, 0, true, false);
5629     }
5630
5631   /* An attribute of 0x41 means that the frame and push mask are
5632      unknown.  */
5633   if (! ieee_init_buffer (info, &fndef)
5634       || ! ieee_define_named_type (info, (const char *) NULL,
5635                                    (unsigned int) -1, 0, true, localp,
5636                                    &fndef)
5637       || ! ieee_write_number (info, 'x')
5638       || ! ieee_write_number (info, 0x41)
5639       || ! ieee_write_number (info, 0)
5640       || ! ieee_write_number (info, 0)
5641       || ! ieee_write_number (info, retindx)
5642       || ! ieee_write_number (info, (bfd_vma) argcount + (varargs ? 1 : 0)))
5643     return false;
5644   if (argcount > 0)
5645     {
5646       for (i = 0; i < argcount; i++)
5647         if (! ieee_write_number (info, args[i]))
5648           return false;
5649       free (args);
5650     }
5651   if (varargs)
5652     {
5653       /* A varargs function is represented by writing out the last
5654          argument as type void *, although this makes little sense.  */
5655       if (! ieee_write_number (info, (bfd_vma) builtin_void + 32))
5656         return false;
5657     }
5658
5659   if (! ieee_write_number (info, 0))
5660     return false;
5661
5662   /* We wrote the information into fndef, in case we don't need it.
5663      It will be appended to info->types by ieee_pop_type.  */
5664   info->type_stack->type.fndef = fndef;
5665
5666   if (m != NULL)
5667     m->function = info->type_stack->type.indx;
5668
5669   return true;
5670 }
5671
5672 /* Make a reference type.  */
5673
5674 static boolean
5675 ieee_reference_type (p)
5676      PTR p;
5677 {
5678   struct ieee_handle *info = (struct ieee_handle *) p;
5679
5680   /* IEEE appears to record a normal pointer type, and then use a
5681      pmisc record to indicate that it is really a reference.  */
5682
5683   if (! ieee_pointer_type (p))
5684     return false;
5685   info->type_stack->type.referencep = true;
5686   return true;
5687 }
5688
5689 /* Make a range type.  */
5690
5691 static boolean
5692 ieee_range_type (p, low, high)
5693      PTR p;
5694      bfd_signed_vma low;
5695      bfd_signed_vma high;
5696 {
5697   struct ieee_handle *info = (struct ieee_handle *) p;
5698   unsigned int size;
5699   boolean unsignedp, localp;
5700
5701   size = info->type_stack->type.size;
5702   unsignedp = info->type_stack->type.unsignedp;
5703   localp = info->type_stack->type.localp;
5704   ieee_pop_unused_type (info);
5705   return (ieee_define_type (info, size, unsignedp, localp)
5706           && ieee_write_number (info, 'R')
5707           && ieee_write_number (info, (bfd_vma) low)
5708           && ieee_write_number (info, (bfd_vma) high)
5709           && ieee_write_number (info, unsignedp ? 0 : 1)
5710           && ieee_write_number (info, size));
5711 }
5712
5713 /* Make an array type.  */
5714
5715 /*ARGSUSED*/
5716 static boolean
5717 ieee_array_type (p, low, high, stringp)
5718      PTR p;
5719      bfd_signed_vma low;
5720      bfd_signed_vma high;
5721      boolean stringp;
5722 {
5723   struct ieee_handle *info = (struct ieee_handle *) p;
5724   unsigned int eleindx;
5725   boolean localp;
5726   unsigned int size;
5727   struct ieee_modified_type *m = NULL;
5728   struct ieee_modified_array_type *a;
5729
5730   /* IEEE does not store the range, so we just ignore it.  */
5731   ieee_pop_unused_type (info);
5732   localp = info->type_stack->type.localp;
5733   size = info->type_stack->type.size;
5734   eleindx = ieee_pop_type (info);
5735
5736   /* If we don't know the range, treat the size as exactly one
5737      element.  */
5738   if (low < high)
5739     size *= (high - low) + 1;
5740
5741   if (! localp)
5742     {
5743       m = ieee_get_modified_info (info, eleindx);
5744       if (m == NULL)
5745         return false;
5746
5747       for (a = m->arrays; a != NULL; a = a->next)
5748         {
5749           if (a->low == low && a->high == high)
5750             return ieee_push_type (info, a->indx, size, false, false);
5751         }
5752     }
5753
5754   if (! ieee_define_type (info, size, false, localp)
5755       || ! ieee_write_number (info, low == 0 ? 'Z' : 'C')
5756       || ! ieee_write_number (info, eleindx))
5757     return false;
5758   if (low != 0)
5759     {
5760       if (! ieee_write_number (info, low))
5761         return false;
5762     }
5763
5764   if (! ieee_write_number (info, high + 1))
5765     return false;
5766
5767   if (! localp)
5768     {
5769       a = (struct ieee_modified_array_type *) xmalloc (sizeof *a);
5770       memset (a, 0, sizeof *a);
5771
5772       a->indx = info->type_stack->type.indx;
5773       a->low = low;
5774       a->high = high;
5775
5776       a->next = m->arrays;
5777       m->arrays = a;
5778     }
5779
5780   return true;
5781 }
5782
5783 /* Make a set type.  */
5784
5785 static boolean
5786 ieee_set_type (p, bitstringp)
5787      PTR p;
5788      boolean bitstringp;
5789 {
5790   struct ieee_handle *info = (struct ieee_handle *) p;
5791   boolean localp;
5792   unsigned int eleindx;
5793
5794   localp = info->type_stack->type.localp;
5795   eleindx = ieee_pop_type (info);
5796
5797   /* FIXME: We don't know the size, so we just use 4.  */
5798
5799   return (ieee_define_type (info, 0, true, localp)
5800           && ieee_write_number (info, 's')
5801           && ieee_write_number (info, 4)
5802           && ieee_write_number (info, eleindx));
5803 }
5804
5805 /* Make an offset type.  */
5806
5807 static boolean
5808 ieee_offset_type (p)
5809      PTR p;
5810 {
5811   struct ieee_handle *info = (struct ieee_handle *) p;
5812   unsigned int targetindx, baseindx;
5813
5814   targetindx = ieee_pop_type (info);
5815   baseindx = ieee_pop_type (info);
5816
5817   /* FIXME: The MRI C++ compiler does not appear to generate any
5818      useful type information about an offset type.  It just records a
5819      pointer to member as an integer.  The MRI/HP IEEE spec does
5820      describe a pmisc record which can be used for a pointer to
5821      member.  Unfortunately, it does not describe the target type,
5822      which seems pretty important.  I'm going to punt this for now.  */
5823
5824   return ieee_int_type (p, 4, true);
5825 }  
5826
5827 /* Make a method type.  */
5828
5829 static boolean
5830 ieee_method_type (p, domain, argcount, varargs)
5831      PTR p;
5832      boolean domain;
5833      int argcount;
5834      boolean varargs;
5835 {
5836   struct ieee_handle *info = (struct ieee_handle *) p;
5837
5838   /* FIXME: The MRI/HP IEEE spec defines a pmisc record to use for a
5839      method, but the definition is incomplete.  We just output an 'x'
5840      type.  */
5841
5842   if (domain)
5843     ieee_pop_unused_type (info);
5844
5845   return ieee_function_type (p, argcount, varargs);
5846 }
5847
5848 /* Make a const qualified type.  */
5849
5850 static boolean
5851 ieee_const_type (p)
5852      PTR p;
5853 {
5854   struct ieee_handle *info = (struct ieee_handle *) p;
5855   unsigned int size;
5856   boolean unsignedp, localp;
5857   unsigned int indx;
5858   struct ieee_modified_type *m = NULL;
5859
5860   size = info->type_stack->type.size;
5861   unsignedp = info->type_stack->type.unsignedp;
5862   localp = info->type_stack->type.localp;
5863   indx = ieee_pop_type (info);
5864
5865   if (! localp)
5866     {
5867       m = ieee_get_modified_info (info, indx);
5868       if (m == NULL)
5869         return false;
5870
5871       if (m->const_qualified > 0)
5872         return ieee_push_type (info, m->const_qualified, size, unsignedp,
5873                                false);
5874     }
5875
5876   if (! ieee_define_type (info, size, unsignedp, localp)
5877       || ! ieee_write_number (info, 'n')
5878       || ! ieee_write_number (info, 1)
5879       || ! ieee_write_number (info, indx))
5880     return false;
5881
5882   if (! localp)
5883     m->const_qualified = info->type_stack->type.indx;
5884
5885   return true;
5886 }
5887
5888 /* Make a volatile qualified type.  */
5889
5890 static boolean
5891 ieee_volatile_type (p)
5892      PTR p;
5893 {
5894   struct ieee_handle *info = (struct ieee_handle *) p;
5895   unsigned int size;
5896   boolean unsignedp, localp;
5897   unsigned int indx;
5898   struct ieee_modified_type *m = NULL;
5899
5900   size = info->type_stack->type.size;
5901   unsignedp = info->type_stack->type.unsignedp;
5902   localp = info->type_stack->type.localp;
5903   indx = ieee_pop_type (info);
5904
5905   if (! localp)
5906     {
5907       m = ieee_get_modified_info (info, indx);
5908       if (m == NULL)
5909         return false;
5910
5911       if (m->volatile_qualified > 0)
5912         return ieee_push_type (info, m->volatile_qualified, size, unsignedp,
5913                                false);
5914     }
5915
5916   if (! ieee_define_type (info, size, unsignedp, localp)
5917       || ! ieee_write_number (info, 'n')
5918       || ! ieee_write_number (info, 2)
5919       || ! ieee_write_number (info, indx))
5920     return false;
5921
5922   if (! localp)
5923     m->volatile_qualified = info->type_stack->type.indx;
5924
5925   return true;
5926 }
5927
5928 /* Convert an enum debug_visibility into a CXXFLAGS value.  */
5929
5930 static unsigned int
5931 ieee_vis_to_flags (visibility)
5932      enum debug_visibility visibility;
5933 {
5934   switch (visibility)
5935     {
5936     default:
5937       abort ();
5938     case DEBUG_VISIBILITY_PUBLIC:
5939       return CXXFLAGS_VISIBILITY_PUBLIC;
5940     case DEBUG_VISIBILITY_PRIVATE:
5941       return CXXFLAGS_VISIBILITY_PRIVATE;
5942     case DEBUG_VISIBILITY_PROTECTED:
5943       return CXXFLAGS_VISIBILITY_PROTECTED;
5944     }
5945   /*NOTREACHED*/
5946 }
5947
5948 /* Start defining a struct type.  We build it in the strdef field on
5949    the stack, to avoid confusing type definitions required by the
5950    fields with the struct type itself.  */
5951
5952 static boolean
5953 ieee_start_struct_type (p, tag, id, structp, size)
5954      PTR p;
5955      const char *tag;
5956      unsigned int id;
5957      boolean structp;
5958      unsigned int size;
5959 {
5960   struct ieee_handle *info = (struct ieee_handle *) p;
5961   boolean localp, ignorep;
5962   boolean copy;
5963   char ab[20];
5964   const char *look;
5965   struct ieee_name_type_hash_entry *h;
5966   struct ieee_name_type *nt, *ntlook;
5967   struct ieee_buflist strdef;
5968
5969   localp = false;
5970   ignorep = false;
5971
5972   /* We need to create a tag for internal use even if we don't want
5973      one for external use.  This will let us refer to an anonymous
5974      struct.  */
5975   if (tag != NULL)
5976     {
5977       look = tag;
5978       copy = false;
5979     }
5980   else
5981     {
5982       sprintf (ab, "__anon%u", id);
5983       look = ab;
5984       copy = true;
5985     }
5986
5987   /* If we already have references to the tag, we must use the
5988      existing type index.  */
5989   h = ieee_name_type_hash_lookup (&info->tags, look, true, copy);
5990   if (h == NULL)
5991     return false;
5992
5993   nt = NULL;
5994   for (ntlook = h->types; ntlook != NULL; ntlook = ntlook->next)
5995     {
5996       if (ntlook->id == id)
5997         nt = ntlook;
5998       else if (! ntlook->type.localp)
5999         {
6000           /* We are creating a duplicate definition of a globally
6001              defined tag.  Force it to be local to avoid
6002              confusion.  */
6003           localp = true;
6004         }
6005     }
6006
6007   if (nt != NULL)
6008     {
6009       assert (localp == nt->type.localp);
6010       if (nt->kind == DEBUG_KIND_ILLEGAL && ! localp)
6011         {
6012           /* We've already seen a global definition of the type.
6013              Ignore this new definition.  */
6014           ignorep = true;
6015         }
6016     }
6017   else
6018     {
6019       nt = (struct ieee_name_type *) xmalloc (sizeof *nt);
6020       memset (nt, 0, sizeof *nt);
6021       nt->id = id;
6022       nt->type.name = h->root.string;
6023       nt->next = h->types;
6024       h->types = nt;
6025       nt->type.indx = info->type_indx;
6026       ++info->type_indx;
6027     }
6028
6029   nt->kind = DEBUG_KIND_ILLEGAL;
6030
6031   if (! ieee_init_buffer (info, &strdef)
6032       || ! ieee_define_named_type (info, tag, nt->type.indx, size, true,
6033                                    localp, &strdef)
6034       || ! ieee_write_number (info, structp ? 'S' : 'U')
6035       || ! ieee_write_number (info, size))
6036     return false;
6037
6038   if (! ignorep)
6039     {
6040       const char *hold;
6041
6042       /* We never want nt->type.name to be NULL.  We want the rest of
6043          the type to be the object set up on the type stack; it will
6044          have a NULL name if tag is NULL.  */
6045       hold = nt->type.name;
6046       nt->type = info->type_stack->type;
6047       nt->type.name = hold;
6048     }
6049
6050   info->type_stack->type.name = tag;
6051   info->type_stack->type.strdef = strdef;
6052   info->type_stack->type.ignorep = ignorep;
6053
6054   return true;
6055 }
6056
6057 /* Add a field to a struct.  */
6058
6059 static boolean
6060 ieee_struct_field (p, name, bitpos, bitsize, visibility)
6061      PTR p;
6062      const char *name;
6063      bfd_vma bitpos;
6064      bfd_vma bitsize;
6065      enum debug_visibility visibility;
6066 {
6067   struct ieee_handle *info = (struct ieee_handle *) p;
6068   unsigned int size;
6069   boolean unsignedp;
6070   boolean referencep;
6071   boolean localp;
6072   unsigned int indx;
6073   bfd_vma offset;
6074
6075   assert (info->type_stack != NULL
6076           && info->type_stack->next != NULL
6077           && ! ieee_buffer_emptyp (&info->type_stack->next->type.strdef));
6078
6079   /* If we are ignoring this struct definition, just pop and ignore
6080      the type.  */
6081   if (info->type_stack->next->type.ignorep)
6082     {
6083       ieee_pop_unused_type (info);
6084       return true;
6085     }
6086
6087   size = info->type_stack->type.size;
6088   unsignedp = info->type_stack->type.unsignedp;
6089   referencep = info->type_stack->type.referencep;
6090   localp = info->type_stack->type.localp;
6091   indx = ieee_pop_type (info);
6092
6093   if (localp)
6094     info->type_stack->type.localp = true;
6095
6096   if (info->type_stack->type.classdef != NULL)
6097     {
6098       unsigned int flags;
6099       unsigned int nindx;
6100
6101       /* This is a class.  We must add a description of this field to
6102          the class records we are building.  */
6103
6104       flags = ieee_vis_to_flags (visibility);
6105       nindx = info->type_stack->type.classdef->indx;
6106       if (! ieee_change_buffer (info,
6107                                 &info->type_stack->type.classdef->pmiscbuf)
6108           || ! ieee_write_asn (info, nindx, 'd')
6109           || ! ieee_write_asn (info, nindx, flags)
6110           || ! ieee_write_atn65 (info, nindx, name)
6111           || ! ieee_write_atn65 (info, nindx, name))
6112         return false;
6113       info->type_stack->type.classdef->pmisccount += 4;
6114
6115       if (referencep)
6116         {
6117           unsigned int nindx;
6118
6119           /* We need to output a record recording that this field is
6120              really of reference type.  We put this on the refs field
6121              of classdef, so that it can be appended to the C++
6122              records after the class is defined.  */
6123
6124           nindx = info->name_indx;
6125           ++info->name_indx;
6126
6127           if (! ieee_change_buffer (info,
6128                                     &info->type_stack->type.classdef->refs)
6129               || ! ieee_write_byte (info, (int) ieee_nn_record)
6130               || ! ieee_write_number (info, nindx)
6131               || ! ieee_write_id (info, "")
6132               || ! ieee_write_2bytes (info, (int) ieee_atn_record_enum)
6133               || ! ieee_write_number (info, nindx)
6134               || ! ieee_write_number (info, 0)
6135               || ! ieee_write_number (info, 62)
6136               || ! ieee_write_number (info, 80)
6137               || ! ieee_write_number (info, 4)
6138               || ! ieee_write_asn (info, nindx, 'R')
6139               || ! ieee_write_asn (info, nindx, 3)
6140               || ! ieee_write_atn65 (info, nindx, info->type_stack->type.name)
6141               || ! ieee_write_atn65 (info, nindx, name))
6142             return false;
6143         }
6144     }
6145
6146   /* If the bitsize doesn't match the expected size, we need to output
6147      a bitfield type.  */
6148   if (size == 0 || bitsize == 0 || bitsize == size * 8)
6149     offset = bitpos / 8;
6150   else
6151     {
6152       if (! ieee_define_type (info, 0, unsignedp,
6153                               info->type_stack->type.localp)
6154           || ! ieee_write_number (info, 'g')
6155           || ! ieee_write_number (info, unsignedp ? 0 : 1)
6156           || ! ieee_write_number (info, bitsize)
6157           || ! ieee_write_number (info, indx))
6158         return false;
6159       indx = ieee_pop_type (info);
6160       offset = bitpos;
6161     }
6162
6163   /* Switch to the struct we are building in order to output this
6164      field definition.  */
6165   return (ieee_change_buffer (info, &info->type_stack->type.strdef)
6166           && ieee_write_id (info, name)
6167           && ieee_write_number (info, indx)
6168           && ieee_write_number (info, offset));
6169 }
6170
6171 /* Finish up a struct type.  */
6172
6173 static boolean
6174 ieee_end_struct_type (p)
6175      PTR p;
6176 {
6177   struct ieee_handle *info = (struct ieee_handle *) p;
6178   struct ieee_buflist *pb;
6179
6180   assert (info->type_stack != NULL
6181           && ! ieee_buffer_emptyp (&info->type_stack->type.strdef));
6182
6183   /* If we were ignoring this struct definition because it was a
6184      duplicate defintion, just through away whatever bytes we have
6185      accumulated.  Leave the type on the stack. */
6186   if (info->type_stack->type.ignorep)
6187     return true;
6188
6189   /* If this is not a duplicate definition of this tag, then localp
6190      will be false, and we can put it in the global type block.
6191      FIXME: We should avoid outputting duplicate definitions which are
6192      the same.  */
6193   if (! info->type_stack->type.localp)
6194     {
6195       /* Make sure we have started the global type block.  */
6196       if (ieee_buffer_emptyp (&info->global_types))
6197         {
6198           if (! ieee_change_buffer (info, &info->global_types)
6199               || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
6200               || ! ieee_write_byte (info, 2)
6201               || ! ieee_write_number (info, 0)
6202               || ! ieee_write_id (info, ""))
6203             return false;
6204         }
6205       pb = &info->global_types;
6206     }
6207   else
6208     {
6209       /* Make sure we have started the types block.  */
6210       if (ieee_buffer_emptyp (&info->types))
6211         {
6212           if (! ieee_change_buffer (info, &info->types)
6213               || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
6214               || ! ieee_write_byte (info, 1)
6215               || ! ieee_write_number (info, 0)
6216               || ! ieee_write_id (info, info->modname))
6217             return false;
6218         }
6219       pb = &info->types;
6220     }
6221
6222   /* Append the struct definition to the types.  */
6223   if (! ieee_append_buffer (info, pb, &info->type_stack->type.strdef)
6224       || ! ieee_init_buffer (info, &info->type_stack->type.strdef))
6225     return false;
6226
6227   /* Leave the struct on the type stack.  */
6228
6229   return true;
6230 }
6231
6232 /* Start a class type.  */
6233
6234 static boolean
6235 ieee_start_class_type (p, tag, id, structp, size, vptr, ownvptr)
6236      PTR p;
6237      const char *tag;
6238      unsigned int id;
6239      boolean structp;
6240      unsigned int size;
6241      boolean vptr;
6242      boolean ownvptr;
6243 {
6244   struct ieee_handle *info = (struct ieee_handle *) p;
6245   const char *vclass;
6246   struct ieee_buflist pmiscbuf;
6247   unsigned int indx;
6248   struct ieee_type_class *classdef;
6249
6250   /* A C++ class is output as a C++ struct along with a set of pmisc
6251      records describing the class.  */
6252
6253   /* We need to have a name so that we can associate the struct and
6254      the class.  */
6255   if (tag == NULL)
6256     {
6257       char *t;
6258
6259       t = (char *) xmalloc (20);
6260       sprintf (t, "__anon%u", id);
6261       tag = t;
6262     }
6263
6264   /* We can't write out the virtual table information until we have
6265      finished the class, because we don't know the virtual table size.
6266      We get the size from the largest voffset we see.  */
6267   vclass = NULL;
6268   if (vptr && ! ownvptr)
6269     {
6270       vclass = info->type_stack->type.name;
6271       assert (vclass != NULL);
6272       /* We don't call ieee_pop_unused_type, since the class should
6273          get defined.  */
6274       (void) ieee_pop_type (info);
6275     }
6276
6277   if (! ieee_start_struct_type (p, tag, id, structp, size))
6278     return false;
6279
6280   indx = info->name_indx;
6281   ++info->name_indx;
6282
6283   /* We write out pmisc records into the classdef field.  We will
6284      write out the pmisc start after we know the number of records we
6285      need.  */
6286   if (! ieee_init_buffer (info, &pmiscbuf)
6287       || ! ieee_change_buffer (info, &pmiscbuf)
6288       || ! ieee_write_asn (info, indx, 'T')
6289       || ! ieee_write_asn (info, indx, structp ? 'o' : 'u')
6290       || ! ieee_write_atn65 (info, indx, tag))
6291     return false;
6292
6293   classdef = (struct ieee_type_class *) xmalloc (sizeof *classdef);
6294   memset (classdef, 0, sizeof *classdef);
6295
6296   classdef->indx = indx;
6297   classdef->pmiscbuf = pmiscbuf;
6298   classdef->pmisccount = 3;
6299   classdef->vclass = vclass;
6300   classdef->ownvptr = ownvptr;
6301
6302   info->type_stack->type.classdef = classdef;
6303
6304   return true;
6305 }
6306
6307 /* Add a static member to a class.  */
6308
6309 static boolean
6310 ieee_class_static_member (p, name, physname, visibility)
6311      PTR p;
6312      const char *name;
6313      const char *physname;
6314      enum debug_visibility visibility;
6315 {
6316   struct ieee_handle *info = (struct ieee_handle *) p;
6317   unsigned int flags;
6318   unsigned int nindx;
6319
6320   /* We don't care about the type.  Hopefully there will be a call to
6321      ieee_variable declaring the physical name and the type, since
6322      that is where an IEEE consumer must get the type.  */
6323   ieee_pop_unused_type (info);
6324
6325   assert (info->type_stack != NULL
6326           && info->type_stack->type.classdef != NULL);
6327
6328   flags = ieee_vis_to_flags (visibility);
6329   flags |= CXXFLAGS_STATIC;
6330
6331   nindx = info->type_stack->type.classdef->indx;
6332
6333   if (! ieee_change_buffer (info, &info->type_stack->type.classdef->pmiscbuf)
6334       || ! ieee_write_asn (info, nindx, 'd')
6335       || ! ieee_write_asn (info, nindx, flags)
6336       || ! ieee_write_atn65 (info, nindx, name)
6337       || ! ieee_write_atn65 (info, nindx, physname))
6338     return false;
6339   info->type_stack->type.classdef->pmisccount += 4;
6340
6341   return true;
6342 }
6343
6344 /* Add a base class to a class.  */
6345
6346 static boolean
6347 ieee_class_baseclass (p, bitpos, virtual, visibility)
6348      PTR p;
6349      bfd_vma bitpos;
6350      boolean virtual;
6351      enum debug_visibility visibility;
6352 {
6353   struct ieee_handle *info = (struct ieee_handle *) p;
6354   const char *bname;
6355   boolean localp;
6356   unsigned int bindx;
6357   char *fname;
6358   unsigned int flags;
6359   unsigned int nindx;
6360
6361   assert (info->type_stack != NULL
6362           && info->type_stack->type.name != NULL
6363           && info->type_stack->next != NULL
6364           && info->type_stack->next->type.classdef != NULL
6365           && ! ieee_buffer_emptyp (&info->type_stack->next->type.strdef));
6366
6367   bname = info->type_stack->type.name;
6368   localp = info->type_stack->type.localp;
6369   bindx = ieee_pop_type (info);
6370
6371   /* We are currently defining both a struct and a class.  We must
6372      write out a field definition in the struct which holds the base
6373      class.  The stabs debugging reader will create a field named
6374      _vb$CLASS for a virtual base class, so we just use that.  FIXME:
6375      we should not depend upon a detail of stabs debugging.  */
6376   if (virtual)
6377     {
6378       fname = (char *) xmalloc (strlen (bname) + sizeof "_vb$");
6379       sprintf (fname, "_vb$%s", bname);
6380       flags = BASEFLAGS_VIRTUAL;
6381     }
6382   else
6383     {
6384       if (localp)
6385         info->type_stack->type.localp = true;
6386
6387       fname = (char *) xmalloc (strlen (bname) + sizeof "_b$");
6388       sprintf (fname, "_b$%s", bname);
6389
6390       if (! ieee_change_buffer (info, &info->type_stack->type.strdef)
6391           || ! ieee_write_id (info, fname)
6392           || ! ieee_write_number (info, bindx)
6393           || ! ieee_write_number (info, bitpos / 8))
6394         return false;
6395       flags = 0;
6396     }
6397
6398   if (visibility == DEBUG_VISIBILITY_PRIVATE)
6399     flags |= BASEFLAGS_PRIVATE;
6400
6401   nindx = info->type_stack->type.classdef->indx;
6402
6403   if (! ieee_change_buffer (info, &info->type_stack->type.classdef->pmiscbuf)
6404       || ! ieee_write_asn (info, nindx, 'b')
6405       || ! ieee_write_asn (info, nindx, flags)
6406       || ! ieee_write_atn65 (info, nindx, bname)
6407       || ! ieee_write_asn (info, nindx, 0)
6408       || ! ieee_write_atn65 (info, nindx, fname))
6409     return false;
6410   info->type_stack->type.classdef->pmisccount += 5;
6411
6412   free (fname);
6413
6414   return true;
6415 }
6416
6417 /* Start building a method for a class.  */
6418
6419 static boolean
6420 ieee_class_start_method (p, name)
6421      PTR p;
6422      const char *name;
6423 {
6424   struct ieee_handle *info = (struct ieee_handle *) p;
6425
6426   assert (info->type_stack != NULL
6427           && info->type_stack->type.classdef != NULL
6428           && info->type_stack->type.classdef->method == NULL);
6429
6430   info->type_stack->type.classdef->method = name;
6431
6432   return true;
6433 }
6434
6435 /* Define a new method variant, either static or not.  */
6436
6437 static boolean
6438 ieee_class_method_var (info, physname, visibility, staticp, constp,
6439                        volatilep, voffset, context)
6440      struct ieee_handle *info;
6441      const char *physname;
6442      enum debug_visibility visibility;
6443      boolean staticp;
6444      boolean constp;
6445      boolean volatilep;
6446      bfd_vma voffset;
6447      boolean context;
6448 {
6449   unsigned int flags;
6450   unsigned int nindx;
6451   boolean virtual;
6452
6453   /* We don't need the type of the method.  An IEEE consumer which
6454      wants the type must track down the function by the physical name
6455      and get the type from that.  */
6456   ieee_pop_unused_type (info);
6457
6458   /* We don't use the context.  FIXME: We probably ought to use it to
6459      adjust the voffset somehow, but I don't really know how.  */
6460   if (context)
6461     ieee_pop_unused_type (info);
6462
6463   assert (info->type_stack != NULL
6464           && info->type_stack->type.classdef != NULL
6465           && info->type_stack->type.classdef->method != NULL);
6466
6467   flags = ieee_vis_to_flags (visibility);
6468
6469   /* FIXME: We never set CXXFLAGS_OVERRIDE, CXXFLAGS_OPERATOR,
6470      CXXFLAGS_CTORDTOR, CXXFLAGS_CTOR, or CXXFLAGS_INLINE.  */
6471
6472   if (staticp)
6473     flags |= CXXFLAGS_STATIC;
6474   if (constp)
6475     flags |= CXXFLAGS_CONST;
6476   if (volatilep)
6477     flags |= CXXFLAGS_VOLATILE;
6478
6479   nindx = info->type_stack->type.classdef->indx;
6480
6481   virtual = context || voffset > 0;
6482
6483   if (! ieee_change_buffer (info,
6484                             &info->type_stack->type.classdef->pmiscbuf)
6485       || ! ieee_write_asn (info, nindx, virtual ? 'v' : 'm')
6486       || ! ieee_write_asn (info, nindx, flags)
6487       || ! ieee_write_atn65 (info, nindx,
6488                              info->type_stack->type.classdef->method)
6489       || ! ieee_write_atn65 (info, nindx, physname))
6490     return false;
6491
6492   if (virtual)
6493     {
6494       if (voffset > info->type_stack->type.classdef->voffset)
6495         info->type_stack->type.classdef->voffset = voffset;
6496       if (! ieee_write_asn (info, nindx, voffset))
6497         return false;
6498       ++info->type_stack->type.classdef->pmisccount;
6499     }
6500
6501   if (! ieee_write_asn (info, nindx, 0))
6502     return false;
6503
6504   info->type_stack->type.classdef->pmisccount += 5;
6505
6506   return true;
6507 }
6508
6509 /* Define a new method variant.  */
6510
6511 static boolean
6512 ieee_class_method_variant (p, physname, visibility, constp, volatilep,
6513                            voffset, context)
6514      PTR p;
6515      const char *physname;
6516      enum debug_visibility visibility;
6517      boolean constp;
6518      boolean volatilep;
6519      bfd_vma voffset;
6520      boolean context;
6521 {
6522   struct ieee_handle *info = (struct ieee_handle *) p;
6523
6524   return ieee_class_method_var (info, physname, visibility, false, constp,
6525                                 volatilep, voffset, context);
6526 }
6527
6528 /* Define a new static method variant.  */
6529
6530 static boolean
6531 ieee_class_static_method_variant (p, physname, visibility, constp, volatilep)
6532      PTR p;
6533      const char *physname;
6534      enum debug_visibility visibility;
6535      boolean constp;
6536      boolean volatilep;
6537 {
6538   struct ieee_handle *info = (struct ieee_handle *) p;
6539
6540   return ieee_class_method_var (info, physname, visibility, true, constp,
6541                                 volatilep, 0, false);
6542 }
6543
6544 /* Finish up a method.  */
6545
6546 static boolean
6547 ieee_class_end_method (p)
6548      PTR p;
6549 {
6550   struct ieee_handle *info = (struct ieee_handle *) p;
6551
6552   assert (info->type_stack != NULL
6553           && info->type_stack->type.classdef != NULL
6554           && info->type_stack->type.classdef->method != NULL);
6555
6556   info->type_stack->type.classdef->method = NULL;
6557
6558   return true;
6559 }
6560
6561 /* Finish up a class.  */
6562
6563 static boolean
6564 ieee_end_class_type (p)
6565      PTR p;
6566 {
6567   struct ieee_handle *info = (struct ieee_handle *) p;
6568   unsigned int nindx;
6569
6570   assert (info->type_stack != NULL
6571           && info->type_stack->type.classdef != NULL);
6572
6573   /* If we were ignoring this class definition because it was a
6574      duplicate definition, just through away whatever bytes we have
6575      accumulated.  Leave the type on the stack.  */
6576   if (info->type_stack->type.ignorep)
6577     return true;
6578
6579   nindx = info->type_stack->type.classdef->indx;
6580
6581   /* If we have a virtual table, we can write out the information now.  */
6582   if (info->type_stack->type.classdef->vclass != NULL
6583       || info->type_stack->type.classdef->ownvptr)
6584     {
6585       if (! ieee_change_buffer (info,
6586                                 &info->type_stack->type.classdef->pmiscbuf)
6587           || ! ieee_write_asn (info, nindx, 'z')
6588           || ! ieee_write_atn65 (info, nindx, "")
6589           || ! ieee_write_asn (info, nindx,
6590                                info->type_stack->type.classdef->voffset))
6591         return false;
6592       if (info->type_stack->type.classdef->ownvptr)
6593         {
6594           if (! ieee_write_atn65 (info, nindx, ""))
6595             return false;
6596         }
6597       else
6598         {
6599           if (! ieee_write_atn65 (info, nindx,
6600                                   info->type_stack->type.classdef->vclass))
6601             return false;
6602         }
6603       if (! ieee_write_asn (info, nindx, 0))
6604         return false;
6605       info->type_stack->type.classdef->pmisccount += 5;
6606     }
6607
6608   /* Now that we know the number of pmisc records, we can write out
6609      the atn62 which starts the pmisc records, and append them to the
6610      C++ buffers.  */
6611
6612   if (! ieee_change_buffer (info, &info->cxx)
6613       || ! ieee_write_byte (info, (int) ieee_nn_record)
6614       || ! ieee_write_number (info, nindx)
6615       || ! ieee_write_id (info, "")
6616       || ! ieee_write_2bytes (info, (int) ieee_atn_record_enum)
6617       || ! ieee_write_number (info, nindx)
6618       || ! ieee_write_number (info, 0)
6619       || ! ieee_write_number (info, 62)
6620       || ! ieee_write_number (info, 80)
6621       || ! ieee_write_number (info,
6622                               info->type_stack->type.classdef->pmisccount))
6623     return false;
6624
6625   if (! ieee_append_buffer (info, &info->cxx,
6626                             &info->type_stack->type.classdef->pmiscbuf))
6627     return false;
6628   if (! ieee_buffer_emptyp (&info->type_stack->type.classdef->refs))
6629     {
6630       if (! ieee_append_buffer (info, &info->cxx,
6631                                 &info->type_stack->type.classdef->refs))
6632         return false;
6633     }
6634
6635   return ieee_end_struct_type (p);
6636 }
6637
6638 /* Push a previously seen typedef onto the type stack.  */
6639
6640 static boolean
6641 ieee_typedef_type (p, name)
6642      PTR p;
6643      const char *name;
6644 {
6645   struct ieee_handle *info = (struct ieee_handle *) p;
6646   struct ieee_name_type_hash_entry *h;
6647   struct ieee_name_type *nt;
6648
6649   h = ieee_name_type_hash_lookup (&info->typedefs, name, false, false);
6650
6651   /* h should never be NULL, since that would imply that the generic
6652      debugging code has asked for a typedef which it has not yet
6653      defined.  */
6654   assert (h != NULL);
6655
6656   /* We always use the most recently defined type for this name, which
6657      will be the first one on the list.  */
6658
6659   nt = h->types;
6660   if (! ieee_push_type (info, nt->type.indx, nt->type.size,
6661                         nt->type.unsignedp, nt->type.localp))
6662     return false;
6663
6664   /* Copy over any other type information we may have.  */
6665   info->type_stack->type = nt->type;
6666
6667   return true;
6668 }
6669
6670 /* Push a tagged type onto the type stack.  */
6671
6672 static boolean
6673 ieee_tag_type (p, name, id, kind)
6674      PTR p;
6675      const char *name;
6676      unsigned int id;
6677      enum debug_type_kind kind;
6678 {
6679   struct ieee_handle *info = (struct ieee_handle *) p;
6680   boolean localp;
6681   boolean copy;
6682   char ab[20];
6683   struct ieee_name_type_hash_entry *h;
6684   struct ieee_name_type *nt;
6685
6686   if (kind == DEBUG_KIND_ENUM)
6687     {
6688       struct ieee_defined_enum *e;
6689
6690       if (name == NULL)
6691         abort ();
6692       for (e = info->enums; e != NULL; e = e->next)
6693         if (e->tag != NULL && strcmp (e->tag, name) == 0)
6694           return ieee_push_type (info, e->indx, 0, true, false);
6695
6696       e = (struct ieee_defined_enum *) xmalloc (sizeof *e);
6697       memset (e, 0, sizeof *e);
6698
6699       e->indx = info->type_indx;
6700       ++info->type_indx;
6701       e->tag = name;
6702       e->defined = false;
6703
6704       e->next = info->enums;
6705       info->enums = e;
6706
6707       return ieee_push_type (info, e->indx, 0, true, false);
6708     }
6709
6710   localp = false;
6711
6712   copy = false;
6713   if (name == NULL)
6714     {
6715       sprintf (ab, "__anon%u", id);
6716       name = ab;
6717       copy = true;
6718     }
6719
6720   h = ieee_name_type_hash_lookup (&info->tags, name, true, copy);
6721   if (h == NULL)
6722     return false;
6723
6724   for (nt = h->types; nt != NULL; nt = nt->next)
6725     {
6726       if (nt->id == id)
6727         {
6728           if (! ieee_push_type (info, nt->type.indx, nt->type.size,
6729                                 nt->type.unsignedp, nt->type.localp))
6730             return false;
6731           /* Copy over any other type information we may have.  */
6732           info->type_stack->type = nt->type;
6733           return true;
6734         }
6735
6736       if (! nt->type.localp)
6737         {
6738           /* This is a duplicate of a global type, so it must be
6739              local. */
6740           localp = true;
6741         }
6742     }
6743
6744   nt = (struct ieee_name_type *) xmalloc (sizeof *nt);
6745   memset (nt, 0, sizeof *nt);
6746
6747   nt->id = id;
6748   nt->type.name = h->root.string;
6749   nt->type.indx = info->type_indx;
6750   nt->type.localp = localp;
6751   ++info->type_indx;
6752   nt->kind = kind;
6753
6754   nt->next = h->types;
6755   h->types = nt;
6756
6757   if (! ieee_push_type (info, nt->type.indx, 0, false, localp))
6758     return false;
6759
6760   info->type_stack->type.name = h->root.string;
6761
6762   return true;
6763 }
6764
6765 /* Output a typedef.  */
6766
6767 static boolean
6768 ieee_typdef (p, name)
6769      PTR p;
6770      const char *name;
6771 {
6772   struct ieee_handle *info = (struct ieee_handle *) p;
6773   struct ieee_write_type type;
6774   unsigned int indx;
6775   boolean found;
6776   boolean localp;
6777   struct ieee_name_type_hash_entry *h;
6778   struct ieee_name_type *nt;
6779
6780   type = info->type_stack->type;
6781   indx = type.indx;
6782
6783   /* If this is a simple builtin type using a builtin name, we don't
6784      want to output the typedef itself.  We also want to change the
6785      type index to correspond to the name being used.  We recognize
6786      names used in stabs debugging output even if they don't exactly
6787      correspond to the names used for the IEEE builtin types.  */
6788   found = false;
6789   if (indx <= (unsigned int) builtin_bcd_float)
6790     {
6791       switch ((enum builtin_types) indx)
6792         {
6793         default:
6794           break;
6795
6796         case builtin_void:
6797           if (strcmp (name, "void") == 0)
6798             found = true;
6799           break;
6800
6801         case builtin_signed_char:
6802         case builtin_char:
6803           if (strcmp (name, "signed char") == 0)
6804             {
6805               indx = (unsigned int) builtin_signed_char;
6806               found = true;
6807             }
6808           else if (strcmp (name, "char") == 0)
6809             {
6810               indx = (unsigned int) builtin_char;
6811               found = true;
6812             }
6813           break;
6814
6815         case builtin_unsigned_char:
6816           if (strcmp (name, "unsigned char") == 0)
6817             found = true;
6818           break;
6819
6820         case builtin_signed_short_int:
6821         case builtin_short:
6822         case builtin_short_int:
6823         case builtin_signed_short:
6824           if (strcmp (name, "signed short int") == 0)
6825             {
6826               indx = (unsigned int) builtin_signed_short_int;
6827               found = true;
6828             }
6829           else if (strcmp (name, "short") == 0)
6830             {
6831               indx = (unsigned int) builtin_short;
6832               found = true;
6833             }
6834           else if (strcmp (name, "short int") == 0)
6835             {
6836               indx = (unsigned int) builtin_short_int;
6837               found = true;
6838             }
6839           else if (strcmp (name, "signed short") == 0)
6840             {
6841               indx = (unsigned int) builtin_signed_short;
6842               found = true;
6843             }
6844           break;
6845
6846         case builtin_unsigned_short_int:
6847         case builtin_unsigned_short:
6848           if (strcmp (name, "unsigned short int") == 0
6849               || strcmp (name, "short unsigned int") == 0)
6850             {
6851               indx = builtin_unsigned_short_int;
6852               found = true;
6853             }
6854           else if (strcmp (name, "unsigned short") == 0)
6855             {
6856               indx = builtin_unsigned_short;
6857               found = true;
6858             }
6859           break;
6860
6861         case builtin_signed_long:
6862         case builtin_int: /* FIXME: Size depends upon architecture.  */
6863         case builtin_long:
6864           if (strcmp (name, "signed long") == 0)
6865             {
6866               indx = builtin_signed_long;
6867               found = true;
6868             }
6869           else if (strcmp (name, "int") == 0)
6870             {
6871               indx = builtin_int;
6872               found = true;
6873             }
6874           else if (strcmp (name, "long") == 0
6875                    || strcmp (name, "long int") == 0)
6876             {
6877               indx = builtin_long;
6878               found = true;
6879             }
6880           break;
6881
6882         case builtin_unsigned_long:
6883         case builtin_unsigned: /* FIXME: Size depends upon architecture.  */
6884         case builtin_unsigned_int: /* FIXME: Like builtin_unsigned.  */
6885           if (strcmp (name, "unsigned long") == 0
6886               || strcmp (name, "long unsigned int") == 0)
6887             {
6888               indx = builtin_unsigned_long;
6889               found = true;
6890             }
6891           else if (strcmp (name, "unsigned") == 0)
6892             {
6893               indx = builtin_unsigned;
6894               found = true;
6895             }
6896           else if (strcmp (name, "unsigned int") == 0)
6897             {
6898               indx = builtin_unsigned_int;
6899               found = true;
6900             }
6901           break;
6902
6903         case builtin_signed_long_long:
6904           if (strcmp (name, "signed long long") == 0
6905               || strcmp (name, "long long int") == 0)
6906             found = true;
6907           break;
6908
6909         case builtin_unsigned_long_long:
6910           if (strcmp (name, "unsigned long long") == 0
6911               || strcmp (name, "long long unsigned int") == 0)
6912             found = true;
6913           break;
6914
6915         case builtin_float:
6916           if (strcmp (name, "float") == 0)
6917             found = true;
6918           break;
6919
6920         case builtin_double:
6921           if (strcmp (name, "double") == 0)
6922             found = true;
6923           break;
6924
6925         case builtin_long_double:
6926           if (strcmp (name, "long double") == 0)
6927             found = true;
6928           break;
6929
6930         case builtin_long_long_double:
6931           if (strcmp (name, "long long double") == 0)
6932             found = true;
6933           break;
6934         }
6935
6936       if (found)
6937         type.indx = indx;
6938     }
6939
6940   h = ieee_name_type_hash_lookup (&info->typedefs, name, true, false);
6941   if (h == NULL)
6942     return false;
6943
6944   /* See if we have already defined this type with this name.  */
6945   localp = type.localp;
6946   for (nt = h->types; nt != NULL; nt = nt->next)
6947     {
6948       if (nt->id == indx)
6949         {
6950           /* If this is a global definition, then we don't need to
6951              do anything here.  */
6952           if (! nt->type.localp)
6953             {
6954               ieee_pop_unused_type (info);
6955               return true;
6956             }
6957         }
6958       else
6959         {
6960           /* This is a duplicate definition, so make this one local.  */
6961           localp = true;
6962         }
6963     }
6964
6965   /* We need to add a new typedef for this type.  */
6966
6967   nt = (struct ieee_name_type *) xmalloc (sizeof *nt);
6968   memset (nt, 0, sizeof *nt);
6969   nt->id = indx;
6970   nt->type = type;
6971   nt->type.name = name;
6972   nt->type.localp = localp;
6973   nt->kind = DEBUG_KIND_ILLEGAL;
6974
6975   nt->next = h->types;
6976   h->types = nt;
6977
6978   if (found)
6979     {
6980       /* This is one of the builtin typedefs, so we don't need to
6981          actually define it.  */
6982       ieee_pop_unused_type (info);
6983       return true;
6984     }
6985
6986   indx = ieee_pop_type (info);
6987
6988   if (! ieee_define_named_type (info, name, (unsigned int) -1, type.size,
6989                                 type.unsignedp, localp,
6990                                 (struct ieee_buflist *) NULL)
6991       || ! ieee_write_number (info, 'T')
6992       || ! ieee_write_number (info, indx))
6993     return false;
6994
6995   /* Remove the type we just added to the type stack.  This should not
6996      be ieee_pop_unused_type, since the type is used, we just don't
6997      need it now.  */
6998   (void) ieee_pop_type (info);
6999
7000   return true;
7001 }
7002
7003 /* Output a tag for a type.  We don't have to do anything here.  */
7004
7005 static boolean
7006 ieee_tag (p, name)
7007      PTR p;
7008      const char *name;
7009 {
7010   struct ieee_handle *info = (struct ieee_handle *) p;
7011
7012   /* This should not be ieee_pop_unused_type, since we want the type
7013      to be defined.  */
7014   (void) ieee_pop_type (info);
7015   return true;
7016 }
7017
7018 /* Output an integer constant.  */
7019
7020 static boolean
7021 ieee_int_constant (p, name, val)
7022      PTR p;
7023      const char *name;
7024      bfd_vma val;
7025 {
7026   /* FIXME.  */
7027   return true;
7028 }
7029
7030 /* Output a floating point constant.  */
7031
7032 static boolean
7033 ieee_float_constant (p, name, val)
7034      PTR p;
7035      const char *name;
7036      double val;
7037 {
7038   /* FIXME.  */
7039   return true;
7040 }
7041
7042 /* Output a typed constant.  */
7043
7044 static boolean
7045 ieee_typed_constant (p, name, val)
7046      PTR p;
7047      const char *name;
7048      bfd_vma val;
7049 {
7050   struct ieee_handle *info = (struct ieee_handle *) p;
7051
7052   /* FIXME.  */
7053   ieee_pop_unused_type (info);
7054   return true;
7055 }
7056
7057 /* Output a variable.  */
7058
7059 static boolean
7060 ieee_variable (p, name, kind, val)
7061      PTR p;
7062      const char *name;
7063      enum debug_var_kind kind;
7064      bfd_vma val;
7065 {
7066   struct ieee_handle *info = (struct ieee_handle *) p;
7067   unsigned int name_indx;
7068   unsigned int size;
7069   boolean referencep;
7070   unsigned int type_indx;
7071   boolean asn;
7072   int refflag;
7073
7074   size = info->type_stack->type.size;
7075   referencep = info->type_stack->type.referencep;
7076   type_indx = ieee_pop_type (info);
7077
7078   assert (! ieee_buffer_emptyp (&info->vars));
7079   if (! ieee_change_buffer (info, &info->vars))
7080     return false;
7081
7082   name_indx = info->name_indx;
7083   ++info->name_indx;
7084
7085   /* Write out an NN and an ATN record for this variable.  */
7086   if (! ieee_write_byte (info, (int) ieee_nn_record)
7087       || ! ieee_write_number (info, name_indx)
7088       || ! ieee_write_id (info, name)
7089       || ! ieee_write_2bytes (info, (int) ieee_atn_record_enum)
7090       || ! ieee_write_number (info, name_indx)
7091       || ! ieee_write_number (info, type_indx))
7092     return false;
7093   switch (kind)
7094     {
7095     default:
7096       abort ();
7097       return false;
7098     case DEBUG_GLOBAL:
7099       if (! ieee_write_number (info, 8)
7100           || ! ieee_add_range (info, false, val, val + size))
7101         return false;
7102       refflag = 0;
7103       asn = true;
7104       break;
7105     case DEBUG_STATIC:
7106       if (! ieee_write_number (info, 3)
7107           || ! ieee_add_range (info, false, val, val + size))
7108         return false;
7109       refflag = 1;
7110       asn = true;
7111       break;
7112     case DEBUG_LOCAL_STATIC:
7113       if (! ieee_write_number (info, 3)
7114           || ! ieee_add_range (info, false, val, val + size))
7115         return false;
7116       refflag = 2;
7117       asn = true;
7118       break;
7119     case DEBUG_LOCAL:
7120       if (! ieee_write_number (info, 1)
7121           || ! ieee_write_number (info, val))
7122         return false;
7123       refflag = 2;
7124       asn = false;
7125       break;
7126     case DEBUG_REGISTER:
7127       if (! ieee_write_number (info, 2)
7128           || ! ieee_write_number (info,
7129                                   ieee_genreg_to_regno (info->abfd, val)))
7130         return false;
7131       refflag = 2;
7132       asn = false;
7133       break;
7134     }
7135
7136   if (asn)
7137     {
7138       if (! ieee_write_asn (info, name_indx, val))
7139         return false;
7140     }
7141
7142   /* If this is really a reference type, then we just output it with
7143      pointer type, and must now output a C++ record indicating that it
7144      is really reference type.  */
7145   if (referencep)
7146     {
7147       unsigned int nindx;
7148
7149       nindx = info->name_indx;
7150       ++info->name_indx;
7151
7152       /* If this is a global variable, we want to output the misc
7153          record in the C++ misc record block.  Otherwise, we want to
7154          output it just after the variable definition, which is where
7155          the current buffer is.  */
7156       if (refflag != 2)
7157         {
7158           if (! ieee_change_buffer (info, &info->cxx))
7159             return false;
7160         }
7161
7162       if (! ieee_write_byte (info, (int) ieee_nn_record)
7163           || ! ieee_write_number (info, nindx)
7164           || ! ieee_write_id (info, "")
7165           || ! ieee_write_2bytes (info, (int) ieee_atn_record_enum)
7166           || ! ieee_write_number (info, nindx)
7167           || ! ieee_write_number (info, 0)
7168           || ! ieee_write_number (info, 62)
7169           || ! ieee_write_number (info, 80)
7170           || ! ieee_write_number (info, 3)
7171           || ! ieee_write_asn (info, nindx, 'R')
7172           || ! ieee_write_asn (info, nindx, refflag)
7173           || ! ieee_write_atn65 (info, nindx, name))
7174         return false;
7175     }
7176
7177   return true;
7178 }
7179
7180 /* Start outputting information for a function.  */
7181
7182 static boolean
7183 ieee_start_function (p, name, global)
7184      PTR p;
7185      const char *name;
7186      boolean global;
7187 {
7188   struct ieee_handle *info = (struct ieee_handle *) p;
7189   boolean referencep;
7190   unsigned int retindx, typeindx;
7191
7192   referencep = info->type_stack->type.referencep;
7193   retindx = ieee_pop_type (info);
7194
7195   /* Besides recording a BB4 or BB6 block, we record the type of the
7196      function in the BB1 typedef block.  We can't write out the full
7197      type until we have seen all the parameters, so we accumulate it
7198      in info->fntype and info->fnargs.  */
7199   if (! ieee_buffer_emptyp (&info->fntype))
7200     {
7201       /* FIXME: This might happen someday if we support nested
7202          functions.  */
7203       abort ();
7204     }
7205
7206   info->fnname = name;
7207
7208   /* An attribute of 0x40 means that the push mask is unknown.  */
7209   if (! ieee_define_named_type (info, name, (unsigned int) -1, 0, false, true,
7210                                 &info->fntype)
7211       || ! ieee_write_number (info, 'x')
7212       || ! ieee_write_number (info, 0x40)
7213       || ! ieee_write_number (info, 0)
7214       || ! ieee_write_number (info, 0)
7215       || ! ieee_write_number (info, retindx))
7216     return false;
7217
7218   typeindx = ieee_pop_type (info);
7219
7220   if (! ieee_init_buffer (info, &info->fnargs))
7221     return false;
7222   info->fnargcount = 0;
7223
7224   /* If the function return value is actually a reference type, we
7225      must add a record indicating that.  */
7226   if (referencep)
7227     {
7228       unsigned int nindx;
7229
7230       nindx = info->name_indx;
7231       ++info->name_indx;
7232       if (! ieee_change_buffer (info, &info->cxx)
7233           || ! ieee_write_byte (info, (int) ieee_nn_record)
7234           || ! ieee_write_number (info, nindx)
7235           || ! ieee_write_id (info, "")
7236           || ! ieee_write_2bytes (info, (int) ieee_atn_record_enum)
7237           || ! ieee_write_number (info, nindx)
7238           || ! ieee_write_number (info, 0)
7239           || ! ieee_write_number (info, 62)
7240           || ! ieee_write_number (info, 80)
7241           || ! ieee_write_number (info, 3)
7242           || ! ieee_write_asn (info, nindx, 'R')
7243           || ! ieee_write_asn (info, nindx, global ? 0 : 1)
7244           || ! ieee_write_atn65 (info, nindx, name))
7245         return false;
7246     }
7247
7248   assert (! ieee_buffer_emptyp (&info->vars));
7249   if (! ieee_change_buffer (info, &info->vars))
7250     return false;
7251
7252   /* The address is written out as the first block.  */
7253
7254   ++info->block_depth;
7255
7256   return (ieee_write_byte (info, (int) ieee_bb_record_enum)
7257           && ieee_write_byte (info, global ? 4 : 6)
7258           && ieee_write_number (info, 0)
7259           && ieee_write_id (info, name)
7260           && ieee_write_number (info, 0)
7261           && ieee_write_number (info, typeindx));
7262 }
7263
7264 /* Add a function parameter.  This will normally be called before the
7265    first block, so we postpone them until we see the block.  */
7266
7267 static boolean
7268 ieee_function_parameter (p, name, kind, val)
7269      PTR p;
7270      const char *name;
7271      enum debug_parm_kind kind;
7272      bfd_vma val;
7273 {
7274   struct ieee_handle *info = (struct ieee_handle *) p;
7275   struct ieee_pending_parm *m, **pm;
7276
7277   assert (info->block_depth == 1);
7278
7279   m = (struct ieee_pending_parm *) xmalloc (sizeof *m);
7280   memset (m, 0, sizeof *m);
7281
7282   m->next = NULL;
7283   m->name = name;
7284   m->referencep = info->type_stack->type.referencep;
7285   m->type = ieee_pop_type (info);
7286   m->kind = kind;
7287   m->val = val;
7288
7289   for (pm = &info->pending_parms; *pm != NULL; pm = &(*pm)->next)
7290     ;
7291   *pm = m;
7292
7293   /* Add the type to the fnargs list.  */
7294   if (! ieee_change_buffer (info, &info->fnargs)
7295       || ! ieee_write_number (info, m->type))
7296     return false;
7297   ++info->fnargcount;
7298
7299   return true;  
7300 }
7301
7302 /* Output pending function parameters.  */
7303
7304 static boolean
7305 ieee_output_pending_parms (info)
7306      struct ieee_handle *info;
7307 {
7308   struct ieee_pending_parm *m;
7309   unsigned int refcount;
7310
7311   refcount = 0;
7312   for (m = info->pending_parms; m != NULL; m = m->next)
7313     {
7314       enum debug_var_kind vkind;
7315
7316       switch (m->kind)
7317         {
7318         default:
7319           abort ();
7320           return false;
7321         case DEBUG_PARM_STACK:
7322         case DEBUG_PARM_REFERENCE:
7323           vkind = DEBUG_LOCAL;
7324           break;
7325         case DEBUG_PARM_REG:
7326         case DEBUG_PARM_REF_REG:
7327           vkind = DEBUG_REGISTER;
7328           break;
7329         }
7330
7331       if (! ieee_push_type (info, m->type, 0, false, false))
7332         return false;
7333       info->type_stack->type.referencep = m->referencep;
7334       if (m->referencep)
7335         ++refcount;
7336       if (! ieee_variable ((PTR) info, m->name, vkind, m->val))
7337         return false;
7338     }
7339
7340   /* If there are any reference parameters, we need to output a
7341      miscellaneous record indicating them.  */
7342   if (refcount > 0)
7343     {
7344       unsigned int nindx, varindx;
7345
7346       /* FIXME: The MRI compiler outputs the demangled function name
7347          here, but we are outputting the mangled name.  */
7348       nindx = info->name_indx;
7349       ++info->name_indx;
7350       if (! ieee_change_buffer (info, &info->vars)
7351           || ! ieee_write_byte (info, (int) ieee_nn_record)
7352           || ! ieee_write_number (info, nindx)
7353           || ! ieee_write_id (info, "")
7354           || ! ieee_write_2bytes (info, (int) ieee_atn_record_enum)
7355           || ! ieee_write_number (info, nindx)
7356           || ! ieee_write_number (info, 0)
7357           || ! ieee_write_number (info, 62)
7358           || ! ieee_write_number (info, 80)
7359           || ! ieee_write_number (info, refcount + 3)
7360           || ! ieee_write_asn (info, nindx, 'B')
7361           || ! ieee_write_atn65 (info, nindx, info->fnname)
7362           || ! ieee_write_asn (info, nindx, 0))
7363         return false;
7364       for (m = info->pending_parms, varindx = 1;
7365            m != NULL;
7366            m = m->next, varindx++)
7367         {
7368           if (m->referencep)
7369             {
7370               if (! ieee_write_asn (info, nindx, varindx))
7371                 return false;
7372             }
7373         }
7374     }
7375
7376   m = info->pending_parms;
7377   while (m != NULL)
7378     {
7379       struct ieee_pending_parm *next;
7380
7381       next = m->next;
7382       free (m);
7383       m = next;
7384     }
7385
7386   info->pending_parms = NULL;
7387
7388   return true;
7389 }
7390
7391 /* Start a block.  If this is the first block, we output the address
7392    to finish the BB4 or BB6, and then output the function parameters.  */
7393
7394 static boolean
7395 ieee_start_block (p, addr)
7396      PTR p;
7397      bfd_vma addr;
7398 {
7399   struct ieee_handle *info = (struct ieee_handle *) p;
7400
7401   if (! ieee_change_buffer (info, &info->vars))
7402     return false;
7403
7404   if (info->block_depth == 1)
7405     {
7406       if (! ieee_write_number (info, addr)
7407           || ! ieee_output_pending_parms (info))
7408         return false;
7409     }
7410   else
7411     {
7412       if (! ieee_write_byte (info, (int) ieee_bb_record_enum)
7413           || ! ieee_write_byte (info, 6)
7414           || ! ieee_write_number (info, 0)
7415           || ! ieee_write_id (info, "")
7416           || ! ieee_write_number (info, 0)
7417           || ! ieee_write_number (info, 0)
7418           || ! ieee_write_number (info, addr))
7419         return false;
7420     }
7421
7422   if (! ieee_start_range (info, addr))
7423     return false;
7424
7425   ++info->block_depth;
7426
7427   return true;
7428 }
7429
7430 /* End a block.  */
7431
7432 static boolean
7433 ieee_end_block (p, addr)
7434      PTR p;
7435      bfd_vma addr;
7436 {
7437   struct ieee_handle *info = (struct ieee_handle *) p;
7438
7439   /* The address we are given is the end of the block, but IEEE seems
7440      to want to the address of the last byte in the block, so we
7441      subtract one.  */
7442   if (! ieee_change_buffer (info, &info->vars)
7443       || ! ieee_write_byte (info, (int) ieee_be_record_enum)
7444       || ! ieee_write_number (info, addr - 1))
7445     return false;
7446
7447   if (! ieee_end_range (info, addr))
7448     return false;
7449
7450   --info->block_depth;
7451
7452   if (addr > info->highaddr)
7453     info->highaddr = addr;
7454
7455   return true;
7456 }
7457
7458 /* End a function.  */
7459
7460 static boolean
7461 ieee_end_function (p)
7462      PTR p;
7463 {
7464   struct ieee_handle *info = (struct ieee_handle *) p;
7465
7466   assert (info->block_depth == 1);
7467
7468   --info->block_depth;
7469
7470   /* Now we can finish up fntype, and add it to the typdef section.
7471      At this point, fntype is the 'x' type up to the argument count,
7472      and fnargs is the argument types.  We must add the argument
7473      count, and we must add the level.  FIXME: We don't record varargs
7474      functions correctly.  In fact, stabs debugging does not give us
7475      enough information to do so.  */
7476   if (! ieee_change_buffer (info, &info->fntype)
7477       || ! ieee_write_number (info, info->fnargcount)
7478       || ! ieee_change_buffer (info, &info->fnargs)
7479       || ! ieee_write_number (info, 0))
7480     return false;
7481
7482   /* Make sure the typdef block has been started.  */
7483   if (ieee_buffer_emptyp (&info->types))
7484     {
7485       if (! ieee_change_buffer (info, &info->types)
7486           || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
7487           || ! ieee_write_byte (info, 1)
7488           || ! ieee_write_number (info, 0)
7489           || ! ieee_write_id (info, info->modname))
7490         return false;
7491     }
7492
7493   if (! ieee_append_buffer (info, &info->types, &info->fntype)
7494       || ! ieee_append_buffer (info, &info->types, &info->fnargs))
7495     return false;
7496
7497   info->fnname = NULL;
7498   if (! ieee_init_buffer (info, &info->fntype)
7499       || ! ieee_init_buffer (info, &info->fnargs))
7500     return false;
7501   info->fnargcount = 0;
7502
7503   return true;
7504 }
7505
7506 /* Record line number information.  */
7507
7508 static boolean
7509 ieee_lineno (p, filename, lineno, addr)
7510      PTR p;
7511      const char *filename;
7512      unsigned long lineno;
7513      bfd_vma addr;
7514 {
7515   struct ieee_handle *info = (struct ieee_handle *) p;
7516
7517   assert (info->filename != NULL);
7518
7519   /* The HP simulator seems to get confused when more than one line is
7520      listed for the same address, at least if they are in different
7521      files.  We handle this by always listing the last line for a
7522      given address, since that seems to be the one that gdb uses.  */
7523   if (info->pending_lineno_filename != NULL
7524       && addr != info->pending_lineno_addr)
7525     {
7526       /* Make sure we have a line number block.  */
7527       if (! ieee_buffer_emptyp (&info->linenos))
7528         {
7529           if (! ieee_change_buffer (info, &info->linenos))
7530             return false;
7531         }
7532       else
7533         {
7534           info->lineno_name_indx = info->name_indx;
7535           ++info->name_indx;
7536           if (! ieee_change_buffer (info, &info->linenos)
7537               || ! ieee_write_byte (info, (int) ieee_bb_record_enum)
7538               || ! ieee_write_byte (info, 5)
7539               || ! ieee_write_number (info, 0)
7540               || ! ieee_write_id (info, info->filename)
7541               || ! ieee_write_byte (info, (int) ieee_nn_record)
7542               || ! ieee_write_number (info, info->lineno_name_indx)
7543               || ! ieee_write_id (info, ""))
7544             return false;
7545           info->lineno_filename = info->filename;
7546         }
7547
7548       if (strcmp (info->pending_lineno_filename, info->lineno_filename) != 0)
7549         {
7550           if (strcmp (info->filename, info->lineno_filename) != 0)
7551             {
7552               /* We were not in the main file.  Close the block for the
7553                  included file.  */
7554               if (! ieee_write_byte (info, (int) ieee_be_record_enum))
7555                 return false;
7556               if (strcmp (info->filename, info->pending_lineno_filename) == 0)
7557                 {
7558                   /* We need a new NN record, and we aren't about to
7559                      output one.  */
7560                   info->lineno_name_indx = info->name_indx;
7561                   ++info->name_indx;
7562                   if (! ieee_write_byte (info, (int) ieee_nn_record)
7563                       || ! ieee_write_number (info, info->lineno_name_indx)
7564                       || ! ieee_write_id (info, ""))
7565                     return false;
7566                 }
7567             }
7568           if (strcmp (info->filename, info->pending_lineno_filename) != 0)
7569             {
7570               /* We are not changing to the main file.  Open a block for
7571                  the new included file.  */
7572               info->lineno_name_indx = info->name_indx;
7573               ++info->name_indx;
7574               if (! ieee_write_byte (info, (int) ieee_bb_record_enum)
7575                   || ! ieee_write_byte (info, 5)
7576                   || ! ieee_write_number (info, 0)
7577                   || ! ieee_write_id (info, info->pending_lineno_filename)
7578                   || ! ieee_write_byte (info, (int) ieee_nn_record)
7579                   || ! ieee_write_number (info, info->lineno_name_indx)
7580                   || ! ieee_write_id (info, ""))
7581                 return false;
7582             }
7583           info->lineno_filename = info->pending_lineno_filename;
7584         }
7585
7586       if (! ieee_write_2bytes (info, (int) ieee_atn_record_enum)
7587           || ! ieee_write_number (info, info->lineno_name_indx)
7588           || ! ieee_write_number (info, 0)
7589           || ! ieee_write_number (info, 7)
7590           || ! ieee_write_number (info, info->pending_lineno)
7591           || ! ieee_write_number (info, 0)
7592           || ! ieee_write_asn (info, info->lineno_name_indx,
7593                                info->pending_lineno_addr))
7594         return false;
7595     }
7596
7597   if (addr < info->highaddr)
7598     {
7599       info->pending_lineno_filename = filename;
7600       info->pending_lineno = lineno;
7601       info->pending_lineno_addr = addr;
7602     }
7603
7604   return true;
7605 }