switch eval memory reads -> more generalized space reads; apply to register reads as well

This commit is contained in:
Ryan Fleury
2024-08-15 11:55:22 -07:00
parent 59c01a73af
commit b98a75e056
10 changed files with 80 additions and 37 deletions
+17 -14
View File
@@ -3689,22 +3689,25 @@ df_ctrl_last_stop_event(void)
//~ rjf: Evaluation Context
internal B32
df_eval_memory_read(void *u, E_Space space, void *out, Rng1U64 vaddr_range)
df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
{
// TODO(rjf): @spaces pick the correct process from space
B32 result = 0;
DF_Entity *process = (DF_Entity *)u;
if(process->kind == DF_EntityKind_Process)
DF_Entity *entity = (DF_Entity *)space;
switch(entity->kind)
{
Temp scratch = scratch_begin(0, 0);
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_range, df_state->frame_eval_memread_endt_us);
String8 data = slice.data;
if(data.size == dim_1u64(vaddr_range))
default:{}break;
case DF_EntityKind_Process:
{
result = 1;
MemoryCopy(out, data.str, data.size);
}
scratch_end(scratch);
Temp scratch = scratch_begin(0, 0);
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, entity->ctrl_machine_id, entity->ctrl_handle, range, df_state->frame_eval_memread_endt_us);
String8 data = slice.data;
if(data.size == dim_1u64(range))
{
result = 1;
MemoryCopy(out, data.str, data.size);
}
scratch_end(scratch);
}break;
}
return result;
}
@@ -8330,8 +8333,8 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
{
E_InterpretCtx *ctx = interpret_ctx;
ctx->arch = arch;
ctx->memory_read_user_data = process;
ctx->memory_read = df_eval_memory_read;
ctx->space_read_user_data = process;
ctx->space_read = df_eval_space_read;
ctx->primary_space = eval_modules_primary->space;
ctx->reg_size = regs_block_size_from_architecture(ctx->arch);
ctx->reg_data = push_array(arena, U8, ctx->reg_size);
+1 -1
View File
@@ -1563,7 +1563,7 @@ internal CTRL_Event df_ctrl_last_stop_event(void);
////////////////////////////////
//~ rjf: Evaluation Context
internal B32 df_eval_memory_read(void *u, E_Space space, void *out, Rng1U64 vaddr_range);
internal B32 df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 vaddr_range);
internal E_Eval df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg);
////////////////////////////////
+1
View File
@@ -8421,6 +8421,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
direct_type_is_string &&
(flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules))
{
// TODO(rjf): @spaces pick correct space
U64 string_memory_addr = value_eval.value.u64;
U64 element_size = e_type_byte_size_from_key(direct_type_key);
CTRL_ProcessMemorySlice text_slice = ctrl_query_cached_zero_terminated_data_from_process_vaddr_limit(arena, process->ctrl_machine_id, process->ctrl_handle, string_memory_addr, 256, element_size, 0);