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
|
||||
{
|
||||
RDI_ContainerFlag_External = 1<<8,
|
||||
RDI_ContainerFlag_KindMask = 0xff,
|
||||
RDI_ContainerFlag_KindMask = 0xff,
|
||||
} RDI_ContainerFlagsEnum;
|
||||
|
||||
typedef RDI_U32 RDI_LinkFlags;
|
||||
@@ -407,6 +407,15 @@ RDI_LocalKind_Parameter = 0x1,
|
||||
RDI_LocalKind_Variable = 0x2,
|
||||
} 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 enum RDI_LocationKindEnum
|
||||
{
|
||||
@@ -416,6 +425,10 @@ RDI_LocationKind_ValBytecodeStream = 0x2,
|
||||
RDI_LocationKind_AddrRegPlusU16 = 0x3,
|
||||
RDI_LocationKind_AddrAddrRegPlusU16 = 0x4,
|
||||
RDI_LocationKind_ValReg = 0x5,
|
||||
RDI_LocationKind_ModuleOff = 0x6,
|
||||
RDI_LocationKind_TLSOff = 0x7,
|
||||
RDI_LocationKind_ConstantDataOff = 0x8,
|
||||
RDI_LocationKind_List = 0x9,
|
||||
} RDI_LocationKindEnum;
|
||||
|
||||
typedef RDI_U8 RDI_EvalOp;
|
||||
@@ -891,12 +904,26 @@ X(ValBytecodeStream)\
|
||||
X(AddrRegPlusU16)\
|
||||
X(AddrAddrRegPlusU16)\
|
||||
X(ValReg)\
|
||||
X(ModuleOff)\
|
||||
X(TLSOff)\
|
||||
X(ConstantDataOff)\
|
||||
X(List)\
|
||||
|
||||
#define RDI_Namespace_XList \
|
||||
X(RDI_U32, name_string_idx)\
|
||||
X(RDI_ContainerFlags, container_flags)\
|
||||
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 \
|
||||
X(RDI_U32, name_string_idx)\
|
||||
X(RDI_LinkFlags, link_flags)\
|
||||
@@ -1351,6 +1378,19 @@ RDI_ContainerFlags container_flags;
|
||||
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;
|
||||
struct RDI_GlobalVariable
|
||||
{
|
||||
|
||||
@@ -722,7 +722,6 @@ struct RDIM_Type
|
||||
RDI_U32 off;
|
||||
RDI_U32 count;
|
||||
RDIM_String8 name;
|
||||
RDIM_String8 link_name;
|
||||
RDIM_Type *direct_type;
|
||||
RDIM_Type **param_types;
|
||||
struct RDIM_UDT *udt;
|
||||
|
||||
+42
-1
@@ -956,6 +956,7 @@ RDI_ContainerKindTable:
|
||||
RDI_ContainerFlagTable:
|
||||
{
|
||||
{External `1<<8`}
|
||||
{KindMask `0xff`}
|
||||
}
|
||||
|
||||
@table(name value)
|
||||
@@ -983,6 +984,19 @@ RDI_LocationKindTable:
|
||||
{AddrRegPlusU16 0x3}
|
||||
{AddrAddrRegPlusU16 0x4}
|
||||
{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)
|
||||
@@ -993,6 +1007,19 @@ RDI_NamespaceMemberTable:
|
||||
{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)
|
||||
RDI_GlobalVariableMemberTable:
|
||||
{
|
||||
@@ -1108,7 +1135,6 @@ RDI_LocationRegMemberTable:
|
||||
@enum(RDI_U32) RDI_ContainerFlags:
|
||||
{
|
||||
@expand(RDI_ContainerFlagTable a) `$(a.name .. =>20) = $(a.value)`,
|
||||
`KindMask = 0xff`,
|
||||
}
|
||||
|
||||
@enum(RDI_U32) RDI_LinkFlags:
|
||||
@@ -1121,6 +1147,11 @@ RDI_LocationRegMemberTable:
|
||||
@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:
|
||||
{
|
||||
@expand(RDI_LocationKindTable a) `$(a.name .. =>20) = $(a.value)`
|
||||
@@ -1148,6 +1179,11 @@ RDI_LocationRegMemberTable:
|
||||
@expand(RDI_NamespaceMemberTable a) `$(a.type), $(a.name)`
|
||||
}
|
||||
|
||||
@xlist RDI_Variable_XList:
|
||||
{
|
||||
@expand(RDI_VariableMemberTable a) `$(a.type), $(a.name)`
|
||||
}
|
||||
|
||||
@xlist RDI_GlobalVariable_XList:
|
||||
{
|
||||
@expand(RDI_GlobalVariableMemberTable a) `$(a.type), $(a.name)`
|
||||
@@ -1205,6 +1241,11 @@ RDI_LocationRegMemberTable:
|
||||
@expand(RDI_NamespaceMemberTable a) `$(a.type) $(a.name)`
|
||||
}
|
||||
|
||||
@struct RDI_Variable:
|
||||
{
|
||||
@expand(RDI_VariableMemberTable a) `$(a.type) $(a.name)`
|
||||
}
|
||||
|
||||
@struct RDI_GlobalVariable:
|
||||
{
|
||||
@expand(RDI_GlobalVariableMemberTable a) `$(a.type) $(a.name)`
|
||||
|
||||
@@ -1521,44 +1521,6 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
||||
lane_sync();
|
||||
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
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user