1 /* pdb.h - header file for generating PDB CodeView debugging files. 2 Copyright (C) 2022-2026 Free Software Foundation, Inc. 3 4 This file is part of the GNU Binutils. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 19 MA 02110-1301, USA. */ 20 21 /* Header files referred to below can be found in Microsoft's PDB 22 repository: https://github.com/microsoft/microsoft-pdb. */ 23 24 #ifndef PDB_H 25 #define PDB_H 26 27 #include "sysdep.h" 28 #include "bfd.h" 29 #include <stdbool.h> 30 #include <stddef.h> 31 32 #define LF_VTSHAPE 0x000a 33 #define LF_MODIFIER 0x1001 34 #define LF_POINTER 0x1002 35 #define LF_PROCEDURE 0x1008 36 #define LF_MFUNCTION 0x1009 37 #define LF_ARGLIST 0x1201 38 #define LF_FIELDLIST 0x1203 39 #define LF_BITFIELD 0x1205 40 #define LF_METHODLIST 0x1206 41 #define LF_BCLASS 0x1400 42 #define LF_VBCLASS 0x1401 43 #define LF_IVBCLASS 0x1402 44 #define LF_INDEX 0x1404 45 #define LF_VFUNCTAB 0x1409 46 #define LF_ENUMERATE 0x1502 47 #define LF_ARRAY 0x1503 48 #define LF_CLASS 0x1504 49 #define LF_STRUCTURE 0x1505 50 #define LF_UNION 0x1506 51 #define LF_ENUM 0x1507 52 #define LF_MEMBER 0x150d 53 #define LF_STMEMBER 0x150e 54 #define LF_METHOD 0x150f 55 #define LF_NESTTYPE 0x1510 56 #define LF_ONEMETHOD 0x1511 57 #define LF_VFTABLE 0x151d 58 #define LF_FUNC_ID 0x1601 59 #define LF_MFUNC_ID 0x1602 60 #define LF_BUILDINFO 0x1603 61 #define LF_SUBSTR_LIST 0x1604 62 #define LF_STRING_ID 0x1605 63 #define LF_UDT_SRC_LINE 0x1606 64 #define LF_UDT_MOD_SRC_LINE 0x1607 65 66 #define LF_CHAR 0x8000 67 #define LF_SHORT 0x8001 68 #define LF_USHORT 0x8002 69 #define LF_LONG 0x8003 70 #define LF_ULONG 0x8004 71 #define LF_QUADWORD 0x8009 72 #define LF_UQUADWORD 0x800a 73 74 #define S_END 0x0006 75 #define S_FRAMEPROC 0x1012 76 #define S_OBJNAME 0x1101 77 #define S_THUNK32 0x1102 78 #define S_BLOCK32 0x1103 79 #define S_LABEL32 0x1105 80 #define S_REGISTER 0x1106 81 #define S_CONSTANT 0x1107 82 #define S_UDT 0x1108 83 #define S_BPREL32 0x110b 84 #define S_LDATA32 0x110c 85 #define S_GDATA32 0x110d 86 #define S_PUB32 0x110e 87 #define S_LPROC32 0x110f 88 #define S_GPROC32 0x1110 89 #define S_REGREL32 0x1111 90 #define S_LTHREAD32 0x1112 91 #define S_GTHREAD32 0x1113 92 #define S_UNAMESPACE 0x1124 93 #define S_PROCREF 0x1125 94 #define S_LPROCREF 0x1127 95 #define S_FRAMECOOKIE 0x113a 96 #define S_COMPILE3 0x113c 97 #define S_ENVBLOCK 0x113d 98 #define S_LOCAL 0x113e 99 #define S_DEFRANGE_REGISTER 0x1141 100 #define S_DEFRANGE_FRAMEPOINTER_REL 0x1142 101 #define S_DEFRANGE_SUBFIELD_REGISTER 0x1143 102 #define S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE 0x1144 103 #define S_DEFRANGE_REGISTER_REL 0x1145 104 #define S_LPROC32_ID 0x1146 105 #define S_GPROC32_ID 0x1147 106 #define S_BUILDINFO 0x114c 107 #define S_INLINESITE 0x114d 108 #define S_INLINESITE_END 0x114e 109 #define S_PROC_ID_END 0x114f 110 #define S_HEAPALLOCSITE 0x115e 111 112 /* PDBStream70 in pdb1.h */ 113 struct pdb_stream_70 114 { 115 uint32_t version; 116 uint32_t signature; 117 uint32_t age; 118 uint8_t guid[16]; 119 }; 120 121 #define PDB_STREAM_VERSION_VC70 20000404 122 #define PDB_STREAM_VERSION_VC140 20140508 123 124 /* HDR in tpi.h */ 125 struct pdb_tpi_stream_header 126 { 127 uint32_t version; 128 uint32_t header_size; 129 uint32_t type_index_begin; 130 uint32_t type_index_end; 131 uint32_t type_record_bytes; 132 uint16_t hash_stream_index; 133 uint16_t hash_aux_stream_index; 134 uint32_t hash_key_size; 135 uint32_t num_hash_buckets; 136 uint32_t hash_value_buffer_offset; 137 uint32_t hash_value_buffer_length; 138 uint32_t index_offset_buffer_offset; 139 uint32_t index_offset_buffer_length; 140 uint32_t hash_adj_buffer_offset; 141 uint32_t hash_adj_buffer_length; 142 }; 143 144 #define TPI_STREAM_VERSION_80 20040203 145 146 #define TPI_FIRST_INDEX 0x1000 147 #define NUM_TPI_HASH_BUCKETS 0x3ffff 148 149 #define NUM_GLOBALS_HASH_BUCKETS 4096 150 151 /* NewDBIHdr in dbi.h */ 152 struct pdb_dbi_stream_header 153 { 154 uint32_t version_signature; 155 uint32_t version_header; 156 uint32_t age; 157 uint16_t global_stream_index; 158 uint16_t build_number; 159 uint16_t public_stream_index; 160 uint16_t pdb_dll_version; 161 uint16_t sym_record_stream; 162 uint16_t pdb_dll_rbld; 163 uint32_t mod_info_size; 164 uint32_t section_contribution_size; 165 uint32_t section_map_size; 166 uint32_t source_info_size; 167 uint32_t type_server_map_size; 168 uint32_t mfc_type_server_index; 169 uint32_t optional_dbg_header_size; 170 uint32_t ec_substream_size; 171 uint16_t flags; 172 uint16_t machine; 173 uint32_t padding; 174 }; 175 176 #define DBI_STREAM_VERSION_70 19990903 177 178 /* PSGSIHDR in gsi.h */ 179 struct publics_header 180 { 181 uint32_t sym_hash_size; 182 uint32_t addr_map_size; 183 uint32_t num_thunks; 184 uint32_t thunks_size; 185 uint32_t thunk_table; 186 uint32_t thunk_table_offset; 187 uint32_t num_sects; 188 }; 189 190 /* GSIHashHdr in gsi.h */ 191 struct globals_hash_header 192 { 193 uint32_t signature; 194 uint32_t version; 195 uint32_t entries_size; 196 uint32_t buckets_size; 197 }; 198 199 /* HRFile in gsi.h */ 200 struct hash_record 201 { 202 uint32_t offset; 203 uint32_t reference; 204 }; 205 206 #define GLOBALS_HASH_SIGNATURE 0xffffffff 207 #define GLOBALS_HASH_VERSION_70 0xf12f091a 208 209 /* PUBSYM32 in cvinfo.h */ 210 struct pubsym 211 { 212 uint16_t record_length; 213 uint16_t record_type; 214 uint32_t flags; 215 uint32_t offset; 216 uint16_t section; 217 /* followed by null-terminated string */ 218 } ATTRIBUTE_PACKED; 219 220 /* see bitset CV_PUBSYMFLAGS in cvinfo.h */ 221 #define PUBSYM_FUNCTION 0x2 222 223 struct optional_dbg_header 224 { 225 uint16_t fpo_stream; 226 uint16_t exception_stream; 227 uint16_t fixup_stream; 228 uint16_t omap_to_src_stream; 229 uint16_t omap_from_src_stream; 230 uint16_t section_header_stream; 231 uint16_t token_map_stream; 232 uint16_t xdata_stream; 233 uint16_t pdata_stream; 234 uint16_t new_fpo_stream; 235 uint16_t orig_section_header_stream; 236 }; 237 238 #define CV_SIGNATURE_C13 4 239 240 #define DEBUG_S_SYMBOLS 0xf1 241 #define DEBUG_S_LINES 0xf2 242 #define DEBUG_S_STRINGTABLE 0xf3 243 #define DEBUG_S_FILECHKSMS 0xf4 244 #define DEBUG_S_INLINEELINES 0xf6 245 246 #define STRING_TABLE_SIGNATURE 0xeffeeffe 247 #define STRING_TABLE_VERSION 1 248 249 #define CV_INLINEE_SOURCE_LINE_SIGNATURE 0 250 251 /* VHdr in nmt.h */ 252 struct string_table_header 253 { 254 uint32_t signature; 255 uint32_t version; 256 }; 257 258 #define SECTION_CONTRIB_VERSION_60 0xf12eba2d 259 260 /* SC in dbicommon.h */ 261 struct section_contribution 262 { 263 uint16_t section; 264 uint16_t padding1; 265 uint32_t offset; 266 uint32_t size; 267 uint32_t characteristics; 268 uint16_t module_index; 269 uint16_t padding2; 270 uint32_t data_crc; 271 uint32_t reloc_crc; 272 }; 273 274 /* MODI_60_Persist in dbi.h */ 275 struct module_info 276 { 277 uint32_t unused1; 278 struct section_contribution sc; 279 uint16_t flags; 280 uint16_t module_sym_stream; 281 uint32_t sym_byte_size; 282 uint32_t c11_byte_size; 283 uint32_t c13_byte_size; 284 uint16_t source_file_count; 285 uint16_t padding; 286 uint32_t unused2; 287 uint32_t source_file_name_index; 288 uint32_t pdb_file_path_name_index; 289 }; 290 291 /* filedata in dumpsym7.cpp */ 292 struct file_checksum 293 { 294 uint32_t file_id; 295 uint8_t checksum_length; 296 uint8_t checksum_type; 297 } ATTRIBUTE_PACKED; 298 299 /* lfModifier in cvinfo.h */ 300 struct lf_modifier 301 { 302 uint16_t size; 303 uint16_t kind; 304 uint32_t base_type; 305 uint16_t modifier; 306 uint16_t padding; 307 } ATTRIBUTE_PACKED; 308 309 /* enum CV_ptrmode_e in cvinfo.h, shifted by 5 for the lfPointerAttr bitfield */ 310 #define CV_PTR_MODE_MASK 0xe0 311 #define CV_PTR_MODE_PMEM 0x40 312 #define CV_PTR_MODE_PMFUNC 0x60 313 314 /* lfPointer in cvinfo.h */ 315 struct lf_pointer 316 { 317 uint16_t size; 318 uint16_t kind; 319 uint32_t base_type; 320 uint32_t attributes; 321 /* following only if CV_PTR_MODE_PMEM or CV_PTR_MODE_PMFUNC in attributes */ 322 uint32_t containing_class; 323 uint16_t ptr_to_mem_type; 324 uint16_t padding; 325 } ATTRIBUTE_PACKED; 326 327 /* lfArgList in cvinfo.h (used for both LF_ARGLIST and LF_SUBSTR_LIST) */ 328 struct lf_arglist 329 { 330 uint16_t size; 331 uint16_t kind; 332 uint32_t num_entries; 333 uint32_t args[]; 334 } ATTRIBUTE_PACKED; 335 336 /* lfProc in cvinfo.h */ 337 struct lf_procedure 338 { 339 uint16_t size; 340 uint16_t kind; 341 uint32_t return_type; 342 uint8_t calling_convention; 343 uint8_t attributes; 344 uint16_t num_parameters; 345 uint32_t arglist; 346 } ATTRIBUTE_PACKED; 347 348 /* lfMFunc in cvinfo.h */ 349 struct lf_mfunction 350 { 351 uint16_t size; 352 uint16_t kind; 353 uint32_t return_type; 354 uint32_t containing_class_type; 355 uint32_t this_type; 356 uint8_t calling_convention; 357 uint8_t attributes; 358 uint16_t num_parameters; 359 uint32_t arglist; 360 int32_t this_adjustment; 361 } ATTRIBUTE_PACKED; 362 363 /* lfArray in cvinfo.h */ 364 struct lf_array 365 { 366 uint16_t size; 367 uint16_t kind; 368 uint32_t element_type; 369 uint32_t index_type; 370 uint16_t length_in_bytes; 371 char name[]; 372 } ATTRIBUTE_PACKED; 373 374 /* lfBitfield in cvinfo.h */ 375 struct lf_bitfield 376 { 377 uint16_t size; 378 uint16_t kind; 379 uint32_t base_type; 380 uint8_t length; 381 uint8_t position; 382 } ATTRIBUTE_PACKED; 383 384 /* lfMember in cvinfo.h */ 385 struct lf_member 386 { 387 uint16_t kind; 388 uint16_t attributes; 389 uint32_t type; 390 uint16_t offset; 391 char name[]; 392 } ATTRIBUTE_PACKED; 393 394 /* from bitfield structure CV_prop_t in cvinfo.h */ 395 #define CV_PROP_FORWARD_REF 0x80 396 #define CV_PROP_SCOPED 0x100 397 #define CV_PROP_HAS_UNIQUE_NAME 0x200 398 399 /* lfClass in cvinfo.h */ 400 struct lf_class 401 { 402 uint16_t size; 403 uint16_t kind; 404 uint16_t num_members; 405 uint16_t properties; 406 uint32_t field_list; 407 uint32_t derived_from; 408 uint32_t vshape; 409 uint16_t length; 410 char name[]; 411 } ATTRIBUTE_PACKED; 412 413 /* lfUnion in cvinfo.h */ 414 struct lf_union 415 { 416 uint16_t size; 417 uint16_t kind; 418 uint16_t num_members; 419 uint16_t properties; 420 uint32_t field_list; 421 uint16_t length; 422 char name[]; 423 } ATTRIBUTE_PACKED; 424 425 /* lfEnumerate in cvinfo.h */ 426 struct lf_enumerate 427 { 428 uint16_t kind; 429 uint16_t attributes; 430 uint16_t value; 431 /* then actual value if value >= 0x8000 */ 432 char name[]; 433 } ATTRIBUTE_PACKED; 434 435 /* lfEnum in cvinfo.h */ 436 struct lf_enum 437 { 438 uint16_t size; 439 uint16_t kind; 440 uint16_t num_elements; 441 uint16_t properties; 442 uint32_t underlying_type; 443 uint32_t field_list; 444 char name[]; 445 } ATTRIBUTE_PACKED; 446 447 /* lfIndex in cvinfo.h */ 448 struct lf_index 449 { 450 uint16_t kind; 451 uint16_t padding; 452 uint32_t index; 453 } ATTRIBUTE_PACKED; 454 455 /* lfOneMethod in cvinfo.h */ 456 struct lf_onemethod 457 { 458 uint16_t kind; 459 uint16_t method_attribute; 460 uint32_t method_type; 461 char name[]; 462 } ATTRIBUTE_PACKED; 463 464 /* mlMethod in cvinfo.h */ 465 struct lf_methodlist_entry 466 { 467 uint16_t method_attribute; 468 uint16_t padding; 469 uint32_t method_type; 470 } ATTRIBUTE_PACKED; 471 472 /* lfMethodList in cvinfo.h */ 473 struct lf_methodlist 474 { 475 uint16_t size; 476 uint16_t kind; 477 struct lf_methodlist_entry entries[]; 478 } ATTRIBUTE_PACKED; 479 480 /* lfMethod in cvinfo.h */ 481 struct lf_method 482 { 483 uint16_t kind; 484 uint16_t count; 485 uint32_t method_list; 486 char name[]; 487 } ATTRIBUTE_PACKED; 488 489 /* lfBClass in cvinfo.h */ 490 struct lf_bclass 491 { 492 uint16_t kind; 493 uint16_t attributes; 494 uint32_t base_class_type; 495 uint16_t offset; 496 } ATTRIBUTE_PACKED; 497 498 /* lfVFuncTab in cvinfo.h */ 499 struct lf_vfunctab 500 { 501 uint16_t kind; 502 uint16_t padding; 503 uint32_t type; 504 } ATTRIBUTE_PACKED; 505 506 /* lfVBClass in cvinfo.h */ 507 struct lf_vbclass 508 { 509 uint16_t kind; 510 uint16_t attributes; 511 uint32_t base_class_type; 512 uint32_t virtual_base_pointer_type; 513 uint16_t virtual_base_pointer_offset; 514 uint16_t virtual_base_vbtable_offset; 515 } ATTRIBUTE_PACKED; 516 517 /* lfSTMember in cvinfo.h */ 518 struct lf_static_member 519 { 520 uint16_t kind; 521 uint16_t attributes; 522 uint32_t type; 523 char name[]; 524 } ATTRIBUTE_PACKED; 525 526 /* lfNestType in cvinfo.h */ 527 struct lf_nest_type 528 { 529 uint16_t kind; 530 uint16_t padding; 531 uint32_t type; 532 char name[]; 533 } ATTRIBUTE_PACKED; 534 535 /* lfStringId in cvinfo.h */ 536 struct lf_string_id 537 { 538 uint16_t size; 539 uint16_t kind; 540 uint32_t substring; 541 char string[]; 542 } ATTRIBUTE_PACKED; 543 544 /* lfBuildInfo in cvinfo.h */ 545 struct lf_build_info 546 { 547 uint16_t size; 548 uint16_t kind; 549 uint16_t count; 550 uint32_t strings[]; 551 } ATTRIBUTE_PACKED; 552 553 /* lfFuncId in cvinfo.h */ 554 struct lf_func_id 555 { 556 uint16_t size; 557 uint16_t kind; 558 uint32_t parent_scope; 559 uint32_t function_type; 560 char name[]; 561 } ATTRIBUTE_PACKED; 562 563 /* lfMFuncId in cvinfo.h */ 564 struct lf_mfunc_id 565 { 566 uint16_t size; 567 uint16_t kind; 568 uint32_t parent_type; 569 uint32_t function_type; 570 char name[]; 571 } ATTRIBUTE_PACKED; 572 573 /* lfUdtSrcLine in cvinfo.h */ 574 struct lf_udt_src_line 575 { 576 uint16_t size; 577 uint16_t kind; 578 uint32_t type; 579 uint32_t source_file_type; 580 uint32_t line_no; 581 } ATTRIBUTE_PACKED; 582 583 /* lfUdtModSrcLine in cvinfo.h */ 584 struct lf_udt_mod_src_line 585 { 586 uint16_t size; 587 uint16_t kind; 588 uint32_t type; 589 uint32_t source_file_string; 590 uint32_t line_no; 591 uint16_t module_no; 592 } ATTRIBUTE_PACKED; 593 594 /* lfVftable in cvinfo.h */ 595 struct lf_vftable 596 { 597 uint16_t size; 598 uint16_t kind; 599 uint32_t type; 600 uint32_t base_vftable; 601 uint32_t offset; 602 uint32_t names_len; 603 char names[]; 604 } ATTRIBUTE_PACKED; 605 606 /* DATASYM32 in cvinfo.h */ 607 struct datasym 608 { 609 uint16_t size; 610 uint16_t kind; 611 uint32_t type; 612 uint32_t offset; 613 uint16_t section; 614 char name[]; 615 } ATTRIBUTE_PACKED; 616 617 /* PROCSYM32 in cvinfo.h */ 618 struct procsym 619 { 620 uint16_t size; 621 uint16_t kind; 622 uint32_t parent; 623 uint32_t end; 624 uint32_t next; 625 uint32_t proc_len; 626 uint32_t debug_start; 627 uint32_t debug_end; 628 uint32_t type; 629 uint32_t offset; 630 uint16_t section; 631 uint8_t flags; 632 char name[]; 633 } ATTRIBUTE_PACKED; 634 635 /* REFSYM2 in cvinfo.h */ 636 struct refsym 637 { 638 uint16_t size; 639 uint16_t kind; 640 uint32_t sum_name; 641 uint32_t symbol_offset; 642 uint16_t mod; 643 char name[]; 644 } ATTRIBUTE_PACKED; 645 646 /* UDTSYM in cvinfo.h */ 647 struct udtsym 648 { 649 uint16_t size; 650 uint16_t kind; 651 uint32_t type; 652 char name[]; 653 } ATTRIBUTE_PACKED; 654 655 /* CONSTSYM in cvinfo.h */ 656 struct constsym 657 { 658 uint16_t size; 659 uint16_t kind; 660 uint32_t type; 661 uint16_t value; 662 /* then actual value if value >= 0x8000 */ 663 char name[]; 664 } ATTRIBUTE_PACKED; 665 666 /* BUILDINFOSYM in cvinfo.h */ 667 struct buildinfosym 668 { 669 uint16_t size; 670 uint16_t kind; 671 uint32_t type; 672 } ATTRIBUTE_PACKED; 673 674 /* BLOCKSYM32 in cvinfo.h */ 675 struct blocksym 676 { 677 uint16_t size; 678 uint16_t kind; 679 uint32_t parent; 680 uint32_t end; 681 uint32_t len; 682 uint32_t offset; 683 uint16_t section; 684 char name[]; 685 } ATTRIBUTE_PACKED; 686 687 /* BPRELSYM32 in cvinfo.h */ 688 struct bprelsym 689 { 690 uint16_t size; 691 uint16_t kind; 692 uint32_t bp_offset; 693 uint32_t type; 694 char name[]; 695 } ATTRIBUTE_PACKED; 696 697 /* REGSYM in cvinfo.h */ 698 struct regsym 699 { 700 uint16_t size; 701 uint16_t kind; 702 uint32_t type; 703 uint16_t reg; 704 char name[]; 705 } ATTRIBUTE_PACKED; 706 707 /* REGREL32 in cvinfo.h */ 708 struct regrel 709 { 710 uint16_t size; 711 uint16_t kind; 712 uint32_t offset; 713 uint32_t type; 714 uint16_t reg; 715 char name[]; 716 } ATTRIBUTE_PACKED; 717 718 /* LOCALSYM in cvinfo.h */ 719 struct localsym 720 { 721 uint16_t size; 722 uint16_t kind; 723 uint32_t type; 724 uint16_t flags; 725 char name[]; 726 } ATTRIBUTE_PACKED; 727 728 /* CV_LVAR_ADDR_RANGE in cvinfo.h */ 729 struct lvar_addr_range 730 { 731 uint32_t offset; 732 uint16_t section; 733 uint16_t length; 734 } ATTRIBUTE_PACKED; 735 736 /* CV_LVAR_ADDR_GAP in cvinfo.h */ 737 struct lvar_addr_gap { 738 uint16_t offset; 739 uint16_t length; 740 } ATTRIBUTE_PACKED; 741 742 /* DEFRANGESYMREGISTERREL in cvinfo.h */ 743 struct defrange_register_rel 744 { 745 uint16_t size; 746 uint16_t kind; 747 uint16_t reg; 748 uint16_t offset_parent; 749 uint32_t offset_register; 750 struct lvar_addr_range range; 751 struct lvar_addr_gap gaps[]; 752 } ATTRIBUTE_PACKED; 753 754 /* DEFRANGESYMFRAMEPOINTERREL in cvinfo.h */ 755 struct defrange_framepointer_rel 756 { 757 uint16_t size; 758 uint16_t kind; 759 uint32_t offset; 760 struct lvar_addr_range range; 761 struct lvar_addr_gap gaps[]; 762 } ATTRIBUTE_PACKED; 763 764 /* DEFRANGESYMSUBFIELDREGISTER in cvinfo.h */ 765 struct defrange_subfield_register 766 { 767 uint16_t size; 768 uint16_t kind; 769 uint16_t reg; 770 uint16_t attributes; 771 uint32_t offset_parent; 772 struct lvar_addr_range range; 773 struct lvar_addr_gap gaps[]; 774 } ATTRIBUTE_PACKED; 775 776 /* DEFRANGESYMREGISTER in cvinfo.h */ 777 struct defrange_register 778 { 779 uint16_t size; 780 uint16_t kind; 781 uint16_t reg; 782 uint16_t attributes; 783 struct lvar_addr_range range; 784 struct lvar_addr_gap gaps[]; 785 } ATTRIBUTE_PACKED; 786 787 /* INLINESITESYM in cvinfo.h */ 788 struct inline_site 789 { 790 uint16_t size; 791 uint16_t kind; 792 uint32_t parent; 793 uint32_t end; 794 uint32_t inlinee; 795 uint8_t binary_annotations[]; 796 } ATTRIBUTE_PACKED; 797 798 /* THUNKSYM32 in cvinfo.h */ 799 struct thunk 800 { 801 uint16_t size; 802 uint16_t kind; 803 uint32_t parent; 804 uint32_t end; 805 uint32_t next; 806 uint32_t offset; 807 uint16_t section; 808 uint16_t length; 809 uint8_t thunk_type; 810 char name[]; 811 } ATTRIBUTE_PACKED; 812 813 /* HEAPALLOCSITE in cvinfo.h */ 814 struct heap_alloc_site 815 { 816 uint16_t size; 817 uint16_t kind; 818 uint32_t offset; 819 uint16_t section; 820 uint16_t length; 821 uint32_t type; 822 } ATTRIBUTE_PACKED; 823 824 /* OBJNAMESYM in cvinfo.h */ 825 struct objname 826 { 827 uint16_t size; 828 uint16_t kind; 829 uint32_t signature; 830 char name[]; 831 } ATTRIBUTE_PACKED; 832 833 #define CV_CFL_80386 0x03 834 #define CV_CFL_X64 0xD0 835 #define CV_CFL_ARM64 0xF6 836 837 #define CV_CFL_LINK 0x07 838 839 /* COMPILESYM3 in cvinfo.h */ 840 struct compile3 841 { 842 uint16_t size; 843 uint16_t kind; 844 uint32_t flags; 845 uint16_t machine; 846 uint16_t frontend_major; 847 uint16_t frontend_minor; 848 uint16_t frontend_build; 849 uint16_t frontend_qfe; 850 uint16_t backend_major; 851 uint16_t backend_minor; 852 uint16_t backend_build; 853 uint16_t backend_qfe; 854 char compiler[]; 855 } ATTRIBUTE_PACKED; 856 857 /* ENVBLOCKSYM in cvinfo.h */ 858 struct envblock 859 { 860 uint16_t size; 861 uint16_t kind; 862 uint8_t flags; 863 char strings[]; 864 } ATTRIBUTE_PACKED; 865 866 extern bool create_pdb_file (bfd *, const char *, const unsigned char *); 867 868 #endif 869