mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 15:42:23 -07:00
further progress on metacode-driven generation of rdi headers; metaprogram xlist generation; getting rdi_dump up-to-speed
This commit is contained in:
@@ -264,6 +264,31 @@ int main(int argument_count, char **arguments)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: generate xlists
|
||||
//
|
||||
for(MG_FileParseNode *n = parses.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *file = n->v.root;
|
||||
for(MD_EachNode(node, file->first))
|
||||
{
|
||||
MD_Node *tag = md_tag_from_string(node, str8_lit("xlist"), 0);
|
||||
if(!md_node_is_nil(tag))
|
||||
{
|
||||
String8 layer_key = mg_layer_key_from_path(file->string);
|
||||
MG_Layer *layer = mg_layer_from_key(layer_key);
|
||||
String8List gen_strings = mg_string_list_from_table_gen(mg_arena, table_grid_map, table_col_map, str8_lit(""), node);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "#define %S \\\n", node->string);
|
||||
for(String8Node *n = gen_strings.first; n != 0; n = n->next)
|
||||
{
|
||||
String8 escaped = mg_escaped_from_str8(mg_arena, n->string);
|
||||
str8_list_pushf(mg_arena, &layer->enums, "X(%S)\\\n", escaped);
|
||||
}
|
||||
str8_list_push(mg_arena, &layer->enums, str8_lit("\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: generate structs
|
||||
//
|
||||
|
||||
+72
-62
@@ -5,77 +5,87 @@
|
||||
//~ rjf: RDI Enum -> String Functions
|
||||
|
||||
internal String8
|
||||
rdi_string_from_data_section_tag(RDI_DataSectionTag tag){
|
||||
String8 result = {0};
|
||||
switch (tag){
|
||||
#define X(N,C) case C: result = str8_lit(#N); break;
|
||||
#define Y(N)
|
||||
RDI_DataSectionTagXList(X,Y)
|
||||
#undef X
|
||||
#undef Y
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_arch(RDI_Arch arch){
|
||||
String8 result = {0};
|
||||
switch (arch){
|
||||
default: result = str8_lit("<invalid-arch>"); break;
|
||||
case RDI_Arch_X86: result = str8_lit("x86"); break;
|
||||
case RDI_Arch_X64: result = str8_lit("x64"); break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_language(RDI_Language language){
|
||||
String8 result = {0};
|
||||
switch (language){
|
||||
#define X(name,code) case code: result = str8_lit(#name); break;
|
||||
RDI_LanguageXList(X)
|
||||
rdi_string_from_data_section_tag(RDI_DataSectionTag v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_DataSectionTag>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_DataSectionTag_##name:{result = str8_lit(#name);}break;
|
||||
RDI_DataSectionTag_XList
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_type_kind(RDI_TypeKind type_kind){
|
||||
String8 result = {0};
|
||||
switch (type_kind){
|
||||
default: result = str8_lit("<invalid-type-kind>"); break;
|
||||
#define X(name,code) case code: result = str8_lit(#name); break;
|
||||
#define XZ(name,code,size) X(name,code)
|
||||
#define Y(a,n)
|
||||
RDI_TypeKindXList(X,XZ,Y)
|
||||
#undef X
|
||||
#undef XZ
|
||||
#undef Y
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_member_kind(RDI_MemberKind member_kind){
|
||||
String8 result = {0};
|
||||
switch (member_kind){
|
||||
default: result = str8_lit("<invalid-member-kind>"); break;
|
||||
#define X(N,C) case C: result = str8_lit(#N); break;
|
||||
RDI_MemberKindXList(X)
|
||||
rdi_string_from_arch(RDI_Arch v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_Arch>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_Arch_##name:{result = str8_lit(#name);}break;
|
||||
RDI_Arch_XList
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_local_kind(RDI_LocalKind local_kind){
|
||||
String8 result = {0};
|
||||
switch (local_kind){
|
||||
default: result = str8_lit("<invalid-local-kind>"); break;
|
||||
case RDI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
|
||||
case RDI_LocalKind_Variable: result = str8_lit("Variable"); break;
|
||||
rdi_string_from_language(RDI_Language v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_Language>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_Language_##name:{result = str8_lit(#name);}break;
|
||||
RDI_Language_XList
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_type_kind(RDI_TypeKind v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_TypeKind>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_TypeKind_##name:{result = str8_lit(#name);}break;
|
||||
RDI_TypeKind_XList
|
||||
#undef X
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_member_kind(RDI_MemberKind v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_MemberKind>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_MemberKind_##name:{result = str8_lit(#name);}break;
|
||||
RDI_MemberKind_XList
|
||||
#undef X
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_local_kind(RDI_LocalKind v)
|
||||
{
|
||||
String8 result = str8_lit("<invalid RDI_LocalKind>");
|
||||
switch(v)
|
||||
{
|
||||
default:{}break;
|
||||
#define X(name) case RDI_LocalKind_##name:{result = str8_lit(#name);}break;
|
||||
RDI_LocalKind_XList
|
||||
#undef X
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -160,11 +170,11 @@ rdi_stringize_data_sections(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
internal void
|
||||
rdi_stringize_top_level_info(Arena *arena, String8List *out, RDI_Parsed *parsed,
|
||||
RDI_TopLevelInfo *tli, U32 indent_level){
|
||||
String8 arch_str = rdi_string_from_arch(tli->architecture);
|
||||
String8 arch_str = rdi_string_from_arch(tli->arch);
|
||||
String8 exe_name = {0};
|
||||
exe_name.str = rdi_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sarchitecture=%.*s\n",
|
||||
str8_list_pushf(arena, out, "%.*sarch=%.*s\n",
|
||||
indent_level, rdi_stringize_spaces, str8_varg(arch_str));
|
||||
str8_list_pushf(arena, out, "%.*sexe_name='%.*s'\n",
|
||||
indent_level, rdi_stringize_spaces, str8_varg(exe_name));
|
||||
|
||||
@@ -41,12 +41,12 @@ struct RDI_ScopeBundle
|
||||
////////////////////////////////
|
||||
//~ rjf: RDI Enum -> String Functions
|
||||
|
||||
internal String8 rdi_string_from_data_section_tag(RDI_DataSectionTag tag);
|
||||
internal String8 rdi_string_from_arch(RDI_Arch arch);
|
||||
internal String8 rdi_string_from_language(RDI_Language language);
|
||||
internal String8 rdi_string_from_type_kind(RDI_TypeKind type_kind);
|
||||
internal String8 rdi_string_from_member_kind(RDI_MemberKind member_kind);
|
||||
internal String8 rdi_string_from_local_kind(RDI_LocalKind local_kind);
|
||||
internal String8 rdi_string_from_data_section_tag(RDI_DataSectionTag v);
|
||||
internal String8 rdi_string_from_arch(RDI_Arch v);
|
||||
internal String8 rdi_string_from_language(RDI_Language v);
|
||||
internal String8 rdi_string_from_type_kind(RDI_TypeKind v);
|
||||
internal String8 rdi_string_from_member_kind(RDI_MemberKind v);
|
||||
internal String8 rdi_string_from_local_kind(RDI_LocalKind v);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: RDI Flags -> String Functions
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
```
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//#include "lib_rdi_format/rdi_format.c"
|
||||
#include "rdi_format/generated/rdi_format.c"
|
||||
#include "rdi_format/lib/rdi_format.c"
|
||||
#include "lib_rdi_format/rdi_format_parse.c"
|
||||
|
||||
internal void
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#define RDI_FORMAT_LOCAL_H
|
||||
|
||||
//#include "lib_rdi_format/rdi_format.h"
|
||||
#include "rdi_format/generated/rdi_format.h"
|
||||
#include "rdi_format/lib/rdi_format.h"
|
||||
#include "lib_rdi_format/rdi_format_parse.h"
|
||||
|
||||
internal void rdi_decompress_parsed(U8 *decompressed_data, U64 decompressed_size, RDI_Parsed *og_rdi);
|
||||
|
||||
Reference in New Issue
Block a user