further progress on metacode-driven generation of rdi headers; metaprogram xlist generation; getting rdi_dump up-to-speed

This commit is contained in:
Ryan Fleury
2024-06-01 19:24:46 -07:00
parent 47df50b6dc
commit 45f69b6f98
8 changed files with 428 additions and 92 deletions
+91 -12
View File
@@ -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;
}
```