From b33a257bc49e528c1627eed41ab07c14ba417cc7 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 22 Oct 2025 16:59:24 -0700 Subject: [PATCH] switch eval viz stringification, and lister completions, over to working correctly with process-less (but not debug-info-less) evaluations --- src/eval/eval_core.c | 12 +++++++++++ src/eval/eval_core.h | 5 +++-- .../eval_visualization_core.c | 13 ++++++++++-- src/raddbg/raddbg_core.c | 21 ++++++++++++++----- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/eval/eval_core.c b/src/eval/eval_core.c index 1578d351..0adf8c3c 100644 --- a/src/eval/eval_core.c +++ b/src/eval/eval_core.c @@ -760,6 +760,18 @@ e_dbg_info_from_module(E_Module *module) return result; } +internal E_DbgInfo * +e_dbg_info_from_type_key(E_TypeKey type_key) +{ + E_DbgInfo *result = &e_dbg_info_nil; + if(type_key.kind == E_TypeKeyKind_Ext && + 0 < type_key.u32[2] && type_key.u32[2] <= e_base_ctx->dbg_infos_count) + { + result = &e_base_ctx->dbg_infos[type_key.u32[2]-1]; + } + return result; +} + //////////////////////////////// //~ rjf: Cache Accessing Functions diff --git a/src/eval/eval_core.h b/src/eval/eval_core.h index f56b9089..6b0a212c 100644 --- a/src/eval/eval_core.h +++ b/src/eval/eval_core.h @@ -174,8 +174,8 @@ struct E_TypeKey E_TypeKeyKind kind; U32 u32[3]; // [0] -> E_TypeKind (Basic, Cons, Ext); Arch (Reg, RegAlias) - // [1] -> Type Index In RDI (Ext); Code (Reg, RegAlias); Type Index In Constructed (Cons) - // [2] -> RDI Index (Ext) + // [1] -> Type Index In Debug Info (Ext); Code (Reg, RegAlias); Type Index In Constructed (Cons) + // [2] -> Debug Info Number (Ext) }; typedef struct E_TypeKeyNode E_TypeKeyNode; @@ -1222,6 +1222,7 @@ internal void e_select_ir_ctx(E_IRCtx *ctx); //~ rjf: Context Accessors internal E_DbgInfo *e_dbg_info_from_module(E_Module *module); +internal E_DbgInfo *e_dbg_info_from_type_key(E_TypeKey type_key); //////////////////////////////// //~ rjf: Base Cache Accessing Functions diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 01c73248..0ea44827 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -1915,6 +1915,15 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string) } } E_DbgInfo *dbg_info = e_dbg_info_from_module(module); + if(dbg_info == &e_dbg_info_nil) + { + dbg_info = e_dbg_info_from_type_key(type_key); + } + U32 dbg_info_num = 0; + if(dbg_info != &e_dbg_info_nil) + { + dbg_info_num = (U32)(dbg_info - e_base_ctx->dbg_infos) + 1; + } RDI_Parsed *rdi = dbg_info->rdi; U64 voff = vaddr - module->vaddr_range.min; B32 good_symbol_match = 0; @@ -1964,7 +1973,7 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string) if(inline_site != 0) { RDI_TypeNode *type_node = rdi_element_from_name_idx(rdi, TypeNodes, inline_site->type_idx); - E_TypeKey type = e_type_key_ext(e_type_kind_from_rdi(type_node->kind), inline_site->type_idx, module->dbg_info_num); + E_TypeKey type = e_type_key_ext(e_type_kind_from_rdi(type_node->kind), inline_site->type_idx, dbg_info_num); String8 name = {0}; name.str = rdi_string_from_idx(rdi, inline_site->name_string_idx, &name.size); if(inline_site->type_idx != 0) @@ -1994,7 +2003,7 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string) U64 proc_idx = scope->proc_idx; RDI_Procedure *procedure = rdi_element_from_name_idx(rdi, Procedures, proc_idx); RDI_TypeNode *type_node = rdi_element_from_name_idx(rdi, TypeNodes, procedure->type_idx); - E_TypeKey type = e_type_key_ext(e_type_kind_from_rdi(type_node->kind), procedure->type_idx, module->dbg_info_num); + E_TypeKey type = e_type_key_ext(e_type_kind_from_rdi(type_node->kind), procedure->type_idx, dbg_info_num); String8 name = {0}; name.str = rdi_string_from_idx(rdi, procedure->name_string_idx, &name.size); if(procedure->type_idx != 0) diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 368ba049..202557f9 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -2224,11 +2224,22 @@ rd_view_ui(Rng2F32 rect) { default: { - U64 vaddr = eval.value.u64; - CTRL_Entity *process = rd_ctrl_entity_from_eval_space(eval.space); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); - DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); - U64 voff = ctrl_voff_from_vaddr(module, vaddr); + U64 voff = 0; + DI_Key dbgi_key = {0}; + if(eval.space.kind == CTRL_EvalSpaceKind_Entity) + { + U64 vaddr = eval.value.u64; + CTRL_Entity *process = rd_ctrl_entity_from_eval_space(eval.space); + CTRL_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); + dbgi_key = ctrl_dbgi_key_from_module(module); + voff = ctrl_voff_from_vaddr(module, vaddr); + } + else + { + voff = eval.value.u64; + E_DbgInfo *dbg_info = e_dbg_info_from_type_key(eval.irtree.type_key); + dbgi_key = dbg_info->dbgi_key; + } { Access *access = access_open(); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0);