resolve register-space evaluations to primary-module space evaluations in the visualizers

This commit is contained in:
Ryan Fleury committed 2025-10-07 17:20:44 -07:00
1 parent 7ff5764696
commit fb825247ed
2 files changed
+33 -12

No files matched your search

+31 -11
View File
@@ -2361,6 +2361,16 @@ RD_VIEW_UI_FUNCTION_DEF(disasm)
Temp scratch = scratch_begin(0, 0);
Access *access = access_open();
//////////////////////////////
//- rjf: if disassembly views are parameterized by a register-space evaluation,
// we will interpret it as an address in the primary module.
//
if(e_space_match(eval.space, e_base_ctx->thread_reg_space))
{
eval = e_value_eval_from_eval(eval);
eval.space = e_base_ctx->primary_module->space;
}
//////////////////////////////
//- rjf: if disassembly views are not parameterized by anything, they
// automatically snap to the selected thread's RIP, OR the "temp look
@@ -2596,6 +2606,27 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
Temp scratch = scratch_begin(0, 0);
RD_MemoryViewState *mv = rd_view_state(RD_MemoryViewState);
//////////////////////////////
//- rjf: if memory views are parameterized by a register-space evaluation,
// we will interpret it as an address in the primary module.
//
if(e_space_match(eval.space, e_base_ctx->thread_reg_space))
{
eval = e_value_eval_from_eval(eval);
eval.space = e_base_ctx->primary_module->space;
}
//////////////////////////////
//- rjf: if memory views are parameterized by nothing, we will
// default to showing the entire memory space of the primary module.
//
Rng1U64 view_range = rd_space_range_from_eval(eval);
if(eval.space.kind == 0)
{
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
view_range = rd_whole_range_from_eval_space(eval.space);
}
//////////////////////////////
//- rjf: unpack parameterization info
//
@@ -2604,17 +2635,6 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
Vec4F32 main_tx_color_rgba = ui_color_from_name(str8_lit("text"));
Vec4F32 main_tx_color_hsva = hsva_from_rgba(main_tx_color_rgba);
F32 main_font_size = ui_bottom_font_size();
if(e_space_match(eval.space, e_base_ctx->thread_reg_space))
{
eval = e_value_eval_from_eval(eval);
eval.space = e_base_ctx->primary_module->space;
}
Rng1U64 view_range = rd_space_range_from_eval(eval);
if(eval.space.kind == 0)
{
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
view_range = rd_whole_range_from_eval_space(eval.space);
}
U64 cursor_base_vaddr = rd_view_setting_u64_from_name(str8_lit("cursor"));
U64 mark_base_vaddr = rd_view_setting_u64_from_name(str8_lit("mark"));
U64 cursor_size = rd_view_setting_u64_from_name(str8_lit("cursor_size"));