mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
2939 lines
69 KiB
C
2939 lines
69 KiB
C
// Copyright (c) 2024 Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
#ifndef CODEVIEW_H
|
|
#define CODEVIEW_H
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
// https://github.com/microsoft/microsoft-pdb/blob/master/include/cvinfo.h
|
|
|
|
////////////////////////////////
|
|
//~ rjf: CodeView Format Shared Types
|
|
|
|
typedef U32 CV_TypeId;
|
|
typedef U32 CV_ItemId;
|
|
typedef U16 CV_ModIndex;
|
|
typedef U16 CV_SectionIndex;
|
|
typedef U16 CV_Reg;
|
|
|
|
read_only global CV_TypeId cv_type_id_variadic = 0xFFFFFFFF;
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Generated Code
|
|
|
|
#include "generated/codeview.meta.h"
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Registers
|
|
|
|
// X(NAME, CODE, (RDI_RegisterCode_X86) NAME, BYTE_POS, BYTE_SIZE)
|
|
#define CV_Reg_X86_XList(X) \
|
|
X(NONE, 0, nil, 0, 0)\
|
|
X(AL, 1, eax, 0, 1)\
|
|
X(CL, 2, ecx, 0, 1)\
|
|
X(DL, 3, edx, 0, 1)\
|
|
X(BL, 4, ebx, 0, 1)\
|
|
X(AH, 5, eax, 1, 1)\
|
|
X(CH, 6, ecx, 1, 1)\
|
|
X(DH, 7, edx, 1, 1)\
|
|
X(BH, 8, ebx, 1, 1)\
|
|
X(AX, 9, eax, 0, 2)\
|
|
X(CX, 10, ecx, 0, 2)\
|
|
X(DX, 11, edx, 0, 2)\
|
|
X(BX, 12, ebx, 0, 2)\
|
|
X(SP, 13, esp, 0, 2)\
|
|
X(BP, 14, ebp, 0, 2)\
|
|
X(SI, 15, esi, 0, 2)\
|
|
X(DI, 16, edi, 0, 2)\
|
|
X(EAX, 17, eax, 0, 4)\
|
|
X(ECX, 18, ecx, 0, 4)\
|
|
X(EDX, 19, edx, 0, 4)\
|
|
X(EBX, 20, ebx, 0, 4)\
|
|
X(ESP, 21, esp, 0, 4)\
|
|
X(EBP, 22, ebp, 0, 4)\
|
|
X(ESI, 23, esi, 0, 4)\
|
|
X(EDI, 24, edi, 0, 4)\
|
|
X(ES, 25, es, 0, 2)\
|
|
X(CS, 26, cs, 0, 2)\
|
|
X(SS, 27, ss, 0, 2)\
|
|
X(DS, 28, ds, 0, 2)\
|
|
X(FS, 29, fs, 0, 2)\
|
|
X(GS, 30, gs, 0, 2)\
|
|
X(IP, 31, eip, 0, 2)\
|
|
X(FLAGS, 32, eflags, 0, 2)\
|
|
X(EIP, 33, eip, 0, 4)\
|
|
X(EFLAGS, 34, eflags, 0, 4)\
|
|
X(MM0, 146, fpr0, 0, 8)\
|
|
X(MM1, 147, fpr1, 0, 8)\
|
|
X(MM2, 148, fpr2, 0, 8)\
|
|
X(MM3, 149, fpr3, 0, 8)\
|
|
X(MM4, 150, fpr4, 0, 8)\
|
|
X(MM5, 151, fpr5, 0, 8)\
|
|
X(MM6, 152, fpr6, 0, 8)\
|
|
X(MM7, 153, fpr7, 0, 8)\
|
|
X(XMM0, 154, ymm0, 0, 16)\
|
|
X(XMM1, 155, ymm1, 0, 16)\
|
|
X(XMM2, 156, ymm2, 0, 16)\
|
|
X(XMM3, 157, ymm3, 0, 16)\
|
|
X(XMM4, 158, ymm4, 0, 16)\
|
|
X(XMM5, 159, ymm5, 0, 16)\
|
|
X(XMM6, 160, ymm6, 0, 16)\
|
|
X(XMM7, 161, ymm7, 0, 16)\
|
|
X(XMM00, 162, ymm0, 0, 4)\
|
|
X(XMM01, 163, ymm0, 4, 4)\
|
|
X(XMM02, 164, ymm0, 8, 4)\
|
|
X(XMM03, 165, ymm0, 12, 4)\
|
|
X(XMM10, 166, ymm1, 0, 4)\
|
|
X(XMM11, 167, ymm1, 4, 4)\
|
|
X(XMM12, 168, ymm1, 8, 4)\
|
|
X(XMM13, 169, ymm1, 12, 4)\
|
|
X(XMM20, 170, ymm2, 0, 4)\
|
|
X(XMM21, 171, ymm2, 4, 4)\
|
|
X(XMM22, 172, ymm2, 8, 4)\
|
|
X(XMM23, 173, ymm2, 12, 4)\
|
|
X(XMM30, 174, ymm3, 0, 4)\
|
|
X(XMM31, 175, ymm3, 4, 4)\
|
|
X(XMM32, 176, ymm3, 8, 4)\
|
|
X(XMM33, 177, ymm3, 12, 4)\
|
|
X(XMM40, 178, ymm4, 0, 4)\
|
|
X(XMM41, 179, ymm4, 4, 4)\
|
|
X(XMM42, 180, ymm4, 8, 4)\
|
|
X(XMM43, 181, ymm4, 12, 4)\
|
|
X(XMM50, 182, ymm5, 0, 4)\
|
|
X(XMM51, 183, ymm5, 4, 4)\
|
|
X(XMM52, 184, ymm5, 8, 4)\
|
|
X(XMM53, 185, ymm5, 12, 4)\
|
|
X(XMM60, 186, ymm6, 0, 4)\
|
|
X(XMM61, 187, ymm6, 4, 4)\
|
|
X(XMM62, 188, ymm6, 8, 4)\
|
|
X(XMM63, 189, ymm6, 12, 4)\
|
|
X(XMM70, 190, ymm7, 0, 4)\
|
|
X(XMM71, 191, ymm7, 4, 4)\
|
|
X(XMM72, 192, ymm7, 8, 4)\
|
|
X(XMM73, 193, ymm7, 12, 4)\
|
|
X(XMM0L, 194, ymm0, 0, 8)\
|
|
X(XMM1L, 195, ymm1, 0, 8)\
|
|
X(XMM2L, 196, ymm2, 0, 8)\
|
|
X(XMM3L, 197, ymm3, 0, 8)\
|
|
X(XMM4L, 198, ymm4, 0, 8)\
|
|
X(XMM5L, 199, ymm5, 0, 8)\
|
|
X(XMM6L, 200, ymm6, 0, 8)\
|
|
X(XMM7L, 201, ymm7, 0, 8)\
|
|
X(XMM0H, 202, ymm0, 8, 8)\
|
|
X(XMM1H, 203, ymm1, 8, 8)\
|
|
X(XMM2H, 204, ymm2, 8, 8)\
|
|
X(XMM3H, 205, ymm3, 8, 8)\
|
|
X(XMM4H, 206, ymm4, 8, 8)\
|
|
X(XMM5H, 207, ymm5, 8, 8)\
|
|
X(XMM6H, 208, ymm6, 8, 8)\
|
|
X(XMM7H, 209, ymm7, 8, 8)\
|
|
X(YMM0, 252, ymm0, 0, 32)\
|
|
X(YMM1, 253, ymm1, 0, 32)\
|
|
X(YMM2, 254, ymm2, 0, 32)\
|
|
X(YMM3, 255, ymm3, 0, 32)\
|
|
X(YMM4, 256, ymm4, 0, 32)\
|
|
X(YMM5, 257, ymm5, 0, 32)\
|
|
X(YMM6, 258, ymm6, 0, 32)\
|
|
X(YMM7, 259, ymm7, 0, 32)\
|
|
X(YMM0H, 260, ymm0, 16, 16)\
|
|
X(YMM1H, 261, ymm1, 16, 16)\
|
|
X(YMM2H, 262, ymm2, 16, 16)\
|
|
X(YMM3H, 263, ymm3, 16, 16)\
|
|
X(YMM4H, 264, ymm4, 16, 16)\
|
|
X(YMM5H, 265, ymm5, 16, 16)\
|
|
X(YMM6H, 266, ymm6, 16, 16)\
|
|
X(YMM7H, 267, ymm7, 16, 16)\
|
|
X(YMM0I0, 268, ymm0, 0, 8)\
|
|
X(YMM0I1, 269, ymm0, 8, 8)\
|
|
X(YMM0I2, 270, ymm0, 16, 8)\
|
|
X(YMM0I3, 271, ymm0, 24, 8)\
|
|
X(YMM1I0, 272, ymm1, 0, 8)\
|
|
X(YMM1I1, 273, ymm1, 8, 8)\
|
|
X(YMM1I2, 274, ymm1, 16, 8)\
|
|
X(YMM1I3, 275, ymm1, 24, 8)\
|
|
X(YMM2I0, 276, ymm2, 0, 8)\
|
|
X(YMM2I1, 277, ymm2, 8, 8)\
|
|
X(YMM2I2, 278, ymm2, 16, 8)\
|
|
X(YMM2I3, 279, ymm2, 24, 8)\
|
|
X(YMM3I0, 280, ymm3, 0, 8)\
|
|
X(YMM3I1, 281, ymm3, 8, 8)\
|
|
X(YMM3I2, 282, ymm3, 16, 8)\
|
|
X(YMM3I3, 283, ymm3, 24, 8)\
|
|
X(YMM4I0, 284, ymm4, 0, 8)\
|
|
X(YMM4I1, 285, ymm4, 8, 8)\
|
|
X(YMM4I2, 286, ymm4, 16, 8)\
|
|
X(YMM4I3, 287, ymm4, 24, 8)\
|
|
X(YMM5I0, 288, ymm5, 0, 8)\
|
|
X(YMM5I1, 289, ymm5, 8, 8)\
|
|
X(YMM5I2, 290, ymm5, 16, 8)\
|
|
X(YMM5I3, 291, ymm5, 24, 8)\
|
|
X(YMM6I0, 292, ymm6, 0, 8)\
|
|
X(YMM6I1, 293, ymm6, 8, 8)\
|
|
X(YMM6I2, 294, ymm6, 16, 8)\
|
|
X(YMM6I3, 295, ymm6, 24, 8)\
|
|
X(YMM7I0, 296, ymm7, 0, 8)\
|
|
X(YMM7I1, 297, ymm7, 8, 8)\
|
|
X(YMM7I2, 298, ymm7, 16, 8)\
|
|
X(YMM7I3, 299, ymm7, 24, 8)\
|
|
X(YMM0F0, 300, ymm0, 0, 4)\
|
|
X(YMM0F1, 301, ymm0, 4, 4)\
|
|
X(YMM0F2, 302, ymm0, 8, 4)\
|
|
X(YMM0F3, 303, ymm0, 12, 4)\
|
|
X(YMM0F4, 304, ymm0, 16, 4)\
|
|
X(YMM0F5, 305, ymm0, 20, 4)\
|
|
X(YMM0F6, 306, ymm0, 24, 4)\
|
|
X(YMM0F7, 307, ymm0, 28, 4)\
|
|
X(YMM1F0, 308, ymm1, 0, 4)\
|
|
X(YMM1F1, 309, ymm1, 4, 4)\
|
|
X(YMM1F2, 310, ymm1, 8, 4)\
|
|
X(YMM1F3, 311, ymm1, 12, 4)\
|
|
X(YMM1F4, 312, ymm1, 16, 4)\
|
|
X(YMM1F5, 313, ymm1, 20, 4)\
|
|
X(YMM1F6, 314, ymm1, 24, 4)\
|
|
X(YMM1F7, 315, ymm1, 28, 4)\
|
|
X(YMM2F0, 316, ymm2, 0, 4)\
|
|
X(YMM2F1, 317, ymm2, 4, 4)\
|
|
X(YMM2F2, 318, ymm2, 8, 4)\
|
|
X(YMM2F3, 319, ymm2, 12, 4)\
|
|
X(YMM2F4, 320, ymm2, 16, 4)\
|
|
X(YMM2F5, 321, ymm2, 20, 4)\
|
|
X(YMM2F6, 322, ymm2, 24, 4)\
|
|
X(YMM2F7, 323, ymm2, 28, 4)\
|
|
X(YMM3F0, 324, ymm3, 0, 4)\
|
|
X(YMM3F1, 325, ymm3, 4, 4)\
|
|
X(YMM3F2, 326, ymm3, 8, 4)\
|
|
X(YMM3F3, 327, ymm3, 12, 4)\
|
|
X(YMM3F4, 328, ymm3, 16, 4)\
|
|
X(YMM3F5, 329, ymm3, 20, 4)\
|
|
X(YMM3F6, 330, ymm3, 24, 4)\
|
|
X(YMM3F7, 331, ymm3, 28, 4)\
|
|
X(YMM4F0, 332, ymm4, 0, 4)\
|
|
X(YMM4F1, 333, ymm4, 4, 4)\
|
|
X(YMM4F2, 334, ymm4, 8, 4)\
|
|
X(YMM4F3, 335, ymm4, 12, 4)\
|
|
X(YMM4F4, 336, ymm4, 16, 4)\
|
|
X(YMM4F5, 337, ymm4, 20, 4)\
|
|
X(YMM4F6, 338, ymm4, 24, 4)\
|
|
X(YMM4F7, 339, ymm4, 28, 4)\
|
|
X(YMM5F0, 340, ymm5, 0, 4)\
|
|
X(YMM5F1, 341, ymm5, 4, 4)\
|
|
X(YMM5F2, 342, ymm5, 8, 4)\
|
|
X(YMM5F3, 343, ymm5, 12, 4)\
|
|
X(YMM5F4, 344, ymm5, 16, 4)\
|
|
X(YMM5F5, 345, ymm5, 20, 4)\
|
|
X(YMM5F6, 346, ymm5, 24, 4)\
|
|
X(YMM5F7, 347, ymm5, 28, 4)\
|
|
X(YMM6F0, 348, ymm6, 0, 4)\
|
|
X(YMM6F1, 349, ymm6, 4, 4)\
|
|
X(YMM6F2, 350, ymm6, 8, 4)\
|
|
X(YMM6F3, 351, ymm6, 12, 4)\
|
|
X(YMM6F4, 352, ymm6, 16, 4)\
|
|
X(YMM6F5, 353, ymm6, 20, 4)\
|
|
X(YMM6F6, 354, ymm6, 24, 4)\
|
|
X(YMM6F7, 355, ymm6, 28, 4)\
|
|
X(YMM7F0, 356, ymm7, 0, 4)\
|
|
X(YMM7F1, 357, ymm7, 4, 4)\
|
|
X(YMM7F2, 358, ymm7, 8, 4)\
|
|
X(YMM7F3, 359, ymm7, 12, 4)\
|
|
X(YMM7F4, 360, ymm7, 16, 4)\
|
|
X(YMM7F5, 361, ymm7, 20, 4)\
|
|
X(YMM7F6, 362, ymm7, 24, 4)\
|
|
X(YMM7F7, 363, ymm7, 28, 4)\
|
|
X(YMM0D0, 364, ymm0, 0, 8)\
|
|
X(YMM0D1, 365, ymm0, 8, 8)\
|
|
X(YMM0D2, 366, ymm0, 16, 8)\
|
|
X(YMM0D3, 367, ymm0, 24, 8)\
|
|
X(YMM1D0, 368, ymm1, 0, 8)\
|
|
X(YMM1D1, 369, ymm1, 8, 8)\
|
|
X(YMM1D2, 370, ymm1, 16, 8)\
|
|
X(YMM1D3, 371, ymm1, 24, 8)\
|
|
X(YMM2D0, 372, ymm2, 0, 8)\
|
|
X(YMM2D1, 373, ymm2, 8, 8)\
|
|
X(YMM2D2, 374, ymm2, 16, 8)\
|
|
X(YMM2D3, 375, ymm2, 24, 8)\
|
|
X(YMM3D0, 376, ymm3, 0, 8)\
|
|
X(YMM3D1, 377, ymm3, 8, 8)\
|
|
X(YMM3D2, 378, ymm3, 16, 8)\
|
|
X(YMM3D3, 379, ymm3, 24, 8)\
|
|
X(YMM4D0, 380, ymm4, 0, 8)\
|
|
X(YMM4D1, 381, ymm4, 8, 8)\
|
|
X(YMM4D2, 382, ymm4, 16, 8)\
|
|
X(YMM4D3, 383, ymm4, 24, 8)\
|
|
X(YMM5D0, 384, ymm5, 0, 8)\
|
|
X(YMM5D1, 385, ymm5, 8, 8)\
|
|
X(YMM5D2, 386, ymm5, 16, 8)\
|
|
X(YMM5D3, 387, ymm5, 24, 8)\
|
|
X(YMM6D0, 388, ymm6, 0, 8)\
|
|
X(YMM6D1, 389, ymm6, 8, 8)\
|
|
X(YMM6D2, 390, ymm6, 16, 8)\
|
|
X(YMM6D3, 391, ymm6, 24, 8)\
|
|
X(YMM7D0, 392, ymm7, 0, 8)\
|
|
X(YMM7D1, 393, ymm7, 8, 8)\
|
|
X(YMM7D2, 394, ymm7, 16, 8)\
|
|
X(YMM7D3, 395, ymm7, 24, 8)
|
|
|
|
typedef U16 CV_Regx86;
|
|
typedef enum CV_Regx86Enum
|
|
{
|
|
#define X(CVN,C,RDN,BP,BZ) CV_Regx86_##CVN = C,
|
|
CV_Reg_X86_XList(X)
|
|
#undef X
|
|
}
|
|
CV_Regx86Enum;
|
|
|
|
// X(NAME, CODE, (RDI_RegisterCode_X64) NAME, BYTE_POS, BYTE_SIZE)
|
|
#define CV_Reg_X64_XList(X) \
|
|
X(NONE, 0, nil, 0, 0)\
|
|
X(AL, 1, rax, 0, 1)\
|
|
X(CL, 2, rcx, 0, 1)\
|
|
X(DL, 3, rdx, 0, 1)\
|
|
X(BL, 4, rbx, 0, 1)\
|
|
X(AH, 5, rax, 1, 1)\
|
|
X(CH, 6, rcx, 1, 1)\
|
|
X(DH, 7, rdx, 1, 1)\
|
|
X(BH, 8, rbx, 1, 1)\
|
|
X(AX, 9, rax, 0, 2)\
|
|
X(CX, 10, rcx, 0, 2)\
|
|
X(DX, 11, rdx, 0, 2)\
|
|
X(BX, 12, rbx, 0, 2)\
|
|
X(SP, 13, rsp, 0, 2)\
|
|
X(BP, 14, rbp, 0, 2)\
|
|
X(SI, 15, rsi, 0, 2)\
|
|
X(DI, 16, rdi, 0, 2)\
|
|
X(EAX, 17, rax, 0, 4)\
|
|
X(ECX, 18, rcx, 0, 4)\
|
|
X(EDX, 19, rdx, 0, 4)\
|
|
X(EBX, 20, rbx, 0, 4)\
|
|
X(ESP, 21, rsp, 0, 4)\
|
|
X(EBP, 22, rbp, 0, 4)\
|
|
X(ESI, 23, rsi, 0, 4)\
|
|
X(EDI, 24, rdi, 0, 4)\
|
|
X(ES, 25, es, 0, 2)\
|
|
X(CS, 26, cs, 0, 2)\
|
|
X(SS, 27, ss, 0, 2)\
|
|
X(DS, 28, ds, 0, 2)\
|
|
X(FS, 29, fs, 0, 2)\
|
|
X(GS, 30, gs, 0, 2)\
|
|
X(FLAGS, 32, rflags, 0, 2)\
|
|
X(RIP, 33, rip, 0, 8)\
|
|
X(EFLAGS, 34, rflags, 0, 4)\
|
|
/* TODO: possibly missing control registers in x64 definitions? */ \
|
|
X(CR0, 80, nil, 0, 0)\
|
|
X(CR1, 81, nil, 0, 0)\
|
|
X(CR2, 82, nil, 0, 0)\
|
|
X(CR3, 83, nil, 0, 0)\
|
|
X(CR4, 84, nil, 0, 0)\
|
|
X(CR8, 88, nil, 0, 0)\
|
|
X(DR0, 90, dr0, 0, 4)\
|
|
X(DR1, 91, dr1, 0, 4)\
|
|
X(DR2, 92, dr2, 0, 4)\
|
|
X(DR3, 93, dr3, 0, 4)\
|
|
X(DR4, 94, dr4, 0, 4)\
|
|
X(DR5, 95, dr5, 0, 4)\
|
|
X(DR6, 96, dr6, 0, 4)\
|
|
X(DR7, 97, dr7, 0, 4)\
|
|
/* TODO: possibly missing debug registers 8-15 in x64 definitions? */ \
|
|
X(DR8, 98, nil, 0, 0)\
|
|
X(DR9, 99, nil, 0, 0)\
|
|
X(DR10, 100, nil, 0, 0)\
|
|
X(DR11, 101, nil, 0, 0)\
|
|
X(DR12, 102, nil, 0, 0)\
|
|
X(DR13, 103, nil, 0, 0)\
|
|
X(DR14, 104, nil, 0, 0)\
|
|
X(DR15, 105, nil, 0, 0)\
|
|
/* TODO: possibly missing ~whatever these are~ in x64 definitions? */ \
|
|
X(GDTR, 110, nil, 0, 0)\
|
|
X(GDTL, 111, nil, 0, 0)\
|
|
X(IDTR, 112, nil, 0, 0)\
|
|
X(IDTL, 113, nil, 0, 0)\
|
|
X(LDTR, 114, nil, 0, 0)\
|
|
X(TR, 115, nil, 0, 0)\
|
|
X(ST0, 128, st0, 0, 10)\
|
|
X(ST1, 129, st1, 0, 10)\
|
|
X(ST2, 130, st2, 0, 10)\
|
|
X(ST3, 131, st3, 0, 10)\
|
|
X(ST4, 132, st4, 0, 10)\
|
|
X(ST5, 133, st5, 0, 10)\
|
|
X(ST6, 134, st6, 0, 10)\
|
|
X(ST7, 135, st7, 0, 10)\
|
|
/* TODO: possibly missing these, or not sure how they map to our x64 definitions? */ \
|
|
X(CTRL, 136, nil, 0, 0)\
|
|
X(STAT, 137, nil, 0, 0)\
|
|
X(TAG, 138, nil, 0, 0)\
|
|
X(FPIP, 139, nil, 0, 0)\
|
|
X(FPCS, 140, nil, 0, 0)\
|
|
X(FPDO, 141, nil, 0, 0)\
|
|
X(FPDS, 142, nil, 0, 0)\
|
|
X(ISEM, 143, nil, 0, 0)\
|
|
X(FPEIP, 144, nil, 0, 0)\
|
|
X(FPEDO, 145, nil, 0, 0)\
|
|
X(MM0, 146, fpr0, 0, 8)\
|
|
X(MM1, 147, fpr1, 0, 8)\
|
|
X(MM2, 148, fpr2, 0, 8)\
|
|
X(MM3, 149, fpr3, 0, 8)\
|
|
X(MM4, 150, fpr4, 0, 8)\
|
|
X(MM5, 151, fpr5, 0, 8)\
|
|
X(MM6, 152, fpr6, 0, 8)\
|
|
X(MM7, 153, fpr7, 0, 8)\
|
|
X(XMM0, 154, ymm0, 0, 16)\
|
|
X(XMM1, 155, ymm1, 0, 16)\
|
|
X(XMM2, 156, ymm2, 0, 16)\
|
|
X(XMM3, 157, ymm3, 0, 16)\
|
|
X(XMM4, 158, ymm4, 0, 16)\
|
|
X(XMM5, 159, ymm5, 0, 16)\
|
|
X(XMM6, 160, ymm6, 0, 16)\
|
|
X(XMM7, 161, ymm7, 0, 16)\
|
|
X(XMM0_0, 162, ymm0, 0, 4)\
|
|
X(XMM0_1, 163, ymm0, 4, 4)\
|
|
X(XMM0_2, 164, ymm0, 8, 4)\
|
|
X(XMM0_3, 165, ymm0, 12, 4)\
|
|
X(XMM1_0, 166, ymm1, 0, 4)\
|
|
X(XMM1_1, 167, ymm1, 4, 4)\
|
|
X(XMM1_2, 168, ymm1, 8, 4)\
|
|
X(XMM1_3, 169, ymm1, 12, 4)\
|
|
X(XMM2_0, 170, ymm2, 0, 4)\
|
|
X(XMM2_1, 171, ymm2, 4, 4)\
|
|
X(XMM2_2, 172, ymm2, 8, 4)\
|
|
X(XMM2_3, 173, ymm2, 12, 4)\
|
|
X(XMM3_0, 174, ymm3, 0, 4)\
|
|
X(XMM3_1, 175, ymm3, 4, 4)\
|
|
X(XMM3_2, 176, ymm3, 8, 4)\
|
|
X(XMM3_3, 177, ymm3, 12, 4)\
|
|
X(XMM4_0, 178, ymm4, 0, 4)\
|
|
X(XMM4_1, 179, ymm4, 4, 4)\
|
|
X(XMM4_2, 180, ymm4, 8, 4)\
|
|
X(XMM4_3, 181, ymm4, 12, 4)\
|
|
X(XMM5_0, 182, ymm5, 0, 4)\
|
|
X(XMM5_1, 183, ymm5, 4, 4)\
|
|
X(XMM5_2, 184, ymm5, 8, 4)\
|
|
X(XMM5_3, 185, ymm5, 12, 4)\
|
|
X(XMM6_0, 186, ymm6, 0, 4)\
|
|
X(XMM6_1, 187, ymm6, 4, 4)\
|
|
X(XMM6_2, 188, ymm6, 8, 4)\
|
|
X(XMM6_3, 189, ymm6, 12, 4)\
|
|
X(XMM7_0, 190, ymm7, 0, 4)\
|
|
X(XMM7_1, 191, ymm7, 4, 4)\
|
|
X(XMM7_2, 192, ymm7, 8, 4)\
|
|
X(XMM7_3, 193, ymm7, 12, 4)\
|
|
X(XMM0L, 194, ymm0, 0, 8)\
|
|
X(XMM1L, 195, ymm1, 0, 8)\
|
|
X(XMM2L, 196, ymm2, 0, 8)\
|
|
X(XMM3L, 197, ymm3, 0, 8)\
|
|
X(XMM4L, 198, ymm4, 0, 8)\
|
|
X(XMM5L, 199, ymm5, 0, 8)\
|
|
X(XMM6L, 200, ymm6, 0, 8)\
|
|
X(XMM7L, 201, ymm7, 0, 8)\
|
|
X(XMM0H, 202, ymm0, 8, 8)\
|
|
X(XMM1H, 203, ymm1, 8, 8)\
|
|
X(XMM2H, 204, ymm2, 8, 8)\
|
|
X(XMM3H, 205, ymm3, 8, 8)\
|
|
X(XMM4H, 206, ymm4, 8, 8)\
|
|
X(XMM5H, 207, ymm5, 8, 8)\
|
|
X(XMM6H, 208, ymm6, 8, 8)\
|
|
X(XMM7H, 209, ymm7, 8, 8)\
|
|
X(MXCSR, 211, mxcsr, 0, 4)\
|
|
X(EMM0L, 220, ymm0, 0, 8)\
|
|
X(EMM1L, 221, ymm1, 0, 8)\
|
|
X(EMM2L, 222, ymm2, 0, 8)\
|
|
X(EMM3L, 223, ymm3, 0, 8)\
|
|
X(EMM4L, 224, ymm4, 0, 8)\
|
|
X(EMM5L, 225, ymm5, 0, 8)\
|
|
X(EMM6L, 226, ymm6, 0, 8)\
|
|
X(EMM7L, 227, ymm7, 0, 8)\
|
|
X(EMM0H, 228, ymm0, 8, 8)\
|
|
X(EMM1H, 229, ymm1, 8, 8)\
|
|
X(EMM2H, 230, ymm2, 8, 8)\
|
|
X(EMM3H, 231, ymm3, 8, 8)\
|
|
X(EMM4H, 232, ymm4, 8, 8)\
|
|
X(EMM5H, 233, ymm5, 8, 8)\
|
|
X(EMM6H, 234, ymm6, 8, 8)\
|
|
X(EMM7H, 235, ymm7, 8, 8)\
|
|
X(MM00, 236, fpr0, 0, 4)\
|
|
X(MM01, 237, fpr0, 4, 4)\
|
|
X(MM10, 238, fpr1, 0, 4)\
|
|
X(MM11, 239, fpr1, 4, 4)\
|
|
X(MM20, 240, fpr2, 0, 4)\
|
|
X(MM21, 241, fpr2, 4, 4)\
|
|
X(MM30, 242, fpr3, 0, 4)\
|
|
X(MM31, 243, fpr3, 4, 4)\
|
|
X(MM40, 244, fpr4, 0, 4)\
|
|
X(MM41, 245, fpr4, 4, 4)\
|
|
X(MM50, 246, fpr5, 0, 4)\
|
|
X(MM51, 247, fpr5, 4, 4)\
|
|
X(MM60, 248, fpr6, 0, 4)\
|
|
X(MM61, 249, fpr6, 4, 4)\
|
|
X(MM70, 250, fpr7, 0, 4)\
|
|
X(MM71, 251, fpr7, 4, 4)\
|
|
X(XMM8, 252, ymm8, 0, 16)\
|
|
X(XMM9, 253, ymm9, 0, 16)\
|
|
X(XMM10, 254, ymm10, 0, 16)\
|
|
X(XMM11, 255, ymm11, 0, 16)\
|
|
X(XMM12, 256, ymm12, 0, 16)\
|
|
X(XMM13, 257, ymm13, 0, 16)\
|
|
X(XMM14, 258, ymm14, 0, 16)\
|
|
X(XMM15, 259, ymm15, 0, 16)\
|
|
X(XMM8_0, 260, ymm8, 0, 16)\
|
|
X(XMM8_1, 261, ymm8, 4, 16)\
|
|
X(XMM8_2, 262, ymm8, 8, 16)\
|
|
X(XMM8_3, 263, ymm8, 12, 16)\
|
|
X(XMM9_0, 264, ymm9, 0, 4)\
|
|
X(XMM9_1, 265, ymm9, 4, 4)\
|
|
X(XMM9_2, 266, ymm9, 8, 4)\
|
|
X(XMM9_3, 267, ymm9, 12, 4)\
|
|
X(XMM10_0, 268, ymm10, 0, 4)\
|
|
X(XMM10_1, 269, ymm10, 4, 4)\
|
|
X(XMM10_2, 270, ymm10, 8, 4)\
|
|
X(XMM10_3, 271, ymm10, 12, 4)\
|
|
X(XMM11_0, 272, ymm11, 0, 4)\
|
|
X(XMM11_1, 273, ymm11, 4, 4)\
|
|
X(XMM11_2, 274, ymm11, 8, 4)\
|
|
X(XMM11_3, 275, ymm11, 12, 4)\
|
|
X(XMM12_0, 276, ymm12, 0, 4)\
|
|
X(XMM12_1, 277, ymm12, 4, 4)\
|
|
X(XMM12_2, 278, ymm12, 8, 4)\
|
|
X(XMM12_3, 279, ymm12, 12, 4)\
|
|
X(XMM13_0, 280, ymm13, 0, 4)\
|
|
X(XMM13_1, 281, ymm13, 4, 4)\
|
|
X(XMM13_2, 282, ymm13, 8, 4)\
|
|
X(XMM13_3, 283, ymm13, 12, 4)\
|
|
X(XMM14_0, 284, ymm14, 0, 4)\
|
|
X(XMM14_1, 285, ymm14, 4, 4)\
|
|
X(XMM14_2, 286, ymm14, 8, 4)\
|
|
X(XMM14_3, 287, ymm14, 12, 4)\
|
|
X(XMM15_0, 288, ymm15, 0, 4)\
|
|
X(XMM15_1, 289, ymm15, 4, 4)\
|
|
X(XMM15_2, 290, ymm15, 8, 4)\
|
|
X(XMM15_3, 291, ymm15, 12, 4)\
|
|
X(XMM8L, 292, ymm8, 0, 8)\
|
|
X(XMM9L, 293, ymm9, 0, 8)\
|
|
X(XMM10L, 294, ymm10, 0, 8)\
|
|
X(XMM11L, 295, ymm11, 0, 8)\
|
|
X(XMM12L, 296, ymm12, 0, 8)\
|
|
X(XMM13L, 297, ymm13, 0, 8)\
|
|
X(XMM14L, 298, ymm14, 0, 8)\
|
|
X(XMM15L, 299, ymm15, 0, 8)\
|
|
X(XMM8H, 300, ymm8, 8, 8)\
|
|
X(XMM9H, 301, ymm9, 8, 8)\
|
|
X(XMM10H, 302, ymm10, 8, 8)\
|
|
X(XMM11H, 303, ymm11, 8, 8)\
|
|
X(XMM12H, 304, ymm12, 8, 8)\
|
|
X(XMM13H, 305, ymm13, 8, 8)\
|
|
X(XMM14H, 306, ymm14, 8, 8)\
|
|
X(XMM15H, 307, ymm15, 8, 8)\
|
|
X(EMM8L, 308, ymm8, 0, 8)\
|
|
X(EMM9L, 309, ymm9, 0, 8)\
|
|
X(EMM10L, 310, ymm10, 0, 8)\
|
|
X(EMM11L, 311, ymm11, 0, 8)\
|
|
X(EMM12L, 312, ymm12, 0, 8)\
|
|
X(EMM13L, 313, ymm13, 0, 8)\
|
|
X(EMM14L, 314, ymm14, 0, 8)\
|
|
X(EMM15L, 315, ymm15, 0, 8)\
|
|
X(EMM8H, 316, ymm8, 8, 8)\
|
|
X(EMM9H, 317, ymm9, 8, 8)\
|
|
X(EMM10H, 318, ymm10, 8, 8)\
|
|
X(EMM11H, 319, ymm11, 8, 8)\
|
|
X(EMM12H, 320, ymm12, 8, 8)\
|
|
X(EMM13H, 321, ymm13, 8, 8)\
|
|
X(EMM14H, 322, ymm14, 8, 8)\
|
|
X(EMM15H, 323, ymm15, 8, 8)\
|
|
X(SIL, 324, rsi, 0, 1)\
|
|
X(DIL, 325, rdi, 0, 1)\
|
|
X(BPL, 326, rbp, 0, 1)\
|
|
X(SPL, 327, rsp, 0, 1)\
|
|
X(RAX, 328, rax, 0, 8)\
|
|
X(RBX, 329, rbx, 0, 8)\
|
|
X(RCX, 330, rcx, 0, 8)\
|
|
X(RDX, 331, rdx, 0, 8)\
|
|
X(RSI, 332, rsi, 0, 8)\
|
|
X(RDI, 333, rdi, 0, 8)\
|
|
X(RBP, 334, rbp, 0, 8)\
|
|
X(RSP, 335, rsp, 0, 8)\
|
|
X(R8, 336, r8, 0, 8)\
|
|
X(R9, 337, r9, 0, 8)\
|
|
X(R10, 338, r10, 0, 8)\
|
|
X(R11, 339, r11, 0, 8)\
|
|
X(R12, 340, r12, 0, 8)\
|
|
X(R13, 341, r13, 0, 8)\
|
|
X(R14, 342, r14, 0, 8)\
|
|
X(R15, 343, r15, 0, 8)\
|
|
X(R8B, 344, r8, 0, 1)\
|
|
X(R9B, 345, r9, 0, 1)\
|
|
X(R10B, 346, r10, 0, 1)\
|
|
X(R11B, 347, r11, 0, 1)\
|
|
X(R12B, 348, r12, 0, 1)\
|
|
X(R13B, 349, r13, 0, 1)\
|
|
X(R14B, 350, r14, 0, 1)\
|
|
X(R15B, 351, r15, 0, 1)\
|
|
X(R8W, 352, r8, 0, 2)\
|
|
X(R9W, 353, r9, 0, 2)\
|
|
X(R10W, 354, r10, 0, 2)\
|
|
X(R11W, 355, r11, 0, 2)\
|
|
X(R12W, 356, r12, 0, 2)\
|
|
X(R13W, 357, r13, 0, 2)\
|
|
X(R14W, 358, r14, 0, 2)\
|
|
X(R15W, 359, r15, 0, 2)\
|
|
X(R8D, 360, r8, 0, 4)\
|
|
X(R9D, 361, r9, 0, 4)\
|
|
X(R10D, 362, r10, 0, 4)\
|
|
X(R11D, 363, r11, 0, 4)\
|
|
X(R12D, 364, r12, 0, 4)\
|
|
X(R13D, 365, r13, 0, 4)\
|
|
X(R14D, 366, r14, 0, 4)\
|
|
X(R15D, 367, r15, 0, 4)\
|
|
X(YMM0, 368, ymm0, 0, 32)\
|
|
X(YMM1, 369, ymm1, 0, 32)\
|
|
X(YMM2, 370, ymm2, 0, 32)\
|
|
X(YMM3, 371, ymm3, 0, 32)\
|
|
X(YMM4, 372, ymm4, 0, 32)\
|
|
X(YMM5, 373, ymm5, 0, 32)\
|
|
X(YMM6, 374, ymm6, 0, 32)\
|
|
X(YMM7, 375, ymm7, 0, 32)\
|
|
X(YMM8, 376, ymm8, 0, 32)\
|
|
X(YMM9, 377, ymm9, 0, 32)\
|
|
X(YMM10, 378, ymm10, 0, 32)\
|
|
X(YMM11, 379, ymm11, 0, 32)\
|
|
X(YMM12, 380, ymm12, 0, 32)\
|
|
X(YMM13, 381, ymm13, 0, 32)\
|
|
X(YMM14, 382, ymm14, 0, 32)\
|
|
X(YMM15, 383, ymm15, 0, 32)\
|
|
X(YMM0H, 384, ymm0, 16, 32)\
|
|
X(YMM1H, 385, ymm1, 16, 32)\
|
|
X(YMM2H, 386, ymm2, 16, 32)\
|
|
X(YMM3H, 387, ymm3, 16, 32)\
|
|
X(YMM4H, 388, ymm4, 16, 32)\
|
|
X(YMM5H, 389, ymm5, 16, 32)\
|
|
X(YMM6H, 390, ymm6, 16, 32)\
|
|
X(YMM7H, 391, ymm7, 16, 32)\
|
|
X(YMM8H, 392, ymm8, 16, 32)\
|
|
X(YMM9H, 393, ymm9, 16, 32)\
|
|
X(YMM10H, 394, ymm10, 16, 32)\
|
|
X(YMM11H, 395, ymm11, 16, 32)\
|
|
X(YMM12H, 396, ymm12, 16, 32)\
|
|
X(YMM13H, 397, ymm13, 16, 32)\
|
|
X(YMM14H, 398, ymm14, 16, 32)\
|
|
X(YMM15H, 399, ymm15, 16, 32)\
|
|
X(XMM0IL, 400, ymm0, 0, 8)\
|
|
X(XMM1IL, 401, ymm1, 0, 8)\
|
|
X(XMM2IL, 402, ymm2, 0, 8)\
|
|
X(XMM3IL, 403, ymm3, 0, 8)\
|
|
X(XMM4IL, 404, ymm4, 0, 8)\
|
|
X(XMM5IL, 405, ymm5, 0, 8)\
|
|
X(XMM6IL, 406, ymm6, 0, 8)\
|
|
X(XMM7IL, 407, ymm7, 0, 8)\
|
|
X(XMM8IL, 408, ymm8, 0, 8)\
|
|
X(XMM9IL, 409, ymm9, 0, 8)\
|
|
X(XMM10IL, 410, ymm10, 0, 8)\
|
|
X(XMM11IL, 411, ymm11, 0, 8)\
|
|
X(XMM12IL, 412, ymm12, 0, 8)\
|
|
X(XMM13IL, 413, ymm13, 0, 8)\
|
|
X(XMM14IL, 414, ymm14, 0, 8)\
|
|
X(XMM15IL, 415, ymm15, 0, 8)\
|
|
X(XMM0IH, 416, ymm0, 8, 8)\
|
|
X(XMM1IH, 417, ymm1, 8, 8)\
|
|
X(XMM2IH, 418, ymm2, 8, 8)\
|
|
X(XMM3IH, 419, ymm3, 8, 8)\
|
|
X(XMM4IH, 420, ymm4, 8, 8)\
|
|
X(XMM5IH, 421, ymm5, 8, 8)\
|
|
X(XMM6IH, 422, ymm6, 8, 8)\
|
|
X(XMM7IH, 423, ymm7, 8, 8)\
|
|
X(XMM8IH, 424, ymm8, 8, 8)\
|
|
X(XMM9IH, 425, ymm9, 8, 8)\
|
|
X(XMM10IH, 426, ymm10, 8, 8)\
|
|
X(XMM11IH, 427, ymm11, 8, 8)\
|
|
X(XMM12IH, 428, ymm12, 8, 8)\
|
|
X(XMM13IH, 429, ymm13, 8, 8)\
|
|
X(XMM14IH, 430, ymm14, 8, 8)\
|
|
X(XMM15IH, 431, ymm15, 8, 8)\
|
|
X(YMM0I0, 432, ymm0, 0, 8)\
|
|
X(YMM0I1, 433, ymm0, 8, 8)\
|
|
X(YMM0I2, 434, ymm0, 16, 8)\
|
|
X(YMM0I3, 435, ymm0, 24, 8)\
|
|
X(YMM1I0, 436, ymm1, 0, 8)\
|
|
X(YMM1I1, 437, ymm1, 8, 8)\
|
|
X(YMM1I2, 438, ymm1, 16, 8)\
|
|
X(YMM1I3, 439, ymm1, 24, 8)\
|
|
X(YMM2I0, 440, ymm2, 0, 8)\
|
|
X(YMM2I1, 441, ymm2, 8, 8)\
|
|
X(YMM2I2, 442, ymm2, 16, 8)\
|
|
X(YMM2I3, 443, ymm2, 24, 8)\
|
|
X(YMM3I0, 444, ymm3, 0, 8)\
|
|
X(YMM3I1, 445, ymm3, 8, 8)\
|
|
X(YMM3I2, 446, ymm3, 16, 8)\
|
|
X(YMM3I3, 447, ymm3, 24, 8)\
|
|
X(YMM4I0, 448, ymm4, 0, 8)\
|
|
X(YMM4I1, 449, ymm4, 8, 8)\
|
|
X(YMM4I2, 450, ymm4, 16, 8)\
|
|
X(YMM4I3, 451, ymm4, 24, 8)\
|
|
X(YMM5I0, 452, ymm5, 0, 8)\
|
|
X(YMM5I1, 453, ymm5, 8, 8)\
|
|
X(YMM5I2, 454, ymm5, 16, 8)\
|
|
X(YMM5I3, 455, ymm5, 24, 8)\
|
|
X(YMM6I0, 456, ymm6, 0, 8)\
|
|
X(YMM6I1, 457, ymm6, 8, 8)\
|
|
X(YMM6I2, 458, ymm6, 16, 8)\
|
|
X(YMM6I3, 459, ymm6, 24, 8)\
|
|
X(YMM7I0, 460, ymm7, 0, 8)\
|
|
X(YMM7I1, 461, ymm7, 8, 8)\
|
|
X(YMM7I2, 462, ymm7, 16, 8)\
|
|
X(YMM7I3, 463, ymm7, 24, 8)\
|
|
X(YMM8I0, 464, ymm8, 0, 8)\
|
|
X(YMM8I1, 465, ymm8, 8, 8)\
|
|
X(YMM8I2, 466, ymm8, 16, 8)\
|
|
X(YMM8I3, 467, ymm8, 24, 8)\
|
|
X(YMM9I0, 468, ymm9, 0, 8)\
|
|
X(YMM9I1, 469, ymm9, 8, 8)\
|
|
X(YMM9I2, 470, ymm9, 16, 8)\
|
|
X(YMM9I3, 471, ymm9, 24, 8)\
|
|
X(YMM10I0, 472, ymm10, 0, 8)\
|
|
X(YMM10I1, 473, ymm10, 8, 8)\
|
|
X(YMM10I2, 474, ymm10, 16, 8)\
|
|
X(YMM10I3, 475, ymm10, 24, 8)\
|
|
X(YMM11I0, 476, ymm11, 0, 8)\
|
|
X(YMM11I1, 477, ymm11, 8, 8)\
|
|
X(YMM11I2, 478, ymm11, 16, 8)\
|
|
X(YMM11I3, 479, ymm11, 24, 8)\
|
|
X(YMM12I0, 480, ymm12, 0, 8)\
|
|
X(YMM12I1, 481, ymm12, 8, 8)\
|
|
X(YMM12I2, 482, ymm12, 16, 8)\
|
|
X(YMM12I3, 483, ymm12, 24, 8)\
|
|
X(YMM13I0, 484, ymm13, 0, 8)\
|
|
X(YMM13I1, 485, ymm13, 8, 8)\
|
|
X(YMM13I2, 486, ymm13, 16, 8)\
|
|
X(YMM13I3, 487, ymm13, 24, 8)\
|
|
X(YMM14I0, 488, ymm14, 0, 8)\
|
|
X(YMM14I1, 489, ymm14, 8, 8)\
|
|
X(YMM14I2, 490, ymm14, 16, 8)\
|
|
X(YMM14I3, 491, ymm14, 24, 8)\
|
|
X(YMM15I0, 492, ymm15, 0, 8)\
|
|
X(YMM15I1, 493, ymm15, 8, 8)\
|
|
X(YMM15I2, 494, ymm15, 16, 8)\
|
|
X(YMM15I3, 495, ymm15, 24, 8)\
|
|
X(YMM0F0, 496, ymm0, 0, 4)\
|
|
X(YMM0F1, 497, ymm0, 4, 4)\
|
|
X(YMM0F2, 498, ymm0, 8, 4)\
|
|
X(YMM0F3, 499, ymm0, 12, 4)\
|
|
X(YMM0F4, 500, ymm0, 16, 4)\
|
|
X(YMM0F5, 501, ymm0, 20, 4)\
|
|
X(YMM0F6, 502, ymm0, 24, 4)\
|
|
X(YMM0F7, 503, ymm0, 28, 4)\
|
|
X(YMM1F0, 504, ymm1, 0, 4)\
|
|
X(YMM1F1, 505, ymm1, 4, 4)\
|
|
X(YMM1F2, 506, ymm1, 8, 4)\
|
|
X(YMM1F3, 507, ymm1, 12, 4)\
|
|
X(YMM1F4, 508, ymm1, 16, 4)\
|
|
X(YMM1F5, 509, ymm1, 20, 4)\
|
|
X(YMM1F6, 510, ymm1, 24, 4)\
|
|
X(YMM1F7, 511, ymm1, 28, 4)\
|
|
X(YMM2F0, 512, ymm2, 0, 4)\
|
|
X(YMM2F1, 513, ymm2, 4, 4)\
|
|
X(YMM2F2, 514, ymm2, 8, 4)\
|
|
X(YMM2F3, 515, ymm2, 12, 4)\
|
|
X(YMM2F4, 516, ymm2, 16, 4)\
|
|
X(YMM2F5, 517, ymm2, 20, 4)\
|
|
X(YMM2F6, 518, ymm2, 24, 4)\
|
|
X(YMM2F7, 519, ymm2, 28, 4)\
|
|
X(YMM3F0, 520, ymm3, 0, 4)\
|
|
X(YMM3F1, 521, ymm3, 4, 4)\
|
|
X(YMM3F2, 522, ymm3, 8, 4)\
|
|
X(YMM3F3, 523, ymm3, 12, 4)\
|
|
X(YMM3F4, 524, ymm3, 16, 4)\
|
|
X(YMM3F5, 525, ymm3, 20, 4)\
|
|
X(YMM3F6, 526, ymm3, 24, 4)\
|
|
X(YMM3F7, 527, ymm3, 28, 4)\
|
|
X(YMM4F0, 528, ymm4, 0, 4)\
|
|
X(YMM4F1, 529, ymm4, 4, 4)\
|
|
X(YMM4F2, 530, ymm4, 8, 4)\
|
|
X(YMM4F3, 531, ymm4, 12, 4)\
|
|
X(YMM4F4, 532, ymm4, 16, 4)\
|
|
X(YMM4F5, 533, ymm4, 20, 4)\
|
|
X(YMM4F6, 534, ymm4, 24, 4)\
|
|
X(YMM4F7, 535, ymm4, 28, 4)\
|
|
X(YMM5F0, 536, ymm5, 0, 4)\
|
|
X(YMM5F1, 537, ymm5, 4, 4)\
|
|
X(YMM5F2, 538, ymm5, 8, 4)\
|
|
X(YMM5F3, 539, ymm5, 12, 4)\
|
|
X(YMM5F4, 540, ymm5, 16, 4)\
|
|
X(YMM5F5, 541, ymm5, 20, 4)\
|
|
X(YMM5F6, 542, ymm5, 24, 4)\
|
|
X(YMM5F7, 543, ymm5, 28, 4)\
|
|
X(YMM6F0, 544, ymm6, 0, 4)\
|
|
X(YMM6F1, 545, ymm6, 4, 4)\
|
|
X(YMM6F2, 546, ymm6, 8, 4)\
|
|
X(YMM6F3, 547, ymm6, 12, 4)\
|
|
X(YMM6F4, 548, ymm6, 16, 4)\
|
|
X(YMM6F5, 549, ymm6, 20, 4)\
|
|
X(YMM6F6, 550, ymm6, 24, 4)\
|
|
X(YMM6F7, 551, ymm6, 28, 4)\
|
|
X(YMM7F0, 552, ymm7, 0, 4)\
|
|
X(YMM7F1, 553, ymm7, 4, 4)\
|
|
X(YMM7F2, 554, ymm7, 8, 4)\
|
|
X(YMM7F3, 555, ymm7, 12, 4)\
|
|
X(YMM7F4, 556, ymm7, 16, 4)\
|
|
X(YMM7F5, 557, ymm7, 20, 4)\
|
|
X(YMM7F6, 558, ymm7, 24, 4)\
|
|
X(YMM7F7, 559, ymm7, 28, 4)\
|
|
X(YMM8F0, 560, ymm8, 0, 4)\
|
|
X(YMM8F1, 561, ymm8, 4, 4)\
|
|
X(YMM8F2, 562, ymm8, 8, 4)\
|
|
X(YMM8F3, 563, ymm8, 12, 4)\
|
|
X(YMM8F4, 564, ymm8, 16, 4)\
|
|
X(YMM8F5, 565, ymm8, 20, 4)\
|
|
X(YMM8F6, 566, ymm8, 24, 4)\
|
|
X(YMM8F7, 567, ymm8, 28, 4)\
|
|
X(YMM9F0, 568, ymm9, 0, 4)\
|
|
X(YMM9F1, 569, ymm9, 4, 4)\
|
|
X(YMM9F2, 570, ymm9, 8, 4)\
|
|
X(YMM9F3, 571, ymm9, 12, 4)\
|
|
X(YMM9F4, 572, ymm9, 16, 4)\
|
|
X(YMM9F5, 573, ymm9, 20, 4)\
|
|
X(YMM9F6, 574, ymm9, 24, 4)\
|
|
X(YMM9F7, 575, ymm9, 28, 4)\
|
|
X(YMM10F0, 576, ymm10, 0, 4)\
|
|
X(YMM10F1, 577, ymm10, 4, 4)\
|
|
X(YMM10F2, 578, ymm10, 8, 4)\
|
|
X(YMM10F3, 579, ymm10, 12, 4)\
|
|
X(YMM10F4, 580, ymm10, 16, 4)\
|
|
X(YMM10F5, 581, ymm10, 20, 4)\
|
|
X(YMM10F6, 582, ymm10, 24, 4)\
|
|
X(YMM10F7, 583, ymm10, 28, 4)\
|
|
X(YMM11F0, 584, ymm11, 0, 4)\
|
|
X(YMM11F1, 585, ymm11, 4, 4)\
|
|
X(YMM11F2, 586, ymm11, 8, 4)\
|
|
X(YMM11F3, 587, ymm11, 12, 4)\
|
|
X(YMM11F4, 588, ymm11, 16, 4)\
|
|
X(YMM11F5, 589, ymm11, 20, 4)\
|
|
X(YMM11F6, 590, ymm11, 24, 4)\
|
|
X(YMM11F7, 591, ymm11, 28, 4)\
|
|
X(YMM12F0, 592, ymm12, 0, 4)\
|
|
X(YMM12F1, 593, ymm12, 4, 4)\
|
|
X(YMM12F2, 594, ymm12, 8, 4)\
|
|
X(YMM12F3, 595, ymm12, 12, 4)\
|
|
X(YMM12F4, 596, ymm12, 16, 4)\
|
|
X(YMM12F5, 597, ymm12, 20, 4)\
|
|
X(YMM12F6, 598, ymm12, 24, 4)\
|
|
X(YMM12F7, 599, ymm12, 28, 4)\
|
|
X(YMM13F0, 600, ymm13, 0, 4)\
|
|
X(YMM13F1, 601, ymm13, 4, 4)\
|
|
X(YMM13F2, 602, ymm13, 8, 4)\
|
|
X(YMM13F3, 603, ymm13, 12, 4)\
|
|
X(YMM13F4, 604, ymm13, 16, 4)\
|
|
X(YMM13F5, 605, ymm13, 20, 4)\
|
|
X(YMM13F6, 606, ymm13, 24, 4)\
|
|
X(YMM13F7, 607, ymm13, 28, 4)\
|
|
X(YMM14F0, 608, ymm14, 0, 4)\
|
|
X(YMM14F1, 609, ymm14, 4, 4)\
|
|
X(YMM14F2, 610, ymm14, 8, 4)\
|
|
X(YMM14F3, 611, ymm14, 12, 4)\
|
|
X(YMM14F4, 612, ymm14, 16, 4)\
|
|
X(YMM14F5, 613, ymm14, 20, 4)\
|
|
X(YMM14F6, 614, ymm14, 24, 4)\
|
|
X(YMM14F7, 615, ymm14, 28, 4)\
|
|
X(YMM15F0, 616, ymm15, 0, 4)\
|
|
X(YMM15F1, 617, ymm15, 4, 4)\
|
|
X(YMM15F2, 618, ymm15, 8, 4)\
|
|
X(YMM15F3, 619, ymm15, 12, 4)\
|
|
X(YMM15F4, 620, ymm15, 16, 4)\
|
|
X(YMM15F5, 621, ymm15, 20, 4)\
|
|
X(YMM15F6, 622, ymm15, 24, 4)\
|
|
X(YMM15F7, 623, ymm15, 28, 4)\
|
|
X(YMM0D0, 624, ymm0, 0, 8)\
|
|
X(YMM0D1, 625, ymm0, 8, 8)\
|
|
X(YMM0D2, 626, ymm0, 16, 8)\
|
|
X(YMM0D3, 627, ymm0, 24, 8)\
|
|
X(YMM1D0, 628, ymm1, 0, 8)\
|
|
X(YMM1D1, 629, ymm1, 8, 8)\
|
|
X(YMM1D2, 630, ymm1, 16, 8)\
|
|
X(YMM1D3, 631, ymm1, 24, 8)\
|
|
X(YMM2D0, 632, ymm2, 0, 8)\
|
|
X(YMM2D1, 633, ymm2, 8, 8)\
|
|
X(YMM2D2, 634, ymm2, 16, 8)\
|
|
X(YMM2D3, 635, ymm2, 24, 8)\
|
|
X(YMM3D0, 636, ymm3, 0, 8)\
|
|
X(YMM3D1, 637, ymm3, 8, 8)\
|
|
X(YMM3D2, 638, ymm3, 16, 8)\
|
|
X(YMM3D3, 639, ymm3, 24, 8)\
|
|
X(YMM4D0, 640, ymm4, 0, 8)\
|
|
X(YMM4D1, 641, ymm4, 8, 8)\
|
|
X(YMM4D2, 642, ymm4, 16, 8)\
|
|
X(YMM4D3, 643, ymm4, 24, 8)\
|
|
X(YMM5D0, 644, ymm5, 0, 8)\
|
|
X(YMM5D1, 645, ymm5, 8, 8)\
|
|
X(YMM5D2, 646, ymm5, 16, 8)\
|
|
X(YMM5D3, 647, ymm5, 24, 8)\
|
|
X(YMM6D0, 648, ymm6, 0, 8)\
|
|
X(YMM6D1, 649, ymm6, 8, 8)\
|
|
X(YMM6D2, 650, ymm6, 16, 8)\
|
|
X(YMM6D3, 651, ymm6, 24, 8)\
|
|
X(YMM7D0, 652, ymm7, 0, 8)\
|
|
X(YMM7D1, 653, ymm7, 8, 8)\
|
|
X(YMM7D2, 654, ymm7, 16, 8)\
|
|
X(YMM7D3, 655, ymm7, 24, 8)\
|
|
X(YMM8D0, 656, ymm8, 0, 8)\
|
|
X(YMM8D1, 657, ymm8, 8, 8)\
|
|
X(YMM8D2, 658, ymm8, 16, 8)\
|
|
X(YMM8D3, 659, ymm8, 24, 8)\
|
|
X(YMM9D0, 660, ymm9, 0, 8)\
|
|
X(YMM9D1, 661, ymm9, 8, 8)\
|
|
X(YMM9D2, 662, ymm9, 16, 8)\
|
|
X(YMM9D3, 663, ymm9, 24, 8)\
|
|
X(YMM10D0, 664, ymm10, 0, 8)\
|
|
X(YMM10D1, 665, ymm10, 8, 8)\
|
|
X(YMM10D2, 666, ymm10, 16, 8)\
|
|
X(YMM10D3, 667, ymm10, 24, 8)\
|
|
X(YMM11D0, 668, ymm11, 0, 8)\
|
|
X(YMM11D1, 669, ymm11, 8, 8)\
|
|
X(YMM11D2, 670, ymm11, 16, 8)\
|
|
X(YMM11D3, 671, ymm11, 24, 8)\
|
|
X(YMM12D0, 672, ymm12, 0, 8)\
|
|
X(YMM12D1, 673, ymm12, 8, 8)\
|
|
X(YMM12D2, 674, ymm12, 16, 8)\
|
|
X(YMM12D3, 675, ymm12, 24, 8)\
|
|
X(YMM13D0, 676, ymm13, 0, 8)\
|
|
X(YMM13D1, 677, ymm13, 8, 8)\
|
|
X(YMM13D2, 678, ymm13, 16, 8)\
|
|
X(YMM13D3, 679, ymm13, 24, 8)\
|
|
X(YMM14D0, 680, ymm14, 0, 8)\
|
|
X(YMM14D1, 681, ymm14, 8, 8)\
|
|
X(YMM14D2, 682, ymm14, 16, 8)\
|
|
X(YMM14D3, 683, ymm14, 24, 8)\
|
|
X(YMM15D0, 684, ymm15, 0, 8)\
|
|
X(YMM15D1, 685, ymm15, 8, 8)\
|
|
X(YMM15D2, 686, ymm15, 16, 8)\
|
|
X(YMM15D3, 687, ymm15, 24, 8)
|
|
|
|
typedef U16 CV_Regx64;
|
|
typedef enum CV_Regx64Enum
|
|
{
|
|
#define X(CVN,C,RDN,BP,BZ) CV_Regx64_##CVN = C,
|
|
CV_Reg_X64_XList(X)
|
|
#undef X
|
|
}
|
|
CV_Regx64Enum;
|
|
|
|
|
|
#define CV_SignatureXList(X) \
|
|
X(C6, 0)\
|
|
X(C7, 1)\
|
|
X(C11, 2)\
|
|
X(C13, 4)\
|
|
X(RESERVED, 5)
|
|
|
|
typedef U16 CV_Signature;
|
|
typedef enum CV_SignatureEnum
|
|
{
|
|
#define X(N,c) CV_Signature_##N = c,
|
|
CV_SignatureXList(X)
|
|
#undef X
|
|
}
|
|
CV_SignatureEnum;
|
|
|
|
|
|
#define CV_LanguageXList(X) \
|
|
X(C, 0x00)\
|
|
X(CXX, 0x01)\
|
|
X(FORTRAN, 0x02)\
|
|
X(MASM, 0x03)\
|
|
X(PASCAL, 0x04)\
|
|
X(BASIC, 0x05)\
|
|
X(COBOL, 0x06)\
|
|
X(LINK, 0x07)\
|
|
X(CVTRES, 0x08)\
|
|
X(CVTPGD, 0x09)\
|
|
X(CSHARP, 0x0A)\
|
|
X(VB, 0x0B)\
|
|
X(ILASM, 0x0C)\
|
|
X(JAVA, 0x0D)\
|
|
X(JSCRIPT, 0x0E)\
|
|
X(MSIL, 0x0F)\
|
|
X(HLSL, 0x10)
|
|
|
|
typedef U16 CV_Language;
|
|
typedef enum CV_LanguageEnum
|
|
{
|
|
#define X(N,c) CV_Language_##N = c,
|
|
CV_LanguageXList(X)
|
|
#undef X
|
|
}
|
|
CV_LanguageEnum;
|
|
|
|
////////////////////////////////
|
|
//~ rjf: CodeView Format "Sym" and "Leaf" Header Type
|
|
|
|
typedef struct CV_RecHeader CV_RecHeader;
|
|
struct CV_RecHeader
|
|
{
|
|
U16 size;
|
|
U16 kind;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ rjf: CodeView Format "Sym" Types
|
|
//
|
|
// (per-compilation-unit info, variables, procedures, etc.)
|
|
//
|
|
|
|
typedef U8 CV_ProcFlags;
|
|
enum
|
|
{
|
|
CV_ProcFlag_NoFPO = (1 << 0),
|
|
CV_ProcFlag_IntReturn = (1 << 1),
|
|
CV_ProcFlag_FarReturn = (1 << 2),
|
|
CV_ProcFlag_NeverReturn = (1 << 3),
|
|
CV_ProcFlag_NotReached = (1 << 4),
|
|
CV_ProcFlag_CustomCall = (1 << 5),
|
|
CV_ProcFlag_NoInline = (1 << 6),
|
|
CV_ProcFlag_OptDbgInfo = (1 << 7),
|
|
};
|
|
|
|
typedef U16 CV_LocalFlags;
|
|
enum
|
|
{
|
|
CV_LocalFlag_Param = (1 << 0),
|
|
CV_LocalFlag_AddrTaken = (1 << 1),
|
|
CV_LocalFlag_Compgen = (1 << 2),
|
|
CV_LocalFlag_Aggregate = (1 << 3),
|
|
CV_LocalFlag_PartOfAggregate = (1 << 4),
|
|
CV_LocalFlag_Aliased = (1 << 5),
|
|
CV_LocalFlag_Alias = (1 << 6),
|
|
CV_LocalFlag_Retval = (1 << 7),
|
|
CV_LocalFlag_OptOut = (1 << 8),
|
|
CV_LocalFlag_Global = (1 << 9),
|
|
CV_LocalFlag_Static = (1 << 10),
|
|
};
|
|
|
|
typedef struct CV_LocalVarAttr CV_LocalVarAttr;
|
|
struct CV_LocalVarAttr
|
|
{
|
|
U32 off;
|
|
U16 seg;
|
|
CV_LocalFlags flags;
|
|
};
|
|
|
|
//- (SymKind: COMPILE)
|
|
|
|
typedef U32 CV_CompileFlags;
|
|
#define CV_CompileFlags_ExtractLanguage(f) (((f) )&0xFF)
|
|
#define CV_CompileFlags_ExtractFloatPrec(f) (((f)>> 8)&0x03)
|
|
#define CV_CompileFlags_ExtractFloatPkg(f) (((f)>>10)&0x03)
|
|
#define CV_CompileFlags_ExtractAmbientData(f) (((f)>>12)&0x07)
|
|
#define CV_CompileFlags_ExtractAmbientCode(f) (((f)>>15)&0x07)
|
|
#define CV_CompileFlags_ExtractMode(f) (((f)>>18)&0x01)
|
|
|
|
typedef struct CV_SymCompile CV_SymCompile;
|
|
struct CV_SymCompile
|
|
{
|
|
U8 machine;
|
|
CV_CompileFlags flags;
|
|
// U8[] ver_str (null terminated)
|
|
};
|
|
|
|
//- (SymKind: SSEARCH)
|
|
|
|
typedef struct CV_SymStartSearch CV_SymStartSearch;
|
|
struct CV_SymStartSearch
|
|
{
|
|
U32 start_symbol;
|
|
U16 segment;
|
|
};
|
|
|
|
//- (SymKind: END) (empty)
|
|
|
|
//- (SymKind: RETURN)
|
|
|
|
typedef U8 CV_GenericStyle;
|
|
typedef enum CV_GenericStyleEnum
|
|
{
|
|
CV_GenericStyle_VOID,
|
|
CV_GenericStyle_REG, // "return data is in register"
|
|
CV_GenericStyle_ICAN, // "indirect caller allocated near"
|
|
CV_GenericStyle_ICAF, // "indirect caller allocated far"
|
|
CV_GenericStyle_IRAN, // "indirect returnee allocated near"
|
|
CV_GenericStyle_IRAF, // "indirect returnee allocated far"
|
|
CV_GenericStyle_UNUSED,
|
|
}
|
|
CV_GenericStyleEnum;
|
|
|
|
typedef U16 CV_GenericFlags;
|
|
enum
|
|
{
|
|
CV_GenericFlags_CSTYLE = (1 << 0),
|
|
CV_GenericFlags_RSCLEAN = (1 << 1), // "returnee stack cleanup"
|
|
};
|
|
|
|
typedef struct CV_SymReturn CV_SymReturn;
|
|
struct CV_SymReturn
|
|
{
|
|
CV_GenericFlags flags;
|
|
CV_GenericStyle style;
|
|
};
|
|
|
|
//- (SymKind: SLINK32)
|
|
|
|
typedef struct CV_SymSLink32 CV_SymSLink32;
|
|
struct CV_SymSLink32
|
|
{
|
|
U32 frame_size;
|
|
U32 offset;
|
|
U16 reg;
|
|
};
|
|
|
|
//- (SymKind: OEM)
|
|
|
|
typedef struct CV_SymOEM CV_SymOEM;
|
|
struct CV_SymOEM
|
|
{
|
|
COFF_Guid id;
|
|
CV_TypeId itype;
|
|
// padding align(4)
|
|
};
|
|
|
|
//- (SymKind: VFTABLE32)
|
|
|
|
typedef struct CV_SymVPath32 CV_SymVPath32;
|
|
struct CV_SymVPath32
|
|
{
|
|
CV_TypeId root;
|
|
CV_TypeId path;
|
|
U32 off;
|
|
U16 seg;
|
|
};
|
|
|
|
//- (SymKind: FRAMEPROC)
|
|
|
|
typedef U8 CV_EncodedFramePtrReg;
|
|
typedef enum CV_EncodedFramePtrRegEnum
|
|
{
|
|
CV_EncodedFramePtrReg_None,
|
|
CV_EncodedFramePtrReg_StackPtr,
|
|
CV_EncodedFramePtrReg_FramePtr,
|
|
CV_EncodedFramePtrReg_BasePtr,
|
|
}
|
|
CV_EncodedFramePtrRegEnum;
|
|
|
|
typedef U32 CV_FrameprocFlags;
|
|
enum
|
|
{
|
|
CV_FrameprocFlag_UsesAlloca = (1 << 0),
|
|
CV_FrameprocFlag_UsesSetJmp = (1 << 1),
|
|
CV_FrameprocFlag_UsesLongJmp = (1 << 2),
|
|
CV_FrameprocFlag_UsesInlAsm = (1 << 3),
|
|
CV_FrameprocFlag_UsesEH = (1 << 4),
|
|
CV_FrameprocFlag_Inline = (1 << 5),
|
|
CV_FrameprocFlag_HasSEH = (1 << 6),
|
|
CV_FrameprocFlag_Naked = (1 << 7),
|
|
CV_FrameprocFlag_HasSecurityChecks = (1 << 8),
|
|
CV_FrameprocFlag_AsyncEH = (1 << 9),
|
|
CV_FrameprocFlag_GSNoStackOrdering = (1 << 10),
|
|
CV_FrameprocFlag_WasInlined = (1 << 11),
|
|
CV_FrameprocFlag_GSCheck = (1 << 12),
|
|
CV_FrameprocFlag_SafeBuffers = (1 << 13),
|
|
// LocalBasePointer: 14,15
|
|
// ParamBasePointer: 16,17
|
|
CV_FrameprocFlag_PogoOn = (1 << 18),
|
|
CV_FrameprocFlag_PogoCountsValid = (1 << 19),
|
|
CV_FrameprocFlag_OptSpeed = (1 << 20),
|
|
CV_FrameprocFlag_HasCFG = (1 << 21),
|
|
CV_FrameprocFlag_HasCFW = (1 << 22),
|
|
};
|
|
#define CV_FrameprocFlags_ExtractLocalBasePointer(f) (((f) >> 14)&3)
|
|
#define CV_FrameprocFlags_ExtractParamBasePointer(f) (((f) >> 16)&3)
|
|
|
|
typedef struct CV_SymFrameproc CV_SymFrameproc;
|
|
struct CV_SymFrameproc
|
|
{
|
|
U32 frame_size;
|
|
U32 pad_size;
|
|
U32 pad_off;
|
|
U32 save_reg_size;
|
|
U32 eh_off;
|
|
CV_SectionIndex eh_sec;
|
|
CV_FrameprocFlags flags;
|
|
};
|
|
|
|
//- (SymKind: ANNOTATION)
|
|
typedef struct CV_SymAnnotation CV_SymAnnotation;
|
|
struct CV_SymAnnotation
|
|
{
|
|
U32 off;
|
|
U16 seg;
|
|
U16 count;
|
|
// U8[] annotation (null terminated)
|
|
};
|
|
|
|
//- (SymKind: OBJNAME)
|
|
|
|
typedef struct CV_SymObjname CV_SymObjname;
|
|
struct CV_SymObjname
|
|
{
|
|
U32 sig;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: THUNK32)
|
|
|
|
typedef U8 CV_ThunkOrdinal;
|
|
typedef enum CV_ThunkOrdinalEnum
|
|
{
|
|
CV_ThunkOrdinal_NoType,
|
|
CV_ThunkOrdinal_Adjustor,
|
|
CV_ThunkOrdinal_VCall,
|
|
CV_ThunkOrdinal_PCode,
|
|
CV_ThunkOrdinal_Load,
|
|
CV_ThunkOrdinal_TrampIncremental,
|
|
CV_ThunkOrdinal_TrampBranchIsland,
|
|
}
|
|
CV_ThunkOrdinalEnum;
|
|
|
|
typedef struct CV_SymThunk32 CV_SymThunk32;
|
|
struct CV_SymThunk32
|
|
{
|
|
U32 parent;
|
|
U32 end;
|
|
U32 next;
|
|
U32 off;
|
|
U16 sec;
|
|
U16 len;
|
|
CV_ThunkOrdinal ord;
|
|
// U8[] name (null terminated)
|
|
// U8[] variant (null terminated)
|
|
};
|
|
|
|
//- (SymKind: BLOCK32)
|
|
|
|
typedef struct CV_SymBlock32 CV_SymBlock32;
|
|
struct CV_SymBlock32
|
|
{
|
|
U32 parent;
|
|
U32 end;
|
|
U32 len;
|
|
U32 off;
|
|
U16 sec;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: LABEL32)
|
|
|
|
typedef struct CV_SymLabel32 CV_SymLabel32;
|
|
struct CV_SymLabel32
|
|
{
|
|
U32 off;
|
|
U16 sec;
|
|
CV_ProcFlags flags;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: REGISTER)
|
|
|
|
typedef struct CV_SymRegister CV_SymRegister;
|
|
struct CV_SymRegister
|
|
{
|
|
CV_TypeId itype;
|
|
U16 reg;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: CONSTANT)
|
|
|
|
typedef struct CV_SymConstant CV_SymConstant;
|
|
struct CV_SymConstant
|
|
{
|
|
CV_TypeId itype;
|
|
// CV_Numeric num
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: UDT)
|
|
|
|
typedef struct CV_SymUDT CV_SymUDT;
|
|
struct CV_SymUDT
|
|
{
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: MANYREG)
|
|
|
|
typedef struct CV_SymManyreg CV_SymManyreg;
|
|
struct CV_SymManyreg
|
|
{
|
|
CV_TypeId itype;
|
|
U8 count;
|
|
// U8[count] regs;
|
|
};
|
|
|
|
//- (SymKind: BPREL32)
|
|
|
|
typedef struct CV_SymBPRel32 CV_SymBPRel32;
|
|
struct CV_SymBPRel32
|
|
{
|
|
U32 off;
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: LDATA32, GDATA32)
|
|
|
|
typedef struct CV_SymData32 CV_SymData32;
|
|
struct CV_SymData32
|
|
{
|
|
CV_TypeId itype;
|
|
U32 off;
|
|
CV_SectionIndex sec;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: PUB32)
|
|
|
|
typedef U32 CV_PubFlags;
|
|
enum
|
|
{
|
|
CV_PubFlag_Code = (1 << 0),
|
|
CV_PubFlag_Function = (1 << 1),
|
|
CV_PubFlag_ManagedCode = (1 << 2),
|
|
CV_PubFlag_MSIL = (1 << 3),
|
|
};
|
|
|
|
typedef struct CV_SymPub32 CV_SymPub32;
|
|
struct CV_SymPub32
|
|
{
|
|
CV_PubFlags flags;
|
|
U32 off;
|
|
CV_SectionIndex sec;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: LPROC32, GPROC32)
|
|
|
|
typedef struct CV_SymProc32 CV_SymProc32;
|
|
struct CV_SymProc32
|
|
{
|
|
U32 parent;
|
|
U32 end;
|
|
U32 next;
|
|
U32 len;
|
|
U32 dbg_start;
|
|
U32 dbg_end;
|
|
CV_TypeId itype;
|
|
U32 off;
|
|
U16 sec;
|
|
CV_ProcFlags flags;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: REGREL32)
|
|
|
|
typedef struct CV_SymRegrel32 CV_SymRegrel32;
|
|
struct CV_SymRegrel32
|
|
{
|
|
U32 reg_off;
|
|
CV_TypeId itype;
|
|
CV_Reg reg;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: LTHREAD32, GTHREAD32)
|
|
|
|
typedef struct CV_SymThread32 CV_SymThread32;
|
|
struct CV_SymThread32
|
|
{
|
|
CV_TypeId itype;
|
|
U32 tls_off;
|
|
U16 tls_seg;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: COMPILE2)
|
|
|
|
typedef U32 CV_Compile2Flags;
|
|
#define CV_Compile2Flags_ExtractLanguage(f) (((f) )&0xFF)
|
|
#define CV_Compile2Flags_ExtractEditAndContinue(f) (((f)>> 8)&0x01)
|
|
#define CV_Compile2Flags_ExtractNoDbgInfo(f) (((f)>> 9)&0x01)
|
|
#define CV_Compile2Flags_ExtractLTCG(f) (((f)>>10)&0x01)
|
|
#define CV_Compile2Flags_ExtractNoDataAlign(f) (((f)>>11)&0x01)
|
|
#define CV_Compile2Flags_ExtractManagedPresent(f) (((f)>>12)&0x01)
|
|
#define CV_Compile2Flags_ExtractSecurityChecks(f) (((f)>>13)&0x01)
|
|
#define CV_Compile2Flags_ExtractHotPatch(f) (((f)>>14)&0x01)
|
|
#define CV_Compile2Flags_ExtractCVTCIL(f) (((f)>>15)&0x01)
|
|
#define CV_Compile2Flags_ExtractMSILModule(f) (((f)>>16)&0x01)
|
|
|
|
typedef struct CV_SymCompile2 CV_SymCompile2;
|
|
struct CV_SymCompile2
|
|
{
|
|
CV_Compile2Flags flags;
|
|
CV_Arch machine;
|
|
U16 ver_fe_major;
|
|
U16 ver_fe_minor;
|
|
U16 ver_fe_build;
|
|
U16 ver_major;
|
|
U16 ver_minor;
|
|
U16 ver_build;
|
|
// U8[] ver_str (null terminated)
|
|
};
|
|
|
|
//- (SymKind: MANYREG2)
|
|
|
|
typedef struct CV_SymManyreg2 CV_SymManyreg2;
|
|
struct CV_SymManyreg2
|
|
{
|
|
CV_TypeId itype;
|
|
U16 count;
|
|
// U16[count] regs;
|
|
};
|
|
|
|
//- (SymKind: LOCALSLOT)
|
|
|
|
typedef struct CV_SymSlot CV_SymSlot;
|
|
struct CV_SymSlot
|
|
{
|
|
U32 slot_index;
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: MANFRAMEREL, ATTR_FRAMEREL)
|
|
|
|
typedef struct CV_SymAttrFrameRel CV_SymAttrFrameRel;
|
|
struct CV_SymAttrFrameRel
|
|
{
|
|
U32 off;
|
|
CV_TypeId itype;
|
|
CV_LocalVarAttr attr;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: MANREGISTER, ATTR_REGISTER)
|
|
|
|
typedef struct CV_SymAttrReg CV_SymAttrReg;
|
|
struct CV_SymAttrReg
|
|
{
|
|
CV_TypeId itype;
|
|
CV_LocalVarAttr attr;
|
|
U16 reg;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: MANMANYREG, ATTR_MANYREG)
|
|
|
|
|
|
typedef struct CV_SymAttrManyReg CV_SymAttrManyReg;
|
|
struct CV_SymAttrManyReg
|
|
{
|
|
CV_TypeId itype;
|
|
CV_LocalVarAttr attr;
|
|
U8 count;
|
|
// U8[count] regs
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: MANREGREL, ATTR_REGREL)
|
|
|
|
typedef struct CV_SymAttrRegRel CV_SymAttrRegRel;
|
|
struct CV_SymAttrRegRel
|
|
{
|
|
U32 off;
|
|
CV_TypeId itype;
|
|
U16 reg;
|
|
CV_LocalVarAttr attr;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: UNAMESPACE)
|
|
|
|
typedef struct CV_SymUNamespace CV_SymUNamespace;
|
|
struct CV_SymUNamespace
|
|
{
|
|
// *** "dummy" is the first character of name - it should not be skipped!
|
|
// *** It is placed here so the C compiler will accept this struct.
|
|
// *** The actual fixed size part of this record has a size of zero.
|
|
|
|
U8 dummy;
|
|
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: PROCREF, DATAREF, LPROCREF)
|
|
|
|
typedef struct CV_SymRef2 CV_SymRef2;
|
|
struct CV_SymRef2
|
|
{
|
|
U32 suc_name;
|
|
U32 sym_off;
|
|
CV_ModIndex imod;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: TRAMPOLINE)
|
|
|
|
typedef U16 CV_TrampolineKind;
|
|
typedef enum CV_TrampolineKindEnum
|
|
{
|
|
CV_TrampolineKind_Incremental,
|
|
CV_TrampolineKind_BranchIsland,
|
|
}
|
|
CV_TrampolineKindEnum;
|
|
|
|
typedef struct CV_SymTrampoline CV_SymTrampoline;
|
|
struct CV_SymTrampoline
|
|
{
|
|
CV_TrampolineKind kind;
|
|
U16 thunk_size;
|
|
U32 thunk_sec_off;
|
|
U32 target_sec_off;
|
|
CV_SectionIndex thunk_sec;
|
|
CV_SectionIndex target_sec;
|
|
};
|
|
|
|
//- (SymKind: SEPCODE)
|
|
|
|
typedef U32 CV_SepcodeFlags;
|
|
enum
|
|
{
|
|
CV_SepcodeFlag_IsLexicalScope = (1 << 0),
|
|
CV_SepcodeFlag_ReturnsToParent = (1 << 1),
|
|
};
|
|
|
|
typedef struct CV_SymSepcode CV_SymSepcode;
|
|
struct CV_SymSepcode
|
|
{
|
|
U32 parent;
|
|
U32 end;
|
|
U32 len;
|
|
CV_SepcodeFlags flags;
|
|
U32 sec_off;
|
|
U32 sec_parent_off;
|
|
U16 sec;
|
|
U16 sec_parent;
|
|
};
|
|
|
|
//- (SymKind: SECTION)
|
|
|
|
typedef struct CV_SymSection CV_SymSection;
|
|
struct CV_SymSection
|
|
{
|
|
U16 sec_index;
|
|
U8 align;
|
|
U8 pad;
|
|
U32 rva;
|
|
U32 size;
|
|
U32 characteristics;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: COFFGROUP)
|
|
|
|
typedef struct CV_SymCoffGroup CV_SymCoffGroup;
|
|
struct CV_SymCoffGroup
|
|
{
|
|
U32 size;
|
|
U32 characteristics;
|
|
U32 off;
|
|
U16 sec;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: EXPORT)
|
|
|
|
typedef U16 CV_ExportFlags;
|
|
enum
|
|
{
|
|
CV_ExportFlag_Constant = (1 << 0),
|
|
CV_ExportFlag_Data = (1 << 1),
|
|
CV_ExportFlag_Private = (1 << 2),
|
|
CV_ExportFlag_NoName = (1 << 3),
|
|
CV_ExportFlag_Ordinal = (1 << 4),
|
|
CV_ExportFlag_Forwarder = (1 << 5),
|
|
};
|
|
|
|
typedef struct CV_SymExport CV_SymExport;
|
|
struct CV_SymExport
|
|
{
|
|
U16 ordinal;
|
|
CV_ExportFlags flags;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: CALLSITEINFO)
|
|
|
|
typedef struct CV_SymCallSiteInfo CV_SymCallSiteInfo;
|
|
struct CV_SymCallSiteInfo
|
|
{
|
|
U32 off;
|
|
U16 sec;
|
|
U16 pad;
|
|
CV_TypeId itype;
|
|
};
|
|
|
|
//- (SymKind: FRAMECOOKIE)
|
|
|
|
typedef U8 CV_FrameCookieKind;
|
|
typedef enum CV_FrameCookieKindEnum
|
|
{
|
|
CV_FrameCookieKind_Copy,
|
|
CV_FrameCookieKind_XorSP,
|
|
CV_FrameCookieKind_XorBP,
|
|
CV_FrameCookieKind_XorR13,
|
|
}
|
|
CV_FrameCookieKindEnum;
|
|
|
|
typedef struct CV_SymFrameCookie CV_SymFrameCookie;
|
|
struct CV_SymFrameCookie
|
|
{
|
|
U32 off;
|
|
CV_Reg reg;
|
|
CV_FrameCookieKind kind;
|
|
U8 flags;
|
|
};
|
|
|
|
//- (SymKind: DISCARDED)
|
|
|
|
typedef U8 CV_DiscardedKind;
|
|
typedef enum CV_DiscardedKindEnum
|
|
{
|
|
CV_DiscardedKind_Unknown,
|
|
CV_DiscardedKind_NotSelected,
|
|
CV_DiscardedKind_NotReferenced,
|
|
}
|
|
CV_DiscardedKindEnum;
|
|
|
|
typedef struct CV_SymDiscarded CV_SymDiscarded;
|
|
struct CV_SymDiscarded
|
|
{
|
|
CV_DiscardedKind kind;
|
|
U32 file_id;
|
|
U32 file_ln;
|
|
// U8[] data (rest of data)
|
|
};
|
|
|
|
//- (SymKind: COMPILE3)
|
|
|
|
typedef U32 CV_Compile3Flags;
|
|
#define CV_Compile3Flags_ExtractLanguage(f) (((f) )&0xFF)
|
|
#define CV_Compile3Flags_ExtractEditAndContinue(f) (((f)>> 9)&0x01)
|
|
#define CV_Compile3Flags_ExtractNoDbgInfo(f) (((f)>>10)&0x01)
|
|
#define CV_Compile3Flags_ExtractLTCG(f) (((f)>>11)&0x01)
|
|
#define CV_Compile3Flags_ExtractNoDataAlign(f) (((f)>>12)&0x01)
|
|
#define CV_Compile3Flags_ExtractManagedPresent(f) (((f)>>13)&0x01)
|
|
#define CV_Compile3Flags_ExtractSecurityChecks(f) (((f)>>14)&0x01)
|
|
#define CV_Compile3Flags_ExtractHotPatch(f) (((f)>>15)&0x01)
|
|
#define CV_Compile3Flags_ExtractCVTCIL(f) (((f)>>16)&0x01)
|
|
#define CV_Compile3Flags_ExtractMSILModule(f) (((f)>>17)&0x01)
|
|
#define CV_Compile3Flags_ExtractSDL(f) (((f)>>18)&0x01)
|
|
#define CV_Compile3Flags_ExtractPGO(f) (((f)>>19)&0x01)
|
|
#define CV_Compile3Flags_ExtractEXP(f) (((f)>>20)&0x01)
|
|
|
|
typedef struct CV_SymCompile3 CV_SymCompile3;
|
|
struct CV_SymCompile3
|
|
{
|
|
CV_Compile3Flags flags;
|
|
CV_Arch machine;
|
|
U16 ver_fe_major;
|
|
U16 ver_fe_minor;
|
|
U16 ver_fe_build;
|
|
U16 ver_feqfe;
|
|
U16 ver_major;
|
|
U16 ver_minor;
|
|
U16 ver_build;
|
|
U16 ver_qfe;
|
|
// U8[] ver_str (null terminated)
|
|
};
|
|
|
|
//- (SymKind: ENVBLOCK)
|
|
|
|
typedef struct CV_SymEnvBlock CV_SymEnvBlock;
|
|
struct CV_SymEnvBlock
|
|
{
|
|
U8 flags;
|
|
// U8[][] rgsz (sequence null terminated strings)
|
|
};
|
|
|
|
//- (SymKind: LOCAL)
|
|
|
|
typedef struct CV_SymLocal CV_SymLocal;
|
|
struct CV_SymLocal
|
|
{
|
|
CV_TypeId itype;
|
|
CV_LocalFlags flags;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- DEFRANGE
|
|
|
|
typedef struct CV_LvarAddrRange CV_LvarAddrRange;
|
|
struct CV_LvarAddrRange
|
|
{
|
|
U32 off;
|
|
U16 sec;
|
|
U16 len;
|
|
};
|
|
|
|
typedef struct CV_LvarAddrGap CV_LvarAddrGap;
|
|
struct CV_LvarAddrGap
|
|
{
|
|
U16 off;
|
|
U16 len;
|
|
};
|
|
|
|
typedef U16 CV_RangeAttribs;
|
|
enum
|
|
{
|
|
CV_RangeAttrib_Maybe = (1 << 0),
|
|
};
|
|
|
|
//- (SymKind: DEFRANGE_SUBFIELD)
|
|
|
|
typedef struct CV_SymDefrangeSubfield CV_SymDefrangeSubfield;
|
|
struct CV_SymDefrangeSubfield
|
|
{
|
|
U32 program;
|
|
U32 off_in_parent;
|
|
CV_LvarAddrRange range;
|
|
// CV_LvarAddrGap[] gaps (rest of data)
|
|
};
|
|
|
|
//- (SymKind: DEFRANGE_REGISTER)
|
|
|
|
typedef struct CV_SymDefrangeRegister CV_SymDefrangeRegister;
|
|
struct CV_SymDefrangeRegister
|
|
{
|
|
CV_Reg reg;
|
|
CV_RangeAttribs attribs;
|
|
CV_LvarAddrRange range;
|
|
// CV_LvarAddrGap[] gaps (rest of data)
|
|
};
|
|
|
|
//- (SymKind: DEFRANGE_FRAMEPOINTER_REL)
|
|
|
|
typedef struct CV_SymDefrangeFramepointerRel CV_SymDefrangeFramepointerRel;
|
|
struct CV_SymDefrangeFramepointerRel
|
|
{
|
|
S32 off;
|
|
CV_LvarAddrRange range;
|
|
// CV_LvarAddrGap[] gaps (rest of data)
|
|
};
|
|
|
|
//- (SymKind: DEFRANGE_SUBFIELD_REGISTER)
|
|
|
|
typedef struct CV_SymDefrangeSubfieldRegister CV_SymDefrangeSubfieldRegister;
|
|
struct CV_SymDefrangeSubfieldRegister
|
|
{
|
|
CV_Reg reg;
|
|
CV_RangeAttribs attribs;
|
|
U32 field_offset;
|
|
CV_LvarAddrRange range;
|
|
// CV_LvarAddrGap[] gaps (rest of data)
|
|
};
|
|
|
|
//- (SymKind: DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE)
|
|
|
|
typedef struct CV_SymDefrangeFramepointerRelFullScope CV_SymDefrangeFramepointerRelFullScope;
|
|
struct CV_SymDefrangeFramepointerRelFullScope
|
|
{
|
|
S32 off;
|
|
};
|
|
|
|
//- (SymKind: DEFRANGE_REGISTER_REL)
|
|
|
|
typedef U16 CV_DefrangeRegisterRelFlags;
|
|
enum
|
|
{
|
|
CV_DefrangeRegisterRelFlag_SpilledOutUDTMember = (1 << 0),
|
|
};
|
|
#define CV_DefrangeRegisterRelFlag_ExtractOffsetParent(f) (((f)>>4)&0xFFF)
|
|
|
|
typedef struct CV_SymDefrangeRegisterRel CV_SymDefrangeRegisterRel;
|
|
struct CV_SymDefrangeRegisterRel
|
|
{
|
|
CV_Reg reg;
|
|
CV_DefrangeRegisterRelFlags flags;
|
|
S32 reg_off;
|
|
CV_LvarAddrRange range;
|
|
// CV_LvarAddGap[] gaps (rest of data)
|
|
};
|
|
|
|
//- (SymKind: BUILDINFO)
|
|
|
|
typedef struct CV_SymBuildInfo CV_SymBuildInfo;
|
|
struct CV_SymBuildInfo
|
|
{
|
|
CV_ItemId id;
|
|
};
|
|
|
|
//- (SymKind: INLINESITE)
|
|
|
|
typedef struct CV_SymInlineSite CV_SymInlineSite;
|
|
struct CV_SymInlineSite
|
|
{
|
|
U32 parent;
|
|
U32 end;
|
|
CV_ItemId inlinee;
|
|
// CV_BinaryAnnotation annotations (rest of data)
|
|
};
|
|
|
|
//- (SymKind: INLINESITE_END) (empty)
|
|
|
|
//- (SymKind: FILESTATIC)
|
|
|
|
typedef struct CV_SymFileStatic CV_SymFileStatic;
|
|
struct CV_SymFileStatic
|
|
{
|
|
CV_TypeId itype;
|
|
U32 mod_offset;
|
|
CV_LocalFlags flags;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: ARMSWITCHTABLE)
|
|
|
|
typedef U16 CV_ArmSwitchKind;
|
|
typedef enum
|
|
{
|
|
CV_ArmSwitchKind_INT1,
|
|
CV_ArmSwitchKind_UINT1,
|
|
CV_ArmSwitchKind_INT2,
|
|
CV_ArmSwitchKind_UINT2,
|
|
CV_ArmSwitchKind_INT4,
|
|
CV_ArmSwitchKind_UINT5,
|
|
CV_ArmSwitchKind_POINTER,
|
|
CV_ArmSwitchKind_UINT1SHL1,
|
|
CV_ArmSwitchKind_UINT2SHL1,
|
|
CV_ArmSwitchKind_INT1SSHL1,
|
|
CV_ArmSwitchKind_INT2SSHL1,
|
|
} CV_ArmSwitchKindEnum;
|
|
|
|
typedef struct CV_SymArmSwitchTable CV_SymArmSwitchTable;
|
|
struct CV_SymArmSwitchTable
|
|
{
|
|
U32 off_base;
|
|
U16 sec_base;
|
|
CV_ArmSwitchKind kind;
|
|
U32 off_branch;
|
|
U32 off_table;
|
|
U16 sec_branch;
|
|
U16 sec_table;
|
|
U32 entry_count;
|
|
};
|
|
|
|
//- (SymKind: CALLEES, CALLERS)
|
|
|
|
typedef struct CV_SymFunctionList CV_SymFunctionList;
|
|
struct CV_SymFunctionList
|
|
{
|
|
U32 count;
|
|
// CV_TypeId[count] funcs
|
|
// U32[clamp(count, rest_of_data/4)] invocations
|
|
};
|
|
|
|
//- (SymKind: POGODATA)
|
|
|
|
typedef struct CV_SymPogoInfo CV_SymPogoInfo;
|
|
struct CV_SymPogoInfo
|
|
{
|
|
U32 invocations;
|
|
U64 dynamic_inst_count;
|
|
U32 static_inst_count;
|
|
U32 post_inline_static_inst_count;
|
|
};
|
|
|
|
//- (SymKind: INLINESITE2)
|
|
|
|
typedef struct CV_SymInlineSite2 CV_SymInlineSite2;
|
|
struct CV_SymInlineSite2
|
|
{
|
|
U32 parent_off;
|
|
U32 end_off;
|
|
CV_ItemId inlinee;
|
|
U32 invocations;
|
|
// CV_BinaryAnnotation annotations (rest of data)
|
|
};
|
|
|
|
//- (SymKind: HEAPALLOCSITE)
|
|
|
|
typedef struct CV_SymHeapAllocSite CV_SymHeapAllocSite;
|
|
struct CV_SymHeapAllocSite
|
|
{
|
|
U32 off;
|
|
U16 sec;
|
|
U16 call_inst_len;
|
|
CV_TypeId itype;
|
|
};
|
|
|
|
//- (SymKind: MOD_TYPEREF)
|
|
|
|
typedef U32 CV_ModTypeRefFlags;
|
|
enum
|
|
{
|
|
CV_ModTypeRefFlag_None = (1 << 0),
|
|
CV_ModTypeRefFlag_RefTMPCT = (1 << 1),
|
|
CV_ModTypeRefFlag_OwnTMPCT = (1 << 2),
|
|
CV_ModTypeRefFlag_OwnTMR = (1 << 3),
|
|
CV_ModTypeRefFlag_OwnTM = (1 << 4),
|
|
CV_ModTypeRefFlag_RefTM = (1 << 5),
|
|
};
|
|
|
|
typedef struct CV_SymModTypeRef CV_SymModTypeRef;
|
|
struct CV_SymModTypeRef
|
|
{
|
|
CV_ModTypeRefFlags flags;
|
|
// contain stream number or module index depending on flags (undocumented)
|
|
U32 word0;
|
|
U32 word1;
|
|
};
|
|
|
|
//- (SymKind: REF_MINIPDB)
|
|
|
|
typedef U16 CV_RefMiniPdbFlags;
|
|
enum
|
|
{
|
|
CV_RefMiniPdbFlag_Local = (1 << 0),
|
|
CV_RefMiniPdbFlag_Data = (1 << 1),
|
|
CV_RefMiniPdbFlag_UDT = (1 << 2),
|
|
CV_RefMiniPdbFlag_Label = (1 << 3),
|
|
CV_RefMiniPdbFlag_Const = (1 << 4),
|
|
};
|
|
|
|
typedef struct CV_SymRefMiniPdb CV_SymRefMiniPdb;
|
|
struct CV_SymRefMiniPdb
|
|
{
|
|
U32 data;
|
|
CV_ModIndex imod;
|
|
CV_RefMiniPdbFlags flags;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: FASTLINK)
|
|
|
|
typedef U16 CV_FastLinkFlags;
|
|
enum
|
|
{
|
|
CV_FastLinkFlag_IsGlobalData = (1 << 0),
|
|
CV_FastLinkFlag_IsData = (1 << 1),
|
|
CV_FastLinkFlag_IsUDT = (1 << 2),
|
|
// 3 ~ unknown/unused
|
|
CV_FastLinkFlag_IsConst = (1 << 4),
|
|
// 5 ~ unknown/unused
|
|
CV_FastLinkFlag_IsNamespace = (1 << 6),
|
|
};
|
|
|
|
typedef struct CV_SymFastLink CV_SymFastLink;
|
|
struct CV_SymFastLink
|
|
{
|
|
CV_TypeId itype;
|
|
CV_FastLinkFlags flags;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (SymKind: INLINEES)
|
|
|
|
typedef struct CV_SymInlinees CV_SymInlinees;
|
|
struct CV_SymInlinees
|
|
{
|
|
U32 count;
|
|
// U32[count] desc;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ rjf: CodeView Format "Leaf" Types
|
|
//
|
|
// (type info)
|
|
//
|
|
|
|
#define CV_LeafIDKindXList(X) \
|
|
X(FUNC_ID, 0x1601)\
|
|
X(MFUNC_ID, 0x1602)\
|
|
X(BUILDINFO, 0x1603)\
|
|
X(SUBSTR_LIST, 0x1604)\
|
|
X(STRING_ID, 0x1605)\
|
|
X(UDT_SRC_LINE, 0x1606)\
|
|
X(UDT_MOD_SRC_LINE, 0x1607)
|
|
|
|
typedef U16 CV_LeafIDKind;
|
|
typedef enum CV_LeafIDKindEnum
|
|
{
|
|
#define X(N,c) CV_LeafIDKind_##N = c,
|
|
CV_LeafIDKindXList(X)
|
|
#undef X
|
|
}
|
|
CV_LeafIDKindEnum;
|
|
|
|
#define CV_TypeId_Variadic 0
|
|
|
|
#define CV_BasicPointerKindXList(X) \
|
|
X(VALUE, 0x0)\
|
|
X(16BIT, 0x1)\
|
|
X(FAR_16BIT, 0x2)\
|
|
X(HUGE_16BIT, 0x3)\
|
|
X(32BIT, 0x4)\
|
|
X(16_32BIT, 0x5)\
|
|
X(64BIT, 0x6)
|
|
|
|
typedef U8 CV_BasicPointerKind;
|
|
typedef enum
|
|
{
|
|
#define X(N,c) CV_BasicPointerKind_##N = c,
|
|
CV_BasicPointerKindXList(X)
|
|
#undef X
|
|
} CV_BasicPointerKindEnum;
|
|
|
|
#define CV_BasicTypeFromTypeId(x) ((x)&0xFF)
|
|
#define CV_BasicPointerKindFromTypeId(x) (((x)>>8)&0xFF)
|
|
|
|
typedef U8 CV_HFAKind;
|
|
typedef enum CV_HFAKindEnum
|
|
{
|
|
CV_HFAKind_None,
|
|
CV_HFAKind_Float,
|
|
CV_HFAKind_Double,
|
|
CV_HFAKind_Other
|
|
}
|
|
CV_HFAKindEnum;
|
|
|
|
typedef U8 CV_MoComUDTKind;
|
|
typedef enum CV_MoComUDTKindEnum
|
|
{
|
|
CV_MoComUDTKind_None,
|
|
CV_MoComUDTKind_Ref,
|
|
CV_MoComUDTKind_Value,
|
|
CV_MoComUDTKind_Interface
|
|
}
|
|
CV_MoComUDTKindEnum;
|
|
|
|
typedef U16 CV_TypeProps;
|
|
enum
|
|
{
|
|
CV_TypeProp_Packed = (1<<0),
|
|
CV_TypeProp_HasConstructorsDestructors = (1<<1),
|
|
CV_TypeProp_OverloadedOperators = (1<<2),
|
|
CV_TypeProp_IsNested = (1<<3),
|
|
CV_TypeProp_ContainsNested = (1<<4),
|
|
CV_TypeProp_OverloadedAssignment = (1<<5),
|
|
CV_TypeProp_OverloadedCasting = (1<<6),
|
|
CV_TypeProp_FwdRef = (1<<7),
|
|
CV_TypeProp_Scoped = (1<<8),
|
|
CV_TypeProp_HasUniqueName = (1<<9),
|
|
CV_TypeProp_Sealed = (1<<10),
|
|
// HFA: 11,12
|
|
CV_TypeProp_Intrinsic = (1<<13),
|
|
// MOCOM: 14,15
|
|
};
|
|
#define CV_TypeProps_ExtractHFA(f) (((f)>>11)&0x3)
|
|
#define CV_TypeProps_ExtractMOCOM(f) (((f)>>14)&0x3)
|
|
|
|
typedef U8 CV_PointerKind;
|
|
typedef enum CV_PointerKindEnum
|
|
{
|
|
CV_PointerKind_Near, // 16 bit
|
|
CV_PointerKind_Far, // 16:16 bit
|
|
CV_PointerKind_Huge, // 16:16 bit
|
|
CV_PointerKind_BaseSeg,
|
|
CV_PointerKind_BaseVal,
|
|
CV_PointerKind_BaseSegVal,
|
|
CV_PointerKind_BaseAddr,
|
|
CV_PointerKind_BaseSegAddr,
|
|
CV_PointerKind_BaseType,
|
|
CV_PointerKind_BaseSelf,
|
|
CV_PointerKind_Near32, // 32 bit
|
|
CV_PointerKind_Far32, // 16:32 bit
|
|
CV_PointerKind_64, // 64 bit
|
|
}
|
|
CV_PointerKindEnum;
|
|
|
|
typedef U8 CV_PointerMode;
|
|
typedef enum CV_PointerModeEnum
|
|
{
|
|
CV_PointerMode_Ptr,
|
|
CV_PointerMode_LRef,
|
|
CV_PointerMode_PtrMem,
|
|
CV_PointerMode_PtrMethod,
|
|
CV_PointerMode_RRef,
|
|
}
|
|
CV_PointerModeEnum;
|
|
|
|
typedef U16 CV_MemberPointerKind;
|
|
typedef enum CV_MemberPointerKindEnum
|
|
{
|
|
CV_MemberPointerKind_Undef,
|
|
CV_MemberPointerKind_DataSingle,
|
|
CV_MemberPointerKind_DataMultiple,
|
|
CV_MemberPointerKind_DataVirtual,
|
|
CV_MemberPointerKind_DataGeneral,
|
|
CV_MemberPointerKind_FuncSingle,
|
|
CV_MemberPointerKind_FuncMultiple,
|
|
CV_MemberPointerKind_FuncVirtual,
|
|
CV_MemberPointerKind_FuncGeneral,
|
|
}
|
|
CV_MemberPointerKindEnum;
|
|
|
|
typedef U32 CV_VirtualTableShape;
|
|
typedef enum CV_VirtualTableShapeEnum
|
|
{
|
|
CV_VirtualTableShape_Near, // 16 bit ptr
|
|
CV_VirtualTableShape_Far, // 16:16 bit ptr
|
|
CV_VirtualTableShape_Thin, // ???
|
|
CV_VirtualTableShape_Outer, // address point displacment to outermost class entry[-1]
|
|
CV_VirtualTableShape_Meta, // far pointer to metaclass descriptor entry[-2]
|
|
CV_VirtualTableShape_Near32, // 32 bit ptr
|
|
CV_VirtualTableShape_Far32, // ???
|
|
}
|
|
CV_VirtualTableShapeEnum;
|
|
|
|
typedef U8 CV_MethodProp;
|
|
enum
|
|
{
|
|
CV_MethodProp_Vanilla,
|
|
CV_MethodProp_Virtual,
|
|
CV_MethodProp_Static,
|
|
CV_MethodProp_Friend,
|
|
CV_MethodProp_Intro,
|
|
CV_MethodProp_PureVirtual,
|
|
CV_MethodProp_PureIntro,
|
|
};
|
|
|
|
typedef U8 CV_MemberAccess;
|
|
typedef enum CV_MemberAccessEnum
|
|
{
|
|
CV_MemberAccess_Null,
|
|
CV_MemberAccess_Private,
|
|
CV_MemberAccess_Protected,
|
|
CV_MemberAccess_Public
|
|
}
|
|
CV_MemberAccessEnum;
|
|
|
|
typedef U16 CV_FieldAttribs;
|
|
enum
|
|
{
|
|
// Access: 0,1
|
|
// MethodProp: [2:4]
|
|
CV_FieldAttrib_Pseudo = (1<<5),
|
|
CV_FieldAttrib_NoInherit = (1<<6),
|
|
CV_FieldAttrib_NoConstruct = (1<<7),
|
|
CV_FieldAttrib_CompilerGenated = (1<<8),
|
|
CV_FieldAttrib_Sealed = (1<<9),
|
|
};
|
|
#define CV_FieldAttribs_ExtractAccess(f) ((f)&0x3)
|
|
#define CV_FieldAttribs_ExtractMethodProp(f) (((f)>>2)&0x7)
|
|
|
|
typedef U16 CV_LabelKind;
|
|
typedef enum CV_LabelKindEnum
|
|
{
|
|
CV_LabelKind_Near = 0,
|
|
CV_LabelKind_Far = 4,
|
|
}
|
|
CV_LabelKindEnum;
|
|
|
|
typedef U8 CV_FunctionAttribs;
|
|
enum
|
|
{
|
|
CV_FunctionAttrib_CxxReturnUDT = (1<<0),
|
|
CV_FunctionAttrib_Constructor = (1<<1),
|
|
CV_FunctionAttrib_ConstructorVBase = (1<<2),
|
|
};
|
|
|
|
typedef U8 CV_CallKind;
|
|
typedef enum CV_CallKindEnum
|
|
{
|
|
CV_CallKind_NearC,
|
|
CV_CallKind_FarC,
|
|
CV_CallKind_NearPascal,
|
|
CV_CallKind_FarPascal,
|
|
CV_CallKind_NearFast,
|
|
CV_CallKind_FarFast,
|
|
CV_CallKind_UNUSED,
|
|
CV_CallKind_NearStd,
|
|
CV_CallKind_FarStd,
|
|
CV_CallKind_NearSys,
|
|
CV_CallKind_FarSys,
|
|
CV_CallKind_This,
|
|
CV_CallKind_Mips,
|
|
CV_CallKind_Generic,
|
|
CV_CallKind_Alpha,
|
|
CV_CallKind_PPC,
|
|
CV_CallKind_HitachiSuperH,
|
|
CV_CallKind_Arm,
|
|
CV_CallKind_AM33,
|
|
CV_CallKind_TriCore,
|
|
CV_CallKind_HitachiSuperH5,
|
|
CV_CallKind_M32R,
|
|
CV_CallKind_Clr,
|
|
CV_CallKind_Inline,
|
|
CV_CallKind_NearVector,
|
|
}
|
|
CV_CallKindEnum;
|
|
|
|
//- (LeafKind: PRECOMP)
|
|
|
|
typedef struct CV_LeafPreComp CV_LeafPreComp;
|
|
struct CV_LeafPreComp
|
|
{
|
|
U32 start_index;
|
|
U32 count;
|
|
U32 signature;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: TYPESERVER)
|
|
|
|
typedef struct CV_LeafTypeServer CV_LeafTypeServer;
|
|
struct CV_LeafTypeServer
|
|
{
|
|
U32 sig;
|
|
U32 age;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: TYPESERVER2)
|
|
|
|
typedef struct CV_LeafTypeServer2 CV_LeafTypeServer2;
|
|
struct CV_LeafTypeServer2
|
|
{
|
|
COFF_Guid sig70;
|
|
U32 age;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: SKIP)
|
|
|
|
typedef struct CV_LeafSkip CV_LeafSkip;
|
|
struct CV_LeafSkip
|
|
{
|
|
CV_TypeId itype;
|
|
};
|
|
|
|
//- (LeafKind: VTSHAPE)
|
|
|
|
typedef struct CV_LeafVTShape CV_LeafVTShape;
|
|
struct CV_LeafVTShape
|
|
{
|
|
U16 count;
|
|
// U4[count] shapes (CV_VirtualTableShape)
|
|
};
|
|
|
|
//- (LeafKind: LABEL)
|
|
|
|
typedef struct CV_LeafLabel CV_LeafLabel;
|
|
struct CV_LeafLabel
|
|
{
|
|
CV_LabelKind kind;
|
|
};
|
|
|
|
//- (LeafKind: MODIFIER)
|
|
|
|
typedef U16 CV_ModifierFlags;
|
|
enum
|
|
{
|
|
CV_ModifierFlag_Const = (1 << 0),
|
|
CV_ModifierFlag_Volatile = (1 << 1),
|
|
CV_ModifierFlag_Unaligned = (1 << 2),
|
|
};
|
|
|
|
typedef struct CV_LeafModifier CV_LeafModifier;
|
|
struct CV_LeafModifier
|
|
{
|
|
CV_TypeId itype;
|
|
CV_ModifierFlags flags;
|
|
};
|
|
|
|
//- (LeafKind: POINTER)
|
|
|
|
typedef U32 CV_PointerAttribs;
|
|
enum
|
|
{
|
|
// Kind: [0:4]
|
|
// Mode: [5:7]
|
|
CV_PointerAttrib_IsFlat = (1 << 8),
|
|
CV_PointerAttrib_Volatile = (1 << 9),
|
|
CV_PointerAttrib_Const = (1 << 10),
|
|
CV_PointerAttrib_Unaligned = (1 << 11),
|
|
CV_PointerAttrib_Restricted = (1 << 12),
|
|
// Size: [13,18]
|
|
CV_PointerAttrib_MOCOM = (1 << 19),
|
|
CV_PointerAttrib_LRef = (1 << 21),
|
|
CV_PointerAttrib_RRef = (1 << 22)
|
|
};
|
|
|
|
#define CV_PointerAttribs_ExtractKind(a) ((a)&0x1F)
|
|
#define CV_PointerAttribs_ExtractMode(a) (((a)>>5)&0x7)
|
|
#define CV_PointerAttribs_ExtractSize(a) (((a)>>13)&0x3F)
|
|
|
|
typedef struct CV_LeafPointer CV_LeafPointer;
|
|
struct CV_LeafPointer
|
|
{
|
|
CV_TypeId itype;
|
|
CV_PointerAttribs attribs;
|
|
};
|
|
|
|
//- (LeafKind: PROCEDURE)
|
|
|
|
typedef struct CV_LeafProcedure CV_LeafProcedure;
|
|
struct CV_LeafProcedure
|
|
{
|
|
CV_TypeId ret_itype;
|
|
CV_CallKind call_kind;
|
|
CV_FunctionAttribs attribs;
|
|
U16 arg_count;
|
|
CV_TypeId arg_itype;
|
|
};
|
|
|
|
//- (LeafKind: MFUNCTION)
|
|
|
|
typedef struct CV_LeafMFunction CV_LeafMFunction;
|
|
struct CV_LeafMFunction
|
|
{
|
|
CV_TypeId ret_itype;
|
|
CV_TypeId class_itype;
|
|
CV_TypeId this_itype;
|
|
CV_CallKind call_kind;
|
|
CV_FunctionAttribs attribs;
|
|
U16 arg_count;
|
|
CV_TypeId arg_itype;
|
|
S32 this_adjust;
|
|
};
|
|
|
|
//- (LeafKind: ARGLIST)
|
|
|
|
typedef struct CV_LeafArgList CV_LeafArgList;
|
|
struct CV_LeafArgList
|
|
{
|
|
U32 count;
|
|
// CV_TypeId[count] itypes;
|
|
};
|
|
|
|
//- (LeafKind: BITFIELD)
|
|
|
|
typedef struct CV_LeafBitField CV_LeafBitField;
|
|
struct CV_LeafBitField
|
|
{
|
|
CV_TypeId itype;
|
|
U8 len;
|
|
U8 pos;
|
|
};
|
|
|
|
//- (LeafKind: METHODLIST)
|
|
|
|
// ("jagged" array of these vvvvvvvv)
|
|
typedef struct CV_LeafMethodListMember CV_LeafMethodListMember;
|
|
struct CV_LeafMethodListMember
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
U16 pad;
|
|
CV_TypeId itype;
|
|
// U32 vbaseoff (when Intro or PureIntro)
|
|
};
|
|
|
|
//- (LeafKind: INDEX)
|
|
|
|
typedef struct CV_LeafIndex CV_LeafIndex;
|
|
struct CV_LeafIndex
|
|
{
|
|
U16 pad;
|
|
CV_TypeId itype;
|
|
};
|
|
|
|
//- (LeafKind: ARRAY)
|
|
|
|
typedef struct CV_LeafArray CV_LeafArray;
|
|
struct CV_LeafArray
|
|
{
|
|
CV_TypeId entry_itype;
|
|
CV_TypeId index_itype;
|
|
// CV_Numeric count
|
|
};
|
|
|
|
//- (LeafKind: CLASS, STRUCTURE, INTERFACE)
|
|
|
|
typedef struct CV_LeafStruct CV_LeafStruct;
|
|
struct CV_LeafStruct
|
|
{
|
|
U16 count;
|
|
CV_TypeProps props;
|
|
CV_TypeId field_itype;
|
|
CV_TypeId derived_itype;
|
|
CV_TypeId vshape_itype;
|
|
// CV_Numeric size
|
|
// U8[] name (null terminated)
|
|
// U8[] unique_name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: UNION)
|
|
|
|
typedef struct CV_LeafUnion CV_LeafUnion;
|
|
struct CV_LeafUnion
|
|
{
|
|
U16 count;
|
|
CV_TypeProps props;
|
|
CV_TypeId field_itype;
|
|
// CV_Numeric size
|
|
// U8[] name (null terminated)
|
|
// U8[] unique_name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: ENUM)
|
|
|
|
typedef struct CV_LeafEnum CV_LeafEnum;
|
|
struct CV_LeafEnum
|
|
{
|
|
U16 count;
|
|
CV_TypeProps props;
|
|
CV_TypeId base_itype;
|
|
CV_TypeId field_itype;
|
|
// U8[] name (null terminated)
|
|
// U8[] unique_name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: ALIAS)
|
|
|
|
typedef struct CV_LeafAlias CV_LeafAlias;
|
|
struct CV_LeafAlias
|
|
{
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: MEMBER)
|
|
|
|
typedef struct CV_LeafMember CV_LeafMember;
|
|
struct CV_LeafMember
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
CV_TypeId itype;
|
|
// CV_Numeric offset
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: STMEMBER)
|
|
|
|
typedef struct CV_LeafStMember CV_LeafStMember;
|
|
struct CV_LeafStMember
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: METHOD)
|
|
|
|
typedef struct CV_LeafMethod CV_LeafMethod;
|
|
struct CV_LeafMethod
|
|
{
|
|
U16 count;
|
|
CV_TypeId list_itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: ONEMETHOD)
|
|
|
|
typedef struct CV_LeafOneMethod CV_LeafOneMethod;
|
|
struct CV_LeafOneMethod
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
CV_TypeId itype;
|
|
// U32 vbaseoff (when Intro or PureIntro)
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: ENUMERATE)
|
|
|
|
typedef struct CV_LeafEnumerate CV_LeafEnumerate;
|
|
struct CV_LeafEnumerate
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
// CV_Numeric val
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: NESTTYPE)
|
|
|
|
typedef struct CV_LeafNestType CV_LeafNestType;
|
|
struct CV_LeafNestType
|
|
{
|
|
U16 pad;
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: NESTTYPEEX)
|
|
|
|
typedef struct CV_LeafNestTypeEx CV_LeafNestTypeEx;
|
|
struct CV_LeafNestTypeEx
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafKind: BCLASS)
|
|
|
|
typedef struct CV_LeafBClass CV_LeafBClass;
|
|
struct CV_LeafBClass
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
CV_TypeId itype;
|
|
// CV_Numeric offset
|
|
};
|
|
|
|
//- (LeafKind: VBCLASS, IVBCLASS)
|
|
|
|
typedef struct CV_LeafVBClass CV_LeafVBClass;
|
|
struct CV_LeafVBClass
|
|
{
|
|
CV_FieldAttribs attribs;
|
|
CV_TypeId itype;
|
|
CV_TypeId vbptr_itype;
|
|
// CV_Numeric vbptr_off
|
|
// CV_Numeric vtable_off
|
|
};
|
|
|
|
//- (LeafKind: VFUNCTAB)
|
|
|
|
typedef struct CV_LeafVFuncTab CV_LeafVFuncTab;
|
|
struct CV_LeafVFuncTab
|
|
{
|
|
U16 pad;
|
|
CV_TypeId itype;
|
|
};
|
|
|
|
//- (LeafKind: VFUNCOFF)
|
|
|
|
typedef struct CV_LeafVFuncOff CV_LeafVFuncOff;
|
|
struct CV_LeafVFuncOff
|
|
{
|
|
U16 pad;
|
|
CV_TypeId itype;
|
|
U32 off;
|
|
};
|
|
|
|
//- (LeafKind: VFTABLE)
|
|
|
|
typedef struct CV_LeafVFTable CV_LeafVFTable;
|
|
struct CV_LeafVFTable
|
|
{
|
|
CV_TypeId owner_itype;
|
|
CV_TypeId base_table_itype;
|
|
U32 offset_in_object_layout;
|
|
U32 names_len;
|
|
// U8[] names (multiple null terminated strings)
|
|
};
|
|
|
|
//- (LeafKind: VFTPATH)
|
|
|
|
typedef struct CV_LeafVFPath CV_LeafVFPath;
|
|
struct CV_LeafVFPath
|
|
{
|
|
U32 count;
|
|
// CV_TypeId[count] base;
|
|
};
|
|
|
|
//- (LeafKind: CLASS2, STRUCT2)
|
|
|
|
typedef struct CV_LeafStruct2 CV_LeafStruct2;
|
|
struct CV_LeafStruct2
|
|
{
|
|
// NOTE: still reverse engineering this - if you find docs please help!
|
|
CV_TypeProps props;
|
|
U16 unknown1;
|
|
CV_TypeId field_itype;
|
|
CV_TypeId derived_itype;
|
|
CV_TypeId vshape_itype;
|
|
U16 unknown2;
|
|
// CV_Numeric size
|
|
// U8[] name (null terminated)
|
|
// U8[] unique_name (null terminated)
|
|
};
|
|
|
|
//- (LeafIDKind: FUNC_ID)
|
|
|
|
typedef struct CV_LeafFuncId CV_LeafFuncId;
|
|
struct CV_LeafFuncId
|
|
{
|
|
CV_ItemId scope_string_id;
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafIDKind: MFUNC_ID)
|
|
|
|
typedef struct CV_LeafMFuncId CV_LeafMFuncId;
|
|
struct CV_LeafMFuncId
|
|
{
|
|
CV_TypeId owner_itype;
|
|
CV_TypeId itype;
|
|
// U8[] name (null terminated)
|
|
};
|
|
|
|
//- (LeafIDKind: STRING_ID)
|
|
|
|
typedef struct CV_LeafStringId CV_LeafStringId;
|
|
struct CV_LeafStringId
|
|
{
|
|
CV_ItemId substr_list_id;
|
|
// U8[] string (null terminated)
|
|
};
|
|
|
|
//- (LeafIDKind: BUILDINFO)
|
|
|
|
typedef enum CV_BuildInfoIndexEnum
|
|
{
|
|
CV_BuildInfoIndex_BuildDirectory = 0,
|
|
CV_BuildInfoIndex_CompilerExecutable = 1,
|
|
CV_BuildInfoIndex_TargetSourceFile = 2,
|
|
CV_BuildInfoIndex_CombinedPdb = 3,
|
|
CV_BuildInfoIndex_CompileArguments = 4,
|
|
}
|
|
CV_BuildInfoIndexEnum;
|
|
|
|
typedef struct CV_LeafBuildInfo CV_LeafBuildInfo;
|
|
struct CV_LeafBuildInfo
|
|
{
|
|
U16 count;
|
|
// CV_ItemId[count] items
|
|
};
|
|
|
|
//- (LeafIDKind: SUBSTR_LIST)
|
|
|
|
typedef struct CV_LeafSubstrList CV_LeafSubstrList;
|
|
struct CV_LeafSubstrList
|
|
{
|
|
U32 count;
|
|
// CV_ItemId[count] items
|
|
};
|
|
|
|
//- (LeafIDKind: UDT_SRC_LINE)
|
|
|
|
typedef struct CV_LeafUDTSrcLine CV_LeafUDTSrcLine;
|
|
struct CV_LeafUDTSrcLine
|
|
{
|
|
CV_TypeId udt_itype;
|
|
CV_ItemId src_string_id;
|
|
U32 line;
|
|
};
|
|
|
|
//- (LeafIDKind: UDT_MOD_SRC_LINE)
|
|
|
|
typedef struct CV_LeafUDTModSrcLine CV_LeafUDTModSrcLine;
|
|
struct CV_LeafUDTModSrcLine
|
|
{
|
|
CV_TypeId udt_itype;
|
|
CV_ItemId src_string_id;
|
|
U32 line;
|
|
CV_ModIndex imod;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ CodeView Format C13 Line Info Types
|
|
|
|
#define CV_C13_SubSectionKind_IgnoreFlag 0x80000000
|
|
|
|
#define CV_C13_SubSectionKindXList(X)\
|
|
X(Symbols, 0xF1)\
|
|
X(Lines, 0xF2)\
|
|
X(StringTable, 0xF3)\
|
|
X(FileChksms, 0xF4)\
|
|
X(FrameData, 0xF5)\
|
|
X(InlineeLines, 0xF6)\
|
|
X(CrossScopeImports, 0xF7)\
|
|
X(CrossScopeExports, 0xF8)\
|
|
X(IlLines, 0xF9)\
|
|
X(FuncMDTokenMap, 0xFA)\
|
|
X(TypeMDTokenMap, 0xFB)\
|
|
X(MergedAssemblyInput, 0xFC)\
|
|
X(CoffSymbolRVA, 0xFD)
|
|
|
|
typedef U32 CV_C13_SubSectionKind;
|
|
typedef enum
|
|
{
|
|
#define X(N,c) CV_C13_SubSectionKind_##N = c,
|
|
CV_C13_SubSectionKindXList(X)
|
|
#undef X
|
|
} CV_C13_SubSectionKindEnum;
|
|
|
|
typedef struct CV_C13_SubSectionHeader CV_C13_SubSectionHeader;
|
|
struct CV_C13_SubSectionHeader
|
|
{
|
|
CV_C13_SubSectionKind kind;
|
|
U32 size;
|
|
};
|
|
|
|
//- FileChksms sub-section
|
|
|
|
typedef U8 CV_C13_ChecksumKind;
|
|
typedef enum
|
|
{
|
|
CV_C13_ChecksumKind_Null,
|
|
CV_C13_ChecksumKind_MD5,
|
|
CV_C13_ChecksumKind_SHA1,
|
|
CV_C13_ChecksumKind_SHA256,
|
|
} CV_C13_ChecksumKindEnum;
|
|
|
|
typedef struct CV_C13_Checksum CV_C13_Checksum;
|
|
struct CV_C13_Checksum
|
|
{
|
|
U32 name_off;
|
|
U8 len;
|
|
CV_C13_ChecksumKind kind;
|
|
};
|
|
|
|
//- Lines sub-section
|
|
|
|
typedef U16 CV_C13_SubSecLinesFlags;
|
|
enum
|
|
{
|
|
CV_C13_SubSecLinesFlag_HasColumns = (1 << 0)
|
|
};
|
|
|
|
typedef struct CV_C13_SubSecLinesHeader CV_C13_SubSecLinesHeader;
|
|
struct CV_C13_SubSecLinesHeader
|
|
{
|
|
U32 sec_off;
|
|
CV_SectionIndex sec;
|
|
CV_C13_SubSecLinesFlags flags;
|
|
U32 len;
|
|
};
|
|
|
|
typedef struct CV_C13_File CV_C13_File;
|
|
struct CV_C13_File
|
|
{
|
|
U32 file_off;
|
|
U32 num_lines;
|
|
U32 block_size;
|
|
// CV_C13_Line[num_lines] lines;
|
|
// CV_C13_Column[num_lines] columns; (if HasColumns)
|
|
};
|
|
|
|
typedef U32 CV_C13_LineFlags;
|
|
#define CV_C13_LineFlags_ExtractLineNumber(f) ((f)&0xFFFFFF)
|
|
#define CV_C13_LineFlags_ExtractDeltaToEnd(f) (((f)>>24)&0x7F)
|
|
#define CV_C13_LineFlags_ExtractStatement(f) (((f)>>31)&0x1)
|
|
|
|
typedef struct CV_C13_Line CV_C13_Line;
|
|
struct CV_C13_Line
|
|
{
|
|
U32 off;
|
|
CV_C13_LineFlags flags;
|
|
};
|
|
|
|
typedef struct CV_C13_Column CV_C13_Column;
|
|
struct CV_C13_Column
|
|
{
|
|
U16 start;
|
|
U16 end;
|
|
};
|
|
|
|
//- FrameData sub-section
|
|
|
|
typedef U32 CV_C13_FrameDataFlags;
|
|
enum
|
|
{
|
|
CV_C13_FrameDataFlag_HasStructuredExceptionHandling = (1 << 0),
|
|
CV_C13_FrameDataFlag_HasExceptionHandling = (1 << 1),
|
|
CV_C13_FrameDataFlag_HasIsFuncStart = (1 << 2),
|
|
};
|
|
|
|
typedef struct CV_C13_FrameData CV_C13_FrameData;
|
|
struct CV_C13_FrameData
|
|
{
|
|
U32 start_voff;
|
|
U32 code_size;
|
|
U32 local_size;
|
|
U32 params_size;
|
|
U32 max_stack_size;
|
|
U32 frame_func;
|
|
U16 prolog_size;
|
|
U16 saved_reg_size;
|
|
CV_C13_FrameDataFlags flags;
|
|
};
|
|
|
|
#pragma pack(pop)
|
|
|
|
////////////////////////////////
|
|
//~ CodeView Common Parser Types
|
|
|
|
// CV_Numeric layout
|
|
// x: U16
|
|
// buf: U8[]
|
|
// case (x < 0x8000): kind=U16 val=x
|
|
// case (x >= 0x8000): kind=x val=buf
|
|
|
|
typedef struct CV_NumericParsed CV_NumericParsed;
|
|
struct CV_NumericParsed
|
|
{
|
|
CV_NumericKind kind;
|
|
U8 *val;
|
|
U64 encoded_size;
|
|
};
|
|
|
|
typedef struct CV_RecRange CV_RecRange;
|
|
struct CV_RecRange
|
|
{
|
|
U32 off;
|
|
CV_RecHeader hdr;
|
|
};
|
|
|
|
#define CV_REC_RANGE_CHUNK_SIZE 511
|
|
|
|
typedef struct CV_RecRangeChunk CV_RecRangeChunk;
|
|
struct CV_RecRangeChunk
|
|
{
|
|
struct CV_RecRangeChunk *next;
|
|
CV_RecRange ranges[CV_REC_RANGE_CHUNK_SIZE];
|
|
};
|
|
|
|
typedef struct CV_RecRangeStream CV_RecRangeStream;
|
|
struct CV_RecRangeStream
|
|
{
|
|
CV_RecRangeChunk *first_chunk;
|
|
CV_RecRangeChunk *last_chunk;
|
|
U64 total_count;
|
|
};
|
|
|
|
typedef struct CV_RecRangeArray CV_RecRangeArray;
|
|
struct CV_RecRangeArray
|
|
{
|
|
CV_RecRange *ranges;
|
|
U64 count;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ CodeView Sym Parser Types
|
|
|
|
typedef struct CV_SymTopLevelInfo CV_SymTopLevelInfo;
|
|
struct CV_SymTopLevelInfo
|
|
{
|
|
CV_Arch arch;
|
|
CV_Language language;
|
|
String8 compiler_name;
|
|
};
|
|
|
|
typedef struct CV_SymParsed CV_SymParsed;
|
|
struct CV_SymParsed
|
|
{
|
|
// source information
|
|
String8 data;
|
|
U64 sym_align;
|
|
|
|
// sym index derived from source
|
|
CV_RecRangeArray sym_ranges;
|
|
|
|
// top-level info derived from the syms
|
|
CV_SymTopLevelInfo info;
|
|
};
|
|
|
|
|
|
////////////////////////////////
|
|
//~ CodeView Leaf Parser Types
|
|
|
|
typedef struct CV_LeafParsed CV_LeafParsed;
|
|
struct CV_LeafParsed
|
|
{
|
|
// source information
|
|
String8 data;
|
|
CV_TypeId itype_first;
|
|
CV_TypeId itype_opl;
|
|
|
|
// leaf index derived from source
|
|
CV_RecRangeArray leaf_ranges;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ CodeView C13 Info Parser Types
|
|
|
|
typedef struct CV_C13LinesParsed CV_C13LinesParsed;
|
|
struct CV_C13LinesParsed
|
|
{
|
|
// raw info
|
|
U32 sec_idx;
|
|
U32 file_off;
|
|
U64 secrel_base_off;
|
|
|
|
// parsed info
|
|
String8 file_name;
|
|
U64 *voffs; // [line_count + 1]
|
|
U32 *line_nums; // [line_count]
|
|
U16 *col_nums; // [2*line_count]
|
|
U32 line_count;
|
|
};
|
|
|
|
typedef struct CV_C13LinesParsedNode CV_C13LinesParsedNode;
|
|
struct CV_C13LinesParsedNode
|
|
{
|
|
CV_C13LinesParsedNode *next;
|
|
CV_C13LinesParsed v;
|
|
};
|
|
|
|
typedef struct CV_C13SubSectionNode CV_C13SubSectionNode;
|
|
struct CV_C13SubSectionNode
|
|
{
|
|
struct CV_C13SubSectionNode *next;
|
|
CV_C13_SubSectionKind kind;
|
|
U32 off;
|
|
U32 size;
|
|
CV_C13LinesParsedNode *lines_first;
|
|
CV_C13LinesParsedNode *lines_last;
|
|
};
|
|
|
|
typedef struct CV_C13Parsed CV_C13Parsed;
|
|
struct CV_C13Parsed
|
|
{
|
|
CV_C13SubSectionNode *first_sub_section;
|
|
CV_C13SubSectionNode *last_sub_section;
|
|
U64 sub_section_count;
|
|
|
|
// accelerator
|
|
CV_C13SubSectionNode *file_chksms_sub_section;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ CodeView Compound Types
|
|
|
|
typedef struct CV_TypeIdArray CV_TypeIdArray;
|
|
struct CV_TypeIdArray
|
|
{
|
|
CV_TypeId *itypes;
|
|
U64 count;
|
|
};
|
|
|
|
|
|
////////////////////////////////
|
|
//~ CodeView Common Functions
|
|
|
|
internal CV_NumericParsed cv_numeric_from_data_range(U8 *first, U8 *opl);
|
|
|
|
internal B32 cv_numeric_fits_in_u64(CV_NumericParsed *num);
|
|
internal B32 cv_numeric_fits_in_s64(CV_NumericParsed *num);
|
|
internal B32 cv_numeric_fits_in_f64(CV_NumericParsed *num);
|
|
|
|
internal U64 cv_u64_from_numeric(CV_NumericParsed *num);
|
|
internal S64 cv_s64_from_numeric(CV_NumericParsed *num);
|
|
internal F64 cv_f64_from_numeric(CV_NumericParsed *num);
|
|
|
|
////////////////////////////////
|
|
//~ CodeView Sym/Leaf Parser Functions
|
|
|
|
//- the first pass parser
|
|
internal CV_RecRangeStream* cv_rec_range_stream_from_data(Arena *arena, String8 data, U64 align);
|
|
|
|
//- sym
|
|
internal CV_SymParsed* cv_sym_from_data(Arena *arena, String8 sym_data, U64 sym_align);
|
|
|
|
internal void cv_sym_top_level_info_from_syms(Arena *arena, String8 sym_data,
|
|
CV_RecRangeArray *ranges,
|
|
CV_SymTopLevelInfo *info_out);
|
|
|
|
//- leaf
|
|
internal CV_LeafParsed* cv_leaf_from_data(Arena *arena, String8 leaf_data, CV_TypeId first);
|
|
|
|
//- range streams
|
|
internal CV_RecRangeChunk* cv_rec_range_stream_push_chunk(Arena *arena,
|
|
CV_RecRangeStream *stream);
|
|
// TODO(allen): check why this isn't a pointer return -
|
|
// leave a note if there's a good reason, otherwise switch to pointer return
|
|
internal CV_RecRangeArray cv_rec_range_array_from_stream(Arena *arena, CV_RecRangeStream *stream);
|
|
|
|
////////////////////////////////
|
|
//~ CodeView C13 Parser Functions
|
|
|
|
typedef struct PDB_Strtbl PDB_Strtbl;
|
|
typedef struct PDB_CoffSectionArray PDB_CoffSectionArray;
|
|
internal CV_C13Parsed* cv_c13_from_data(Arena *arena, String8 c13_data, struct PDB_Strtbl *strtbl, struct PDB_CoffSectionArray *sections);
|
|
|
|
#endif // CODEVIEW_H
|