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

This commit is contained in:
Ryan Fleury
2025-10-07 17:20:44 -07:00
parent 7ff5764696
commit fb825247ed
2 changed files with 33 additions and 12 deletions
+2 -1
View File
@@ -10773,7 +10773,8 @@ rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 query_expr, String8 strin
E_TypeKind eval_type_kind = e_type_kind_from_key(e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative));
if(eval_type_kind == E_TypeKind_Ptr ||
eval_type_kind == E_TypeKind_LRef ||
eval_type_kind == E_TypeKind_RRef)
eval_type_kind == E_TypeKind_RRef ||
e_space_match(eval.space, e_base_ctx->thread_reg_space))
{
eval = e_value_eval_from_eval(eval);
}
+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"));