mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-26 17:30:09 +00:00
eliminate member-filtering hack for cfg views; eliminate deref-space-ptr hack
This commit is contained in:
@@ -75,7 +75,6 @@ e_interpret(String8 bytecode)
|
||||
else switch(op)
|
||||
{
|
||||
case E_IRExtKind_SetSpace: {ctrlbits = RDI_EVAL_CTRLBITS(32, 0, 0);}break;
|
||||
case E_IRExtKind_DerefSpacePtr:{ctrlbits = RDI_EVAL_CTRLBITS(0, 1, 1);}break;
|
||||
default:
|
||||
{
|
||||
result.code = E_InterpretationCode_BadOp;
|
||||
@@ -125,27 +124,6 @@ e_interpret(String8 bytecode)
|
||||
MemoryCopy(&selected_space, &imm, sizeof(selected_space));
|
||||
}break;
|
||||
|
||||
case E_IRExtKind_DerefSpacePtr:
|
||||
{
|
||||
U64 addr = svals[0].u64;
|
||||
U64 size = sizeof(E_Space) + sizeof(U64);
|
||||
typedef struct SpacePtrRead SpacePtrRead;
|
||||
struct SpacePtrRead
|
||||
{
|
||||
E_Space space;
|
||||
U64 off;
|
||||
};
|
||||
SpacePtrRead space_ptr_read = {0};
|
||||
B32 good_read = e_space_read(selected_space, &space_ptr_read, r1u64(addr, addr+size));
|
||||
if(!good_read)
|
||||
{
|
||||
result.code = E_InterpretationCode_BadMemRead;
|
||||
goto done;
|
||||
}
|
||||
MemoryCopyStruct(&selected_space, &space_ptr_read.space);
|
||||
nval.u64 = space_ptr_read.off;
|
||||
}break;
|
||||
|
||||
case RDI_EvalOp_Stop:
|
||||
{
|
||||
goto done;
|
||||
|
||||
@@ -464,16 +464,6 @@ e_oplist_push_set_space(Arena *arena, E_OpList *list, E_Space space)
|
||||
list->encoded_size += 1 + sizeof(space);
|
||||
}
|
||||
|
||||
internal void
|
||||
e_oplist_push_deref_space_ptr(Arena *arena, E_OpList *list)
|
||||
{
|
||||
E_Op *node = push_array_no_zero(arena, E_Op, 1);
|
||||
node->opcode = E_IRExtKind_DerefSpacePtr;
|
||||
SLLQueuePush(list->first, list->last, node);
|
||||
list->op_count += 1;
|
||||
list->encoded_size += 1;
|
||||
}
|
||||
|
||||
internal void
|
||||
e_oplist_push_string_literal(Arena *arena, E_OpList *list, String8 string)
|
||||
{
|
||||
@@ -602,14 +592,6 @@ e_irtree_set_space(Arena *arena, E_Space space, E_IRNode *c)
|
||||
return root;
|
||||
}
|
||||
|
||||
internal E_IRNode *
|
||||
e_irtree_deref_space_ptr(Arena *arena, E_IRNode *c)
|
||||
{
|
||||
E_IRNode *root = e_push_irnode(arena, E_IRExtKind_DerefSpacePtr);
|
||||
e_irnode_push_child(root, c);
|
||||
return root;
|
||||
}
|
||||
|
||||
internal E_IRNode *
|
||||
e_irtree_mem_read_type(Arena *arena, E_IRNode *c, E_TypeKey type_key)
|
||||
{
|
||||
@@ -1484,14 +1466,6 @@ e_irtree_and_type_from_expr__space(Arena *arena, E_Space *current_space, E_Expr
|
||||
}break;
|
||||
}
|
||||
|
||||
//- rjf: evaluating a space pointer -> generate a dynamic set-space & resolve to the offset
|
||||
if(e_type_kind_from_key(result.type_key) == E_TypeKind_SpacePtr)
|
||||
{
|
||||
result.root = e_irtree_deref_space_ptr(arena, result.root);
|
||||
result.type_key = e_type_direct_from_key(result.type_key);
|
||||
result.mode = E_Mode_Offset;
|
||||
}
|
||||
|
||||
//- rjf: if the expression's space does not match the current, then push a set-space node
|
||||
// before returning
|
||||
E_Space zero_space = zero_struct;
|
||||
@@ -1545,17 +1519,6 @@ e_append_oplist_from_irtree(Arena *arena, E_IRNode *root, E_OpList *out)
|
||||
}
|
||||
}break;
|
||||
|
||||
case E_IRExtKind_DerefSpacePtr:
|
||||
{
|
||||
for(E_IRNode *child = root->first;
|
||||
child != &e_irnode_nil;
|
||||
child = child->next)
|
||||
{
|
||||
e_append_oplist_from_irtree(arena, child, out);
|
||||
}
|
||||
e_oplist_push_deref_space_ptr(arena, out);
|
||||
}break;
|
||||
|
||||
case RDI_EvalOp_Cond:
|
||||
{
|
||||
// rjf: generate oplists for each child
|
||||
@@ -1697,12 +1660,6 @@ e_bytecode_from_oplist(Arena *arena, E_OpList *oplist)
|
||||
// rjf: advance
|
||||
ptr = next_ptr;
|
||||
}break;
|
||||
|
||||
case E_IRExtKind_DerefSpacePtr:
|
||||
{
|
||||
ptr[0] = opcode;
|
||||
ptr += 1;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ enum
|
||||
{
|
||||
E_IRExtKind_Bytecode = RDI_EvalOp_COUNT,
|
||||
E_IRExtKind_SetSpace,
|
||||
E_IRExtKind_DerefSpacePtr,
|
||||
E_IRExtKind_COUNT
|
||||
};
|
||||
|
||||
@@ -169,7 +168,6 @@ internal void e_oplist_push_uconst(Arena *arena, E_OpList *list, U64 x);
|
||||
internal void e_oplist_push_sconst(Arena *arena, E_OpList *list, S64 x);
|
||||
internal void e_oplist_push_bytecode(Arena *arena, E_OpList *list, String8 bytecode);
|
||||
internal void e_oplist_push_set_space(Arena *arena, E_OpList *list, E_Space space);
|
||||
internal void e_oplist_push_deref_space_ptr(Arena *arena, E_OpList *list);
|
||||
internal void e_oplist_push_string_literal(Arena *arena, E_OpList *list, String8 string);
|
||||
internal void e_oplist_concat_in_place(E_OpList *dst, E_OpList *to_push);
|
||||
|
||||
@@ -186,7 +184,6 @@ internal E_IRNode *e_irtree_conditional(Arena *arena, E_IRNode *c, E_IRNode *l,
|
||||
internal E_IRNode *e_irtree_bytecode_no_copy(Arena *arena, String8 bytecode);
|
||||
internal E_IRNode *e_irtree_string_literal(Arena *arena, String8 string);
|
||||
internal E_IRNode *e_irtree_set_space(Arena *arena, E_Space space, E_IRNode *c);
|
||||
internal E_IRNode *e_irtree_deref_space_ptr(Arena *arena, E_IRNode *c);
|
||||
internal E_IRNode *e_irtree_mem_read_type(Arena *arena, E_IRNode *c, E_TypeKey type_key);
|
||||
internal E_IRNode *e_irtree_convert_lo(Arena *arena, E_IRNode *c, RDI_EvalTypeGroup out, RDI_EvalTypeGroup in);
|
||||
internal E_IRNode *e_irtree_trunc(Arena *arena, E_IRNode *c, E_TypeKey type_key);
|
||||
|
||||
Reference in New Issue
Block a user