mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 13:58:40 +00:00
further progress on metacode-driven generation of rdi headers; metaprogram xlist generation; getting rdi_dump up-to-speed
This commit is contained in:
@@ -155,13 +155,6 @@ rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup
|
||||
case RDI_Arch_X86:{result = 4;}break;
|
||||
case RDI_Arch_X64:{result = 8;}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
RDI_PROC RDI_EvalConversionKind
|
||||
|
||||
rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out)
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -193,4 +186,11 @@ rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group)
|
||||
|
||||
case RDI_EvalOp_Mul: case RDI_EvalOp_Div:
|
||||
|
||||
case RDI_EvalOp_EqEq:case RDI_EvalOp_NtEq:
|
||||
|
||||
case RDI_EvalOp_LsEq:case RDI_EvalOp_GrEq:
|
||||
|
||||
case RDI_EvalOp_Less:case RDI_EvalOp_Grtr:
|
||||
|
||||
{
|
||||
|
||||
|
||||
@@ -80,7 +80,6 @@ RDI_DataSectionTag_LocationData = 0x0017,
|
||||
RDI_DataSectionTag_NameMaps = 0x0018,
|
||||
RDI_DataSectionTag_PRIMARY_COUNT = 0x0019,
|
||||
RDI_DataSectionTag_SECONDARY = 0x80000000,
|
||||
RDI_DataSectionTag_SKIP = RDI_DataSectionTag_SECONDARY|0x0000,
|
||||
RDI_DataSectionTag_LineInfoVoffs = RDI_DataSectionTag_SECONDARY|0x0001,
|
||||
RDI_DataSectionTag_LineInfoData = RDI_DataSectionTag_SECONDARY|0x0002,
|
||||
RDI_DataSectionTag_LineInfoColumns = RDI_DataSectionTag_SECONDARY|0x0003,
|
||||
@@ -486,6 +485,229 @@ RDI_NameMapKind_NormalSourcePaths = 6,
|
||||
RDI_NameMapKind_COUNT = 7,
|
||||
} RDI_NameMapKindEnum;
|
||||
|
||||
#define RDI_DataSectionTag_XList \
|
||||
X(NULL)\
|
||||
X(TopLevelInfo)\
|
||||
X(StringData)\
|
||||
X(StringTable)\
|
||||
X(IndexRuns)\
|
||||
X(BinarySections)\
|
||||
X(FilePathNodes)\
|
||||
X(SourceFiles)\
|
||||
X(Units)\
|
||||
X(UnitVmap)\
|
||||
X(TypeNodes)\
|
||||
X(UDTs)\
|
||||
X(Members)\
|
||||
X(EnumMembers)\
|
||||
X(GlobalVariables)\
|
||||
X(GlobalVmap)\
|
||||
X(ThreadVariables)\
|
||||
X(Procedures)\
|
||||
X(Scopes)\
|
||||
X(ScopeVoffData)\
|
||||
X(ScopeVmap)\
|
||||
X(Locals)\
|
||||
X(LocationBlocks)\
|
||||
X(LocationData)\
|
||||
X(NameMaps)\
|
||||
X(PRIMARY_COUNT)\
|
||||
X(SECONDARY)\
|
||||
X(LineInfoVoffs)\
|
||||
X(LineInfoData)\
|
||||
X(LineInfoColumns)\
|
||||
X(LineMapNumbers)\
|
||||
X(LineMapRanges)\
|
||||
X(LineMapVoffs)\
|
||||
X(NameMapBuckets)\
|
||||
X(NameMapNodes)\
|
||||
|
||||
#define RDI_DataSectionEncoding_XList \
|
||||
X(Unpacked)\
|
||||
X(LZB)\
|
||||
|
||||
#define RDI_Arch_XList \
|
||||
X(NULL)\
|
||||
X(X86)\
|
||||
X(X64)\
|
||||
|
||||
#define RDI_BinarySectionFlags_XList \
|
||||
X(NULL)\
|
||||
X(X86)\
|
||||
X(X64)\
|
||||
|
||||
#define RDI_Language_XList \
|
||||
X(NULL)\
|
||||
X(C)\
|
||||
X(CPlusPlus)\
|
||||
X(COUNT)\
|
||||
|
||||
#define RDI_TypeKind_XList \
|
||||
X(NULL)\
|
||||
X(Void)\
|
||||
X(Handle)\
|
||||
X(Char8)\
|
||||
X(Char16)\
|
||||
X(Char32)\
|
||||
X(UChar8)\
|
||||
X(UChar16)\
|
||||
X(UChar32)\
|
||||
X(U8)\
|
||||
X(U16)\
|
||||
X(U32)\
|
||||
X(U64)\
|
||||
X(U128)\
|
||||
X(U256)\
|
||||
X(U512)\
|
||||
X(S8)\
|
||||
X(S16)\
|
||||
X(S32)\
|
||||
X(S64)\
|
||||
X(S128)\
|
||||
X(S256)\
|
||||
X(S512)\
|
||||
X(Bool)\
|
||||
X(F16)\
|
||||
X(F32)\
|
||||
X(F32PP)\
|
||||
X(F48)\
|
||||
X(F64)\
|
||||
X(F80)\
|
||||
X(F128)\
|
||||
X(ComplexF32)\
|
||||
X(ComplexF64)\
|
||||
X(ComplexF80)\
|
||||
X(ComplexF128)\
|
||||
X(Modifier)\
|
||||
X(Ptr)\
|
||||
X(LRef)\
|
||||
X(RRef)\
|
||||
X(Array)\
|
||||
X(Function)\
|
||||
X(Method)\
|
||||
X(MemberPtr)\
|
||||
X(Struct)\
|
||||
X(Class)\
|
||||
X(Union)\
|
||||
X(Enum)\
|
||||
X(Alias)\
|
||||
X(IncompleteStruct)\
|
||||
X(IncompleteUnion)\
|
||||
X(IncompleteClass)\
|
||||
X(IncompleteEnum)\
|
||||
X(Bitfield)\
|
||||
X(Variadic)\
|
||||
|
||||
#define RDI_TypeModifierFlags_XList \
|
||||
X(Const)\
|
||||
X(Volatile)\
|
||||
|
||||
#define RDI_UDTFlag_XList \
|
||||
X(EnumMembers)\
|
||||
|
||||
#define RDI_MemberKind_XList \
|
||||
X(NULL)\
|
||||
X(DataField)\
|
||||
X(StaticData)\
|
||||
X(Method)\
|
||||
X(StaticMethod)\
|
||||
X(VirtualMethod)\
|
||||
X(VTablePtr)\
|
||||
X(Base)\
|
||||
X(VirtualBase)\
|
||||
X(NestedType)\
|
||||
|
||||
#define RDI_LinkFlags_XList \
|
||||
X(External)\
|
||||
X(TypeScoped)\
|
||||
X(ProcScoped)\
|
||||
|
||||
#define RDI_LocalKind_XList \
|
||||
X(NULL)\
|
||||
X(Parameter)\
|
||||
X(Variable)\
|
||||
|
||||
#define RDI_LocationKind_XList \
|
||||
X(NULL)\
|
||||
X(AddrBytecodeStream)\
|
||||
X(ValBytecodeStream)\
|
||||
X(AddrRegPlusU16)\
|
||||
X(AddrAddrRegPlusU16)\
|
||||
X(ValReg)\
|
||||
|
||||
#define RDI_EvalOp_XList \
|
||||
X(Stop)\
|
||||
X(Noop)\
|
||||
X(Cond)\
|
||||
X(Skip)\
|
||||
X(MemRead)\
|
||||
X(RegRead)\
|
||||
X(RegReadDyn)\
|
||||
X(FrameOff)\
|
||||
X(ModuleOff)\
|
||||
X(TLSOff)\
|
||||
X(ObjectOff)\
|
||||
X(CFA)\
|
||||
X(ConstU8)\
|
||||
X(ConstU16)\
|
||||
X(ConstU32)\
|
||||
X(ConstU64)\
|
||||
X(Abs)\
|
||||
X(Neg)\
|
||||
X(Add)\
|
||||
X(Sub)\
|
||||
X(Mul)\
|
||||
X(Div)\
|
||||
X(Mod)\
|
||||
X(LShift)\
|
||||
X(RShift)\
|
||||
X(BitAnd)\
|
||||
X(BitOr)\
|
||||
X(BitXor)\
|
||||
X(BitNot)\
|
||||
X(LogAnd)\
|
||||
X(LogOr)\
|
||||
X(LogNot)\
|
||||
X(EqEq)\
|
||||
X(NtEq)\
|
||||
X(LsEq)\
|
||||
X(GrEq)\
|
||||
X(Less)\
|
||||
X(Grtr)\
|
||||
X(Trunc)\
|
||||
X(TruncSigned)\
|
||||
X(Convert)\
|
||||
X(Pick)\
|
||||
X(Pop)\
|
||||
X(Insert)\
|
||||
X(COUNT)\
|
||||
|
||||
#define RDI_EvalTypeGroup_XList \
|
||||
X(Other)\
|
||||
X(U)\
|
||||
X(S)\
|
||||
X(F32)\
|
||||
X(F64)\
|
||||
X(COUNT)\
|
||||
|
||||
#define RDI_EvalConversionKind_XList \
|
||||
X(Noop)\
|
||||
X(Legal)\
|
||||
X(OtherToOther)\
|
||||
X(ToOther)\
|
||||
X(FromOther)\
|
||||
X(COUNT)\
|
||||
|
||||
#define RDI_NameMapKind_XList \
|
||||
X(NULL)\
|
||||
X(GlobalVariables)\
|
||||
X(ThreadVariables)\
|
||||
X(Procedures)\
|
||||
X(Types)\
|
||||
X(LinkNameProcedures)\
|
||||
X(NormalSourcePaths)\
|
||||
X(COUNT)\
|
||||
|
||||
#define RDI_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6))
|
||||
|
||||
#define RDI_DECODEN_FROM_CTRLBITS(ctrlbits) ((ctrlbits) & 0xf)
|
||||
@@ -779,8 +1001,8 @@ RDI_PROC RDI_U64 rdi_hash(RDI_U8 *ptr, RDI_U64 size);
|
||||
RDI_LocationKind kind;
|
||||
};
|
||||
|
||||
typedef struct RDI_LocationRegPlusU16 RDI_LocationRegPlusU16;
|
||||
struct RDI_LocationRegPlusU16
|
||||
typedef struct RDI_LocationRegPlusU16 RDI_LocationRegPlusU16;
|
||||
struct RDI_LocationRegPlusU16
|
||||
{
|
||||
RDI_LocationKind kind;
|
||||
RDI_RegCode reg_code;
|
||||
|
||||
@@ -137,7 +137,6 @@ RDI_DataSectionTable:
|
||||
{NameMaps 0x0018 ""}
|
||||
{PRIMARY_COUNT 0x0019 ""}
|
||||
{SECONDARY 0x80000000 ""}
|
||||
{SKIP `RDI_DataSectionTag_SECONDARY|0x0000` ""}
|
||||
{LineInfoVoffs `RDI_DataSectionTag_SECONDARY|0x0001` ""}
|
||||
{LineInfoData `RDI_DataSectionTag_SECONDARY|0x0002` ""}
|
||||
{LineInfoColumns `RDI_DataSectionTag_SECONDARY|0x0003` ""}
|
||||
@@ -175,6 +174,16 @@ RDI_DataSectionMemberTable:
|
||||
@expand(RDI_DataSectionEncodingTable a) `$(a.name .. =>10) = $(a.value)`,
|
||||
}
|
||||
|
||||
@xlist RDI_DataSectionTag_XList:
|
||||
{
|
||||
@expand(RDI_DataSectionTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@xlist RDI_DataSectionEncoding_XList:
|
||||
{
|
||||
@expand(RDI_DataSectionEncodingTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@struct RDI_DataSection:
|
||||
{
|
||||
@expand(RDI_DataSectionMemberTable a) `$(a.type) $(a.name)`
|
||||
@@ -359,6 +368,11 @@ RDI_RegCodeX64Table:
|
||||
@expand(RDI_ArchTable a) `$(a.name .. =>10) = $(a.value)`
|
||||
}
|
||||
|
||||
@xlist RDI_Arch_XList:
|
||||
{
|
||||
@expand(RDI_ArchTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@enum(RDI_U8) RDI_RegCode: {nil}
|
||||
|
||||
@enum(RDI_U8) RDI_RegCodeX86:
|
||||
@@ -415,6 +429,11 @@ RDI_BinarySectionMemberTable:
|
||||
@expand(RDI_BinarySectionFlagTable a) `$(a.name .. =>10) = $(a.value)`;
|
||||
}
|
||||
|
||||
@xlist RDI_BinarySectionFlags_XList:
|
||||
{
|
||||
@expand(RDI_ArchTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@struct RDI_BinarySection:
|
||||
{
|
||||
@expand(RDI_BinarySectionMemberTable a) `$(a.type) $(a.name)`
|
||||
@@ -529,6 +548,11 @@ RDI_LanguageTable:
|
||||
@expand(RDI_LanguageTable a) `$(a.name .. =>10) = $(a.value)`
|
||||
}
|
||||
|
||||
@xlist RDI_Language_XList:
|
||||
{
|
||||
@expand(RDI_LanguageTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Type Info Tables
|
||||
|
||||
@@ -673,6 +697,16 @@ RDI_EnumMemberTable:
|
||||
@expand(RDI_TypeModifierFlagTable a) `$(a.name .. =>20) = $(a.value)`,
|
||||
}
|
||||
|
||||
@xlist RDI_TypeKind_XList:
|
||||
{
|
||||
@expand(RDI_TypeKindTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@xlist RDI_TypeModifierFlags_XList:
|
||||
{
|
||||
@expand(RDI_TypeModifierFlagTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@struct RDI_TypeNode:
|
||||
{
|
||||
@expand(RDI_TypeNodeMemberTable a) `$(a.type_lhs) $(a.name)$(a.type_rhs)`
|
||||
@@ -722,6 +756,11 @@ RDI_EnumMemberTable:
|
||||
@expand(RDI_UDTFlagTable a) `$(a.name .. =>20) = $(a.value)`
|
||||
}
|
||||
|
||||
@xlist RDI_UDTFlag_XList:
|
||||
{
|
||||
@expand(RDI_UDTFlagTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@struct RDI_UDT:
|
||||
{
|
||||
@expand(RDI_UDTMemberTable a) `$(a.type) $(a.name)`
|
||||
@@ -732,6 +771,11 @@ RDI_EnumMemberTable:
|
||||
@expand(RDI_MemberKindTable a) `$(a.name .. =>25) = $(a.value)`
|
||||
}
|
||||
|
||||
@xlist RDI_MemberKind_XList:
|
||||
{
|
||||
@expand(RDI_MemberKindTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@struct RDI_Member:
|
||||
{
|
||||
@expand(RDI_MemberMemberTable a) `$(a.type) $(a.name)`
|
||||
@@ -874,6 +918,21 @@ RDI_LocationRegMemberTable:
|
||||
@expand(RDI_LocationKindTable a) `$(a.name .. =>20) = $(a.value)`
|
||||
}
|
||||
|
||||
@xlist RDI_LinkFlags_XList:
|
||||
{
|
||||
@expand(RDI_LinkFlagTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@xlist RDI_LocalKind_XList:
|
||||
{
|
||||
@expand(RDI_LocalKindTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@xlist RDI_LocationKind_XList:
|
||||
{
|
||||
@expand(RDI_LocationKindTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@struct RDI_GlobalVariable:
|
||||
{
|
||||
@expand(RDI_GlobalVariableMemberTable a) `$(a.type) $(a.name)`
|
||||
@@ -1011,6 +1070,21 @@ RDI_EvalConversionKindTable:
|
||||
@expand(RDI_EvalConversionKindTable a) `$(a.name .. =>20) = $(a.value)`
|
||||
}
|
||||
|
||||
@xlist RDI_EvalOp_XList:
|
||||
{
|
||||
@expand(RDI_EvalOpTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@xlist RDI_EvalTypeGroup_XList:
|
||||
{
|
||||
@expand(RDI_EvalTypeGroupTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@xlist RDI_EvalConversionKind_XList:
|
||||
{
|
||||
@expand(RDI_EvalConversionKindTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@gen(enums)
|
||||
```
|
||||
#define RDI_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6))
|
||||
@@ -1083,6 +1157,11 @@ RDI_NameMapNodeMemberTable:
|
||||
@expand(RDI_NameMapKindTable a) `$(a.name .. =>20) = $(a.value)`
|
||||
}
|
||||
|
||||
@xlist RDI_NameMapKind_XList:
|
||||
{
|
||||
@expand(RDI_NameMapKindTable a) `$(a.name)`;
|
||||
}
|
||||
|
||||
@struct RDI_NameMap:
|
||||
{
|
||||
@expand(RDI_NameMapMemberTable a) `$(a.type) $(a.val)`
|
||||
@@ -1107,8 +1186,8 @@ RDI_PROC RDI_U64 rdi_hash(RDI_U8 *ptr, RDI_U64 size);
|
||||
RDI_PROC RDI_U32 rdi_size_from_basic_type_kind(RDI_TypeKind kind);
|
||||
RDI_PROC RDI_U32 rdi_addr_size_from_arch(RDI_Arch arch);
|
||||
RDI_PROC RDI_EvalConversionKind rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out);
|
||||
RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out);
|
||||
RDI_PROC RDI_S32 rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group);
|
||||
RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out);
|
||||
```
|
||||
|
||||
@gen(functions) @c_file
|
||||
@@ -1168,16 +1247,6 @@ rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup
|
||||
}
|
||||
```
|
||||
|
||||
@gen(functions) @c_file
|
||||
```
|
||||
RDI_PROC RDI_U8 *
|
||||
rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out)
|
||||
{
|
||||
*size_out = rdi_eval_conversion_kind_message_string_table[kind].size;
|
||||
return rdi_eval_conversion_kind_message_string_table[kind].str;
|
||||
}
|
||||
```
|
||||
|
||||
@gen(functions) @c_file
|
||||
```
|
||||
RDI_PROC RDI_S32
|
||||
@@ -1211,3 +1280,13 @@ rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group)
|
||||
return result;
|
||||
}
|
||||
```
|
||||
|
||||
@gen(functions) @c_file
|
||||
```
|
||||
RDI_PROC RDI_U8 *
|
||||
rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out)
|
||||
{
|
||||
*size_out = rdi_eval_conversion_kind_message_string_table[kind].size;
|
||||
return rdi_eval_conversion_kind_message_string_table[kind].str;
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user