mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-16 00:52:23 -07:00
partial first pass over converter & raddbgi make layer rewrites/optimizations
This commit is contained in:
+30
-91
@@ -969,7 +969,9 @@ struct CV_RecHeader
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: CodeView Format "Sym" Types
|
||||
//
|
||||
// (per-compilation-unit info, variables, procedures, etc.)
|
||||
//
|
||||
|
||||
typedef U8 CV_ProcFlags;
|
||||
enum
|
||||
@@ -1931,8 +1933,10 @@ struct CV_SymInlinees
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ CodeView Format "Leaf" Types
|
||||
//~ rjf: CodeView Format "Leaf" Types
|
||||
//
|
||||
// (type info)
|
||||
//
|
||||
|
||||
#define CV_LeafIDKindXList(X) \
|
||||
X(FUNC_ID, 0x1601)\
|
||||
@@ -1952,70 +1956,6 @@ typedef enum CV_LeafIDKindEnum
|
||||
}
|
||||
CV_LeafIDKindEnum;
|
||||
|
||||
#define CV_BasicTypeXList(X) \
|
||||
X(NOTYPE, 0x00)\
|
||||
X(ABS, 0x01)\
|
||||
X(SEGMENT, 0x02)\
|
||||
X(VOID, 0x03)\
|
||||
X(CURRENCY, 0x04)\
|
||||
X(NBASICSTR, 0x05)\
|
||||
X(FBASICSTR, 0x06)\
|
||||
X(NOTTRANS, 0x07)\
|
||||
X(HRESULT, 0x08)\
|
||||
X(CHAR, 0x10)\
|
||||
X(SHORT, 0x11)\
|
||||
X(LONG, 0x12)\
|
||||
X(QUAD, 0x13)\
|
||||
X(OCT, 0x14)\
|
||||
X(UCHAR, 0x20)\
|
||||
X(USHORT, 0x21)\
|
||||
X(ULONG, 0x22)\
|
||||
X(UQUAD, 0x23)\
|
||||
X(UOCT, 0x24)\
|
||||
X(BOOL8, 0x30)\
|
||||
X(BOOL16, 0x31)\
|
||||
X(BOOL32, 0x32)\
|
||||
X(BOOL64, 0x33)\
|
||||
X(FLOAT32, 0x40)\
|
||||
X(FLOAT64, 0x41)\
|
||||
X(FLOAT80, 0x42)\
|
||||
X(FLOAT128, 0x43)\
|
||||
X(FLOAT48, 0x44)\
|
||||
X(FLOAT32PP, 0x45)\
|
||||
X(FLOAT16, 0x46)\
|
||||
X(COMPLEX32, 0x50)\
|
||||
X(COMPLEX64, 0x51)\
|
||||
X(COMPLEX80, 0x52)\
|
||||
X(COMPLEX128, 0x53)\
|
||||
X(BIT, 0x60)\
|
||||
X(PASCHAR, 0x61)\
|
||||
X(BOOL32FF, 0x62)\
|
||||
X(INT8, 0x68)\
|
||||
X(UINT8, 0x69)\
|
||||
X(RCHAR, 0x70)\
|
||||
X(WCHAR, 0x71)\
|
||||
X(INT16, 0x72)\
|
||||
X(UINT16, 0x73)\
|
||||
X(INT32, 0x74)\
|
||||
X(UINT32, 0x75)\
|
||||
X(INT64, 0x76)\
|
||||
X(UINT64, 0x77)\
|
||||
X(INT128, 0x78)\
|
||||
X(UINT128, 0x79)\
|
||||
X(CHAR16, 0x7a)\
|
||||
X(CHAR32, 0x7b)\
|
||||
X(CHAR8, 0x7c)\
|
||||
X(PTR, 0xf0)
|
||||
|
||||
typedef U8 CV_BasicType;
|
||||
typedef enum CV_BasicTypeEnum
|
||||
{
|
||||
#define X(N,c) CV_BasicType_##N = c,
|
||||
CV_BasicTypeXList(X)
|
||||
#undef X
|
||||
}
|
||||
CV_BasicTypeEnum;
|
||||
|
||||
#define CV_TypeId_Variadic 0
|
||||
|
||||
#define CV_BasicPointerKindXList(X) \
|
||||
@@ -2061,22 +2001,21 @@ 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),
|
||||
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),
|
||||
CV_TypeProp_Intrinsic = (1<<13),
|
||||
// MOCOM: 14,15
|
||||
};
|
||||
|
||||
#define CV_TypeProps_ExtractHFA(f) (((f)>>11)&0x3)
|
||||
#define CV_TypeProps_ExtractMOCOM(f) (((f)>>14)&0x3)
|
||||
|
||||
@@ -2128,11 +2067,11 @@ 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_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, // ???
|
||||
}
|
||||
@@ -2165,11 +2104,11 @@ 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),
|
||||
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)
|
||||
@@ -2185,9 +2124,9 @@ CV_LabelKindEnum;
|
||||
typedef U8 CV_FunctionAttribs;
|
||||
enum
|
||||
{
|
||||
CV_FunctionAttrib_CxxReturnUDT = (1 << 0),
|
||||
CV_FunctionAttrib_Constructor = (1 << 1),
|
||||
CV_FunctionAttrib_ConstructorVBase = (1 << 2),
|
||||
CV_FunctionAttrib_CxxReturnUDT = (1<<0),
|
||||
CV_FunctionAttrib_Constructor = (1<<1),
|
||||
CV_FunctionAttrib_ConstructorVBase = (1<<2),
|
||||
};
|
||||
|
||||
typedef U8 CV_CallKind;
|
||||
|
||||
+223
-127
@@ -380,138 +380,214 @@ cv_string_from_sym_kind:
|
||||
`}`;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: CV Basic Types
|
||||
|
||||
@table(name val type_name)
|
||||
CV_BasicTypeTable:
|
||||
{
|
||||
{NOTYPE 0x00 "" }
|
||||
{ABS 0x01 "" }
|
||||
{SEGMENT 0x02 "" }
|
||||
{VOID 0x03 "void" }
|
||||
{CURRENCY 0x04 "" }
|
||||
{NBASICSTR 0x05 "" }
|
||||
{FBASICSTR 0x06 "" }
|
||||
{NOTTRANS 0x07 "" }
|
||||
{HRESULT 0x08 "HRESULT" }
|
||||
{CHAR 0x10 "char" }
|
||||
{SHORT 0x11 "S16" }
|
||||
{LONG 0x12 "S32" }
|
||||
{QUAD 0x13 "S64" }
|
||||
{OCT 0x14 "S128" }
|
||||
{UCHAR 0x20 "UCHAR" }
|
||||
{USHORT 0x21 "U16" }
|
||||
{ULONG 0x22 "U32" }
|
||||
{UQUAD 0x23 "U64" }
|
||||
{UOCT 0x24 "U128" }
|
||||
{BOOL8 0x30 "B8" }
|
||||
{BOOL16 0x31 "B16" }
|
||||
{BOOL32 0x32 "B32" }
|
||||
{BOOL64 0x33 "B64" }
|
||||
{FLOAT32 0x40 "F32" }
|
||||
{FLOAT64 0x41 "F64" }
|
||||
{FLOAT80 0x42 "F80" }
|
||||
{FLOAT128 0x43 "F128" }
|
||||
{FLOAT48 0x44 "F48" }
|
||||
{FLOAT32PP 0x45 "F32PP" }
|
||||
{FLOAT16 0x46 "F16" }
|
||||
{COMPLEX32 0x50 "ComplexF32" }
|
||||
{COMPLEX64 0x51 "ComplexF64" }
|
||||
{COMPLEX80 0x52 "ComplexF80" }
|
||||
{COMPLEX128 0x53 "ComplexF128" }
|
||||
{BIT 0x60 "" }
|
||||
{PASCHAR 0x61 "" }
|
||||
{BOOL32FF 0x62 "B32FF" }
|
||||
{INT8 0x68 "S8" }
|
||||
{UINT8 0x69 "U8" }
|
||||
{RCHAR 0x70 "char" }
|
||||
{WCHAR 0x71 "WCHAR" }
|
||||
{INT16 0x72 "S16" }
|
||||
{UINT16 0x73 "U16" }
|
||||
{INT32 0x74 "S32" }
|
||||
{UINT32 0x75 "U32" }
|
||||
{INT64 0x76 "S64" }
|
||||
{UINT64 0x77 "U64" }
|
||||
{INT128 0x78 "S128" }
|
||||
{UINT128 0x79 "U128" }
|
||||
{CHAR16 0x7a "CHAR16" }
|
||||
{CHAR32 0x7b "CHAR32" }
|
||||
{CHAR8 0x7c "char" }
|
||||
{PTR 0xf0 "PTR" }
|
||||
}
|
||||
|
||||
@enum(U8) CV_BasicType:
|
||||
{
|
||||
@expand(CV_BasicTypeTable a) `$(a.name) = $(a.val)`
|
||||
}
|
||||
|
||||
@enum2string_switch(CV_BasicType) cv_string_from_basic_type:
|
||||
{
|
||||
@expand(CV_BasicTypeTable a) `case CV_BasicType_$(a.name):{result = str8_lit("$(a.name)");}break`
|
||||
}
|
||||
|
||||
@enum2string_switch(CV_BasicType) cv_type_name_from_basic_type:
|
||||
{
|
||||
@expand(CV_BasicTypeTable a) `case CV_BasicType_$(a.name):{result = str8_lit("$(a.type_name)");}break`
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: CV Leaf
|
||||
|
||||
@table(name val)
|
||||
@table(name header_type_name val)
|
||||
CV_LeafKindTable:
|
||||
{
|
||||
{MODIFIER_16t 0x0001}
|
||||
{POINTER_16t 0x0002}
|
||||
{ARRAY_16t 0x0003}
|
||||
{CLASS_16t 0x0004}
|
||||
{STRUCTURE_16t 0x0005}
|
||||
{UNION_16t 0x0006}
|
||||
{ENUM_16t 0x0007}
|
||||
{PROCEDURE_16t 0x0008}
|
||||
{MFUNCTION_16t 0x0009}
|
||||
{VTSHAPE 0x000a}
|
||||
{COBOL0_16t 0x000b}
|
||||
{COBOL1 0x000c}
|
||||
{BARRAY_16t 0x000d}
|
||||
{LABEL 0x000e}
|
||||
{NULL 0x000f}
|
||||
{NOTTRAN 0x0010}
|
||||
{DIMARRAY_16t 0x0011}
|
||||
{VFTPATH_16t 0x0012}
|
||||
{PRECOMP_16t 0x0013}
|
||||
{ENDPRECOMP 0x0014}
|
||||
{OEM_16t 0x0015}
|
||||
{TYPESERVER_ST 0x0016}
|
||||
{SKIP_16t 0x0200}
|
||||
{ARGLIST_16t 0x0201}
|
||||
{DEFARG_16t 0x0202}
|
||||
{LIST 0x0203}
|
||||
{FIELDLIST_16t 0x0204}
|
||||
{DERIVED_16t 0x0205}
|
||||
{BITFIELD_16t 0x0206}
|
||||
{METHODLIST_16t 0x0207}
|
||||
{DIMCONU_16t 0x0208}
|
||||
{DIMCONLU_16t 0x0209}
|
||||
{DIMVARU_16t 0x020a}
|
||||
{DIMVARLU_16t 0x020b}
|
||||
{REFSYM 0x020c}
|
||||
{BCLASS_16t 0x0400}
|
||||
{VBCLASS_16t 0x0401}
|
||||
{IVBCLASS_16t 0x0402}
|
||||
{ENUMERATE_ST 0x0403}
|
||||
{FRIENDFCN_16t 0x0404}
|
||||
{INDEX_16t 0x0405}
|
||||
{MEMBER_16t 0x0406}
|
||||
{STMEMBER_16t 0x0407}
|
||||
{METHOD_16t 0x0408}
|
||||
{NESTTYPE_16t 0x0409}
|
||||
{VFUNCTAB_16t 0x040a}
|
||||
{FRIENDCLS_16t 0x040b}
|
||||
{ONEMETHOD_16t 0x040c}
|
||||
{VFUNCOFF_16t 0x040d}
|
||||
{TI16_MAX 0x1000}
|
||||
{MODIFIER 0x1001}
|
||||
{POINTER 0x1002}
|
||||
{ARRAY_ST 0x1003}
|
||||
{CLASS_ST 0x1004}
|
||||
{STRUCTURE_ST 0x1005}
|
||||
{UNION_ST 0x1006}
|
||||
{ENUM_ST 0x1007}
|
||||
{PROCEDURE 0x1008}
|
||||
{MFUNCTION 0x1009}
|
||||
{COBOL0 0x100a}
|
||||
{BARRAY 0x100b}
|
||||
{DIMARRAY_ST 0x100c}
|
||||
{VFTPATH 0x100d}
|
||||
{PRECOMP_ST 0x100e}
|
||||
{OEM 0x100f}
|
||||
{ALIAS_ST 0x1010}
|
||||
{OEM2 0x1011}
|
||||
{SKIP 0x1200}
|
||||
{ARGLIST 0x1201}
|
||||
{DEFARG_ST 0x1202}
|
||||
{FIELDLIST 0x1203}
|
||||
{DERIVED 0x1204}
|
||||
{BITFIELD 0x1205}
|
||||
{METHODLIST 0x1206}
|
||||
{DIMCONU 0x1207}
|
||||
{DIMCONLU 0x1208}
|
||||
{DIMVARU 0x1209}
|
||||
{DIMVARLU 0x120a}
|
||||
{BCLASS 0x1400}
|
||||
{VBCLASS 0x1401}
|
||||
{IVBCLASS 0x1402}
|
||||
{FRIENDFCN_ST 0x1403}
|
||||
{INDEX 0x1404}
|
||||
{MEMBER_ST 0x1405}
|
||||
{STMEMBER_ST 0x1406}
|
||||
{METHOD_ST 0x1407}
|
||||
{NESTTYPE_ST 0x1408}
|
||||
{VFUNCTAB 0x1409}
|
||||
{FRIENDCLS 0x140a}
|
||||
{ONEMETHOD_ST 0x140b}
|
||||
{VFUNCOFF 0x140c}
|
||||
{NESTTYPEEX_ST 0x140d}
|
||||
{MEMBERMODIFY_ST 0x140e}
|
||||
{MANAGED_ST 0x140f}
|
||||
{ST_MAX 0x1500}
|
||||
{TYPESERVER 0x1501}
|
||||
{ENUMERATE 0x1502}
|
||||
{ARRAY 0x1503}
|
||||
{CLASS 0x1504}
|
||||
{STRUCTURE 0x1505}
|
||||
{UNION 0x1506}
|
||||
{ENUM 0x1507}
|
||||
{DIMARRAY 0x1508}
|
||||
{PRECOMP 0x1509}
|
||||
{ALIAS 0x150a}
|
||||
{DEFARG 0x150b}
|
||||
{FRIENDFCN 0x150c}
|
||||
{MEMBER 0x150d}
|
||||
{STMEMBER 0x150e}
|
||||
{METHOD 0x150f}
|
||||
{NESTTYPE 0x1510}
|
||||
{ONEMETHOD 0x1511}
|
||||
{NESTTYPEEX 0x1512}
|
||||
{MEMBERMODIFY 0x1513}
|
||||
{MANAGED 0x1514}
|
||||
{TYPESERVER2 0x1515}
|
||||
{STRIDED_ARRAY 0x1516}
|
||||
{HLSL 0x1517}
|
||||
{MODIFIER_EX 0x1518}
|
||||
{INTERFACE 0x1519}
|
||||
{BINTERFACE 0x151a}
|
||||
{VECTOR 0x151b}
|
||||
{MATRIX 0x151c}
|
||||
{VFTABLE 0x151d}
|
||||
{CLASS2 0x1608}
|
||||
{STRUCT2 0x1609}
|
||||
{MODIFIER_16t - 0x0001}
|
||||
{POINTER_16t - 0x0002}
|
||||
{ARRAY_16t - 0x0003}
|
||||
{CLASS_16t - 0x0004}
|
||||
{STRUCTURE_16t - 0x0005}
|
||||
{UNION_16t - 0x0006}
|
||||
{ENUM_16t - 0x0007}
|
||||
{PROCEDURE_16t - 0x0008}
|
||||
{MFUNCTION_16t - 0x0009}
|
||||
{VTSHAPE VTShape 0x000a}
|
||||
{COBOL0_16t - 0x000b}
|
||||
{COBOL1 - 0x000c}
|
||||
{BARRAY_16t - 0x000d}
|
||||
{LABEL Label 0x000e}
|
||||
{NULL - 0x000f}
|
||||
{NOTTRAN - 0x0010}
|
||||
{DIMARRAY_16t - 0x0011}
|
||||
{VFTPATH_16t - 0x0012}
|
||||
{PRECOMP_16t - 0x0013}
|
||||
{ENDPRECOMP - 0x0014}
|
||||
{OEM_16t - 0x0015}
|
||||
{TYPESERVER_ST - 0x0016}
|
||||
{SKIP_16t - 0x0200}
|
||||
{ARGLIST_16t - 0x0201}
|
||||
{DEFARG_16t - 0x0202}
|
||||
{LIST - 0x0203}
|
||||
{FIELDLIST_16t - 0x0204}
|
||||
{DERIVED_16t - 0x0205}
|
||||
{BITFIELD_16t - 0x0206}
|
||||
{METHODLIST_16t - 0x0207}
|
||||
{DIMCONU_16t - 0x0208}
|
||||
{DIMCONLU_16t - 0x0209}
|
||||
{DIMVARU_16t - 0x020a}
|
||||
{DIMVARLU_16t - 0x020b}
|
||||
{REFSYM - 0x020c}
|
||||
{BCLASS_16t - 0x0400}
|
||||
{VBCLASS_16t - 0x0401}
|
||||
{IVBCLASS_16t - 0x0402}
|
||||
{ENUMERATE_ST - 0x0403}
|
||||
{FRIENDFCN_16t - 0x0404}
|
||||
{INDEX_16t - 0x0405}
|
||||
{MEMBER_16t - 0x0406}
|
||||
{STMEMBER_16t - 0x0407}
|
||||
{METHOD_16t - 0x0408}
|
||||
{NESTTYPE_16t - 0x0409}
|
||||
{VFUNCTAB_16t - 0x040a}
|
||||
{FRIENDCLS_16t - 0x040b}
|
||||
{ONEMETHOD_16t - 0x040c}
|
||||
{VFUNCOFF_16t - 0x040d}
|
||||
{TI16_MAX - 0x1000}
|
||||
{MODIFIER Modifier 0x1001}
|
||||
{POINTER Pointer 0x1002}
|
||||
{ARRAY_ST - 0x1003}
|
||||
{CLASS_ST - 0x1004}
|
||||
{STRUCTURE_ST - 0x1005}
|
||||
{UNION_ST - 0x1006}
|
||||
{ENUM_ST - 0x1007}
|
||||
{PROCEDURE Procedure 0x1008}
|
||||
{MFUNCTION MFunction 0x1009}
|
||||
{COBOL0 - 0x100a}
|
||||
{BARRAY - 0x100b}
|
||||
{DIMARRAY_ST - 0x100c}
|
||||
{VFTPATH VFPath 0x100d}
|
||||
{PRECOMP_ST - 0x100e}
|
||||
{OEM - 0x100f}
|
||||
{ALIAS_ST - 0x1010}
|
||||
{OEM2 - 0x1011}
|
||||
{SKIP Skip 0x1200}
|
||||
{ARGLIST ArgList 0x1201}
|
||||
{DEFARG_ST - 0x1202}
|
||||
{FIELDLIST - 0x1203}
|
||||
{DERIVED - 0x1204}
|
||||
{BITFIELD BitField 0x1205}
|
||||
{METHODLIST MethodListMember 0x1206}
|
||||
{DIMCONU - 0x1207}
|
||||
{DIMCONLU - 0x1208}
|
||||
{DIMVARU - 0x1209}
|
||||
{DIMVARLU - 0x120a}
|
||||
{BCLASS BClass 0x1400}
|
||||
{VBCLASS VBClass 0x1401}
|
||||
{IVBCLASS - 0x1402}
|
||||
{FRIENDFCN_ST - 0x1403}
|
||||
{INDEX Index 0x1404}
|
||||
{MEMBER_ST - 0x1405}
|
||||
{STMEMBER_ST - 0x1406}
|
||||
{METHOD_ST - 0x1407}
|
||||
{NESTTYPE_ST - 0x1408}
|
||||
{VFUNCTAB VFuncTab 0x1409}
|
||||
{FRIENDCLS - 0x140a}
|
||||
{ONEMETHOD_ST - 0x140b}
|
||||
{VFUNCOFF VFuncOff 0x140c}
|
||||
{NESTTYPEEX_ST - 0x140d}
|
||||
{MEMBERMODIFY_ST - 0x140e}
|
||||
{MANAGED_ST - 0x140f}
|
||||
{ST_MAX - 0x1500}
|
||||
{TYPESERVER TypeServer 0x1501}
|
||||
{ENUMERATE Enumerate 0x1502}
|
||||
{ARRAY Array 0x1503}
|
||||
{CLASS Struct 0x1504}
|
||||
{STRUCTURE Struct 0x1505}
|
||||
{UNION Union 0x1506}
|
||||
{ENUM Enum 0x1507}
|
||||
{DIMARRAY - 0x1508}
|
||||
{PRECOMP PreComp 0x1509}
|
||||
{ALIAS Alias 0x150a}
|
||||
{DEFARG - 0x150b}
|
||||
{FRIENDFCN - 0x150c}
|
||||
{MEMBER Member 0x150d}
|
||||
{STMEMBER StMember 0x150e}
|
||||
{METHOD Method 0x150f}
|
||||
{NESTTYPE NestType 0x1510}
|
||||
{ONEMETHOD OneMethod 0x1511}
|
||||
{NESTTYPEEX NestTypeEx 0x1512}
|
||||
{MEMBERMODIFY - 0x1513}
|
||||
{MANAGED - 0x1514}
|
||||
{TYPESERVER2 TypeServer2 0x1515}
|
||||
{STRIDED_ARRAY - 0x1516}
|
||||
{HLSL - 0x1517}
|
||||
{MODIFIER_EX - 0x1518}
|
||||
{INTERFACE Struct 0x1519}
|
||||
{BINTERFACE - 0x151a}
|
||||
{VECTOR - 0x151b}
|
||||
{MATRIX - 0x151c}
|
||||
{VFTABLE - 0x151d}
|
||||
{CLASS2 Struct2 0x1608}
|
||||
{STRUCT2 Struct2 0x1609}
|
||||
}
|
||||
|
||||
@enum(U16) CV_LeafKind:
|
||||
@@ -524,3 +600,23 @@ cv_string_from_leaf_kind:
|
||||
{
|
||||
@expand(CV_LeafKindTable a) `case CV_LeafKind_$(a.name):{result = str8_lit("$(a.name)");}break`;
|
||||
}
|
||||
|
||||
@gen(functions)
|
||||
{
|
||||
`internal U64 cv_header_struct_size_from_leaf_kind(CV_LeafKind v);`;
|
||||
}
|
||||
|
||||
@gen(functions) @c_file
|
||||
{
|
||||
`internal U64`;
|
||||
`cv_header_struct_size_from_leaf_kind(CV_LeafKind v)`;
|
||||
`{`;
|
||||
`U64 result = 0;`;
|
||||
`switch(v)`;
|
||||
`{`;
|
||||
`default:{}break;`;
|
||||
@expand(CV_LeafKindTable a) `$(a.header_type_name != "-" -> "case CV_LeafKind_"..a.name..":{result = sizeof(CV_Leaf"..a.header_type_name..");}break;")`;
|
||||
`}`;
|
||||
`return result;`;
|
||||
`}`;
|
||||
}
|
||||
|
||||
@@ -48,17 +48,6 @@ cv_stringize_lvar_addr_gap_list(Arena *arena, String8List *out, void *first, voi
|
||||
}
|
||||
}
|
||||
|
||||
internal String8
|
||||
cv_string_from_basic_type(CV_BasicType basic_type){
|
||||
String8 result = str8_lit("UNRECOGNIZED_BASIC_TYPE");
|
||||
switch (basic_type){
|
||||
#define X(N,c) case CV_BasicType_##N: result = str8_lit(#N); break;
|
||||
CV_BasicTypeXList(X)
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal String8
|
||||
cv_string_from_c13_sub_section_kind(CV_C13_SubSectionKind kind){
|
||||
String8 result = str8_lit("UNRECOGNIZED_C13_SUB_SECTION_KIND");
|
||||
|
||||
@@ -312,6 +312,134 @@ case CV_SymKind_INLINEES:{result = str8_lit("INLINEES");}break;
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
cv_string_from_basic_type(CV_BasicType v)
|
||||
{
|
||||
String8 result = str8_lit("<Unknown CV_BasicType>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
case CV_BasicType_NOTYPE:{result = str8_lit("NOTYPE");}break;
|
||||
case CV_BasicType_ABS:{result = str8_lit("ABS");}break;
|
||||
case CV_BasicType_SEGMENT:{result = str8_lit("SEGMENT");}break;
|
||||
case CV_BasicType_VOID:{result = str8_lit("VOID");}break;
|
||||
case CV_BasicType_CURRENCY:{result = str8_lit("CURRENCY");}break;
|
||||
case CV_BasicType_NBASICSTR:{result = str8_lit("NBASICSTR");}break;
|
||||
case CV_BasicType_FBASICSTR:{result = str8_lit("FBASICSTR");}break;
|
||||
case CV_BasicType_NOTTRANS:{result = str8_lit("NOTTRANS");}break;
|
||||
case CV_BasicType_HRESULT:{result = str8_lit("HRESULT");}break;
|
||||
case CV_BasicType_CHAR:{result = str8_lit("CHAR");}break;
|
||||
case CV_BasicType_SHORT:{result = str8_lit("SHORT");}break;
|
||||
case CV_BasicType_LONG:{result = str8_lit("LONG");}break;
|
||||
case CV_BasicType_QUAD:{result = str8_lit("QUAD");}break;
|
||||
case CV_BasicType_OCT:{result = str8_lit("OCT");}break;
|
||||
case CV_BasicType_UCHAR:{result = str8_lit("UCHAR");}break;
|
||||
case CV_BasicType_USHORT:{result = str8_lit("USHORT");}break;
|
||||
case CV_BasicType_ULONG:{result = str8_lit("ULONG");}break;
|
||||
case CV_BasicType_UQUAD:{result = str8_lit("UQUAD");}break;
|
||||
case CV_BasicType_UOCT:{result = str8_lit("UOCT");}break;
|
||||
case CV_BasicType_BOOL8:{result = str8_lit("BOOL8");}break;
|
||||
case CV_BasicType_BOOL16:{result = str8_lit("BOOL16");}break;
|
||||
case CV_BasicType_BOOL32:{result = str8_lit("BOOL32");}break;
|
||||
case CV_BasicType_BOOL64:{result = str8_lit("BOOL64");}break;
|
||||
case CV_BasicType_FLOAT32:{result = str8_lit("FLOAT32");}break;
|
||||
case CV_BasicType_FLOAT64:{result = str8_lit("FLOAT64");}break;
|
||||
case CV_BasicType_FLOAT80:{result = str8_lit("FLOAT80");}break;
|
||||
case CV_BasicType_FLOAT128:{result = str8_lit("FLOAT128");}break;
|
||||
case CV_BasicType_FLOAT48:{result = str8_lit("FLOAT48");}break;
|
||||
case CV_BasicType_FLOAT32PP:{result = str8_lit("FLOAT32PP");}break;
|
||||
case CV_BasicType_FLOAT16:{result = str8_lit("FLOAT16");}break;
|
||||
case CV_BasicType_COMPLEX32:{result = str8_lit("COMPLEX32");}break;
|
||||
case CV_BasicType_COMPLEX64:{result = str8_lit("COMPLEX64");}break;
|
||||
case CV_BasicType_COMPLEX80:{result = str8_lit("COMPLEX80");}break;
|
||||
case CV_BasicType_COMPLEX128:{result = str8_lit("COMPLEX128");}break;
|
||||
case CV_BasicType_BIT:{result = str8_lit("BIT");}break;
|
||||
case CV_BasicType_PASCHAR:{result = str8_lit("PASCHAR");}break;
|
||||
case CV_BasicType_BOOL32FF:{result = str8_lit("BOOL32FF");}break;
|
||||
case CV_BasicType_INT8:{result = str8_lit("INT8");}break;
|
||||
case CV_BasicType_UINT8:{result = str8_lit("UINT8");}break;
|
||||
case CV_BasicType_RCHAR:{result = str8_lit("RCHAR");}break;
|
||||
case CV_BasicType_WCHAR:{result = str8_lit("WCHAR");}break;
|
||||
case CV_BasicType_INT16:{result = str8_lit("INT16");}break;
|
||||
case CV_BasicType_UINT16:{result = str8_lit("UINT16");}break;
|
||||
case CV_BasicType_INT32:{result = str8_lit("INT32");}break;
|
||||
case CV_BasicType_UINT32:{result = str8_lit("UINT32");}break;
|
||||
case CV_BasicType_INT64:{result = str8_lit("INT64");}break;
|
||||
case CV_BasicType_UINT64:{result = str8_lit("UINT64");}break;
|
||||
case CV_BasicType_INT128:{result = str8_lit("INT128");}break;
|
||||
case CV_BasicType_UINT128:{result = str8_lit("UINT128");}break;
|
||||
case CV_BasicType_CHAR16:{result = str8_lit("CHAR16");}break;
|
||||
case CV_BasicType_CHAR32:{result = str8_lit("CHAR32");}break;
|
||||
case CV_BasicType_CHAR8:{result = str8_lit("CHAR8");}break;
|
||||
case CV_BasicType_PTR:{result = str8_lit("PTR");}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
cv_type_name_from_basic_type(CV_BasicType v)
|
||||
{
|
||||
String8 result = str8_lit("<Unknown CV_BasicType>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
case CV_BasicType_NOTYPE:{result = str8_lit("");}break;
|
||||
case CV_BasicType_ABS:{result = str8_lit("");}break;
|
||||
case CV_BasicType_SEGMENT:{result = str8_lit("");}break;
|
||||
case CV_BasicType_VOID:{result = str8_lit("void");}break;
|
||||
case CV_BasicType_CURRENCY:{result = str8_lit("");}break;
|
||||
case CV_BasicType_NBASICSTR:{result = str8_lit("");}break;
|
||||
case CV_BasicType_FBASICSTR:{result = str8_lit("");}break;
|
||||
case CV_BasicType_NOTTRANS:{result = str8_lit("");}break;
|
||||
case CV_BasicType_HRESULT:{result = str8_lit("HRESULT");}break;
|
||||
case CV_BasicType_CHAR:{result = str8_lit("char");}break;
|
||||
case CV_BasicType_SHORT:{result = str8_lit("S16");}break;
|
||||
case CV_BasicType_LONG:{result = str8_lit("S32");}break;
|
||||
case CV_BasicType_QUAD:{result = str8_lit("S64");}break;
|
||||
case CV_BasicType_OCT:{result = str8_lit("S128");}break;
|
||||
case CV_BasicType_UCHAR:{result = str8_lit("UCHAR");}break;
|
||||
case CV_BasicType_USHORT:{result = str8_lit("U16");}break;
|
||||
case CV_BasicType_ULONG:{result = str8_lit("U32");}break;
|
||||
case CV_BasicType_UQUAD:{result = str8_lit("U64");}break;
|
||||
case CV_BasicType_UOCT:{result = str8_lit("U128");}break;
|
||||
case CV_BasicType_BOOL8:{result = str8_lit("B8");}break;
|
||||
case CV_BasicType_BOOL16:{result = str8_lit("B16");}break;
|
||||
case CV_BasicType_BOOL32:{result = str8_lit("B32");}break;
|
||||
case CV_BasicType_BOOL64:{result = str8_lit("B64");}break;
|
||||
case CV_BasicType_FLOAT32:{result = str8_lit("F32");}break;
|
||||
case CV_BasicType_FLOAT64:{result = str8_lit("F64");}break;
|
||||
case CV_BasicType_FLOAT80:{result = str8_lit("F80");}break;
|
||||
case CV_BasicType_FLOAT128:{result = str8_lit("F128");}break;
|
||||
case CV_BasicType_FLOAT48:{result = str8_lit("F48");}break;
|
||||
case CV_BasicType_FLOAT32PP:{result = str8_lit("F32PP");}break;
|
||||
case CV_BasicType_FLOAT16:{result = str8_lit("F16");}break;
|
||||
case CV_BasicType_COMPLEX32:{result = str8_lit("ComplexF32");}break;
|
||||
case CV_BasicType_COMPLEX64:{result = str8_lit("ComplexF64");}break;
|
||||
case CV_BasicType_COMPLEX80:{result = str8_lit("ComplexF80");}break;
|
||||
case CV_BasicType_COMPLEX128:{result = str8_lit("ComplexF128");}break;
|
||||
case CV_BasicType_BIT:{result = str8_lit("");}break;
|
||||
case CV_BasicType_PASCHAR:{result = str8_lit("");}break;
|
||||
case CV_BasicType_BOOL32FF:{result = str8_lit("B32FF");}break;
|
||||
case CV_BasicType_INT8:{result = str8_lit("S8");}break;
|
||||
case CV_BasicType_UINT8:{result = str8_lit("U8");}break;
|
||||
case CV_BasicType_RCHAR:{result = str8_lit("char");}break;
|
||||
case CV_BasicType_WCHAR:{result = str8_lit("WCHAR");}break;
|
||||
case CV_BasicType_INT16:{result = str8_lit("S16");}break;
|
||||
case CV_BasicType_UINT16:{result = str8_lit("U16");}break;
|
||||
case CV_BasicType_INT32:{result = str8_lit("S32");}break;
|
||||
case CV_BasicType_UINT32:{result = str8_lit("U32");}break;
|
||||
case CV_BasicType_INT64:{result = str8_lit("S64");}break;
|
||||
case CV_BasicType_UINT64:{result = str8_lit("U64");}break;
|
||||
case CV_BasicType_INT128:{result = str8_lit("S128");}break;
|
||||
case CV_BasicType_UINT128:{result = str8_lit("U128");}break;
|
||||
case CV_BasicType_CHAR16:{result = str8_lit("CHAR16");}break;
|
||||
case CV_BasicType_CHAR32:{result = str8_lit("CHAR32");}break;
|
||||
case CV_BasicType_CHAR8:{result = str8_lit("char");}break;
|
||||
case CV_BasicType_PTR:{result = str8_lit("PTR");}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
cv_string_from_leaf_kind(CV_LeafKind v)
|
||||
{
|
||||
@@ -528,6 +656,51 @@ case CV_SymKind_INLINEES:{result = sizeof(CV_SymInlinees);}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
internal U64
|
||||
cv_header_struct_size_from_leaf_kind(CV_LeafKind v)
|
||||
{
|
||||
U64 result = 0;
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
case CV_LeafKind_VTSHAPE:{result = sizeof(CV_LeafVTShape);}break;
|
||||
case CV_LeafKind_LABEL:{result = sizeof(CV_LeafLabel);}break;
|
||||
case CV_LeafKind_MODIFIER:{result = sizeof(CV_LeafModifier);}break;
|
||||
case CV_LeafKind_POINTER:{result = sizeof(CV_LeafPointer);}break;
|
||||
case CV_LeafKind_PROCEDURE:{result = sizeof(CV_LeafProcedure);}break;
|
||||
case CV_LeafKind_MFUNCTION:{result = sizeof(CV_LeafMFunction);}break;
|
||||
case CV_LeafKind_VFTPATH:{result = sizeof(CV_LeafVFPath);}break;
|
||||
case CV_LeafKind_SKIP:{result = sizeof(CV_LeafSkip);}break;
|
||||
case CV_LeafKind_ARGLIST:{result = sizeof(CV_LeafArgList);}break;
|
||||
case CV_LeafKind_BITFIELD:{result = sizeof(CV_LeafBitField);}break;
|
||||
case CV_LeafKind_METHODLIST:{result = sizeof(CV_LeafMethodListMember);}break;
|
||||
case CV_LeafKind_BCLASS:{result = sizeof(CV_LeafBClass);}break;
|
||||
case CV_LeafKind_VBCLASS:{result = sizeof(CV_LeafVBClass);}break;
|
||||
case CV_LeafKind_INDEX:{result = sizeof(CV_LeafIndex);}break;
|
||||
case CV_LeafKind_VFUNCTAB:{result = sizeof(CV_LeafVFuncTab);}break;
|
||||
case CV_LeafKind_VFUNCOFF:{result = sizeof(CV_LeafVFuncOff);}break;
|
||||
case CV_LeafKind_TYPESERVER:{result = sizeof(CV_LeafTypeServer);}break;
|
||||
case CV_LeafKind_ENUMERATE:{result = sizeof(CV_LeafEnumerate);}break;
|
||||
case CV_LeafKind_ARRAY:{result = sizeof(CV_LeafArray);}break;
|
||||
case CV_LeafKind_CLASS:{result = sizeof(CV_LeafStruct);}break;
|
||||
case CV_LeafKind_STRUCTURE:{result = sizeof(CV_LeafStruct);}break;
|
||||
case CV_LeafKind_UNION:{result = sizeof(CV_LeafUnion);}break;
|
||||
case CV_LeafKind_ENUM:{result = sizeof(CV_LeafEnum);}break;
|
||||
case CV_LeafKind_PRECOMP:{result = sizeof(CV_LeafPreComp);}break;
|
||||
case CV_LeafKind_ALIAS:{result = sizeof(CV_LeafAlias);}break;
|
||||
case CV_LeafKind_MEMBER:{result = sizeof(CV_LeafMember);}break;
|
||||
case CV_LeafKind_STMEMBER:{result = sizeof(CV_LeafStMember);}break;
|
||||
case CV_LeafKind_METHOD:{result = sizeof(CV_LeafMethod);}break;
|
||||
case CV_LeafKind_NESTTYPE:{result = sizeof(CV_LeafNestType);}break;
|
||||
case CV_LeafKind_ONEMETHOD:{result = sizeof(CV_LeafOneMethod);}break;
|
||||
case CV_LeafKind_NESTTYPEEX:{result = sizeof(CV_LeafNestTypeEx);}break;
|
||||
case CV_LeafKind_TYPESERVER2:{result = sizeof(CV_LeafTypeServer2);}break;
|
||||
case CV_LeafKind_INTERFACE:{result = sizeof(CV_LeafStruct);}break;
|
||||
case CV_LeafKind_CLASS2:{result = sizeof(CV_LeafStruct2);}break;
|
||||
case CV_LeafKind_STRUCT2:{result = sizeof(CV_LeafStruct2);}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
|
||||
@@ -320,6 +320,64 @@ CV_SymKind_FASTLINK = 0x1167,
|
||||
CV_SymKind_INLINEES = 0x1168,
|
||||
} CV_SymKindEnum;
|
||||
|
||||
typedef U8 CV_BasicType;
|
||||
typedef enum CV_BasicTypeEnum
|
||||
{
|
||||
CV_BasicType_NOTYPE = 0x00,
|
||||
CV_BasicType_ABS = 0x01,
|
||||
CV_BasicType_SEGMENT = 0x02,
|
||||
CV_BasicType_VOID = 0x03,
|
||||
CV_BasicType_CURRENCY = 0x04,
|
||||
CV_BasicType_NBASICSTR = 0x05,
|
||||
CV_BasicType_FBASICSTR = 0x06,
|
||||
CV_BasicType_NOTTRANS = 0x07,
|
||||
CV_BasicType_HRESULT = 0x08,
|
||||
CV_BasicType_CHAR = 0x10,
|
||||
CV_BasicType_SHORT = 0x11,
|
||||
CV_BasicType_LONG = 0x12,
|
||||
CV_BasicType_QUAD = 0x13,
|
||||
CV_BasicType_OCT = 0x14,
|
||||
CV_BasicType_UCHAR = 0x20,
|
||||
CV_BasicType_USHORT = 0x21,
|
||||
CV_BasicType_ULONG = 0x22,
|
||||
CV_BasicType_UQUAD = 0x23,
|
||||
CV_BasicType_UOCT = 0x24,
|
||||
CV_BasicType_BOOL8 = 0x30,
|
||||
CV_BasicType_BOOL16 = 0x31,
|
||||
CV_BasicType_BOOL32 = 0x32,
|
||||
CV_BasicType_BOOL64 = 0x33,
|
||||
CV_BasicType_FLOAT32 = 0x40,
|
||||
CV_BasicType_FLOAT64 = 0x41,
|
||||
CV_BasicType_FLOAT80 = 0x42,
|
||||
CV_BasicType_FLOAT128 = 0x43,
|
||||
CV_BasicType_FLOAT48 = 0x44,
|
||||
CV_BasicType_FLOAT32PP = 0x45,
|
||||
CV_BasicType_FLOAT16 = 0x46,
|
||||
CV_BasicType_COMPLEX32 = 0x50,
|
||||
CV_BasicType_COMPLEX64 = 0x51,
|
||||
CV_BasicType_COMPLEX80 = 0x52,
|
||||
CV_BasicType_COMPLEX128 = 0x53,
|
||||
CV_BasicType_BIT = 0x60,
|
||||
CV_BasicType_PASCHAR = 0x61,
|
||||
CV_BasicType_BOOL32FF = 0x62,
|
||||
CV_BasicType_INT8 = 0x68,
|
||||
CV_BasicType_UINT8 = 0x69,
|
||||
CV_BasicType_RCHAR = 0x70,
|
||||
CV_BasicType_WCHAR = 0x71,
|
||||
CV_BasicType_INT16 = 0x72,
|
||||
CV_BasicType_UINT16 = 0x73,
|
||||
CV_BasicType_INT32 = 0x74,
|
||||
CV_BasicType_UINT32 = 0x75,
|
||||
CV_BasicType_INT64 = 0x76,
|
||||
CV_BasicType_UINT64 = 0x77,
|
||||
CV_BasicType_INT128 = 0x78,
|
||||
CV_BasicType_UINT128 = 0x79,
|
||||
CV_BasicType_CHAR16 = 0x7a,
|
||||
CV_BasicType_CHAR32 = 0x7b,
|
||||
CV_BasicType_CHAR8 = 0x7c,
|
||||
CV_BasicType_PTR = 0xf0,
|
||||
} CV_BasicTypeEnum;
|
||||
|
||||
typedef U16 CV_LeafKind;
|
||||
typedef enum CV_LeafKindEnum
|
||||
{
|
||||
@@ -454,8 +512,11 @@ CV_LeafKind_STRUCT2 = 0x1609,
|
||||
internal String8 cv_string_from_numeric_kind(CV_NumericKind v);
|
||||
internal String8 cv_string_from_arch(CV_Arch v);
|
||||
internal String8 cv_string_from_sym_kind(CV_SymKind v);
|
||||
internal String8 cv_string_from_basic_type(CV_BasicType v);
|
||||
internal String8 cv_type_name_from_basic_type(CV_BasicType v);
|
||||
internal String8 cv_string_from_leaf_kind(CV_LeafKind v);
|
||||
internal U64 cv_header_struct_size_from_sym_kind(CV_SymKind v);
|
||||
internal U64 cv_header_struct_size_from_leaf_kind(CV_LeafKind v);
|
||||
C_LINKAGE_BEGIN
|
||||
C_LINKAGE_END
|
||||
|
||||
|
||||
Reference in New Issue
Block a user