mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 17:28:07 +00:00
sketch out unified RDI_Variable to replace RDI_GlobalVariable, RDI_ThreadVariable, RDI_Local, and RDI_Constant, & plug into new RDI structured namespaces
This commit is contained in:
+41
-1
@@ -388,7 +388,7 @@ typedef RDI_U32 RDI_ContainerFlags;
|
|||||||
typedef enum RDI_ContainerFlagsEnum
|
typedef enum RDI_ContainerFlagsEnum
|
||||||
{
|
{
|
||||||
RDI_ContainerFlag_External = 1<<8,
|
RDI_ContainerFlag_External = 1<<8,
|
||||||
RDI_ContainerFlag_KindMask = 0xff,
|
RDI_ContainerFlag_KindMask = 0xff,
|
||||||
} RDI_ContainerFlagsEnum;
|
} RDI_ContainerFlagsEnum;
|
||||||
|
|
||||||
typedef RDI_U32 RDI_LinkFlags;
|
typedef RDI_U32 RDI_LinkFlags;
|
||||||
@@ -407,6 +407,15 @@ RDI_LocalKind_Parameter = 0x1,
|
|||||||
RDI_LocalKind_Variable = 0x2,
|
RDI_LocalKind_Variable = 0x2,
|
||||||
} RDI_LocalKindEnum;
|
} RDI_LocalKindEnum;
|
||||||
|
|
||||||
|
typedef RDI_U8 RDI_VariableKind;
|
||||||
|
typedef enum RDI_VariableKindEnum
|
||||||
|
{
|
||||||
|
RDI_VariableKind_Local = 0x0,
|
||||||
|
RDI_VariableKind_Param = 0x1,
|
||||||
|
RDI_VariableKind_Global = 0x2,
|
||||||
|
RDI_VariableKind_Thread = 0x3,
|
||||||
|
} RDI_VariableKindEnum;
|
||||||
|
|
||||||
typedef RDI_U8 RDI_LocationKind;
|
typedef RDI_U8 RDI_LocationKind;
|
||||||
typedef enum RDI_LocationKindEnum
|
typedef enum RDI_LocationKindEnum
|
||||||
{
|
{
|
||||||
@@ -416,6 +425,10 @@ RDI_LocationKind_ValBytecodeStream = 0x2,
|
|||||||
RDI_LocationKind_AddrRegPlusU16 = 0x3,
|
RDI_LocationKind_AddrRegPlusU16 = 0x3,
|
||||||
RDI_LocationKind_AddrAddrRegPlusU16 = 0x4,
|
RDI_LocationKind_AddrAddrRegPlusU16 = 0x4,
|
||||||
RDI_LocationKind_ValReg = 0x5,
|
RDI_LocationKind_ValReg = 0x5,
|
||||||
|
RDI_LocationKind_ModuleOff = 0x6,
|
||||||
|
RDI_LocationKind_TLSOff = 0x7,
|
||||||
|
RDI_LocationKind_ConstantDataOff = 0x8,
|
||||||
|
RDI_LocationKind_List = 0x9,
|
||||||
} RDI_LocationKindEnum;
|
} RDI_LocationKindEnum;
|
||||||
|
|
||||||
typedef RDI_U8 RDI_EvalOp;
|
typedef RDI_U8 RDI_EvalOp;
|
||||||
@@ -891,12 +904,26 @@ X(ValBytecodeStream)\
|
|||||||
X(AddrRegPlusU16)\
|
X(AddrRegPlusU16)\
|
||||||
X(AddrAddrRegPlusU16)\
|
X(AddrAddrRegPlusU16)\
|
||||||
X(ValReg)\
|
X(ValReg)\
|
||||||
|
X(ModuleOff)\
|
||||||
|
X(TLSOff)\
|
||||||
|
X(ConstantDataOff)\
|
||||||
|
X(List)\
|
||||||
|
|
||||||
#define RDI_Namespace_XList \
|
#define RDI_Namespace_XList \
|
||||||
X(RDI_U32, name_string_idx)\
|
X(RDI_U32, name_string_idx)\
|
||||||
X(RDI_ContainerFlags, container_flags)\
|
X(RDI_ContainerFlags, container_flags)\
|
||||||
X(RDI_U32, container_idx)\
|
X(RDI_U32, container_idx)\
|
||||||
|
|
||||||
|
#define RDI_Variable_XList \
|
||||||
|
X(RDI_U32, name_string_idx)\
|
||||||
|
X(RDI_ContainerFlags, container_flags)\
|
||||||
|
X(RDI_U32, container_idx)\
|
||||||
|
X(RDI_U32, type_idx)\
|
||||||
|
X(RDI_VariableKind, variable_kind)\
|
||||||
|
X(RDI_LocationKind, location_kind)\
|
||||||
|
X(RDI_U16, padding)\
|
||||||
|
X(RDI_U32, location_idx)\
|
||||||
|
|
||||||
#define RDI_GlobalVariable_XList \
|
#define RDI_GlobalVariable_XList \
|
||||||
X(RDI_U32, name_string_idx)\
|
X(RDI_U32, name_string_idx)\
|
||||||
X(RDI_LinkFlags, link_flags)\
|
X(RDI_LinkFlags, link_flags)\
|
||||||
@@ -1351,6 +1378,19 @@ RDI_ContainerFlags container_flags;
|
|||||||
RDI_U32 container_idx;
|
RDI_U32 container_idx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct RDI_Variable RDI_Variable;
|
||||||
|
struct RDI_Variable
|
||||||
|
{
|
||||||
|
RDI_U32 name_string_idx;
|
||||||
|
RDI_ContainerFlags container_flags;
|
||||||
|
RDI_U32 container_idx;
|
||||||
|
RDI_U32 type_idx;
|
||||||
|
RDI_VariableKind variable_kind;
|
||||||
|
RDI_LocationKind location_kind;
|
||||||
|
RDI_U16 padding;
|
||||||
|
RDI_U32 location_idx;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct RDI_GlobalVariable RDI_GlobalVariable;
|
typedef struct RDI_GlobalVariable RDI_GlobalVariable;
|
||||||
struct RDI_GlobalVariable
|
struct RDI_GlobalVariable
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -722,7 +722,6 @@ struct RDIM_Type
|
|||||||
RDI_U32 off;
|
RDI_U32 off;
|
||||||
RDI_U32 count;
|
RDI_U32 count;
|
||||||
RDIM_String8 name;
|
RDIM_String8 name;
|
||||||
RDIM_String8 link_name;
|
|
||||||
RDIM_Type *direct_type;
|
RDIM_Type *direct_type;
|
||||||
RDIM_Type **param_types;
|
RDIM_Type **param_types;
|
||||||
struct RDIM_UDT *udt;
|
struct RDIM_UDT *udt;
|
||||||
|
|||||||
+42
-1
@@ -956,6 +956,7 @@ RDI_ContainerKindTable:
|
|||||||
RDI_ContainerFlagTable:
|
RDI_ContainerFlagTable:
|
||||||
{
|
{
|
||||||
{External `1<<8`}
|
{External `1<<8`}
|
||||||
|
{KindMask `0xff`}
|
||||||
}
|
}
|
||||||
|
|
||||||
@table(name value)
|
@table(name value)
|
||||||
@@ -983,6 +984,19 @@ RDI_LocationKindTable:
|
|||||||
{AddrRegPlusU16 0x3}
|
{AddrRegPlusU16 0x3}
|
||||||
{AddrAddrRegPlusU16 0x4}
|
{AddrAddrRegPlusU16 0x4}
|
||||||
{ValReg 0x5}
|
{ValReg 0x5}
|
||||||
|
{ModuleOff 0x6}
|
||||||
|
{TLSOff 0x7}
|
||||||
|
{ConstantDataOff 0x8}
|
||||||
|
{List 0x9}
|
||||||
|
}
|
||||||
|
|
||||||
|
@table(name value)
|
||||||
|
RDI_VariableKindTable:
|
||||||
|
{
|
||||||
|
{Local 0x0}
|
||||||
|
{Param 0x1}
|
||||||
|
{Global 0x2}
|
||||||
|
{Thread 0x3}
|
||||||
}
|
}
|
||||||
|
|
||||||
@table(name type desc)
|
@table(name type desc)
|
||||||
@@ -993,6 +1007,19 @@ RDI_NamespaceMemberTable:
|
|||||||
{container_idx RDI_U32 ""}
|
{container_idx RDI_U32 ""}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@table(name type desc)
|
||||||
|
RDI_VariableMemberTable:
|
||||||
|
{
|
||||||
|
{name_string_idx RDI_U32 ""}
|
||||||
|
{container_flags RDI_ContainerFlags ""}
|
||||||
|
{container_idx RDI_U32 ""}
|
||||||
|
{type_idx RDI_U32 ""}
|
||||||
|
{variable_kind RDI_VariableKind ""}
|
||||||
|
{location_kind RDI_LocationKind ""}
|
||||||
|
{padding RDI_U16 ""}
|
||||||
|
{location_idx RDI_U32 ""}
|
||||||
|
}
|
||||||
|
|
||||||
@table(name type desc)
|
@table(name type desc)
|
||||||
RDI_GlobalVariableMemberTable:
|
RDI_GlobalVariableMemberTable:
|
||||||
{
|
{
|
||||||
@@ -1108,7 +1135,6 @@ RDI_LocationRegMemberTable:
|
|||||||
@enum(RDI_U32) RDI_ContainerFlags:
|
@enum(RDI_U32) RDI_ContainerFlags:
|
||||||
{
|
{
|
||||||
@expand(RDI_ContainerFlagTable a) `$(a.name .. =>20) = $(a.value)`,
|
@expand(RDI_ContainerFlagTable a) `$(a.name .. =>20) = $(a.value)`,
|
||||||
`KindMask = 0xff`,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@enum(RDI_U32) RDI_LinkFlags:
|
@enum(RDI_U32) RDI_LinkFlags:
|
||||||
@@ -1121,6 +1147,11 @@ RDI_LocationRegMemberTable:
|
|||||||
@expand(RDI_LocalKindTable a) `$(a.name .. =>20) = $(a.value)`
|
@expand(RDI_LocalKindTable a) `$(a.name .. =>20) = $(a.value)`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@enum(RDI_U8) RDI_VariableKind:
|
||||||
|
{
|
||||||
|
@expand(RDI_VariableKindTable a) `$(a.name .. =>20) = $(a.value)`
|
||||||
|
}
|
||||||
|
|
||||||
@enum(RDI_U8) RDI_LocationKind:
|
@enum(RDI_U8) RDI_LocationKind:
|
||||||
{
|
{
|
||||||
@expand(RDI_LocationKindTable a) `$(a.name .. =>20) = $(a.value)`
|
@expand(RDI_LocationKindTable a) `$(a.name .. =>20) = $(a.value)`
|
||||||
@@ -1148,6 +1179,11 @@ RDI_LocationRegMemberTable:
|
|||||||
@expand(RDI_NamespaceMemberTable a) `$(a.type), $(a.name)`
|
@expand(RDI_NamespaceMemberTable a) `$(a.type), $(a.name)`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@xlist RDI_Variable_XList:
|
||||||
|
{
|
||||||
|
@expand(RDI_VariableMemberTable a) `$(a.type), $(a.name)`
|
||||||
|
}
|
||||||
|
|
||||||
@xlist RDI_GlobalVariable_XList:
|
@xlist RDI_GlobalVariable_XList:
|
||||||
{
|
{
|
||||||
@expand(RDI_GlobalVariableMemberTable a) `$(a.type), $(a.name)`
|
@expand(RDI_GlobalVariableMemberTable a) `$(a.type), $(a.name)`
|
||||||
@@ -1205,6 +1241,11 @@ RDI_LocationRegMemberTable:
|
|||||||
@expand(RDI_NamespaceMemberTable a) `$(a.type) $(a.name)`
|
@expand(RDI_NamespaceMemberTable a) `$(a.type) $(a.name)`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@struct RDI_Variable:
|
||||||
|
{
|
||||||
|
@expand(RDI_VariableMemberTable a) `$(a.type) $(a.name)`
|
||||||
|
}
|
||||||
|
|
||||||
@struct RDI_GlobalVariable:
|
@struct RDI_GlobalVariable:
|
||||||
{
|
{
|
||||||
@expand(RDI_GlobalVariableMemberTable a) `$(a.type) $(a.name)`
|
@expand(RDI_GlobalVariableMemberTable a) `$(a.type) $(a.name)`
|
||||||
|
|||||||
@@ -1521,44 +1521,6 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
lane_sync();
|
lane_sync();
|
||||||
RDIM_SrcFileChunkList all_src_files = *all_src_files__sequenceless;
|
RDIM_SrcFileChunkList all_src_files = *all_src_files__sequenceless;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
|
||||||
//- rjf: gather user-defined namespaces
|
|
||||||
//
|
|
||||||
ProfScope("gather user-defined namespaces")
|
|
||||||
{
|
|
||||||
U64 *sym_take_counter = lane_idx() == 0 ? push_array(scratch.arena, U64, 1) : 0;
|
|
||||||
lane_sync_u64(&sym_take_counter, 0);
|
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
//- rjf: take next sym
|
|
||||||
U64 sym_idx = ins_atomic_u64_inc_eval(sym_take_counter) - 1;
|
|
||||||
if(sym_idx >= all_syms_count)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- rjf: unpack sym
|
|
||||||
Temp scratch = scratch_begin(&arena, 1);
|
|
||||||
CV_SymParsed *sym = all_syms[sym_idx];
|
|
||||||
|
|
||||||
//- rjf: iterate namespaces
|
|
||||||
for(CV_RecIter iter = {0}; cv_rec_next(sym->data, &sym->sym_ranges, 0, &iter);)
|
|
||||||
{
|
|
||||||
switch(iter.kind)
|
|
||||||
{
|
|
||||||
default:{}break;
|
|
||||||
case CV_SymKind_UNAMESPACE:
|
|
||||||
{
|
|
||||||
String8 string = str8_cstring_capped(iter.struct_base, iter.opl);
|
|
||||||
// TODO(rjf)
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scratch_end(scratch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
//- rjf: types pass 1: produce type forward resolution map
|
//- rjf: types pass 1: produce type forward resolution map
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user