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