You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
The RAD symbol library support many debug info formats such as pdb and elf variants. It also supports multithreaded debug info parsing and symbol lookups. Compiled libraries for Windows and headers. #rb stefan.boberg [CL 15872888 by Johan Berg in ue5-main branch]
2353 lines
80 KiB
C
2353 lines
80 KiB
C
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
#ifndef SYMS_CODEVIEW_INCLUDE_H
|
|
#define SYMS_CODEVIEW_INCLUDE_H
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
/* NOTE(nick; Oct 5 2019): There are two type maps stored in the PDB.
|
|
*
|
|
* First lives in the PDB_DEFAULT_STREAM_TPI and any index
|
|
* of type pdb_itype is related to this stream.
|
|
*
|
|
* Second lives in the PDB_DEFAULT_STREAM_IPI and any index
|
|
* of type pdb_cv_itemid is related to this stream. It contains
|
|
* only following records:
|
|
* PDB_LF_FUNC_ID,
|
|
* PDB_LF_MFUNC_ID,
|
|
* PDB_LF_BUILDINFO,
|
|
* PDB_LF_SUBSTR_LIST,
|
|
* PDB_LF_STRING_ID
|
|
*
|
|
* */
|
|
|
|
#if defined(PDB_COMPILE_64BIT)
|
|
#define PDB_INVALID_TI SYMS_UINT64_MAX
|
|
typedef U64 pdb_ti;
|
|
#else
|
|
#define PDB_INVALID_TI SYMS_UINT32_MAX
|
|
typedef U32 pdb_ti;
|
|
#endif
|
|
|
|
#define PDB_INVALID_ITYPE PDB_INVALID_TI
|
|
#define PDB_ITYPE_VARIADIC (PDB_INVALID_ITYPE - 1)
|
|
typedef pdb_ti pdb_cv_itype;
|
|
|
|
#define PDB_INVALID_ITEMID PDB_INVLAID_TI
|
|
typedef pdb_ti pdb_cv_itemid;
|
|
|
|
/* NOTE(nick; Oct 5 2019): Module Index */
|
|
typedef U16 pdb_imod;
|
|
#define PDB_CV_INVALID_IMOD SYMS_UINT16_MAX
|
|
|
|
/* NOTE(nick; Oct 5 2019): Section Index */
|
|
typedef U16 pdb_isec;
|
|
typedef U32 pdb_isec_umm;
|
|
|
|
typedef enum {
|
|
PDB_CV_X86_NONE = 0, PDB_CV_X86_EAX = 17,
|
|
PDB_CV_X86_AL = 1, PDB_CV_X86_ECX = 18,
|
|
PDB_CV_X86_CL = 2, PDB_CV_X86_EDX = 19,
|
|
PDB_CV_X86_DL = 3, PDB_CV_X86_EBX = 20,
|
|
PDB_CV_X86_BL = 4, PDB_CV_X86_ESP = 21,
|
|
PDB_CV_X86_AH = 5, PDB_CV_X86_EBP = 22,
|
|
PDB_CV_X86_CH = 6, PDB_CV_X86_ESI = 23,
|
|
PDB_CV_X86_DH = 7, PDB_CV_X86_EDI = 24,
|
|
PDB_CV_X86_BH = 8, PDB_CV_X86_ES = 25,
|
|
PDB_CV_X86_AX = 9, PDB_CV_X86_CS = 26,
|
|
PDB_CV_X86_CX = 10, PDB_CV_X86_SS = 27,
|
|
PDB_CV_X86_DX = 11, PDB_CV_X86_DS = 28,
|
|
PDB_CV_X86_BX = 12, PDB_CV_X86_FS = 29,
|
|
PDB_CV_X86_SP = 13, PDB_CV_X86_GS = 30,
|
|
PDB_CV_X86_BP = 14, PDB_CV_X86_IP = 31,
|
|
PDB_CV_X86_SI = 15, PDB_CV_X86_FLAGS = 32,
|
|
PDB_CV_X86_DI = 16, PDB_CV_X86_EIP = 33,
|
|
PDB_CV_X86_EFLAGS = 34,
|
|
|
|
PDB_CV_X86_MM0 = 146, PDB_CV_X86_XMM0 = 154,
|
|
PDB_CV_X86_MM1 = 147, PDB_CV_X86_XMM1 = 155,
|
|
PDB_CV_X86_MM2 = 148, PDB_CV_X86_XMM2 = 156,
|
|
PDB_CV_X86_MM3 = 149, PDB_CV_X86_XMM3 = 157,
|
|
PDB_CV_X86_MM4 = 150, PDB_CV_X86_XMM4 = 158,
|
|
PDB_CV_X86_MM5 = 151, PDB_CV_X86_XMM5 = 159,
|
|
PDB_CV_X86_MM6 = 152, PDB_CV_X86_XMM6 = 160,
|
|
PDB_CV_X86_MM7 = 153, PDB_CV_X86_XMM7 = 161,
|
|
|
|
PDB_CV_X86_XMM00 = 162, PDB_CV_X86_XMM33 = 177,
|
|
PDB_CV_X86_XMM01 = 163, PDB_CV_X86_XMM40 = 178,
|
|
PDB_CV_X86_XMM02 = 164, PDB_CV_X86_XMM41 = 179,
|
|
PDB_CV_X86_XMM03 = 165, PDB_CV_X86_XMM42 = 180,
|
|
PDB_CV_X86_XMM10 = 166, PDB_CV_X86_XMM43 = 181,
|
|
PDB_CV_X86_XMM11 = 167, PDB_CV_X86_XMM50 = 182,
|
|
PDB_CV_X86_XMM12 = 168, PDB_CV_X86_XMM51 = 183,
|
|
PDB_CV_X86_XMM13 = 169, PDB_CV_X86_XMM52 = 184,
|
|
PDB_CV_X86_XMM20 = 170, PDB_CV_X86_XMM53 = 185,
|
|
PDB_CV_X86_XMM21 = 171, PDB_CV_X86_XMM60 = 186,
|
|
PDB_CV_X86_XMM22 = 172, PDB_CV_X86_XMM61 = 187,
|
|
PDB_CV_X86_XMM23 = 173, PDB_CV_X86_XMM62 = 188,
|
|
PDB_CV_X86_XMM30 = 174, PDB_CV_X86_XMM63 = 189,
|
|
PDB_CV_X86_XMM31 = 175, PDB_CV_X86_XMM70 = 190,
|
|
PDB_CV_X86_XMM32 = 176, PDB_CV_X86_XMM71 = 191,
|
|
PDB_CV_X86_XMM73 = 193, PDB_CV_X86_XMM72 = 192,
|
|
|
|
PDB_CV_X86_XMM0L = 194, PDB_CV_X86_XMM0H = 202,
|
|
PDB_CV_X86_XMM1L = 195, PDB_CV_X86_XMM1H = 203,
|
|
PDB_CV_X86_XMM2L = 196, PDB_CV_X86_XMM2H = 204,
|
|
PDB_CV_X86_XMM3L = 197, PDB_CV_X86_XMM3H = 205,
|
|
PDB_CV_X86_XMM4L = 198, PDB_CV_X86_XMM4H = 206,
|
|
PDB_CV_X86_XMM5L = 199, PDB_CV_X86_XMM5H = 207,
|
|
PDB_CV_X86_XMM6L = 200, PDB_CV_X86_XMM6H = 208,
|
|
PDB_CV_X86_XMM7L = 201, PDB_CV_X86_XMM7H = 209,
|
|
|
|
/* AVX registers */
|
|
|
|
PDB_CV_X86_YMM0 = 252, PDB_CV_X86_YMM0H = 260,
|
|
PDB_CV_X86_YMM1 = 253, PDB_CV_X86_YMM1H = 261,
|
|
PDB_CV_X86_YMM2 = 254, PDB_CV_X86_YMM2H = 262,
|
|
PDB_CV_X86_YMM3 = 255, PDB_CV_X86_YMM3H = 263,
|
|
PDB_CV_X86_YMM4 = 256, PDB_CV_X86_YMM4H = 264,
|
|
PDB_CV_X86_YMM5 = 257, PDB_CV_X86_YMM5H = 265,
|
|
PDB_CV_X86_YMM6 = 258, PDB_CV_X86_YMM6H = 266,
|
|
PDB_CV_X86_YMM7 = 259, PDB_CV_X86_YMM7H = 267,
|
|
|
|
/* AVX integer registers */
|
|
|
|
PDB_CV_X86_YMM0I0 = 268, PDB_CV_X86_YMM4I0 = 284,
|
|
PDB_CV_X86_YMM0I1 = 269, PDB_CV_X86_YMM4I1 = 285,
|
|
PDB_CV_X86_YMM0I2 = 270, PDB_CV_X86_YMM4I2 = 286,
|
|
PDB_CV_X86_YMM0I3 = 271, PDB_CV_X86_YMM4I3 = 287,
|
|
PDB_CV_X86_YMM1I0 = 272, PDB_CV_X86_YMM5I0 = 288,
|
|
PDB_CV_X86_YMM1I1 = 273, PDB_CV_X86_YMM5I1 = 289,
|
|
PDB_CV_X86_YMM1I2 = 274, PDB_CV_X86_YMM5I2 = 290,
|
|
PDB_CV_X86_YMM1I3 = 275, PDB_CV_X86_YMM5I3 = 291,
|
|
PDB_CV_X86_YMM2I0 = 276, PDB_CV_X86_YMM6I0 = 292,
|
|
PDB_CV_X86_YMM2I1 = 277, PDB_CV_X86_YMM6I1 = 293,
|
|
PDB_CV_X86_YMM2I2 = 278, PDB_CV_X86_YMM6I2 = 294,
|
|
PDB_CV_X86_YMM2I3 = 279, PDB_CV_X86_YMM6I3 = 295,
|
|
PDB_CV_X86_YMM3I0 = 280, PDB_CV_X86_YMM7I0 = 296,
|
|
PDB_CV_X86_YMM3I1 = 281, PDB_CV_X86_YMM7I1 = 297,
|
|
PDB_CV_X86_YMM3I2 = 282, PDB_CV_X86_YMM7I2 = 298,
|
|
PDB_CV_X86_YMM3I3 = 283, PDB_CV_X86_YMM7I3 = 299,
|
|
|
|
/* AVX floating-point single precise registers */
|
|
|
|
PDB_CV_X86_YMM0F0 = 300, PDB_CV_X86_YMM4F0 = 332,
|
|
PDB_CV_X86_YMM0F1 = 301, PDB_CV_X86_YMM4F1 = 333,
|
|
PDB_CV_X86_YMM0F2 = 302, PDB_CV_X86_YMM4F2 = 334,
|
|
PDB_CV_X86_YMM0F3 = 303, PDB_CV_X86_YMM4F3 = 335,
|
|
PDB_CV_X86_YMM0F4 = 304, PDB_CV_X86_YMM4F4 = 336,
|
|
PDB_CV_X86_YMM0F5 = 305, PDB_CV_X86_YMM4F5 = 337,
|
|
PDB_CV_X86_YMM0F6 = 306, PDB_CV_X86_YMM4F6 = 338,
|
|
PDB_CV_X86_YMM0F7 = 307, PDB_CV_X86_YMM4F7 = 339,
|
|
PDB_CV_X86_YMM1F0 = 308, PDB_CV_X86_YMM5F0 = 340,
|
|
PDB_CV_X86_YMM1F1 = 309, PDB_CV_X86_YMM5F1 = 341,
|
|
PDB_CV_X86_YMM1F2 = 310, PDB_CV_X86_YMM5F2 = 342,
|
|
PDB_CV_X86_YMM1F3 = 311, PDB_CV_X86_YMM5F3 = 343,
|
|
PDB_CV_X86_YMM1F4 = 312, PDB_CV_X86_YMM5F4 = 344,
|
|
PDB_CV_X86_YMM1F5 = 313, PDB_CV_X86_YMM5F5 = 345,
|
|
PDB_CV_X86_YMM1F6 = 314, PDB_CV_X86_YMM5F6 = 346,
|
|
PDB_CV_X86_YMM1F7 = 315, PDB_CV_X86_YMM5F7 = 347,
|
|
PDB_CV_X86_YMM2F0 = 316, PDB_CV_X86_YMM6F0 = 348,
|
|
PDB_CV_X86_YMM2F1 = 317, PDB_CV_X86_YMM6F1 = 349,
|
|
PDB_CV_X86_YMM2F2 = 318, PDB_CV_X86_YMM6F2 = 350,
|
|
PDB_CV_X86_YMM2F3 = 319, PDB_CV_X86_YMM6F3 = 351,
|
|
PDB_CV_X86_YMM2F4 = 320, PDB_CV_X86_YMM6F4 = 352,
|
|
PDB_CV_X86_YMM2F5 = 321, PDB_CV_X86_YMM6F5 = 353,
|
|
PDB_CV_X86_YMM2F6 = 322, PDB_CV_X86_YMM6F6 = 354,
|
|
PDB_CV_X86_YMM2F7 = 323, PDB_CV_X86_YMM6F7 = 355,
|
|
PDB_CV_X86_YMM3F0 = 324, PDB_CV_X86_YMM7F0 = 356,
|
|
PDB_CV_X86_YMM3F1 = 325, PDB_CV_X86_YMM7F1 = 357,
|
|
PDB_CV_X86_YMM3F2 = 326, PDB_CV_X86_YMM7F2 = 358,
|
|
PDB_CV_X86_YMM3F3 = 327, PDB_CV_X86_YMM7F3 = 359,
|
|
PDB_CV_X86_YMM3F4 = 328, PDB_CV_X86_YMM7F4 = 360,
|
|
PDB_CV_X86_YMM3F5 = 329, PDB_CV_X86_YMM7F5 = 361,
|
|
PDB_CV_X86_YMM3F6 = 330, PDB_CV_X86_YMM7F6 = 362,
|
|
PDB_CV_X86_YMM3F7 = 331, PDB_CV_X86_YMM7F7 = 363,
|
|
|
|
/* AVX floating-point double precise registers */
|
|
|
|
PDB_CV_X86_YMM0D0 = 364, PDB_CV_X86_YMM4D0 = 380,
|
|
PDB_CV_X86_YMM0D1 = 365, PDB_CV_X86_YMM4D1 = 381,
|
|
PDB_CV_X86_YMM0D2 = 366, PDB_CV_X86_YMM4D2 = 382,
|
|
PDB_CV_X86_YMM0D3 = 367, PDB_CV_X86_YMM4D3 = 383,
|
|
PDB_CV_X86_YMM1D0 = 368, PDB_CV_X86_YMM5D0 = 384,
|
|
PDB_CV_X86_YMM1D1 = 369, PDB_CV_X86_YMM5D1 = 385,
|
|
PDB_CV_X86_YMM1D2 = 370, PDB_CV_X86_YMM5D2 = 386,
|
|
PDB_CV_X86_YMM1D3 = 371, PDB_CV_X86_YMM5D3 = 387,
|
|
PDB_CV_X86_YMM2D0 = 372, PDB_CV_X86_YMM6D0 = 388,
|
|
PDB_CV_X86_YMM2D1 = 373, PDB_CV_X86_YMM6D1 = 389,
|
|
PDB_CV_X86_YMM2D2 = 374, PDB_CV_X86_YMM6D2 = 390,
|
|
PDB_CV_X86_YMM2D3 = 375, PDB_CV_X86_YMM6D3 = 391,
|
|
PDB_CV_X86_YMM3D0 = 376, PDB_CV_X86_YMM7D0 = 392,
|
|
PDB_CV_X86_YMM3D1 = 377, PDB_CV_X86_YMM7D1 = 393,
|
|
PDB_CV_X86_YMM3D2 = 378, PDB_CV_X86_YMM7D2 = 394,
|
|
PDB_CV_X86_YMM3D3 = 379, PDB_CV_X86_YMM7D3 = 395,
|
|
|
|
/* AMD64 registers */
|
|
|
|
PDB_CV_X64_AL = 1, PDB_CV_X64_ECX = 18,
|
|
PDB_CV_X64_CL = 2, PDB_CV_X64_EDX = 19,
|
|
PDB_CV_X64_DL = 3, PDB_CV_X64_EBX = 20,
|
|
PDB_CV_X64_BL = 4, PDB_CV_X64_ESP = 21,
|
|
PDB_CV_X64_AH = 5, PDB_CV_X64_EBP = 22,
|
|
PDB_CV_X64_CH = 6, PDB_CV_X64_ESI = 23,
|
|
PDB_CV_X64_DH = 7, PDB_CV_X64_EDI = 24,
|
|
PDB_CV_X64_BH = 8, PDB_CV_X64_ES = 25,
|
|
PDB_CV_X64_AX = 9, PDB_CV_X64_CS = 26,
|
|
PDB_CV_X64_CX = 10, PDB_CV_X64_SS = 27,
|
|
PDB_CV_X64_DX = 11, PDB_CV_X64_DS = 28,
|
|
PDB_CV_X64_BX = 12, PDB_CV_X64_FS = 29,
|
|
PDB_CV_X64_SP = 13, PDB_CV_X64_GS = 30,
|
|
PDB_CV_X64_BP = 14, PDB_CV_X64_FLAGS = 32,
|
|
PDB_CV_X64_SI = 15, PDB_CV_X64_RIP = 33,
|
|
PDB_CV_X64_DI = 16, PDB_CV_X64_EFLAGS = 34,
|
|
PDB_CV_X64_EAX = 17,
|
|
|
|
/* Control registers */
|
|
|
|
PDB_CV_X64_CR0 = 80,
|
|
PDB_CV_X64_CR1 = 81,
|
|
PDB_CV_X64_CR2 = 82,
|
|
PDB_CV_X64_CR3 = 83,
|
|
PDB_CV_X64_CR4 = 84,
|
|
PDB_CV_X64_CR8 = 88,
|
|
|
|
/* Debug registers */
|
|
|
|
PDB_CV_X64_DR0 = 90, PDB_CV_X64_DR8 = 98,
|
|
PDB_CV_X64_DR1 = 91, PDB_CV_X64_DR9 = 99,
|
|
PDB_CV_X64_DR2 = 92, PDB_CV_X64_DR10 = 100,
|
|
PDB_CV_X64_DR3 = 93, PDB_CV_X64_DR11 = 101,
|
|
PDB_CV_X64_DR4 = 94, PDB_CV_X64_DR12 = 102,
|
|
PDB_CV_X64_DR5 = 95, PDB_CV_X64_DR13 = 103,
|
|
PDB_CV_X64_DR6 = 96, PDB_CV_X64_DR14 = 104,
|
|
PDB_CV_X64_DR7 = 97, PDB_CV_X64_DR15 = 105,
|
|
|
|
PDB_CV_X64_GDTR = 110, PDB_CV_X64_IDTL = 113,
|
|
PDB_CV_X64_GDTL = 111, PDB_CV_X64_LDTR = 114,
|
|
PDB_CV_X64_IDTR = 112, PDB_CV_X64_TR = 115,
|
|
|
|
PDB_CV_X64_ST0 = 128, PDB_CV_X64_STAT = 137,
|
|
PDB_CV_X64_ST1 = 129, PDB_CV_X64_TAG = 138,
|
|
PDB_CV_X64_ST2 = 130, PDB_CV_X64_FPIP = 139,
|
|
PDB_CV_X64_ST3 = 131, PDB_CV_X64_FPCS = 140,
|
|
PDB_CV_X64_ST4 = 132, PDB_CV_X64_FPDO = 141,
|
|
PDB_CV_X64_ST5 = 133, PDB_CV_X64_FPDS = 142,
|
|
PDB_CV_X64_ST6 = 134, PDB_CV_X64_ISEM = 143,
|
|
PDB_CV_X64_ST7 = 135, PDB_CV_X64_FPEIP = 144,
|
|
PDB_CV_X64_CTRL = 136, PDB_CV_X64_FPEDO = 145,
|
|
|
|
PDB_CV_X64_MM0 = 146, PDB_CV_X64_MM4 = 150,
|
|
PDB_CV_X64_MM1 = 147, PDB_CV_X64_MM5 = 151,
|
|
PDB_CV_X64_MM2 = 148, PDB_CV_X64_MM6 = 152,
|
|
PDB_CV_X64_MM3 = 149, PDB_CV_X64_MM7 = 153,
|
|
|
|
PDB_CV_X64_XMM0 = 154, PDB_CV_X64_XMM4 = 158,
|
|
PDB_CV_X64_XMM1 = 155, PDB_CV_X64_XMM5 = 159,
|
|
PDB_CV_X64_XMM2 = 156, PDB_CV_X64_XMM6 = 160,
|
|
PDB_CV_X64_XMM3 = 157, PDB_CV_X64_XMM7 = 161,
|
|
|
|
PDB_CV_X64_XMM0_0 = 162, PDB_CV_X64_XMM2_0 = 170, PDB_CV_X64_XMM4_0 = 178, PDB_CV_X64_XMM6_0 = 186,
|
|
PDB_CV_X64_XMM0_1 = 163, PDB_CV_X64_XMM2_1 = 171, PDB_CV_X64_XMM4_1 = 179, PDB_CV_X64_XMM6_1 = 187,
|
|
PDB_CV_X64_XMM0_2 = 164, PDB_CV_X64_XMM2_2 = 172, PDB_CV_X64_XMM4_2 = 180, PDB_CV_X64_XMM6_2 = 188,
|
|
PDB_CV_X64_XMM0_3 = 165, PDB_CV_X64_XMM2_3 = 173, PDB_CV_X64_XMM4_3 = 181, PDB_CV_X64_XMM6_3 = 189,
|
|
PDB_CV_X64_XMM1_0 = 166, PDB_CV_X64_XMM3_0 = 174, PDB_CV_X64_XMM5_0 = 182, PDB_CV_X64_XMM7_0 = 190,
|
|
PDB_CV_X64_XMM1_1 = 167, PDB_CV_X64_XMM3_1 = 175, PDB_CV_X64_XMM5_1 = 183, PDB_CV_X64_XMM7_1 = 191,
|
|
PDB_CV_X64_XMM1_2 = 168, PDB_CV_X64_XMM3_2 = 176, PDB_CV_X64_XMM5_2 = 184, PDB_CV_X64_XMM7_2 = 192,
|
|
PDB_CV_X64_XMM1_3 = 169, PDB_CV_X64_XMM3_3 = 177, PDB_CV_X64_XMM5_3 = 185, PDB_CV_X64_XMM7_3 = 193,
|
|
|
|
PDB_CV_X64_XMM0L = 194, PDB_CV_X64_XMM4L = 198,
|
|
PDB_CV_X64_XMM1L = 195, PDB_CV_X64_XMM5L = 199,
|
|
PDB_CV_X64_XMM2L = 196, PDB_CV_X64_XMM6L = 200,
|
|
PDB_CV_X64_XMM3L = 197, PDB_CV_X64_XMM7L = 201,
|
|
|
|
PDB_CV_X64_XMM0H = 202, PDB_CV_X64_XMM4H = 206,
|
|
PDB_CV_X64_XMM1H = 203, PDB_CV_X64_XMM5H = 207,
|
|
PDB_CV_X64_XMM2H = 204, PDB_CV_X64_XMM6H = 208,
|
|
PDB_CV_X64_XMM3H = 205, PDB_CV_X64_XMM7H = 209,
|
|
|
|
/* XMM status register */
|
|
PDB_CV_X64_MXCSR = 211,
|
|
|
|
/* XMM sub-registers (WNI integer) */
|
|
PDB_CV_X64_EMM0L = 220, PDB_CV_X64_EMM4L = 224,
|
|
PDB_CV_X64_EMM1L = 221, PDB_CV_X64_EMM5L = 225,
|
|
PDB_CV_X64_EMM2L = 222, PDB_CV_X64_EMM6L = 226,
|
|
PDB_CV_X64_EMM3L = 223, PDB_CV_X64_EMM7L = 227,
|
|
|
|
PDB_CV_X64_EMM0H = 228, PDB_CV_X64_EMM4H = 232,
|
|
PDB_CV_X64_EMM1H = 229, PDB_CV_X64_EMM5H = 233,
|
|
PDB_CV_X64_EMM2H = 230, PDB_CV_X64_EMM6H = 234,
|
|
PDB_CV_X64_EMM3H = 231, PDB_CV_X64_EMM7H = 235,
|
|
|
|
/* do not change the order of these regs, first one must be even too */
|
|
|
|
PDB_CV_X64_MM00 = 236, PDB_CV_X64_MM40 = 244,
|
|
PDB_CV_X64_MM01 = 237, PDB_CV_X64_MM41 = 245,
|
|
PDB_CV_X64_MM10 = 238, PDB_CV_X64_MM50 = 246,
|
|
PDB_CV_X64_MM11 = 239, PDB_CV_X64_MM51 = 247,
|
|
PDB_CV_X64_MM20 = 240, PDB_CV_X64_MM60 = 248,
|
|
PDB_CV_X64_MM21 = 241, PDB_CV_X64_MM61 = 249,
|
|
PDB_CV_X64_MM30 = 242, PDB_CV_X64_MM70 = 250,
|
|
PDB_CV_X64_MM31 = 243, PDB_CV_X64_MM71 = 251,
|
|
|
|
PDB_CV_X64_XMM8 = 252, PDB_CV_X64_XMM12 = 256,
|
|
PDB_CV_X64_XMM9 = 253, PDB_CV_X64_XMM13 = 257,
|
|
PDB_CV_X64_XMM10 = 254, PDB_CV_X64_XMM14 = 258,
|
|
PDB_CV_X64_XMM11 = 255, PDB_CV_X64_XMM15 = 259,
|
|
|
|
PDB_CV_X64_XMM8_0 = 260, PDB_CV_X64_XMM12_0 = 276,
|
|
PDB_CV_X64_XMM8_1 = 261, PDB_CV_X64_XMM12_1 = 277,
|
|
PDB_CV_X64_XMM8_2 = 262, PDB_CV_X64_XMM12_2 = 278,
|
|
PDB_CV_X64_XMM8_3 = 263, PDB_CV_X64_XMM12_3 = 279,
|
|
PDB_CV_X64_XMM9_0 = 264, PDB_CV_X64_XMM13_0 = 280,
|
|
PDB_CV_X64_XMM9_1 = 265, PDB_CV_X64_XMM13_1 = 281,
|
|
PDB_CV_X64_XMM9_2 = 266, PDB_CV_X64_XMM13_2 = 282,
|
|
PDB_CV_X64_XMM9_3 = 267, PDB_CV_X64_XMM13_3 = 283,
|
|
PDB_CV_X64_XMM10_0 = 268, PDB_CV_X64_XMM14_0 = 284,
|
|
PDB_CV_X64_XMM10_1 = 269, PDB_CV_X64_XMM14_1 = 285,
|
|
PDB_CV_X64_XMM10_2 = 270, PDB_CV_X64_XMM14_2 = 286,
|
|
PDB_CV_X64_XMM10_3 = 271, PDB_CV_X64_XMM14_3 = 287,
|
|
PDB_CV_X64_XMM11_0 = 272, PDB_CV_X64_XMM15_0 = 288,
|
|
PDB_CV_X64_XMM11_1 = 273, PDB_CV_X64_XMM15_1 = 289,
|
|
PDB_CV_X64_XMM11_2 = 274, PDB_CV_X64_XMM15_2 = 290,
|
|
PDB_CV_X64_XMM11_3 = 275, PDB_CV_X64_XMM15_3 = 291,
|
|
|
|
PDB_CV_X64_XMM8L = 292, PDB_CV_X64_XMM12L = 296,
|
|
PDB_CV_X64_XMM9L = 293, PDB_CV_X64_XMM13L = 297,
|
|
PDB_CV_X64_XMM10L = 294, PDB_CV_X64_XMM14L = 298,
|
|
PDB_CV_X64_XMM11L = 295, PDB_CV_X64_XMM15L = 299,
|
|
|
|
PDB_CV_X64_XMM8H = 300, PDB_CV_X64_XMM12H = 304,
|
|
PDB_CV_X64_XMM9H = 301, PDB_CV_X64_XMM13H = 305,
|
|
PDB_CV_X64_XMM10H = 302, PDB_CV_X64_XMM14H = 306,
|
|
PDB_CV_X64_XMM11H = 303, PDB_CV_X64_XMM15H = 307,
|
|
|
|
/* XMM sub-registers (WNI integer) */
|
|
|
|
PDB_CV_X64_EMM8L = 308, PDB_CV_X64_EMM12L = 312,
|
|
PDB_CV_X64_EMM9L = 309, PDB_CV_X64_EMM13L = 313,
|
|
PDB_CV_X64_EMM10L = 310, PDB_CV_X64_EMM14L = 314,
|
|
PDB_CV_X64_EMM11L = 311, PDB_CV_X64_EMM15L = 315,
|
|
|
|
PDB_CV_X64_EMM8H = 316, PDB_CV_X64_EMM12H = 320,
|
|
PDB_CV_X64_EMM9H = 317, PDB_CV_X64_EMM13H = 321,
|
|
PDB_CV_X64_EMM10H = 318, PDB_CV_X64_EMM14H = 322,
|
|
PDB_CV_X64_EMM11H = 319, PDB_CV_X64_EMM15H = 323,
|
|
|
|
/* Low byte forms of some standard registers */
|
|
PDB_CV_X64_SIL = 324, PDB_CV_X64_BPL = 326,
|
|
PDB_CV_X64_DIL = 325, PDB_CV_X64_SPL = 327,
|
|
|
|
/* 64-bit regular registers */
|
|
PDB_CV_X64_RAX = 328, PDB_CV_X64_RSP = 335,
|
|
PDB_CV_X64_RSI = 332, PDB_CV_X64_RBX = 329,
|
|
PDB_CV_X64_RDI = 333, PDB_CV_X64_RCX = 330,
|
|
PDB_CV_X64_RBP = 334, PDB_CV_X64_RDX = 331,
|
|
|
|
/* 64-bit integer registers with 8-, 16-, and 32-bit forms (B, W, and D) */
|
|
PDB_CV_X64_R8 = 336, PDB_CV_X64_R12 = 340,
|
|
PDB_CV_X64_R9 = 337, PDB_CV_X64_R13 = 341,
|
|
PDB_CV_X64_R10 = 338, PDB_CV_X64_R14 = 342,
|
|
PDB_CV_X64_R11 = 339, PDB_CV_X64_R15 = 343,
|
|
|
|
PDB_CV_X64_R8B = 344, PDB_CV_X64_R12B = 348,
|
|
PDB_CV_X64_R9B = 345, PDB_CV_X64_R13B = 349,
|
|
PDB_CV_X64_R10B = 346, PDB_CV_X64_R14B = 350,
|
|
PDB_CV_X64_R11B = 347, PDB_CV_X64_R15B = 351,
|
|
|
|
PDB_CV_X64_R8W = 352, PDB_CV_X64_R12W = 356,
|
|
PDB_CV_X64_R9W = 353, PDB_CV_X64_R13W = 357,
|
|
PDB_CV_X64_R10W = 354, PDB_CV_X64_R14W = 358,
|
|
PDB_CV_X64_R11W = 355, PDB_CV_X64_R15W = 359,
|
|
|
|
PDB_CV_X64_R8D = 360, PDB_CV_X64_R12D = 364,
|
|
PDB_CV_X64_R9D = 361, PDB_CV_X64_R13D = 365,
|
|
PDB_CV_X64_R10D = 362, PDB_CV_X64_R14D = 366,
|
|
PDB_CV_X64_R11D = 363, PDB_CV_X64_R15D = 367,
|
|
|
|
/* AVX registers 256 bits */
|
|
|
|
PDB_CV_X64_YMM0 = 368, PDB_CV_X64_YMM8 = 376,
|
|
PDB_CV_X64_YMM1 = 369, PDB_CV_X64_YMM9 = 377,
|
|
PDB_CV_X64_YMM2 = 370, PDB_CV_X64_YMM10 = 378,
|
|
PDB_CV_X64_YMM3 = 371, PDB_CV_X64_YMM11 = 379,
|
|
PDB_CV_X64_YMM4 = 372, PDB_CV_X64_YMM12 = 380,
|
|
PDB_CV_X64_YMM5 = 373, PDB_CV_X64_YMM13 = 381,
|
|
PDB_CV_X64_YMM6 = 374, PDB_CV_X64_YMM14 = 382,
|
|
PDB_CV_X64_YMM7 = 375, PDB_CV_X64_YMM15 = 383,
|
|
|
|
/* AVX registers upper 128 bits */
|
|
PDB_CV_X64_YMM0H = 384, PDB_CV_X64_YMM8H = 392,
|
|
PDB_CV_X64_YMM1H = 385, PDB_CV_X64_YMM9H = 393,
|
|
PDB_CV_X64_YMM2H = 386, PDB_CV_X64_YMM10H = 394,
|
|
PDB_CV_X64_YMM3H = 387, PDB_CV_X64_YMM11H = 395,
|
|
PDB_CV_X64_YMM4H = 388, PDB_CV_X64_YMM12H = 396,
|
|
PDB_CV_X64_YMM5H = 389, PDB_CV_X64_YMM13H = 397,
|
|
PDB_CV_X64_YMM6H = 390, PDB_CV_X64_YMM14H = 398,
|
|
PDB_CV_X64_YMM7H = 391, PDB_CV_X64_YMM15H = 399,
|
|
|
|
/* Lower/upper 8 bytes of XMM registers. Unlike CV_AMD64_XMM<regnum><H/L>, these
|
|
* values reprsesent the bit patterns of the registers as 64-bit integers, not
|
|
* the representation of these registers as a double. */
|
|
PDB_CV_X64_XMM0IL = 400, PDB_CV_X64_XMM8IL = 408,
|
|
PDB_CV_X64_XMM1IL = 401, PDB_CV_X64_XMM9IL = 409,
|
|
PDB_CV_X64_XMM2IL = 402, PDB_CV_X64_XMM10IL = 410,
|
|
PDB_CV_X64_XMM3IL = 403, PDB_CV_X64_XMM11IL = 411,
|
|
PDB_CV_X64_XMM4IL = 404, PDB_CV_X64_XMM12IL = 412,
|
|
PDB_CV_X64_XMM5IL = 405, PDB_CV_X64_XMM13IL = 413,
|
|
PDB_CV_X64_XMM6IL = 406, PDB_CV_X64_XMM14IL = 414,
|
|
PDB_CV_X64_XMM7IL = 407, PDB_CV_X64_XMM15IL = 415,
|
|
|
|
PDB_CV_X64_XMM0IH = 416, PDB_CV_X64_XMM8IH = 424,
|
|
PDB_CV_X64_XMM1IH = 417, PDB_CV_X64_XMM9IH = 425,
|
|
PDB_CV_X64_XMM2IH = 418, PDB_CV_X64_XMM10IH = 426,
|
|
PDB_CV_X64_XMM3IH = 419, PDB_CV_X64_XMM11IH = 427,
|
|
PDB_CV_X64_XMM4IH = 420, PDB_CV_X64_XMM12IH = 428,
|
|
PDB_CV_X64_XMM5IH = 421, PDB_CV_X64_XMM13IH = 429,
|
|
PDB_CV_X64_XMM6IH = 422, PDB_CV_X64_XMM14IH = 430,
|
|
PDB_CV_X64_XMM7IH = 423, PDB_CV_X64_XMM15IH = 431,
|
|
|
|
/* AVX integer registers */
|
|
|
|
PDB_CV_X64_YMM0I0 = 432, PDB_CV_X64_YMM4I0 = 448, PDB_CV_X64_YMM8I0 = 464, PDB_CV_X64_YMM12I0 = 480,
|
|
PDB_CV_X64_YMM0I1 = 433, PDB_CV_X64_YMM4I1 = 449, PDB_CV_X64_YMM8I1 = 465, PDB_CV_X64_YMM12I1 = 481,
|
|
PDB_CV_X64_YMM0I2 = 434, PDB_CV_X64_YMM4I2 = 450, PDB_CV_X64_YMM8I2 = 466, PDB_CV_X64_YMM12I2 = 482,
|
|
PDB_CV_X64_YMM0I3 = 435, PDB_CV_X64_YMM4I3 = 451, PDB_CV_X64_YMM8I3 = 467, PDB_CV_X64_YMM12I3 = 483,
|
|
PDB_CV_X64_YMM1I0 = 436, PDB_CV_X64_YMM5I0 = 452, PDB_CV_X64_YMM9I0 = 468, PDB_CV_X64_YMM13I0 = 484,
|
|
PDB_CV_X64_YMM1I1 = 437, PDB_CV_X64_YMM5I1 = 453, PDB_CV_X64_YMM9I1 = 469, PDB_CV_X64_YMM13I1 = 485,
|
|
PDB_CV_X64_YMM1I2 = 438, PDB_CV_X64_YMM5I2 = 454, PDB_CV_X64_YMM9I2 = 470, PDB_CV_X64_YMM13I2 = 486,
|
|
PDB_CV_X64_YMM1I3 = 439, PDB_CV_X64_YMM5I3 = 455, PDB_CV_X64_YMM9I3 = 471, PDB_CV_X64_YMM13I3 = 487,
|
|
PDB_CV_X64_YMM2I0 = 440, PDB_CV_X64_YMM6I0 = 456, PDB_CV_X64_YMM10I0 = 472, PDB_CV_X64_YMM14I0 = 488,
|
|
PDB_CV_X64_YMM2I1 = 441, PDB_CV_X64_YMM6I1 = 457, PDB_CV_X64_YMM10I1 = 473, PDB_CV_X64_YMM14I1 = 489,
|
|
PDB_CV_X64_YMM2I2 = 442, PDB_CV_X64_YMM6I2 = 458, PDB_CV_X64_YMM10I2 = 474, PDB_CV_X64_YMM14I2 = 490,
|
|
PDB_CV_X64_YMM2I3 = 443, PDB_CV_X64_YMM6I3 = 459, PDB_CV_X64_YMM10I3 = 475, PDB_CV_X64_YMM14I3 = 491,
|
|
PDB_CV_X64_YMM3I0 = 444, PDB_CV_X64_YMM7I0 = 460, PDB_CV_X64_YMM11I0 = 476, PDB_CV_X64_YMM15I0 = 492,
|
|
PDB_CV_X64_YMM3I1 = 445, PDB_CV_X64_YMM7I1 = 461, PDB_CV_X64_YMM11I1 = 477, PDB_CV_X64_YMM15I1 = 493,
|
|
PDB_CV_X64_YMM3I2 = 446, PDB_CV_X64_YMM7I2 = 462, PDB_CV_X64_YMM11I2 = 478, PDB_CV_X64_YMM15I2 = 494,
|
|
PDB_CV_X64_YMM3I3 = 447, PDB_CV_X64_YMM7I3 = 463, PDB_CV_X64_YMM11I3 = 479, PDB_CV_X64_YMM15I3 = 495,
|
|
|
|
/* AVX floating-point single precise registers */
|
|
|
|
PDB_CV_X64_YMM0F0 = 496, PDB_CV_X64_YMM4F1 = 529, PDB_CV_X64_YMM8F2 = 562, PDB_CV_X64_YMM12F3 = 595,
|
|
PDB_CV_X64_YMM0F1 = 497, PDB_CV_X64_YMM4F2 = 530, PDB_CV_X64_YMM8F3 = 563, PDB_CV_X64_YMM12F4 = 596,
|
|
PDB_CV_X64_YMM0F2 = 498, PDB_CV_X64_YMM4F3 = 531, PDB_CV_X64_YMM8F4 = 564, PDB_CV_X64_YMM12F5 = 597,
|
|
PDB_CV_X64_YMM0F3 = 499, PDB_CV_X64_YMM4F4 = 532, PDB_CV_X64_YMM8F5 = 565, PDB_CV_X64_YMM12F6 = 598,
|
|
PDB_CV_X64_YMM0F4 = 500, PDB_CV_X64_YMM4F5 = 533, PDB_CV_X64_YMM8F6 = 566, PDB_CV_X64_YMM12F7 = 599,
|
|
PDB_CV_X64_YMM0F5 = 501, PDB_CV_X64_YMM4F6 = 534, PDB_CV_X64_YMM8F7 = 567, PDB_CV_X64_YMM13F0 = 600,
|
|
PDB_CV_X64_YMM0F6 = 502, PDB_CV_X64_YMM4F7 = 535, PDB_CV_X64_YMM9F0 = 568, PDB_CV_X64_YMM13F1 = 601,
|
|
PDB_CV_X64_YMM0F7 = 503, PDB_CV_X64_YMM5F0 = 536, PDB_CV_X64_YMM9F1 = 569, PDB_CV_X64_YMM13F2 = 602,
|
|
PDB_CV_X64_YMM1F0 = 504, PDB_CV_X64_YMM5F1 = 537, PDB_CV_X64_YMM9F2 = 570, PDB_CV_X64_YMM13F3 = 603,
|
|
PDB_CV_X64_YMM1F1 = 505, PDB_CV_X64_YMM5F2 = 538, PDB_CV_X64_YMM9F3 = 571, PDB_CV_X64_YMM13F4 = 604,
|
|
PDB_CV_X64_YMM1F2 = 506, PDB_CV_X64_YMM5F3 = 539, PDB_CV_X64_YMM9F4 = 572, PDB_CV_X64_YMM13F5 = 605,
|
|
PDB_CV_X64_YMM1F3 = 507, PDB_CV_X64_YMM5F4 = 540, PDB_CV_X64_YMM9F5 = 573, PDB_CV_X64_YMM13F6 = 606,
|
|
PDB_CV_X64_YMM1F4 = 508, PDB_CV_X64_YMM5F5 = 541, PDB_CV_X64_YMM9F6 = 574, PDB_CV_X64_YMM13F7 = 607,
|
|
PDB_CV_X64_YMM1F5 = 509, PDB_CV_X64_YMM5F6 = 542, PDB_CV_X64_YMM9F7 = 575, PDB_CV_X64_YMM14F0 = 608,
|
|
PDB_CV_X64_YMM1F6 = 510, PDB_CV_X64_YMM5F7 = 543, PDB_CV_X64_YMM10F0 = 576, PDB_CV_X64_YMM14F1 = 609,
|
|
PDB_CV_X64_YMM1F7 = 511, PDB_CV_X64_YMM6F0 = 544, PDB_CV_X64_YMM10F1 = 577, PDB_CV_X64_YMM14F2 = 610,
|
|
PDB_CV_X64_YMM2F0 = 512, PDB_CV_X64_YMM6F1 = 545, PDB_CV_X64_YMM10F2 = 578, PDB_CV_X64_YMM14F3 = 611,
|
|
PDB_CV_X64_YMM2F1 = 513, PDB_CV_X64_YMM6F2 = 546, PDB_CV_X64_YMM10F3 = 579, PDB_CV_X64_YMM14F4 = 612,
|
|
PDB_CV_X64_YMM2F2 = 514, PDB_CV_X64_YMM6F3 = 547, PDB_CV_X64_YMM10F4 = 580, PDB_CV_X64_YMM14F5 = 613,
|
|
PDB_CV_X64_YMM2F3 = 515, PDB_CV_X64_YMM6F4 = 548, PDB_CV_X64_YMM10F5 = 581, PDB_CV_X64_YMM14F6 = 614,
|
|
PDB_CV_X64_YMM2F4 = 516, PDB_CV_X64_YMM6F5 = 549, PDB_CV_X64_YMM10F6 = 582, PDB_CV_X64_YMM14F7 = 615,
|
|
PDB_CV_X64_YMM2F5 = 517, PDB_CV_X64_YMM6F6 = 550, PDB_CV_X64_YMM10F7 = 583, PDB_CV_X64_YMM15F0 = 616,
|
|
PDB_CV_X64_YMM2F6 = 518, PDB_CV_X64_YMM6F7 = 551, PDB_CV_X64_YMM11F0 = 584, PDB_CV_X64_YMM15F1 = 617,
|
|
PDB_CV_X64_YMM2F7 = 519, PDB_CV_X64_YMM7F0 = 552, PDB_CV_X64_YMM11F1 = 585, PDB_CV_X64_YMM15F2 = 618,
|
|
PDB_CV_X64_YMM3F0 = 520, PDB_CV_X64_YMM7F1 = 553, PDB_CV_X64_YMM11F2 = 586, PDB_CV_X64_YMM15F3 = 619,
|
|
PDB_CV_X64_YMM3F1 = 521, PDB_CV_X64_YMM7F2 = 554, PDB_CV_X64_YMM11F3 = 587, PDB_CV_X64_YMM15F4 = 620,
|
|
PDB_CV_X64_YMM3F2 = 522, PDB_CV_X64_YMM7F3 = 555, PDB_CV_X64_YMM11F4 = 588, PDB_CV_X64_YMM15F5 = 621,
|
|
PDB_CV_X64_YMM3F3 = 523, PDB_CV_X64_YMM7F4 = 556, PDB_CV_X64_YMM11F5 = 589, PDB_CV_X64_YMM15F6 = 622,
|
|
PDB_CV_X64_YMM3F4 = 524, PDB_CV_X64_YMM7F5 = 557, PDB_CV_X64_YMM11F6 = 590, PDB_CV_X64_YMM15F7 = 623,
|
|
PDB_CV_X64_YMM3F5 = 525, PDB_CV_X64_YMM7F6 = 558, PDB_CV_X64_YMM11F7 = 591,
|
|
PDB_CV_X64_YMM3F6 = 526, PDB_CV_X64_YMM7F7 = 559, PDB_CV_X64_YMM12F0 = 592,
|
|
PDB_CV_X64_YMM3F7 = 527, PDB_CV_X64_YMM8F0 = 560, PDB_CV_X64_YMM12F1 = 593,
|
|
PDB_CV_X64_YMM4F0 = 528, PDB_CV_X64_YMM8F1 = 561, PDB_CV_X64_YMM12F2 = 594,
|
|
|
|
/* AVX floating-point double precise registers */
|
|
|
|
PDB_CV_X64_YMM0D0 = 624, PDB_CV_X64_YMM8D0 = 656,
|
|
PDB_CV_X64_YMM0D1 = 625, PDB_CV_X64_YMM8D1 = 657,
|
|
PDB_CV_X64_YMM0D2 = 626, PDB_CV_X64_YMM8D2 = 658,
|
|
PDB_CV_X64_YMM0D3 = 627, PDB_CV_X64_YMM8D3 = 659,
|
|
PDB_CV_X64_YMM1D0 = 628, PDB_CV_X64_YMM9D0 = 660,
|
|
PDB_CV_X64_YMM1D1 = 629, PDB_CV_X64_YMM9D1 = 661,
|
|
PDB_CV_X64_YMM1D2 = 630, PDB_CV_X64_YMM9D2 = 662,
|
|
PDB_CV_X64_YMM1D3 = 631, PDB_CV_X64_YMM9D3 = 663,
|
|
PDB_CV_X64_YMM2D0 = 632, PDB_CV_X64_YMM10D0 = 664,
|
|
PDB_CV_X64_YMM2D1 = 633, PDB_CV_X64_YMM10D1 = 665,
|
|
PDB_CV_X64_YMM2D2 = 634, PDB_CV_X64_YMM10D2 = 666,
|
|
PDB_CV_X64_YMM2D3 = 635, PDB_CV_X64_YMM10D3 = 667,
|
|
PDB_CV_X64_YMM3D0 = 636, PDB_CV_X64_YMM11D0 = 668,
|
|
PDB_CV_X64_YMM3D1 = 637, PDB_CV_X64_YMM11D1 = 669,
|
|
PDB_CV_X64_YMM3D2 = 638, PDB_CV_X64_YMM11D2 = 670,
|
|
PDB_CV_X64_YMM3D3 = 639, PDB_CV_X64_YMM11D3 = 671,
|
|
PDB_CV_X64_YMM4D0 = 640, PDB_CV_X64_YMM12D0 = 672,
|
|
PDB_CV_X64_YMM4D1 = 641, PDB_CV_X64_YMM12D1 = 673,
|
|
PDB_CV_X64_YMM4D2 = 642, PDB_CV_X64_YMM12D2 = 674,
|
|
PDB_CV_X64_YMM4D3 = 643, PDB_CV_X64_YMM12D3 = 675,
|
|
PDB_CV_X64_YMM5D0 = 644, PDB_CV_X64_YMM13D0 = 676,
|
|
PDB_CV_X64_YMM5D1 = 645, PDB_CV_X64_YMM13D1 = 677,
|
|
PDB_CV_X64_YMM5D2 = 646, PDB_CV_X64_YMM13D2 = 678,
|
|
PDB_CV_X64_YMM5D3 = 647, PDB_CV_X64_YMM13D3 = 679,
|
|
PDB_CV_X64_YMM6D0 = 648, PDB_CV_X64_YMM14D0 = 680,
|
|
PDB_CV_X64_YMM6D1 = 649, PDB_CV_X64_YMM14D1 = 681,
|
|
PDB_CV_X64_YMM6D2 = 650, PDB_CV_X64_YMM14D2 = 682,
|
|
PDB_CV_X64_YMM6D3 = 651, PDB_CV_X64_YMM14D3 = 683,
|
|
PDB_CV_X64_YMM7D0 = 652, PDB_CV_X64_YMM15D0 = 684,
|
|
PDB_CV_X64_YMM7D1 = 653, PDB_CV_X64_YMM15D1 = 685,
|
|
PDB_CV_X64_YMM7D2 = 654, PDB_CV_X64_YMM15D2 = 686,
|
|
PDB_CV_X64_YMM7D3 = 655, PDB_CV_X64_YMM15D3 = 687,
|
|
|
|
PDB_CV_REG_MAX
|
|
} pdb_cv_reg_e;
|
|
|
|
typedef enum {
|
|
PDB_CV_HFA_NONE = 0,
|
|
PDB_CV_HFA_FLOAT = 1,
|
|
PDB_CV_HFA_DOUBLE = 2,
|
|
PDB_CV_HFA_OTHER = 3
|
|
} pdb_cv_hfa_e;
|
|
|
|
typedef enum {
|
|
PDB_CV_MOCOM_UDT_NONE = 0,
|
|
PDB_CV_MOCOM_UDT_REF = 1,
|
|
PDB_CV_MOCOM_UDT_VALUE = 2,
|
|
PDB_CV_MOCOM_UDT_INTERFACE = 3
|
|
} pdb_cv_mocom_udt_e;
|
|
|
|
#define PDB_CV_PROP_PACKED (1 << 0) /* syms_true if structure is packed */
|
|
#define PDB_CV_PROP_CTOR (1 << 1) /* syms_true if constructors or destructors present */
|
|
#define PDB_CV_PROP_OVLOPS (1 << 2) /* syms_true if overloaded operators present */
|
|
#define PDB_CV_PROP_ISNSESTED (1 << 3) /* syms_true if this is a nested class */
|
|
#define PDB_CV_PROP_CNESTED (1 << 4) /* syms_true if this class contains nested types */
|
|
#define PDB_CV_PROP_OPASSIGN (1 << 5) /* syms_true if overloaded assignment (=) */
|
|
#define PDB_CV_PROP_OPCAST (1 << 6) /* syms_true if casting methods */
|
|
#define PDB_CV_PROP_FWDREF (1 << 7) /* syms_true if forward reference (incomplete defn) */
|
|
#define PDB_CV_PROP_SCOPED (1 << 8) /* scoped definition */
|
|
#define PDB_CV_PROP_HAS_UNIQUE_NAME (1 << 9) /* syms_true if there is a decorated name following the regular name */
|
|
#define PDB_CV_PROP_SEALED (1 << 10 /* syms_true if class cannot be used as a base class */
|
|
#define PDB_CV_PROP_INTRINSIC (1 << 13)
|
|
/* Mask for the pdb_cv_hfa_e */
|
|
#define PDB_CV_PROP_HFA_MASK 0x1800
|
|
/* Mask for the pdb_cv_mocom_udt_e */
|
|
#define PDB_CV_PROP_MOCOM_MASK 0xC000
|
|
typedef U16 pdb_cv_prop_t;
|
|
|
|
/* Method attributes */
|
|
#define PDB_CV_FLDATTR_MPROP_VANILLA 0x0u
|
|
#define PDB_CV_FLDATTR_MPROP_VIRTUAL 0x1u
|
|
#define PDB_CV_FLDATTR_MPROP_STATIC 0x2u
|
|
#define PDB_CV_FLDATTR_MPROP_FRIEND 0x3u
|
|
#define PDB_CV_FLDATTR_MPROP_INTRO 0x4u
|
|
#define PDB_CV_FLDATTR_MPROP_PUREVIRT 0x5u
|
|
#define PDB_CV_FLDATTR_MPROP_PUREINTRO 0x6u
|
|
|
|
#define PDB_CV_FLDATTR_ACCESS_PRIVATE 0x1u
|
|
#define PDB_CV_FLDATTR_ACCESS_PROTECTED 0x2u
|
|
#define PDB_CV_FLDATTR_ACCESS_PUBLIC 0x3u
|
|
|
|
#define PDB_CV_FLDATTR_ACCESS_MASK(x) (((x) & 0x03u) >> 0u) /* access protection pdb_cv_access_t */
|
|
#define PDB_CV_FLDATTR_MPROP_MASK(x) (((x) & 0x1Cu) >> 2u) /* method properties pdb_cv_methodprop_t */
|
|
#define PDB_CV_FLDATTR_PSEUDO (1u << 6u) /* compiler generated fcn and does not exist */
|
|
#define PDB_CV_FLDATTR_NOINHERIT (1u << 7u) /* syms_true if class cannot be inherited */
|
|
#define PDB_CV_FLDATTR_NOCONSTRUCT (1u << 8u) /* syms_true if class cannot be constructed */
|
|
#define PDB_CV_FLDATTR_COMPGENX (1u << 9u) /* compiler generated fcn and does exist */
|
|
#define PDB_CV_FLDATTR_SEALED (1u << 10u) /* syms_true if method cannot be overridden */
|
|
typedef U16 pdb_cv_fldattr_t;
|
|
|
|
#define PDB_CV_MODIFIER_CONST (1u << 0u)
|
|
#define PDB_CV_MODIFIER_VOLATILE (1u << 1u)
|
|
#define PDB_CV_MODIFIER_UNALIGNED (1u << 2u)
|
|
typedef U16 pdb_cv_modifier_t;
|
|
|
|
typedef enum {
|
|
PDB_CV_PTR_MODE_PTR = 0x00, /* "normal" pointer */
|
|
PDB_CV_PTR_MODE_REF = 0x01, /* "old" reference */
|
|
PDB_CV_PTR_MODE_LVREF = 0x01, /* l-value reference */
|
|
PDB_CV_PTR_MODE_PMEM = 0x02, /* pointer to data member */
|
|
PDB_CV_PTR_MODE_PMFUNC = 0x03, /* pointer to member function */
|
|
PDB_CV_PTR_MODE_RVREF = 0x04, /* r-value reference */
|
|
PDB_CV_PTR_MODE_RESERVED= 0x05 /* first unused pointer mode */
|
|
} pdb_cv_ptrmode_e;
|
|
typedef u32 pdb_cv_ptrmode;
|
|
|
|
typedef enum {
|
|
PDB_CV_PTR_NEAR = 0x00, /* 16 bit pointer */
|
|
PDB_CV_PTR_FAR = 0x01, /* 16:16 far pointer */
|
|
PDB_CV_PTR_HUGE = 0x02, /* 16:16 huge pointer */
|
|
PDB_CV_PTR_BASE_SEG = 0x03, /* based on segment */
|
|
PDB_CV_PTR_BASE_VAL = 0x04, /* based on value of base */
|
|
PDB_CV_PTR_BASE_SEGVAL = 0x05, /* based on segment value of base */
|
|
PDB_CV_PTR_BASE_ADDR = 0x06, /* based on address of base */
|
|
PDB_CV_PTR_BASE_SEGADDR = 0x07, /* based on segment address of base */
|
|
PDB_CV_PTR_BASE_TYPE = 0x08, /* based on type */
|
|
PDB_CV_PTR_BASE_SELF = 0x09, /* based on self */
|
|
PDB_CV_PTR_NEAR32 = 0x0a, /* 32 bit pointer */
|
|
PDB_CV_PTR_FAR32 = 0x0b, /* 16:32 pointer */
|
|
PDB_CV_PTR_64 = 0x0c, /* 64 bit pointer */
|
|
PDB_CV_PTR_UNUSEDPTR = 0x0d /* first unused pointer type */
|
|
} pdb_cv_ptrtype_e;
|
|
typedef u32 pdb_cv_ptrtype;
|
|
|
|
/* ordinal specifying pointer type (pdb_cv_ptrtype_e) */
|
|
#define PDB_CV_PTR_ATTRIB_TYPE_MASK(x) (((x) & 0x1f) >> 0)
|
|
/* ordinal specifying pointer mode (pdb_cv_ptrmode_e) */
|
|
#define PDB_CV_PTR_ATTRIB_MODE_MASK(x) (((x) & 0xe0) >> 5)
|
|
/* size of pointer (in bytes) */
|
|
#define PDB_CV_PTR_ATTRIB_SIZE_MASK(x) (((x) & 0x7E000) >> 13)
|
|
/* syms_true if 0:32 pointer */
|
|
#define PDB_CV_PTR_ATTRIB_IS_FLAT (1 << 8)
|
|
/* TRUE if volatile pointer */
|
|
#define PDB_CV_PTR_ATTRIB_IS_VOLATILE (1 << 9)
|
|
/* TRUE if const pointer */
|
|
#define PDB_CV_PTR_ATTRIB_IS_CONST (1 << 10)
|
|
/* TRUE if unaligned pointer */
|
|
#define PDB_CV_PTR_ATTRIB_IS_UNALIGNED (1 << 11)
|
|
/* TRUE if restricted pointer (allow aggressive opts) */
|
|
#define PDB_CV_PTR_ATTRIB_IS_RESTRICTED (1 << 12)
|
|
/* TRUE if it is a MoCOM pointer (^ or %) */
|
|
#define PDB_CV_PTR_ATTRIB_IS_MOCOM (1 << 19)
|
|
/* TRUE if it is this pointer of member function with & ref-qualifier */
|
|
#define PDB_CV_PTR_ATTRIB_IS_LREF (1 << 20)
|
|
/* TRUE if it is this pointer of member function with && ref-qualifier */
|
|
#define PDB_CV_PTR_ATTRIB_IS_RREF (1 << 21)
|
|
typedef U32 pdb_cv_ptr_attrib_t;
|
|
|
|
/* syms_true if C++ style ReturnUDT */
|
|
#define PDB_CV_FUNCATTR_CXXRETURNUDT (1 << 0)
|
|
/* syms_true if func is an instance constructor */
|
|
#define PDB_CV_FUNCATTR_CTOR (1 << 1)
|
|
/* syms_true if func is an instance constructor of a class with virtual bases */
|
|
#define PDB_CV_FUNCATTR_CTORBASE
|
|
typedef U8 pdb_cv_funcattr_t;
|
|
|
|
typedef enum {
|
|
PDB_CV_CALL_NEAR_C = 0x00, /* near right to left push, caller pops stack */
|
|
PDB_CV_CALL_FAR_C = 0x01, /* far right to left push, caller pops stack */
|
|
PDB_CV_CALL_NEAR_PASCAL = 0x02, /* near left to right push, callee pops stack */
|
|
PDB_CV_CALL_FAR_PASCAL = 0x03, /* far left to right push, callee pops stack */
|
|
PDB_CV_CALL_NEAR_FAST = 0x04, /* near left to right push with regs, callee pops stack */
|
|
PDB_CV_CALL_FAR_FAST = 0x05, /* far left to right push with regs, callee pops stack */
|
|
PDB_CV_CALL_SKIPPED = 0x06, /* skipped (unused) call index */
|
|
PDB_CV_CALL_NEAR_STD = 0x07, /* near standard call */
|
|
PDB_CV_CALL_FAR_STD = 0x08, /* far standard call */
|
|
PDB_CV_CALL_NEAR_SYS = 0x09, /* near sys call */
|
|
PDB_CV_CALL_FAR_SYS = 0x0a, /* far sys call */
|
|
PDB_CV_CALL_THISCALL = 0x0b, /* this call (this passed in register) */
|
|
PDB_CV_CALL_MIPSCALL = 0x0c, /* Mips call */
|
|
PDB_CV_CALL_GENERIC = 0x0d, /* Generic call sequence */
|
|
PDB_CV_CALL_ALPHACALL = 0x0e, /* Alpha call */
|
|
PDB_CV_CALL_PPCCALL = 0x0f, /* PPC call */
|
|
PDB_CV_CALL_SHCALL = 0x10, /* Hitachi SuperH call */
|
|
PDB_CV_CALL_ARMCALL = 0x11, /* ARM call */
|
|
PDB_CV_CALL_AM33CALL = 0x12, /* AM33 call */
|
|
PDB_CV_CALL_TRICALL = 0x13, /* TriCore Call */
|
|
PDB_CV_CALL_SH5CALL = 0x14, /* Hitachi SuperH-5 call */
|
|
PDB_CV_CALL_M32RCALL = 0x15, /* M32R Call */
|
|
PDB_CV_CALL_CLRCALL = 0x16, /* clr call */
|
|
PDB_CV_CALL_INLINE = 0x17, /* Marker for routines always inlined and thus lacking a convention */
|
|
PDB_CV_CALL_NEAR_VECTOR = 0x18, /* near left to right push with regs, callee pops stack */
|
|
PDB_CV_CALL_RESERVED = 0x19 /* first unused call enumeration */
|
|
|
|
/* Do NOT add any more machine specific conventions. This is to be used for
|
|
* calling conventions in the source only (e.g. __cdecl, __stdcall). */
|
|
} pdb_cv_call_e;
|
|
|
|
#define PDB_CV_SIG_C6 0
|
|
|
|
#define PDB_CV_SIG_C7 1
|
|
/* C11 (vc5.x) */
|
|
#define PDB_CV_SIG_C11 2
|
|
/* C13 (vc7.x) */
|
|
#define PDB_CV_SIG_C13 4
|
|
|
|
#define PDB_CV_SIG_RESERVED 5
|
|
|
|
#define PDB_CV_SYM_LIST \
|
|
X(COMPILE, 0x0001) /* Compile flags symbol */ \
|
|
X(REGISTER_16t, 0x0002) /* Register variable */ \
|
|
X(CONSTANT_16t, 0x0003) /* constant symbol */ \
|
|
X(UDT_16t, 0x0004) /* User defined type */ \
|
|
X(SSEARCH, 0x0005) /* Start Search */ \
|
|
X(END, 0x0006) /* Block, procedure, "with" or thunk end */ \
|
|
X(SKIP, 0x0007) /* Reserve symbol space in $$Symbols table */ \
|
|
X(CVRESERVE, 0x0008) /* Reserved symbol for CV internal use */ \
|
|
X(OBJNAME_ST, 0x0009) /* path to object file name */ \
|
|
X(ENDARG, 0x000a) /* end of argument/return list */ \
|
|
X(COBOLUDT_16t, 0x000b) /* special UDT for cobol that does not symbol pack */ \
|
|
X(MANYREG_16t, 0x000c) /* multiple register variable */ \
|
|
X(RETURN, 0x000d) /* return description symbol */ \
|
|
X(ENTRYTHIS, 0x000e) /* description of this pointer on entry */ \
|
|
X(BPREL16, 0x0100) /* BP-relative */ \
|
|
X(LDATA16, 0x0101) /* Module-static symbol */ \
|
|
X(GDATA16, 0x0102) /* Global data symbol */ \
|
|
X(PUB16, 0x0103) /* a public symbol */ \
|
|
X(LPROC16, 0x0104) /* Local procedure start */ \
|
|
X(GPROC16, 0x0105) /* Global procedure start */ \
|
|
X(THUNK16, 0x0106) /* Thunk Start */ \
|
|
X(BLOCK16, 0x0107) /* block start */ \
|
|
X(WITH16, 0x0108) /* with start */ \
|
|
X(LABEL16, 0x0109) /* code label */ \
|
|
X(CEXMODEL16, 0x010a) /* change execution model */ \
|
|
X(VFTABLE16, 0x010b) /* address of virtual function table */ \
|
|
X(REGREL16, 0x010c) /* register relative address */ \
|
|
X(BPREL32_16t, 0x0200) /* BP-relative */ \
|
|
X(LDATA32_16t, 0x0201) /* Module-static symbol */ \
|
|
X(GDATA32_16t, 0x0202) /* Global data symbol */ \
|
|
X(PUB32_16t, 0x0203) /* a public symbol (CV internal reserved) */ \
|
|
X(LPROC32_16t, 0x0204) /* Local procedure start */ \
|
|
X(GPROC32_16t, 0x0205) /* Global procedure start */ \
|
|
X(THUNK32_ST, 0x0206) /* Thunk Start */ \
|
|
X(BLOCK32_ST, 0x0207) /* block start */ \
|
|
X(WITH32_ST, 0x0208) /* with start */ \
|
|
X(LABEL32_ST, 0x0209) /* code label */ \
|
|
X(CEXMODEL32, 0x020a) /* change execution model */ \
|
|
X(VFTABLE32_16t, 0x020b) /* address of virtual function table */ \
|
|
X(REGREL32_16t, 0x020c) /* register relative address */ \
|
|
X(LTHREAD32_16t, 0x020d) /* static thread storage */ \
|
|
X(GTHREAD32_16t, 0x020e) /* static thread storage */ \
|
|
X(SLINK32, 0x020f) /* static link for MIPS EH implementation */ \
|
|
X(LPROCMIPS_16t, 0x0300) /* Local procedure start */ \
|
|
X(GPROCMIPS_16t, 0x0301) /* Global procedure start */ \
|
|
X(PROCREF_ST, 0x0400) /* Reference to a procedure */ \
|
|
X(DATAREF_ST, 0x0401) /* Reference to data */ \
|
|
X(ALIGN, 0x0402) /* Used for page alignment of symbols */ \
|
|
X(LPROCREF_ST, 0x0403) /* Local Reference to a procedure */ \
|
|
X(OEM, 0x0404) /* OEM defined symbol */ \
|
|
X(TI16_MAX, 0x1000) \
|
|
X(REGISTER_ST, 0x1001) /* Register variable */ \
|
|
X(CONSTANT_ST, 0x1002) /* constant symbol */ \
|
|
X(UDT_ST, 0x1003) /* User defined type */ \
|
|
X(COBOLUDT_ST, 0x1004) /* special UDT for cobol that does not symbol pack */ \
|
|
X(MANYREG_ST, 0x1005) /* multiple register variable */ \
|
|
X(BPREL32_ST, 0x1006) /* BP-relative */ \
|
|
X(LDATA32_ST, 0x1007) /* Module-static symbol */ \
|
|
X(GDATA32_ST, 0x1008) /* Global data symbol */ \
|
|
X(PUB32_ST, 0x1009) /* a public symbol (CV internal reserved) */ \
|
|
X(LPROC32_ST, 0x100a) /* Local procedure start */ \
|
|
X(GPROC32_ST, 0x100b) /* Global procedure start */ \
|
|
X(VFTABLE32, 0x100c) /* address of virtual function table */ \
|
|
X(REGREL32_ST, 0x100d) /* register relative address */ \
|
|
X(LTHREAD32_ST, 0x100e) /* static thread storage */ \
|
|
X(GTHREAD32_ST, 0x100f) /* static thread storage */ \
|
|
X(LPROCMIPS_ST, 0x1010) /* Local procedure start */ \
|
|
X(GPROCMIPS_ST, 0x1011) /* Global procedure start */ \
|
|
X(FRAMEPROC, 0x1012) /* extra frame and proc information */ \
|
|
X(COMPILE2_ST, 0x1013) /* extended compile flags and info */ \
|
|
X(MANYREG2_ST, 0x1014) /* multiple register variable */ \
|
|
X(LPROCIA64_ST, 0x1015) /* Local procedure start (IA64) */ \
|
|
X(GPROCIA64_ST, 0x1016) /* Global procedure start (IA64) */ \
|
|
X(LOCALSLOT_ST, 0x1017) /* static IL sym with field for static slot index */ \
|
|
X(PARAMSLOT_ST, 0x1018) /* static IL sym with field for parameter slot index */ \
|
|
X(GMANPROC_ST, 0x101a) /* Global proc */ \
|
|
X(LMANPROC_ST, 0x101b) /* Local proc */ \
|
|
X(RESERVED1, 0x101c) /* reserved */ \
|
|
X(RESERVED2, 0x101d) /* reserved */ \
|
|
X(RESERVED3, 0x101e) /* reserved */ \
|
|
X(RESERVED4, 0x101f) /* reserved */ \
|
|
X(LMANDATA_ST, 0x1020) /**/ \
|
|
X(GMANDATA_ST, 0x1021) /**/ \
|
|
X(MANFRAMEREL_ST, 0x1022) /**/ \
|
|
X(MANREGISTER_ST, 0x1023) /**/ \
|
|
X(MANSLOT_ST, 0x1024) /**/ \
|
|
X(MANMANYREG_ST, 0x1025) /**/ \
|
|
X(MANREGREL_ST, 0x1026) /**/ \
|
|
X(MANMANYREG2_ST, 0x1027) /**/ \
|
|
X(MANTYPREF, 0x1028) /* Index for type referenced by name from metadata */ \
|
|
X(UNAMESPACE_ST, 0x1029) /* Using namespace */ \
|
|
X(ST_MAX, 0x1100) /* starting point for SZ name symbols */ \
|
|
X(OBJNAME, 0x1101) /* path to object file name */ \
|
|
X(THUNK32, 0x1102) /* Thunk Start */ \
|
|
X(BLOCK32, 0x1103) /* block start */ \
|
|
X(WITH32, 0x1104) /* with start */ \
|
|
X(LABEL32, 0x1105) /* code label */ \
|
|
X(REGISTER, 0x1106) /* Register variable */ \
|
|
X(CONSTANT, 0x1107) /* constant symbol */ \
|
|
X(UDT, 0x1108) /* User defined type */ \
|
|
X(COBOLUDT, 0x1109) /* special UDT for cobol that does not symbol pack */ \
|
|
X(MANYREG, 0x110a) /* multiple register variable */ \
|
|
X(BPREL32, 0x110b) /* BP-relative */ \
|
|
X(LDATA32, 0x110c) /* Module-static symbol */ \
|
|
X(GDATA32, 0x110d) /* Global data symbol */ \
|
|
X(PUB32, 0x110e) /* a public symbol (CV internal reserved) */ \
|
|
X(LPROC32, 0x110f) /* Local procedure start */ \
|
|
X(GPROC32, 0x1110) /* Global procedure start */ \
|
|
X(REGREL32, 0x1111) /* register relative address */ \
|
|
X(LTHREAD32, 0x1112) /* static thread storage */ \
|
|
X(GTHREAD32, 0x1113) /* static thread storage */ \
|
|
X(LPROCMIPS, 0x1114) /* Local procedure start */ \
|
|
X(GPROCMIPS, 0x1115) /* Global procedure start */ \
|
|
X(COMPILE2, 0x1116) /* extended compile flags and info */ \
|
|
X(MANYREG2, 0x1117) /* multiple register variable */ \
|
|
X(LPROCIA64, 0x1118) /* Local procedure start (IA64) */ \
|
|
X(GPROCIA64, 0x1119) /* Global procedure start (IA64) */ \
|
|
X(LOCALSLOT, 0x111a) /* static IL sym with field for static slot index */ \
|
|
X(PARAMSLOT, 0x111b) /* static IL sym with field for parameter slot index */ \
|
|
X(LMANDATA, 0x111c) /**/ \
|
|
X(GMANDATA, 0x111d) /**/ \
|
|
X(MANFRAMEREL, 0x111e) /**/ \
|
|
X(MANREGISTER, 0x111f) /**/ \
|
|
X(MANSLOT, 0x1120) /**/ \
|
|
X(MANMANYREG, 0x1121) /**/ \
|
|
X(MANREGREL, 0x1122) /**/ \
|
|
X(MANMANYREG2, 0x1123) /**/ \
|
|
X(UNAMESPACE, 0x1124) /* Using namespace */ \
|
|
X(PROCREF, 0x1125) /* Reference to a procedure */ \
|
|
X(DATAREF, 0x1126) /* Reference to data */ \
|
|
X(LPROCREF, 0x1127) /* Local Reference to a procedure */ \
|
|
X(ANNOTATIONREF, 0x1128) /* Reference to an S_ANNOTATION symbol */ \
|
|
X(TOKENREF, 0x1129) /* Reference to one of the many MANPROCSYM's */ \
|
|
X(GMANPROC, 0x112a) /* Global proc */ \
|
|
X(LMANPROC, 0x112b) /* Local proc */ \
|
|
X(TRAMPOLINE, 0x112c) /* trampoline thunks */ \
|
|
X(MANCONSTANT, 0x112d) /* constants with metadata type info */ \
|
|
X(ATTR_FRAMEREL, 0x112e) /* relative to virtual frame ptr */ \
|
|
X(ATTR_REGISTER, 0x112f) /* stored in a register */ \
|
|
X(ATTR_REGREL, 0x1130) /* relative to register (alternate frame ptr) */ \
|
|
X(ATTR_MANYREG, 0x1131) /* stored in >1 register */ \
|
|
X(SEPCODE, 0x1132) \
|
|
X(LOCAL_2005, 0x1133) /* defines a static symbol in optimized code */ \
|
|
X(DEFRANGE_2005, 0x1134) /* defines a single range of addresses in which symbol can be evaluated */ \
|
|
X(DEFRANGE2_2005, 0x1135) /* defines ranges of addresses in which symbol can be evaluated */ \
|
|
X(SECTION, 0x1136) /* A COFF section in a PE executable */ \
|
|
X(COFFGROUP, 0x1137) /* A COFF group */ \
|
|
X(EXPORT, 0x1138) /* A export */ \
|
|
X(CALLSITEINFO, 0x1139) /* Indirect call site information */ \
|
|
X(FRAMECOOKIE, 0x113a) /* Security cookie information */ \
|
|
X(DISCARDED, 0x113b) /* Discarded by LINK /OPT:REF (experimental, see richards) */ \
|
|
X(COMPILE3, 0x113c) /* Replacement for S_COMPILE2 */ \
|
|
X(ENVBLOCK, 0x113d) /* Environment block split off from S_COMPILE2 */ \
|
|
X(LOCAL, 0x113e) /* defines a static symbol in optimized code */ \
|
|
X(DEFRANGE, 0x113f) /* defines a single range of addresses in which symbol can be evaluated */ \
|
|
X(DEFRANGE_SUBFIELD, 0x1140) /* ranges for a subfield */ \
|
|
X(DEFRANGE_REGISTER, 0x1141) /* ranges for en-registered symbol */ \
|
|
X(DEFRANGE_FRAMEPOINTER_REL, 0x1142) /* range for stack symbol. */ \
|
|
X(DEFRANGE_SUBFIELD_REGISTER, 0x1143) /* ranges for en-registered field of symbol */ \
|
|
X(DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE, 0x1144) /* range for stack symbol span valid full scope of function body, gap might apply. */ \
|
|
X(DEFRANGE_REGISTER_REL, 0x1145) /* range for symbol address as register + offset. */ \
|
|
X(LPROC32_ID, 0x1146) /**/ \
|
|
X(GPROC32_ID, 0x1147) /**/ \
|
|
X(LPROCMIPS_ID, 0x1148) /**/ \
|
|
X(GPROCMIPS_ID, 0x1149) /**/ \
|
|
X(LPROCIA64_ID, 0x114a) /**/ \
|
|
X(GPROCIA64_ID, 0x114b) /**/ \
|
|
X(BUILDINFO, 0x114c) /* build information. */ \
|
|
X(INLINESITE, 0x114d) /* inlined function callsite. */ \
|
|
X(INLINESITE_END, 0x114e) /**/ \
|
|
X(PROC_ID_END, 0x114f) /**/ \
|
|
X(DEFRANGE_HLSL, 0x1150) /**/ \
|
|
X(GDATA_HLSL, 0x1151) /**/ \
|
|
X(LDATA_HLSL, 0x1152) /**/ \
|
|
X(FILESTATIC, 0x1153) \
|
|
X(LOCAL_DPC_GROUPSHARED, 0x1154) /* DPC groupshared variable */ \
|
|
X(LPROC32_DPC, 0x1155) /* DPC static procedure start */ \
|
|
X(LPROC32_DPC_ID, 0x1156) /**/ \
|
|
X(DEFRANGE_DPC_PTR_TAG, 0x1157) /* DPC pointer tag definition range */ \
|
|
X(DPC_SYM_TAG_MAP, 0x1158) /* DPC pointer tag value to symbol record map */ \
|
|
X(ARMSWITCHTABLE, 0x1159) /**/ \
|
|
X(CALLEES, 0x115a) /**/ \
|
|
X(CALLERS, 0x115b) /**/ \
|
|
X(POGODATA, 0x115c) /**/ \
|
|
X(INLINESITE2, 0x115d) /* extended inline site information */ \
|
|
X(HEAPALLOCSITE, 0x115e) /* heap allocation site */ \
|
|
X(MOD_TYPEREF, 0x115f) /* only generated at link time */ \
|
|
X(REF_MINIPDB, 0x1160) /* only generated at link time for mini PDB */ \
|
|
X(PDBMAP, 0x1161) /* only generated at link time for mini PDB */ \
|
|
X(GDATA_HLSL32, 0x1162) /* */ \
|
|
X(LDATA_HLSL32, 0x1163) /* */ \
|
|
X(GDATA_HLSL32_EX, 0x1164) /**/ \
|
|
X(LDATA_HLSL32_EX, 0x1165) /**/ \
|
|
X(FASTLINK, 0x1167) \
|
|
X(INLINEES, 0x1168)
|
|
|
|
typedef enum {
|
|
PDB_CV_SYM_NULL,
|
|
|
|
#define X(name, value) PDB_CV_SYM_##name = value,
|
|
PDB_CV_SYM_LIST
|
|
#undef X
|
|
|
|
PDB_CV_SYM_COUNT
|
|
} pdb_cv_sym_type_e;
|
|
typedef U16 pdb_cv_sym_type;
|
|
typedef U16 pdb_cv_sym_size;
|
|
|
|
#define PDB_CV_INLINEE_SOURCE_LINE_SIGNATURE 0x0
|
|
#define PDB_CV_INLINEE_SOURCE_LINE_SIGNATURE_EX 0x1
|
|
typedef struct pdb_cv_inlinee_srcline
|
|
{
|
|
pdb_cv_itemid inlinee; /* Function ID */
|
|
U32 file_id; /* offset into PDB_CV_SS_TYPE_FILE_CHKSUM */
|
|
U32 src_ln; /* Line number of inlinee in file. */
|
|
} pdb_cv_inlinee_srcline;
|
|
|
|
typedef struct pdb_cv_inlinee_srcline_ex
|
|
{
|
|
pdb_cv_itemid inlinee; /* Function ID */
|
|
U32 file_id; /* offset into PDB_CV_SS_TYPE_FILE_CHKSUM */
|
|
U32 src_ln; /* Line number of inlinee in file. */
|
|
U32 extra_file_id_count;
|
|
/* U32 extra_file_id[0]; */
|
|
} pdb_cv_inlinee_srcline_ex;
|
|
|
|
typedef struct pdb_cv_symref2
|
|
{ /* PDB_CV_SYM_PROCREF, PDB_CV_SYM_DATAREF, or PDB_CV_SYM_LPROCREF */
|
|
U32 sum_name; /* SUC of the name */
|
|
U32 sym_off; /* Offset of actual symbol in $$Symbols */
|
|
pdb_imod imod; /* Module containing the actual symbol */
|
|
/* unsigned char name[1]; hidden name made a first class member */
|
|
} pdb_cv_symref2;
|
|
|
|
typedef struct pdb_cv_buildinfo
|
|
{
|
|
pdb_cv_itemid id;
|
|
} pdb_cv_buildinfo;
|
|
|
|
typedef struct pdb_cv_funclist
|
|
{
|
|
u32 count;
|
|
// pdb_cv_itype func[1];
|
|
} pdb_cv_funclist;
|
|
|
|
typedef struct pdb_cv_line_sec
|
|
{
|
|
pdb_isec_umm sec_off;
|
|
pdb_isec sec;
|
|
U16 flags;
|
|
U32 len;
|
|
} pdb_cv_line_sec;
|
|
|
|
typedef struct pdb_cv_src_file
|
|
{
|
|
U32 chksum_off;
|
|
U32 num_lines;
|
|
U32 lines_size; /* Size of pdb_cv_line record. */
|
|
} pdb_cv_src_file;
|
|
|
|
#define PDB_CV_LINE_GET_LN(line) ((line).flags & PDB_CV_LINE_ENUM_START)
|
|
/* line where statement/expression starts. */
|
|
#define PDB_CV_LINE_ENUM_START 0x00ffffff
|
|
/* delta to line where statement ends (optional). */
|
|
#define PDB_CV_LINE_DELTA_END 0x7f000000
|
|
/* syms_true if a statement line number, else an expression line num. */
|
|
#define PDB_CV_LINE_STATMENT 0x80000000
|
|
|
|
typedef struct pdb_cv_line
|
|
{
|
|
U32 off;
|
|
U32 flags;
|
|
} pdb_cv_line;
|
|
|
|
typedef enum
|
|
{
|
|
PDB_CV_CHECKSUM_NULL,
|
|
PDB_CV_CHECKSUM_MD5,
|
|
PDB_CV_CHECKSUM_SHA1,
|
|
PDB_CV_CHECKSUM_SHA256
|
|
} pdb_cv_chksum_type_e;
|
|
typedef U8 pdb_cv_chksum_type;
|
|
|
|
typedef struct pdb_cv_file_checksum
|
|
{
|
|
U32 name_off;
|
|
U8 len;
|
|
U8 type;
|
|
} pdb_cv_file_checksum;
|
|
|
|
#define PDB_CV_SS_TYPE_IGNORE(x) ((((U32)x) & 0x80000000) != 0)
|
|
typedef enum
|
|
{
|
|
PDB_CV_SS_TYPE_SYMBOLS = 0xf1,
|
|
PDB_CV_SS_TYPE_LINES = 0xf2,
|
|
PDB_CV_SS_TYPE_STRINGTABLE = 0xf3,
|
|
PDB_CV_SS_TYPE_FILE_CHKSUM = 0xf4,
|
|
PDB_CV_SS_TYPE_FRAMEDATA = 0xf5,
|
|
PDB_CV_SS_TYPE_INLINE_LINES = 0xf6,
|
|
PDB_CV_SS_TYPE_CROSS_SCOPE_IMPORTS = 0xf7,
|
|
PDB_CV_SS_TYPE_CROSS_SCOPE_EXPORTS = 0xf8,
|
|
PDB_CV_SS_TYPE_IL_LINES = 0xf9,
|
|
PDB_CV_SS_TYPE_FUNC_MDTOKEN_MAP = 0xfa,
|
|
PDB_CV_SS_TYPE_TYPE_MDTOKEN_MAP = 0xfb,
|
|
PDB_CV_SS_TYPE_MERGED_ASSEMBLY_INPUT = 0xfc,
|
|
PDB_CV_SS_TYPE_COFF_SYMBOL_RVA = 0xfe
|
|
} pdb_cv_ss_type_e;
|
|
typedef U32 pdb_cv_ss_type;
|
|
|
|
typedef struct pdb_cv_proc
|
|
{
|
|
U32 parent;
|
|
U32 end;
|
|
U32 next;
|
|
U32 len;
|
|
U32 dbg_start;
|
|
U32 dbg_end;
|
|
pdb_cv_itype itype;
|
|
U32 off;
|
|
U16 sec;
|
|
U8 flags; /* pdb_cv_proc_flags_e */
|
|
} pdb_cv_proc;
|
|
|
|
typedef struct pdb_cv_udtsym
|
|
{
|
|
pdb_cv_itype itype;
|
|
/* unsigned char name[0]; */
|
|
} pdb_cv_udtsym;
|
|
|
|
typedef enum
|
|
{
|
|
PDB_CV_BA_OP_END = 0,
|
|
PDB_CV_BA_OP_CODE_OFFSET = 1,
|
|
PDB_CV_BA_OP_CHANGE_CODE_OFFSET_BASE = 2,
|
|
PDB_CV_BA_OP_CHANGE_CODE_OFFSET = 3,
|
|
PDB_CV_BA_OP_CHANGE_CODE_LENGTH = 4,
|
|
PDB_CV_BA_OP_CHANGE_FILE = 5,
|
|
PDB_CV_BA_OP_CHANGE_LINE_OFFSET = 6,
|
|
PDB_CV_BA_OP_CHANGE_LINE_END_DELTA = 7,
|
|
PDB_CV_BA_OP_CHANGE_RANGE_KIND = 8,
|
|
PDB_CV_BA_OP_CHANGE_COLUMN_START = 9,
|
|
PDB_CV_BA_OP_CHANGE_COLUMN_END_DELTA = 10,
|
|
PDB_CV_BA_OP_CHANGE_CODE_OFFSET_AND_LINE_OFFSET = 11,
|
|
PDB_CV_BA_OP_CHANGE_CODE_LENGTH_AND_CODE_OFFSET = 12,
|
|
PDB_CV_BA_OP_CHANGE_COLUMN_END = 13,
|
|
PDB_CV_BA_OP_MAX = 0xff
|
|
} pdb_cv_binary_annotation_opcode_e;
|
|
typedef U8 pdb_cv_binary_annotation_opcode;
|
|
|
|
enum
|
|
{
|
|
PDB_CV_CFL_C = 0x00,
|
|
PDB_CV_CFL_CXX = 0x01,
|
|
PDB_CV_CFL_FORTRAN = 0x02,
|
|
PDB_CV_CFL_MASM = 0x03,
|
|
PDB_CV_CFL_PASCAL = 0x04,
|
|
PDB_CV_CFL_BASIC = 0x05,
|
|
PDB_CV_CFL_COBOL = 0x06,
|
|
PDB_CV_CFL_LINK = 0x07,
|
|
PDB_CV_CFL_CVTRES = 0x08,
|
|
PDB_CV_CFL_CVTPGD = 0x09,
|
|
PDB_CV_CFL_CSHARP = 0x0A,
|
|
PDB_CV_CFL_VB = 0x0B,
|
|
PDB_CV_CFL_ILASM = 0x0C,
|
|
PDB_CV_CFL_JAVA = 0x0D,
|
|
PDB_CV_CFL_JSCRIPT = 0x0E,
|
|
PDB_CV_CFL_MSIL = 0x0F,
|
|
PDB_CV_CFL_HLSL = 0x10
|
|
};
|
|
|
|
enum
|
|
{
|
|
PDB_CV_CFL_8080 = 0x00,
|
|
PDB_CV_CFL_8086 = 0x01,
|
|
PDB_CV_CFL_80286 = 0x02,
|
|
PDB_CV_CFL_80386 = 0x03,
|
|
PDB_CV_CFL_80486 = 0x04,
|
|
PDB_CV_CFL_PENTIUM = 0x05,
|
|
PDB_CV_CFL_PENTIUMII = 0x06,
|
|
PDB_CV_CFL_PENTIUMPRO = PDB_CV_CFL_PENTIUMII,
|
|
PDB_CV_CFL_PENTIUMIII = 0x07,
|
|
PDB_CV_CFL_MIPS = 0x10,
|
|
PDB_CV_CFL_MIPSR4000 = PDB_CV_CFL_MIPS,
|
|
PDB_CV_CFL_MIPS16 = 0x11,
|
|
PDB_CV_CFL_MIPS32 = 0x12,
|
|
PDB_CV_CFL_MIPS64 = 0x13,
|
|
PDB_CV_CFL_MIPSI = 0x14,
|
|
PDB_CV_CFL_MIPSII = 0x15,
|
|
PDB_CV_CFL_MIPSIII = 0x16,
|
|
PDB_CV_CFL_MIPSIV = 0x17,
|
|
PDB_CV_CFL_MIPSV = 0x18,
|
|
PDB_CV_CFL_M68000 = 0x20,
|
|
PDB_CV_CFL_M68010 = 0x21,
|
|
PDB_CV_CFL_M68020 = 0x22,
|
|
PDB_CV_CFL_M68030 = 0x23,
|
|
PDB_CV_CFL_M68040 = 0x24,
|
|
PDB_CV_CFL_ALPHA = 0x30,
|
|
PDB_CV_CFL_ALPHA_21064 = 0x30,
|
|
PDB_CV_CFL_ALPHA_21164 = 0x31,
|
|
PDB_CV_CFL_ALPHA_21164A = 0x32,
|
|
PDB_CV_CFL_ALPHA_21264 = 0x33,
|
|
PDB_CV_CFL_ALPHA_21364 = 0x34,
|
|
PDB_CV_CFL_PPC601 = 0x40,
|
|
PDB_CV_CFL_PPC603 = 0x41,
|
|
PDB_CV_CFL_PPC604 = 0x42,
|
|
PDB_CV_CFL_PPC620 = 0x43,
|
|
PDB_CV_CFL_PPCFP = 0x44,
|
|
PDB_CV_CFL_PPCBE = 0x45,
|
|
PDB_CV_CFL_SH3 = 0x50,
|
|
PDB_CV_CFL_SH3E = 0x51,
|
|
PDB_CV_CFL_SH3DSP = 0x52,
|
|
PDB_CV_CFL_SH4 = 0x53,
|
|
PDB_CV_CFL_SHMEDIA = 0x54,
|
|
PDB_CV_CFL_ARM3 = 0x60,
|
|
PDB_CV_CFL_ARM4 = 0x61,
|
|
PDB_CV_CFL_ARM4T = 0x62,
|
|
PDB_CV_CFL_ARM5 = 0x63,
|
|
PDB_CV_CFL_ARM5T = 0x64,
|
|
PDB_CV_CFL_ARM6 = 0x65,
|
|
PDB_CV_CFL_ARM_XMAC = 0x66,
|
|
PDB_CV_CFL_ARM_WMMX = 0x67,
|
|
PDB_CV_CFL_ARM7 = 0x68,
|
|
PDB_CV_CFL_OMNI = 0x70,
|
|
PDB_CV_CFL_IA64 = 0x80,
|
|
PDB_CV_CFL_IA64_1 = 0x80,
|
|
PDB_CV_CFL_IA64_2 = 0x81,
|
|
PDB_CV_CFL_CEE = 0x90,
|
|
PDB_CV_CFL_AM33 = 0xA0,
|
|
PDB_CV_CFL_M32R = 0xB0,
|
|
PDB_CV_CFL_TRICORE = 0xC0,
|
|
PDB_CV_CFL_X64 = 0xD0,
|
|
PDB_CV_CFL_AMD64 = PDB_CV_CFL_X64,
|
|
PDB_CV_CFL_EBC = 0xE0,
|
|
PDB_CV_CFL_THUMB = 0xF0,
|
|
PDB_CV_CFL_ARMNT = 0xF4,
|
|
PDB_CV_CFL_ARM64 = 0xF6,
|
|
PDB_CV_CFL_D3D11_SHADER = 0x100
|
|
};
|
|
|
|
#define PDB_CV_COMPILESYM2_MASK_LANG 0xFF
|
|
#define PDB_CV_COMPILESYM2_FLAG_EC (1u << 8u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_NODBGINFO (1u << 9u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_LTCG (1u << 10u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_NODATAALIGN (1u << 11u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_MANAGED_PRESENT (1u << 12u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_SECURITY_CHECKS (1u << 13u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_HOTPATCH (1u << 14u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_CVTCIL (1u << 15u)
|
|
#define PDB_CV_COMPILESYM2_FLAG_MSIL_MODULE (1u << 16u)
|
|
typedef u32 pdb_cv_compilesym2_flags;
|
|
|
|
typedef struct pdb_cv_compilesym2
|
|
{
|
|
pdb_cv_compilesym2_flags flags;
|
|
u16 machine;
|
|
u16 ver_fe_major;
|
|
u16 ver_fe_minor;
|
|
u16 ver_fe_build;
|
|
u16 ver_major;
|
|
u16 ver_minor;
|
|
u16 ver_build;
|
|
/* char ver_str[0]; */
|
|
} pdb_cv_compilesym2;
|
|
|
|
#define PDB_CV_COMPILESYM3_PAD_SHIFT 20
|
|
#define PDB_CV_COMPILESYM3_PAD_MASK 0xFFC00000
|
|
#define PDB_CV_COMPILESYM3_LANG_MASK 0xFF
|
|
// Compiled for E/C
|
|
#define PDB_CV_COMPILESYM3_FLAGS_EC (1u << 9u)
|
|
// Compiled without debug info
|
|
#define PDB_CV_COMPILESYM3_FLAGS_NODBGINFO (1u << 10u)
|
|
// Compiled with /LTCG (Link-time code generation)
|
|
#define PDB_CV_COMPILESYM3_FLAGS_LTCG (1u << 11u)
|
|
// Compiled with -Bzalign (what is this flag?)
|
|
#define PDB_CV_COMPILESYM3_FLAGS_NODATAALIGN (1u << 12u)
|
|
// Managed code/data is present
|
|
#define PDB_CV_COMPILESYM3_FLAGS_MANAGED_PRESENT (1u << 13u)
|
|
// Compiled with /GS (Buffer Security Checks)
|
|
#define PDB_CV_COMPILESYM3_FLAGS_SECURITY_CHECKS (1u << 14u)
|
|
// Compiled with /hotpatch (Create Hotpatchable Image)
|
|
#define PDB_CV_COMPILESYM3_FLAGS_HOTPATCH (1u << 15u)
|
|
// Converted with CVTCIL
|
|
#define PDB_CV_COMPILESYM3_FLAGS_CVTCIL (1u << 16u)
|
|
// Compiled with /NOASSEMBLY MSIL netmodule
|
|
#define PDB_CV_COMPILESYM3_FLAGS_MSIL_MODULE (1u << 17u)
|
|
// Compiled with /sdl (Enable Additional Security Checks)
|
|
#define PDB_CV_COMPILESYM3_FLAGS_SDL (1u << 18u)
|
|
// Compiled with /ltcg:pgo or pgu
|
|
#define PDB_CV_COMPILESYM3_FLAGS_PGO (1u << 19u)
|
|
// .exp module
|
|
#define PDB_CV_COMPILESYM3_FLAGS_EXP (1u << 20u)
|
|
|
|
typedef struct pdb_cv_compilesym3
|
|
{
|
|
U32 flags;
|
|
|
|
/* target processor */
|
|
U16 machine;
|
|
|
|
/* front end major version # */
|
|
U16 ver_fe_major;
|
|
|
|
/* front end minor version # */
|
|
U16 ver_fe_minor;
|
|
|
|
/* front end build version # */
|
|
U16 ver_fe_build;
|
|
|
|
/* front end QFE version # */
|
|
U16 ver_feqfe;
|
|
|
|
/* back end major version # */
|
|
U16 ver_major;
|
|
|
|
/* back end minor version # */
|
|
U16 ver_minor;
|
|
|
|
/* back end build version # */
|
|
U16 ver_build;
|
|
|
|
/* back end QFE version # */
|
|
U16 ver_qfe;
|
|
|
|
/* char version [0]; Zero terminated compiler version string */
|
|
} pdb_cv_compilesym3;
|
|
|
|
typedef struct pdb_cv_sectionsym
|
|
{
|
|
u16 sec_index;
|
|
u8 align;
|
|
u8 pad;
|
|
u32 rva;
|
|
u32 size;
|
|
u32 characteristics;
|
|
/* char name[0]; */
|
|
} pdb_cv_sectionsym;
|
|
|
|
typedef struct pdb_cv_coffgroupsym
|
|
{
|
|
u32 size;
|
|
u32 characteristics;
|
|
u32 off;
|
|
u16 sec;
|
|
/* char name[0]; */
|
|
} pdb_cv_coffgroupsym;
|
|
|
|
enum
|
|
{
|
|
PDB_CV_TRAMPOLINE_INCREMENTAL = 0,
|
|
PDB_CV_TRAMPOLINE_BRANCH_ISLAND = 1
|
|
};
|
|
typedef u16 pdb_cv_trampoline_type;
|
|
|
|
typedef struct pdb_cv_trampolinesym
|
|
{
|
|
/* trampoline symbol sub-type */
|
|
pdb_cv_trampoline_type type;
|
|
|
|
/* size of the thunk */
|
|
U16 thunk_size;
|
|
|
|
/* offset of the thunk */
|
|
U32 thunk_sec_off;
|
|
|
|
/* offset of the target of the thunk */
|
|
U32 target_sec_off;
|
|
|
|
/* section index of the thunk */
|
|
pdb_isec thunk_sec;
|
|
|
|
/* section index of the target of the thunk */
|
|
pdb_isec target_sec;
|
|
} pdb_cv_trampolinesym;
|
|
|
|
typedef struct pdb_cv_thunksym32
|
|
{
|
|
u32 parent;
|
|
u32 end;
|
|
u32 next;
|
|
u32 off;
|
|
u16 sec;
|
|
u16 len;
|
|
u8 ord;
|
|
// char name[0];
|
|
// char variant[0];
|
|
} pdb_cv_thunksym32;
|
|
|
|
typedef struct pdb_cv_objnamesym
|
|
{
|
|
U32 sig;
|
|
/* U8 name[1]; ; Length-prefixed name */
|
|
} pdb_cv_objnamesym;
|
|
|
|
#define PDB_CV_ENVBLOCK_FLAG_REV (1u << 0u)
|
|
#define PDB_CV_ENVBLOCK_MASK_PAD 0x7f
|
|
typedef u8 pdb_cv_envblocksym_flags;
|
|
|
|
typedef struct pdb_cv_envblocksym
|
|
{
|
|
pdb_cv_envblocksym_flags flags;
|
|
/* char str[0]; */
|
|
} pdb_cv_envblocksym;
|
|
|
|
typedef struct pdb_cv_inlinesym
|
|
{
|
|
/* pointer to the inliner */
|
|
U32 parent_offset;
|
|
|
|
/* pointer to this block's end */
|
|
U32 end_offset;
|
|
|
|
pdb_cv_itemid inlinee;
|
|
|
|
/* an array of compressed binary annotations. */
|
|
/* pdb_u8 binaryAnnotations[0]; */
|
|
} pdb_cv_inlinesym;
|
|
|
|
typedef struct pdb_cv_inlinesym2
|
|
{
|
|
U32 parent_offset;
|
|
U32 end_offset;
|
|
pdb_cv_itemid inlinee;
|
|
U32 invocations;
|
|
/* an array of compressed binary annotations. */
|
|
/* pdb_u8 binaryAnnotations[0]; */
|
|
} pdb_cv_inlinesym2;
|
|
|
|
#if 0
|
|
typedef struct pdb_cv_inlineesym
|
|
{
|
|
u32 count;
|
|
pdb_itype funcs[0];
|
|
} pdb_cv_inlineesym;
|
|
#endif
|
|
|
|
enum
|
|
{
|
|
PDB_CV_FASTLINK_FLAGS_IS_GLOBAL_DATA = (1 << 0),
|
|
PDB_CV_FASTLINK_FALGS_IS_DATA = (1 << 1),
|
|
PDB_CV_FASTLINK_FLAGS_IS_UDT = (1 << 2),
|
|
PDB_CV_FASTLINK_FLAGS_IS_CONST = (1 << 4),
|
|
PDB_CV_FASTLINK_FLAGS_IS_NAMESPACE = (1 << 6)
|
|
};
|
|
typedef U16 pdb_cv_fastlink_flags;
|
|
|
|
typedef struct pdb_cv_fastlink
|
|
{
|
|
union {
|
|
/* NOTE(nick): If PDB_CV_FASTLINK_FALGS_IS_UDT is set then this is a type index */
|
|
pdb_cv_itype type_index;
|
|
U32 unknown;
|
|
} u;
|
|
pdb_cv_fastlink_flags flags;
|
|
|
|
/* U8 name[0] */
|
|
/* U8 padding[4] */
|
|
} pdb_cv_fastlink;
|
|
|
|
typedef struct pdb_cv_datasym32
|
|
{
|
|
/* Type index, or Metadata token if a managed symbol */
|
|
pdb_cv_itype itype;
|
|
|
|
pdb_isec_umm sec_off;
|
|
pdb_isec sec;
|
|
|
|
/* unsigned char name[1]; */
|
|
} pdb_cv_datasym32;
|
|
|
|
typedef struct pdb_cv_constsym
|
|
{
|
|
/* Type index (containing enum if enumerate) or metadata token */
|
|
pdb_cv_itype itype;
|
|
|
|
/* numeric leaf containing value; use pdb_stream_read_numeric() */
|
|
|
|
/* unsigned char name[CV_ZEROLEN]; / Length-prefixed name */
|
|
} pdb_cv_constsym;
|
|
|
|
typedef struct pdb_cv_regrel32
|
|
{
|
|
/* offset of symbol */
|
|
U32 reg_off;
|
|
|
|
/* Type index or metadata token */
|
|
pdb_cv_itype itype;
|
|
|
|
/* register index for symbol */
|
|
U16 reg;
|
|
|
|
/* char name[]; */
|
|
} pdb_cv_regrel32;
|
|
|
|
typedef struct pdb_cv_blocksym32
|
|
{
|
|
/* pointer to the parent */
|
|
U32 par;
|
|
|
|
/* pointer to this blocks end */
|
|
U32 end;
|
|
|
|
/* Block length */
|
|
U32 len;
|
|
|
|
/* Offset in code section */
|
|
U32 off;
|
|
|
|
/* section index */
|
|
U16 sec;
|
|
|
|
/* Length-prefixed name */
|
|
/* unsigned char name[1]; */
|
|
} pdb_cv_blocksym32;
|
|
|
|
typedef enum
|
|
{
|
|
/* Frame pointer present */
|
|
PDB_CV_PROC32_FLAG_NOFPO = (1 << 0),
|
|
|
|
/* Interrupt return */
|
|
PDB_CV_PROC32_FLAG_INT = (1 << 1),
|
|
|
|
PDB_CV_PROC32_FLAG_FAR = (1 << 2), /* far return */
|
|
|
|
/* Function does not return */
|
|
PDB_CV_PROC32_FLAG_NEVER = (1 << 3),
|
|
|
|
/* Label isn't falen into */
|
|
PDB_CV_PROC32_FLAG_NOTREACHED = (1 << 4),
|
|
|
|
/* Custom call convention */
|
|
PDB_CV_PROC32_FLAG_CUSTOM_CALL = (1 << 5),
|
|
|
|
/* Function marked as noinline. */
|
|
PDB_CV_PROC32_FLAG_NOINLINE = (1 << 6),
|
|
|
|
/* Function has debug info for optimized code. */
|
|
PDB_CV_PROC32_FLAG_OPTDBGINFO = (1 << 7)
|
|
} pdb_cv_procsym32_flags_e;
|
|
typedef u8 pdb_cv_proc_flags;
|
|
|
|
typedef struct pdb_cv_procsym32
|
|
{
|
|
/* pointer to the parent */
|
|
U32 parent;
|
|
|
|
/* pointer to this blocks end */
|
|
U32 end;
|
|
|
|
/* pointer to next symbol */
|
|
U32 next;
|
|
|
|
/* Proc length */
|
|
U32 len;
|
|
|
|
/* Debug start offset */
|
|
U32 dbg_start;
|
|
|
|
/* Debug end offset */
|
|
U32 dbg_end;
|
|
|
|
/* Type index or ID */
|
|
pdb_cv_itype itype;
|
|
|
|
U32 off;
|
|
U16 sec;
|
|
pdb_cv_proc_flags flags;
|
|
|
|
/* Length-prefixed name */
|
|
/* unsigned char name[1]; */
|
|
} pdb_cv_procsym32;
|
|
|
|
#define PDB_CV_EXPORT_FLAG_CONSTAN (1u << 0u)
|
|
#define PDB_CV_EXPORT_FLAG_DATA (1u << 1u)
|
|
#define PDB_CV_EXPORT_FLAG_PRIVATE (1u << 2u)
|
|
#define PDB_CV_EXPORT_FLAG_NONAME (1u << 3u)
|
|
#define PDB_CV_EXPORT_FLAG_ORDINAL (1u << 4u)
|
|
#define PDB_CV_EXPORT_FLAG_FORWARDER (1u << 5u)
|
|
typedef u16 pdb_cv_export_flags;
|
|
|
|
typedef struct pdb_cv_exportsym
|
|
{
|
|
u16 ordinal;
|
|
pdb_cv_export_flags flags;
|
|
//char name[0];
|
|
} pdb_cv_exportsym;
|
|
|
|
typedef struct pdb_cv_label32
|
|
{
|
|
u32 off;
|
|
u16 seg;
|
|
pdb_cv_proc_flags flags;
|
|
char name[1];
|
|
} pdb_cv_label32;
|
|
|
|
typedef struct pdb_cv_unamespace
|
|
{
|
|
char name[1];
|
|
} pdb_cv_unamespace;
|
|
|
|
typedef struct pdb_cv_callsiteinfo
|
|
{
|
|
u32 off; // call site section offset
|
|
u16 sec; // call site section index
|
|
u16 pad; // padding
|
|
pdb_cv_itype itype; // function signature
|
|
} pdb_cv_callsiteinfo;
|
|
|
|
enum
|
|
{
|
|
PDB_CV_COOKIE_COPY = 0,
|
|
PDB_CV_COOKIE_XOR_SP = 1,
|
|
PDB_CV_COOKIE_XOR_BP = 2,
|
|
PDB_CV_COOKIE_XOR_R13 = 3
|
|
};
|
|
typedef u32 pdb_cv_cookie_type;
|
|
|
|
typedef struct pdb_cv_framecookie
|
|
{
|
|
u32 off;
|
|
u16 reg;
|
|
pdb_cv_cookie_type type;
|
|
u8 flags;
|
|
} pdb_cv_framecookie;
|
|
|
|
typedef struct pdb_cv_heapallocsite
|
|
{
|
|
u32 off; // call site offset
|
|
u16 sec; // call site section
|
|
u16 call_inst_len; // length of heap allocation call instruction (in bytes)
|
|
pdb_cv_itype itype; // function signature
|
|
} pdb_cv_heapallocsite;
|
|
|
|
typedef enum
|
|
{
|
|
/* Variable is a parameter. */
|
|
PDB_CV_LOCALSYM_FLAG_PARAM = (1 << 0),
|
|
|
|
/* Address of the variable is taken. */
|
|
PDB_CV_LOCALSYM_FLAG_ADDR_TAKEN = (1 << 1),
|
|
|
|
/* Variable is compiler generated. */
|
|
PDB_CV_LOCALSYM_FLAG_COPMGEN = (1 << 2),
|
|
|
|
/* Symbol is splitted in temporaries, which are treated by compiler as
|
|
* independent entities. */
|
|
PDB_CV_LOCALSYM_FLAG_AGGREGATE = (1 << 3),
|
|
|
|
/* Counterpart of LOCALSYM_FLAG_AGGREGATE - tells that it is part of a
|
|
* aggregate symobl. */
|
|
PDB_CV_LOCALSYM_FLAG_PARTOF_ARGGREGATE = (1 << 4),
|
|
|
|
/* Variable has mutltiple simultaneous lifetimes. */
|
|
PDB_CV_LOCALSYM_FLAG_ALIASED = (1 << 5),
|
|
|
|
/* Represents one of the multiple simultaneous lifetimes. */
|
|
PDB_CV_LOCALSYM_FLAG_ALIAS = (1 << 6),
|
|
|
|
/* Represents a return value of the procedure. */
|
|
PDB_CV_LOCALSYM_FLAG_RETVAL = (1 << 7),
|
|
|
|
/* Variable was optimized out and has no lifetime. */
|
|
PDB_CV_LOCALSYM_FLAG_OPTOUT = (1 << 8),
|
|
|
|
/* Variable is registered as global. */
|
|
PDB_CV_LOCALSYM_FLAG_GLOBAL = (1 << 9),
|
|
|
|
/* Variable is registerd as static. */
|
|
PDB_CV_LOCALSYM_FLAG_STATIC = (1 << 10)
|
|
} pdb_cv_localsym_flags_e;
|
|
typedef U16 pdb_cv_localsym_flags;
|
|
|
|
typedef struct pdb_cv_localsym
|
|
{
|
|
/* type index*/
|
|
pdb_cv_itype itype;
|
|
|
|
/* pdb_cv_localsym_flags_e */
|
|
U16 flags;
|
|
|
|
/* Name of this symbol, a null terminated array of UTF8 characters. */
|
|
/* unsigned char name[0]; */
|
|
} pdb_cv_localsym;
|
|
|
|
/* defines a range of addresses */
|
|
typedef struct pdb_cv_lvar_addr_range
|
|
{
|
|
/* Relative to the section offset */
|
|
U32 off;
|
|
U16 sec;
|
|
|
|
/* Byte count of the range */
|
|
U16 len;
|
|
} pdb_cv_lvar_addr_range_t;
|
|
|
|
typedef struct pdb_cv_lvar_addr_gap
|
|
{
|
|
U16 off;
|
|
U16 len;
|
|
} pdb_cv_lvar_addr_gap_t;
|
|
|
|
/* May have no user name on one of control flow path. */
|
|
#define PDB_CV_RANGE_ATTRIB_MAYBE(atrrib) (((attrib) & 1) != 0)
|
|
|
|
typedef U16 pdb_cv_range_attrib_t;
|
|
|
|
#define CV_OFF_PARENT_LEN_LIMIT(lim) (lim & (0xfff))
|
|
typedef U32 pdb_cv_off_parent_len_limit_t;
|
|
|
|
/* Spilled member for s.i. */
|
|
#define PDB_CV_DEFRANGE_REGREL_SPILLED_UDT_MEMBER(flags) (((flags) & (1 << 0)) != 0)
|
|
/* Offset in parent variable. */
|
|
#define PDB_CV_DEFRANGE_REGREL_PARENT_OFF(flags) (((flags) & 0xFFF0) >> 4)
|
|
typedef struct pdb_cv_defrange_register_rel
|
|
{
|
|
/* Register to hold the base pointer of the * symbol */
|
|
U16 reg;
|
|
|
|
U16 flags;
|
|
|
|
/* Offset to register */
|
|
U32 reg_off;
|
|
|
|
/* Range of addresses where this variable is valid */
|
|
pdb_cv_lvar_addr_range_t range;
|
|
|
|
/* pdb_cv_lvar_addr_gap_t gaps[0]; The value is not available in following gaps. */
|
|
} pdb_cv_defrange_register_rel;
|
|
|
|
typedef struct pdb_cv_defrange_reg
|
|
{
|
|
U16 reg;
|
|
pdb_cv_range_attrib_t attrib;
|
|
pdb_cv_lvar_addr_range_t range;
|
|
/* pdb_cv_lvar_addr_gap_t gaps[0]; */
|
|
} pdb_cv_defrange_reg;
|
|
|
|
typedef struct pdb_cv_defrange_frameptr_rel
|
|
{ /* A live range of frame variable */
|
|
/* Offset to frame pointer */
|
|
U32 off;
|
|
|
|
pdb_cv_lvar_addr_range_t range;
|
|
|
|
/* cv_lvar_addr_gap gaps[0]; */
|
|
} pdb_cv_defrange_frameptr_rel;
|
|
|
|
typedef struct pdb_cv_defrange_frameptr_rel_full_scope
|
|
{
|
|
/* Offset to frame pointer */
|
|
U32 off;
|
|
} pdb_cv_defrange_frameptr_rel_full_scope;
|
|
|
|
typedef struct pdb_cv_defrange_subfield_reg
|
|
{
|
|
U16 reg;
|
|
pdb_cv_range_attrib_t attrib;
|
|
pdb_cv_off_parent_len_limit_t off_parent;
|
|
pdb_cv_lvar_addr_range_t range;
|
|
/* cv_lvar_addr_gap[]; */
|
|
} pdb_cv_defrange_subfield_reg;
|
|
|
|
typedef struct pdb_cv_objname
|
|
{
|
|
U32 sig;
|
|
/* char name[0] */
|
|
} pdb_cv_objname;
|
|
|
|
typedef struct pdb_cv_filestaticsym
|
|
{
|
|
pdb_cv_itype itype;
|
|
u32 mod_offset;
|
|
pdb_cv_localsym_flags flags;
|
|
/* char name[0]; */
|
|
} pdb_cv_filestaticsym;
|
|
|
|
// Function uses _alloca()
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_HAS_ALLOCA (1u << 0u)
|
|
// Function uses setjmp()
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_SET_JMP (1u << 1u)
|
|
// Function uses longjmp()
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_LONG_JMP (1u << 2u)
|
|
// Function uses inline asm
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_INL_ASM (1u << 3u)
|
|
// Function uses EH states
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_HAS_EH (1u << 4u)
|
|
// Function declared as inline
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_INLINE (1u << 5u)
|
|
// Function has SEH
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_HAS_SEH (1u << 6u)
|
|
// Function declared with __declspec(naked)
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_NAKED (1u << 7u)
|
|
// Function contains security checks (/GS)
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_SECURITY_CHECKS (1u << 8u)
|
|
// Function compiled with /EHa
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_ASYNC_EH (1u << 9u)
|
|
// Compiled with security checks (/GS), but stack ordering was not done
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_GS_NOSTACKORDERING (1u << 10u)
|
|
// Function was inlined within another function
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_WAS_INLINED (1u << 11u)
|
|
// Function declared with __declspec(strict_gs_check)
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_SAFE_BUFFERS (1u << 12u)
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_ENCODED_LOCAL_BASE_POINTER_MASK 0x6000
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_ENCODED_LOCAL_BASE_POINTER_SHIFT 12
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_ENCODED_PARAM_BASE_POINTER_MASK 0x18000
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_ENCODED_PARAM_BASE_POINTER_SHIFT 14
|
|
// Function was compiled with PGO/PGU
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_POGO_ON (1u << 18u)
|
|
// Is POGO counts valid
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_VALID_COUNTS (1u << 19u)
|
|
// Was function optimized for speed
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_OPT_SPEED (1u << 20u)
|
|
// Function has CFG checks (and no write checks)
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_CFG (1u << 21u)
|
|
// Function has CFW checks and/or instrumentation
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_CFW (1u << 22u)
|
|
// Padding must be zero
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_PAD_MASK 0xFF800000
|
|
#define PDB_CV_FRAMEPROCSYM_FLAGS_PAD_SHIFT 22
|
|
|
|
typedef struct pdb_cv_frameprocsym
|
|
{
|
|
U32 frame_size;
|
|
U32 pad_size;
|
|
U32 pad_off; // frame pointer relative offset to where padding begins
|
|
U32 save_reg_size;
|
|
pdb_isec_umm eh_off; // offset of exception handler
|
|
pdb_isec eh_sec;
|
|
U32 flags;
|
|
} pdb_cv_frameprocsym;
|
|
typedef struct pdb_refsym2
|
|
{
|
|
/* SUC of the name */
|
|
U32 sub_name;
|
|
|
|
/* Offset of actual symbol in $$Symbols */
|
|
U32 offset;
|
|
|
|
/* Module containing the actual symbol */
|
|
pdb_imod imod;
|
|
|
|
/* hidden name made a first class member */
|
|
/* unsigned char name[1]; */
|
|
} pdb_refsym2;
|
|
|
|
// what are these anomalies: 0x9, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a
|
|
#define PDB_BASIC_TYPE_LIST \
|
|
X(NOTYPE, "null", 0x0) \
|
|
X(ABS, "abs", 0x1) \
|
|
X(SEGMENT, "segment", 0x2) \
|
|
X(VOID, "void", 0x3) \
|
|
X(CURRENCY, "currency", 0x4) \
|
|
X(NBASICSTR, "nbasicstr", 0x5) \
|
|
X(FBASICSTR, "fbasicstr", 0x6) \
|
|
X(NOTTRANS, "nottrans", 0x7) \
|
|
X(HRESULT, "HRESULT", 0x8) \
|
|
X(CHAR, "char", 0x10) \
|
|
X(SHORT, "short", 0x11) \
|
|
X(LONG, "long", 0x12) \
|
|
X(QUAD, "long long", 0x13) \
|
|
X(OCT, "octal", 0x14) \
|
|
X(UCHAR, "unsigned char", 0x20) \
|
|
X(USHORT, "unsigned short", 0x21) \
|
|
X(ULONG, "unsigned long", 0x22) \
|
|
X(UQUAD, "unsigned long long", 0x23) \
|
|
X(UOCT, "unsigned octal", 0x24) \
|
|
X(BOOL08, "bool8", 0x30) \
|
|
X(BOOL16, "bool16", 0x31) \
|
|
X(BOOL32, "bool32", 0x32) \
|
|
X(BOOL64, "bool64", 0x33) \
|
|
X(REAL32, "float32", 0x40) \
|
|
X(REAL64, "float64", 0x41) \
|
|
X(REAL80, "float80", 0x42) \
|
|
X(REAL128, "float128", 0x43) \
|
|
X(REAL48, "float48", 0x44) \
|
|
X(REAL32PP, "float32pp", 0x45) \
|
|
X(REAL16, "float16", 0x46) \
|
|
X(CPLX32, "complex32", 0x50) \
|
|
X(CPLX64, "complex64", 0x51) \
|
|
X(CPLX80, "complex80", 0x52) \
|
|
X(CPLX128, "complex128", 0x53) \
|
|
X(BIT, "bit", 0x60) \
|
|
X(PASCHAR, "pscal_char", 0x61) \
|
|
X(BOOL32FF, "bool32ff", 0x62) /* 32-bit BOOL where syms_true is 0xffffffff */ \
|
|
X(INT1, "int8", 0x68) \
|
|
X(UINT1, "uint8", 0x69) \
|
|
X(RCHAR, "char", 0x70) \
|
|
X(WCHAR, "wchar_t", 0x71) \
|
|
X(INT2, "int16", 0x72) \
|
|
X(UINT2, "uint16", 0x73) \
|
|
X(INT4, "int32", 0x74) \
|
|
X(UINT4, "uint32", 0x75) \
|
|
X(INT8, "int64", 0x76) \
|
|
X(UINT8, "uint64", 0x77) \
|
|
X(INT16, "int128", 0x78) \
|
|
X(UINT16, "uint128", 0x79) \
|
|
X(CHAR16, "char16", 0x7a) \
|
|
X(CHAR32, "char32", 0x7b) \
|
|
X(CHAR8, "char8", 0x7c) \
|
|
X(PTR, "pointer", 0xf0) \
|
|
/* end of the list. */
|
|
|
|
#define PDB_BASIC_TYPE_IS_PTR(x) ((((x) & 0x0f00) == 0x600) || (((x) & 0x0f00) == 0x500))
|
|
#define PDB_BASIC_TYPE_SIZE_MASK(x) (((x) & 0x700) >> 8)
|
|
#define PDB_BASIC_TYPE_KIND_MASK(x) ((x) & 0xff)
|
|
#define PDB_BASIC_TYPE_SIZE_VALUE 0
|
|
#define PDB_BASIC_TYPE_SIZE_16BIT 1
|
|
#define PDB_BASIC_TYPE_SIZE_FAR_16BIT 2 /* 16:16 far pointer */
|
|
#define PDB_BASIC_TYPE_SIZE_HUGE_16BIT 3 /* 16:16 huge pointer*/
|
|
#define PDB_BASIC_TYPE_SIZE_32BIT 4
|
|
#define PDB_BASIC_TYPE_SIZE_16_32BIT 5 /* 16:32 pointer */
|
|
#define PDB_BASIC_TYPE_SIZE_64BIT 6
|
|
typedef enum {
|
|
#define X(name, display_name, value) PDB_BASIC_TYPE_##name = value,
|
|
PDB_BASIC_TYPE_LIST
|
|
#undef X
|
|
PDB_BASIC_TYPE_MAX
|
|
} pdb_basic_type_e;
|
|
typedef u32 pdb_basic_type;
|
|
|
|
typedef enum
|
|
{
|
|
/* leaf indices starting records but referenced from symbol records */
|
|
PDB_LF_MODIFIER_16t = 0x0001,
|
|
PDB_LF_POINTER_16t = 0x0002,
|
|
PDB_LF_ARRAY_16t = 0x0003,
|
|
PDB_LF_CLASS_16t = 0x0004,
|
|
PDB_LF_STRUCTURE_16t = 0x0005,
|
|
PDB_LF_UNION_16t = 0x0006,
|
|
PDB_LF_ENUM_16t = 0x0007,
|
|
PDB_LF_PROCEDURE_16t = 0x0008,
|
|
PDB_LF_MFUNCTION_16t = 0x0009,
|
|
PDB_LF_VTSHAPE = 0x000a,
|
|
PDB_LF_COBOL0_16t = 0x000b,
|
|
PDB_LF_COBOL1 = 0x000c,
|
|
PDB_LF_BARRAY_16t = 0x000d,
|
|
PDB_LF_LABEL = 0x000e,
|
|
PDB_LF_NULL = 0x000f,
|
|
PDB_LF_NOTTRAN = 0x0010,
|
|
PDB_LF_DIMARRAY_16t = 0x0011,
|
|
PDB_LF_VFTPATH_16t = 0x0012,
|
|
PDB_LF_PRECOMP_16t = 0x0013, /* not referenced from symbol */
|
|
PDB_LF_ENDPRECOMP = 0x0014, /* not referenced from symbol */
|
|
PDB_LF_OEM_16t = 0x0015, /* oem definable type string */
|
|
PDB_LF_TYPESERVER_ST = 0x0016, /* not referenced from symbol */
|
|
|
|
/* leaf indices starting records but referenced only from type records */
|
|
|
|
PDB_LF_SKIP_16t = 0x0200,
|
|
PDB_LF_ARGLIST_16t = 0x0201,
|
|
PDB_LF_DEFARG_16t = 0x0202,
|
|
PDB_LF_LIST = 0x0203,
|
|
PDB_LF_FIELDLIST_16t = 0x0204,
|
|
PDB_LF_DERIVED_16t = 0x0205,
|
|
PDB_LF_BITFIELD_16t = 0x0206,
|
|
PDB_LF_METHODLIST_16t = 0x0207,
|
|
PDB_LF_DIMCONU_16t = 0x0208,
|
|
PDB_LF_DIMCONLU_16t = 0x0209,
|
|
PDB_LF_DIMVARU_16t = 0x020a,
|
|
PDB_LF_DIMVARLU_16t = 0x020b,
|
|
PDB_LF_REFSYM = 0x020c,
|
|
|
|
PDB_LF_BCLASS_16t = 0x0400,
|
|
PDB_LF_VBCLASS_16t = 0x0401,
|
|
PDB_LF_IVBCLASS_16t = 0x0402,
|
|
PDB_LF_ENUMERATE_ST = 0x0403,
|
|
PDB_LF_FRIENDFCN_16t = 0x0404,
|
|
PDB_LF_INDEX_16t = 0x0405,
|
|
PDB_LF_MEMBER_16t = 0x0406,
|
|
PDB_LF_STMEMBER_16t = 0x0407,
|
|
PDB_LF_METHOD_16t = 0x0408,
|
|
PDB_LF_NESTTYPE_16t = 0x0409,
|
|
PDB_LF_VFUNCTAB_16t = 0x040a,
|
|
PDB_LF_FRIENDCLS_16t = 0x040b,
|
|
PDB_LF_ONEMETHOD_16t = 0x040c,
|
|
PDB_LF_VFUNCOFF_16t = 0x040d,
|
|
|
|
/* 32-bit type index versions of leaves, all have the 0x1000 bit set */
|
|
PDB_LF_TI16_MAX = 0x1000,
|
|
|
|
PDB_LF_MODIFIER = 0x1001,
|
|
PDB_LF_POINTER = 0x1002,
|
|
PDB_LF_ARRAY_ST = 0x1003,
|
|
PDB_LF_CLASS_ST = 0x1004,
|
|
PDB_LF_STRUCTURE_ST = 0x1005,
|
|
PDB_LF_UNION_ST = 0x1006,
|
|
PDB_LF_ENUM_ST = 0x1007,
|
|
PDB_LF_PROCEDURE = 0x1008,
|
|
PDB_LF_MFUNCTION = 0x1009,
|
|
PDB_LF_COBOL0 = 0x100a,
|
|
PDB_LF_BARRAY = 0x100b,
|
|
PDB_LF_DIMARRAY_ST = 0x100c,
|
|
PDB_LF_VFTPATH = 0x100d,
|
|
PDB_LF_PRECOMP_ST = 0x100e, /* not referenced from symbol */
|
|
PDB_LF_OEM = 0x100f, /* oem definable type string */
|
|
PDB_LF_ALIAS_ST = 0x1010, /* alias (typedef) type */
|
|
PDB_LF_OEM2 = 0x1011, /* oem definable type string */
|
|
|
|
/* leaf indices starting records but referenced only from type records */
|
|
|
|
PDB_LF_SKIP = 0x1200,
|
|
PDB_LF_ARGLIST = 0x1201,
|
|
PDB_LF_DEFARG_ST = 0x1202,
|
|
PDB_LF_FIELDLIST = 0x1203,
|
|
PDB_LF_DERIVED = 0x1204,
|
|
PDB_LF_BITFIELD = 0x1205,
|
|
PDB_LF_METHODLIST = 0x1206,
|
|
PDB_LF_DIMCONU = 0x1207,
|
|
PDB_LF_DIMCONLU = 0x1208,
|
|
PDB_LF_DIMVARU = 0x1209,
|
|
PDB_LF_DIMVARLU = 0x120a,
|
|
|
|
PDB_LF_BCLASS = 0x1400,
|
|
PDB_LF_VBCLASS = 0x1401,
|
|
PDB_LF_IVBCLASS = 0x1402,
|
|
PDB_LF_FRIENDFCN_ST = 0x1403,
|
|
PDB_LF_INDEX = 0x1404,
|
|
PDB_LF_MEMBER_ST = 0x1405,
|
|
PDB_LF_STMEMBER_ST = 0x1406,
|
|
PDB_LF_METHOD_ST = 0x1407,
|
|
PDB_LF_NESTTYPE_ST = 0x1408,
|
|
PDB_LF_VFUNCTAB = 0x1409,
|
|
PDB_LF_FRIENDCLS = 0x140a,
|
|
PDB_LF_ONEMETHOD_ST = 0x140b,
|
|
PDB_LF_VFUNCOFF = 0x140c,
|
|
PDB_LF_NESTTYPEEX_ST = 0x140d,
|
|
PDB_LF_MEMBERMODIFY_ST = 0x140e,
|
|
PDB_LF_MANAGED_ST = 0x140f,
|
|
|
|
/* Types w/ SZ names */
|
|
|
|
PDB_LF_ST_MAX = 0x1500,
|
|
|
|
PDB_LF_TYPESERVER = 0x1501, /* not referenced from symbol */
|
|
PDB_LF_ENUMERATE = 0x1502,
|
|
PDB_LF_ARRAY = 0x1503,
|
|
PDB_LF_CLASS = 0x1504,
|
|
PDB_LF_STRUCTURE = 0x1505,
|
|
PDB_LF_UNION = 0x1506,
|
|
PDB_LF_ENUM = 0x1507,
|
|
PDB_LF_DIMARRAY = 0x1508,
|
|
PDB_LF_PRECOMP = 0x1509, /* not referenced from symbol */
|
|
PDB_LF_ALIAS = 0x150a, /* alias (typedef) type */
|
|
PDB_LF_DEFARG = 0x150b,
|
|
PDB_LF_FRIENDFCN = 0x150c,
|
|
PDB_LF_MEMBER = 0x150d,
|
|
PDB_LF_STMEMBER = 0x150e,
|
|
PDB_LF_METHOD = 0x150f,
|
|
PDB_LF_NESTTYPE = 0x1510,
|
|
PDB_LF_ONEMETHOD = 0x1511,
|
|
PDB_LF_NESTTYPEEX = 0x1512,
|
|
PDB_LF_MEMBERMODIFY = 0x1513,
|
|
PDB_LF_MANAGED = 0x1514,
|
|
PDB_LF_TYPESERVER2 = 0x1515,
|
|
|
|
PDB_LF_STRIDED_ARRAY = 0x1516, /* same as LF_ARRAY, but with stride between adjacent elements */
|
|
PDB_LF_HLSL = 0x1517,
|
|
PDB_LF_MODIFIER_EX = 0x1518,
|
|
PDB_LF_INTERFACE = 0x1519,
|
|
PDB_LF_BINTERFACE = 0x151a,
|
|
PDB_LF_VECTOR = 0x151b,
|
|
PDB_LF_MATRIX = 0x151c,
|
|
|
|
PDB_LF_VFTABLE = 0x151d, /* a virtual function table */
|
|
PDB_LF_ENDOFLEAFRECORD = PDB_LF_VFTABLE,
|
|
|
|
PDB_LF_TYPE_LAST, /* one greater than the last type record */
|
|
PDB_LF_TYPE_MAX = PDB_LF_TYPE_LAST - 1,
|
|
|
|
PDB_LF_FUNC_ID = 0x1601, /* static func ID */
|
|
PDB_LF_MFUNC_ID = 0x1602, /* member func ID */
|
|
PDB_LF_BUILDINFO = 0x1603, /* build info: tool, version, command line, src/pdb file */
|
|
PDB_LF_SUBSTR_LIST = 0x1604, /* similar to LF_ARGLIST, for list of sub strings */
|
|
PDB_LF_STRING_ID = 0x1605, /* string ID */
|
|
|
|
PDB_LF_UDT_SRC_LINE = 0x1606, /* source and line on where an UDT is defined */
|
|
/* only generated by compiler */
|
|
|
|
PDB_LF_UDT_MOD_SRC_LINE = 0x1607, /* module, source and line on where an UDT is defined */
|
|
/* only generated by linker */
|
|
|
|
PDB_LF_CLASSPTR = 0x1608,
|
|
PDB_LF_CLASSPTR2 = 0x1609,
|
|
|
|
PDB_LF_ID_LAST, /* one greater than the last ID record */
|
|
PDB_LF_ID_MAX = PDB_LF_ID_LAST - 1,
|
|
|
|
PDB_LF_NUMERIC = 0x8000,
|
|
PDB_LF_CHAR = 0x8000,
|
|
PDB_LF_SHORT = 0x8001,
|
|
PDB_LF_USHORT = 0x8002,
|
|
PDB_LF_LONG = 0x8003,
|
|
PDB_LF_ULONG = 0x8004,
|
|
PDB_LF_REAL32 = 0x8005,
|
|
PDB_LF_REAL64 = 0x8006,
|
|
PDB_LF_REAL80 = 0x8007,
|
|
PDB_LF_REAL128 = 0x8008,
|
|
PDB_LF_QUADWORD = 0x8009,
|
|
PDB_LF_UQUADWORD = 0x800a,
|
|
PDB_LF_REAL48 = 0x800b,
|
|
PDB_LF_COMPLEX32 = 0x800c,
|
|
PDB_LF_COMPLEX64 = 0x800d,
|
|
PDB_LF_COMPLEX80 = 0x800e,
|
|
PDB_LF_COMPLEX128 = 0x800f,
|
|
PDB_LF_VARSTRING = 0x8010,
|
|
|
|
PDB_LF_OCTWORD = 0x8017,
|
|
PDB_LF_UOCTWORD = 0x8018,
|
|
|
|
PDB_LF_DECIMAL = 0x8019,
|
|
PDB_LF_DATE = 0x801a,
|
|
PDB_LF_UTF8STRING = 0x801b,
|
|
|
|
PDB_LF_REAL16 = 0x801c,
|
|
|
|
PDB_LF_PAD0 = 0xf0,
|
|
PDB_LF_PAD1 = 0xf1,
|
|
PDB_LF_PAD2 = 0xf2,
|
|
PDB_LF_PAD3 = 0xf3,
|
|
PDB_LF_PAD4 = 0xf4,
|
|
PDB_LF_PAD5 = 0xf5,
|
|
PDB_LF_PAD6 = 0xf6,
|
|
PDB_LF_PAD7 = 0xf7,
|
|
PDB_LF_PAD8 = 0xf8,
|
|
PDB_LF_PAD9 = 0xf9,
|
|
PDB_LF_PAD10 = 0xfa,
|
|
PDB_LF_PAD11 = 0xfb,
|
|
PDB_LF_PAD12 = 0xfc,
|
|
PDB_LF_PAD13 = 0xfd,
|
|
PDB_LF_PAD14 = 0xfe,
|
|
PDB_LF_PAD15 = 0xff
|
|
} pdb_lf_e;
|
|
|
|
typedef struct pdb_lf_label
|
|
{
|
|
u16 mode; // pdb_cv_ptrmode
|
|
} pdb_lf_label;
|
|
|
|
typedef struct pdb_lf_modsrcline
|
|
{
|
|
pdb_cv_itype udt_itype;
|
|
pdb_cv_itemid src;
|
|
u32 ln;
|
|
u16 mod;
|
|
} pdb_lf_modsrcline;
|
|
|
|
typedef struct pdb_lf_srcline
|
|
{
|
|
pdb_cv_itype udt_itype;
|
|
pdb_cv_itemid src;
|
|
u32 ln;
|
|
} pdb_lf_srcline;
|
|
|
|
typedef struct pdb_lf_func_id
|
|
{
|
|
pdb_cv_itemid scope_id; /* parent scope of the ID, 0 if global */
|
|
pdb_cv_itype itype; /* function type */
|
|
/* unsigned char name[CV_ZEROLEN]; */
|
|
} pdb_lf_func_id;
|
|
|
|
typedef struct pdb_lf_mfunc_id
|
|
{
|
|
pdb_cv_itemid parent_itype;
|
|
pdb_cv_itemid itype;
|
|
/* unsigned char name[CV_ZEROLEN]; */
|
|
} pdb_lf_mfunc_id;
|
|
|
|
typedef struct pdb_lf_string_id
|
|
{
|
|
pdb_cv_itemid id;
|
|
/* unsigned char name[CV_ZEROLEN] */
|
|
} pdb_lf_string_id;
|
|
|
|
typedef struct pdb_lf_mfunc
|
|
{
|
|
/* type index of return value */
|
|
pdb_cv_itype rvtype;
|
|
|
|
/* type index of containing class */
|
|
pdb_cv_itype classtype;
|
|
|
|
/* type index of this pointer (model specific) */
|
|
pdb_cv_itype thistype;
|
|
|
|
/* calling convention (call_t) */
|
|
U8 calltype;
|
|
|
|
/* attributes */
|
|
pdb_cv_funcattr_t funcattr;
|
|
|
|
/* number of parameters */
|
|
U16 parmcount;
|
|
|
|
/* type index of argument list */
|
|
pdb_cv_itype arglist;
|
|
|
|
/* this adjuster (long because pad required anyway) */
|
|
U32 thisadjust;
|
|
} pdb_lf_mfunc;
|
|
|
|
typedef struct pdb_lf_modifier
|
|
{
|
|
/* type index of modified type */
|
|
pdb_cv_itype itype;
|
|
pdb_cv_modifier_t attr;
|
|
} pdb_lf_modifier;
|
|
|
|
typedef struct pdb_lf_class
|
|
{
|
|
/* count of number of elements in class */
|
|
U16 count;
|
|
|
|
/* (pdb_cv_prop_t) property attribute field */
|
|
pdb_cv_prop_t prop;
|
|
|
|
/* (type index) type index of LF_FIELD descriptor list */
|
|
U32 field;
|
|
|
|
/* (type index) type index of derived from list if not zero */
|
|
U32 derived;
|
|
|
|
/* (type index) type index of vshape table for this class */
|
|
U32 vshape;
|
|
|
|
/* char data[] size and name follow */
|
|
} pdb_lf_class;
|
|
|
|
typedef struct pdb_lf_enum
|
|
{
|
|
/* number of elements */
|
|
U16 count;
|
|
|
|
/* property attribute field */
|
|
pdb_cv_prop_t prop;
|
|
|
|
/* underlying type of the enum */
|
|
pdb_cv_itype itype;
|
|
|
|
/* type index of LF_FIELD descriptor list */
|
|
U32 field;
|
|
|
|
/* unsigned char name[1]; length prefixed name of enum */
|
|
} pdb_lf_enum;
|
|
|
|
typedef struct pdb_lf_onemethod
|
|
{
|
|
pdb_cv_fldattr_t attr;
|
|
pdb_cv_itype itype;
|
|
/* U32 vbaseoff[]; */
|
|
} pdb_lf_onemethod;
|
|
|
|
typedef struct pdb_lf_stmember
|
|
{
|
|
/* attribute mask */
|
|
pdb_cv_fldattr_t attr;
|
|
|
|
/* index of type record for field */
|
|
pdb_cv_itype index;
|
|
|
|
/* char name[]; */
|
|
} pdb_lf_stmember;
|
|
|
|
typedef struct pdb_lf_method
|
|
{
|
|
U16 count;
|
|
pdb_cv_itype itype_list;
|
|
/* char name[] */
|
|
} pdb_lf_method;
|
|
|
|
typedef struct pdb_lf_blcass
|
|
{
|
|
pdb_cv_fldattr_t attr;
|
|
pdb_cv_itype itype;
|
|
/* U32 offset[] */
|
|
} pdb_lf_bclass;
|
|
|
|
typedef struct pdb_lf_vfunctab
|
|
{
|
|
char pad[2];
|
|
pdb_cv_itype itype;
|
|
} pdb_lf_vfunctab;
|
|
|
|
typedef struct pdb_lf_vftable
|
|
{
|
|
pdb_cv_itype owner_itype;
|
|
pdb_cv_itype base_table_itype;
|
|
u32 offset_in_object_layout;
|
|
u32 names_len;
|
|
/*char names[0];*/ // Name of the table comes first and then follow method names
|
|
} pdb_lf_vftable;
|
|
|
|
typedef struct pdb_lf_vfuncoff
|
|
{
|
|
char pad[2];
|
|
pdb_cv_itype itype;
|
|
u32 offset;
|
|
} pdb_lf_vfuncoff;
|
|
|
|
typedef struct pdb_lf_vbclass
|
|
{
|
|
pdb_cv_fldattr_t attr;
|
|
pdb_cv_itype index;
|
|
pdb_cv_itype vbptr;
|
|
// u8 vbpoff[0];
|
|
// u32 virtual_base_offset_from_vtable;
|
|
} pdb_lf_vbclass;
|
|
|
|
typedef struct pdb_lf_nesttype
|
|
{
|
|
char pad[2];
|
|
pdb_cv_itype itype;
|
|
/* char name[]; */
|
|
} pdb_lf_nesttype;
|
|
|
|
typedef struct pdb_off_cb
|
|
{
|
|
U32 off;
|
|
U32 cb;
|
|
} pdb_off_cb;
|
|
|
|
typedef struct pdb_lf_index
|
|
{
|
|
char pad[2];
|
|
|
|
/* type index of refed leaf */
|
|
pdb_cv_itype itype;
|
|
} pdb_lf_index;
|
|
|
|
typedef struct pdb_lf_array
|
|
{
|
|
/* type index of element type */
|
|
pdb_cv_itype entry_itype;
|
|
|
|
/* type index of indexing type */
|
|
pdb_cv_itype index_itype;
|
|
|
|
/* char data[]; variable length data specifying size in bytes and name */
|
|
} pdb_lf_array;
|
|
|
|
typedef struct pdb_lf_enumerate
|
|
{
|
|
pdb_cv_fldattr_t attr;
|
|
/* char value[0]; variable length value field followed by length prefixed name */
|
|
} pdb_lf_enumerate;
|
|
|
|
typedef struct pdb_lf_member
|
|
{
|
|
pdb_cv_fldattr_t attr;
|
|
|
|
pdb_cv_itype itype;
|
|
|
|
/* U8 offset[] // variable length offset of field followed by length prefixed name of field */
|
|
} pdb_lf_member;
|
|
|
|
typedef struct pdb_lf_union
|
|
{
|
|
/* count of number of elements in class */
|
|
U16 count;
|
|
|
|
/* property attribute field */
|
|
pdb_cv_prop_t prop;
|
|
|
|
/* type index of LF_FIELD descriptor list a numeric and name follow. */
|
|
U32 field;
|
|
} pdb_lf_union;
|
|
|
|
typedef struct pdb_lf_arglist
|
|
{
|
|
U32 count;
|
|
/* U32 *itypes; */
|
|
} pdb_lf_arglist;
|
|
|
|
typedef struct pdb_lf_proc
|
|
{
|
|
/* type index of return value */
|
|
pdb_cv_itype ret_itype;
|
|
|
|
/* calling convention (pdb_cv_call_e) */
|
|
U8 call_kind;
|
|
|
|
pdb_cv_funcattr_t funcattr;
|
|
|
|
/* number of parameters */
|
|
U16 arg_count;
|
|
|
|
/* type index of argument list */
|
|
pdb_cv_itype arg_itype;
|
|
} pdb_lf_proc;
|
|
|
|
typedef struct pdb_lf_mproc
|
|
{
|
|
/* type index of return value */
|
|
pdb_cv_itype ret_itype;
|
|
|
|
/* type index of containing class */
|
|
pdb_cv_itype class_itype;
|
|
|
|
/* type index of this pointer (model specific) */
|
|
pdb_cv_itype this_itype;
|
|
|
|
/* pdb_cv_call_e */
|
|
U8 call_kind;
|
|
|
|
pdb_cv_funcattr_t funcattr;
|
|
|
|
/* number of parameters */
|
|
U16 arg_count;
|
|
|
|
/* type index of argument list */
|
|
pdb_cv_itype arg_itype;
|
|
|
|
/* this adjuster (s32 because pad required anyway) */
|
|
S32 thisadjust;
|
|
} pdb_lf_mproc;
|
|
|
|
typedef struct pdb_lf_ptr
|
|
{
|
|
pdb_cv_itype itype;
|
|
pdb_cv_ptr_attrib_t attr;
|
|
} pdb_lf_ptr;
|
|
|
|
typedef struct pdb_lf_bitfield
|
|
{
|
|
pdb_cv_itype itype;
|
|
U8 len;
|
|
U8 pos;
|
|
} pdb_lf_bitfield;
|
|
|
|
//
|
|
// Virtual Shape Table
|
|
//
|
|
|
|
enum
|
|
{
|
|
PDB_CV_VTS_NEAR = 0, // 16 bit pointer
|
|
PDB_CV_VTS_FAR = 1, // 16:16 bit pointer
|
|
PDB_CV_VTS_THIN = 2, // ??
|
|
// From MS pdf (page 36):
|
|
// Address point displacement to outermost class. This is at entry[-1] from table entry
|
|
PDB_CV_VTS_OUTER = 3,
|
|
// From MS pdf (page 36):
|
|
// Far pointer to metaclass descriptor. This is at entry[-2] from table address.
|
|
PDB_CV_VTS_META = 4,
|
|
PDB_CV_VTS_NEAR32 = 5, // 32bit pointer
|
|
PDB_CV_VTS_FAR32 = 6, // ??
|
|
PDB_CV_VTS_UNUSED = 7
|
|
};
|
|
typedef u32 pdb_lf_vts_desc;
|
|
|
|
typedef struct pdb_lf_vtshape
|
|
{
|
|
u16 count;
|
|
// pdb_lf_vts_desc desc[0];
|
|
} pdb_lf_vtshape;
|
|
|
|
typedef struct pdb_ml_method
|
|
{
|
|
pdb_cv_fldattr_t attr;
|
|
u8 pad[2];
|
|
pdb_cv_itype index;
|
|
// unsigned long vbaseoff[0];
|
|
} pdb_ml_method;
|
|
|
|
typedef struct pdb_ml_methodlist
|
|
{
|
|
pdb_ml_method list[1];
|
|
} pdb_ml_methodlist;
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
typedef struct pdb_lf_classptr
|
|
{
|
|
u32 prop; // pdb_cv_prop_t but 32bit
|
|
pdb_cv_itype arglist_itype;
|
|
u32 unknown2;
|
|
u32 unknown3;
|
|
u16 unknown4;
|
|
//char size[];
|
|
//char name[0];
|
|
//char linkage_name[0];
|
|
} pdb_lf_classptr;
|
|
|
|
#pragma pack(pop) /* CodeView bottom */
|
|
|
|
#endif /* SYMS_CODEVIEW_INCLUDE_H */
|