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