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