diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index 006256c8..b667e641 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -1977,78 +1977,6 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) //////////////////////////////// //~ rjf: Modules & Debug Info Mappings -//- rjf: module <=> debug info keys - -internal DI_Key -d_dbgi_key_from_module(D_Entity *module) -{ - D_Entity *debug_info_path = d_entity_child_from_kind(module, D_EntityKind_DebugInfoPath); - DI_Key key = {debug_info_path->string, debug_info_path->timestamp}; - return key; -} - -internal D_EntityList -d_modules_from_dbgi_key(Arena *arena, DI_Key *dbgi_key) -{ - D_EntityList list = {0}; - D_EntityList all_modules = d_query_cached_entity_list_with_kind(D_EntityKind_Module); - for(D_EntityNode *n = all_modules.first; n != 0; n = n->next) - { - D_Entity *module = n->entity; - DI_Key module_dbgi_key = d_dbgi_key_from_module(module); - if(di_key_match(&module_dbgi_key, dbgi_key)) - { - d_entity_list_push(arena, &list, module); - } - } - return list; -} - -//- rjf: voff <=> vaddr - -internal U64 -d_base_vaddr_from_module(D_Entity *module) -{ - U64 module_base_vaddr = module->vaddr; - return module_base_vaddr; -} - -internal U64 -d_voff_from_vaddr(D_Entity *module, U64 vaddr) -{ - U64 module_base_vaddr = d_base_vaddr_from_module(module); - U64 voff = vaddr - module_base_vaddr; - return voff; -} - -internal U64 -d_vaddr_from_voff(D_Entity *module, U64 voff) -{ - U64 module_base_vaddr = d_base_vaddr_from_module(module); - U64 vaddr = voff + module_base_vaddr; - return vaddr; -} - -internal Rng1U64 -d_voff_range_from_vaddr_range(D_Entity *module, Rng1U64 vaddr_rng) -{ - U64 rng_size = dim_1u64(vaddr_rng); - Rng1U64 voff_rng = {0}; - voff_rng.min = d_voff_from_vaddr(module, vaddr_rng.min); - voff_rng.max = voff_rng.min + rng_size; - return voff_rng; -} - -internal Rng1U64 -d_vaddr_range_from_voff_range(D_Entity *module, Rng1U64 voff_rng) -{ - U64 rng_size = dim_1u64(voff_rng); - Rng1U64 vaddr_rng = {0}; - vaddr_rng.min = d_vaddr_from_voff(module, voff_rng.min); - vaddr_rng.max = vaddr_rng.min + rng_size; - return vaddr_rng; -} - //////////////////////////////// //~ rjf: Debug Info Lookups @@ -3478,11 +3406,11 @@ internal DI_KeyList d_push_active_dbgi_key_list(Arena *arena) { DI_KeyList dbgis = {0}; - D_EntityList modules = d_query_cached_entity_list_with_kind(D_EntityKind_Module); - for(D_EntityNode *n = modules.first; n != 0; n = n->next) + CTRL_EntityList modules = ctrl_entity_list_from_kind(d_state->ctrl_entity_store, CTRL_EntityKind_Module); + for(CTRL_EntityNode *n = modules.first; n != 0; n = n->next) { - D_Entity *module = n->entity; - DI_Key key = d_dbgi_key_from_module(module); + CTRL_Entity *module = n->v; + DI_Key key = ctrl_dbgi_key_from_module(module); di_key_list_push(arena, &dbgis, &key); } return dbgis; diff --git a/src/dbg_engine/dbg_engine_core.h b/src/dbg_engine/dbg_engine_core.h index 9de0d9fb..886eddf5 100644 --- a/src/dbg_engine/dbg_engine_core.h +++ b/src/dbg_engine/dbg_engine_core.h @@ -949,20 +949,6 @@ internal CTRL_TrapList d_trap_net_from_thread__step_over_inst(Arena *arena, CTRL internal CTRL_TrapList d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread); internal CTRL_TrapList d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread); -//////////////////////////////// -//~ rjf: Modules & Debug Info Mappings - -//- rjf: module <=> debug info keys -internal DI_Key d_dbgi_key_from_module(D_Entity *module); -internal D_EntityList d_modules_from_dbgi_key(Arena *arena, DI_Key *dbgi_key); - -//- rjf: voff <=> vaddr -internal U64 d_base_vaddr_from_module(D_Entity *module); -internal U64 d_voff_from_vaddr(D_Entity *module, U64 vaddr); -internal U64 d_vaddr_from_voff(D_Entity *module, U64 voff); -internal Rng1U64 d_voff_range_from_vaddr_range(D_Entity *module, Rng1U64 vaddr_rng); -internal Rng1U64 d_vaddr_range_from_voff_range(D_Entity *module, Rng1U64 voff_rng); - //////////////////////////////// //~ rjf: Debug Info Lookups diff --git a/src/dbg_frontend/dbg_frontend_core.c b/src/dbg_frontend/dbg_frontend_core.c index 0e313ee8..f0961193 100644 --- a/src/dbg_frontend/dbg_frontend_core.c +++ b/src/dbg_frontend/dbg_frontend_core.c @@ -553,18 +553,15 @@ df_queue_drag_drop(void) } internal void -df_set_rich_hover_info(DF_RichHoverInfo *info) +df_set_hover_regs(void) { - arena_clear(df_state->rich_hover_info_next_arena); - MemoryCopyStruct(&df_state->rich_hover_info_next, info); - df_state->rich_hover_info_next.dbgi_key = di_key_copy(df_state->rich_hover_info_next_arena, &info->dbgi_key); + df_state->next_hover_regs = df_regs_copy(df_frame_arena(), df_regs()); } -internal DF_RichHoverInfo -df_get_rich_hover_info(void) +internal DF_Regs * +df_get_hover_regs(void) { - DF_RichHoverInfo info = df_state->rich_hover_info_current; - return info; + return df_state->hover_regs; } //////////////////////////////// @@ -7636,8 +7633,6 @@ df_init(CmdLine *cmdln) df_state->eval_viz_view_cache_slots = push_array(arena, DF_EvalVizViewCacheSlot, df_state->eval_viz_view_cache_slots_count); df_state->cfg_main_font_path_arena = arena_alloc(); df_state->cfg_code_font_path_arena = arena_alloc(); - df_state->rich_hover_info_next_arena = arena_alloc(); - df_state->rich_hover_info_current_arena = arena_alloc(); df_state->bind_change_arena = arena_alloc(); df_state->top_regs = &df_state->base_regs; df_clear_bindings(); @@ -7785,6 +7780,15 @@ df_frame(void) arena_clear(df_frame_arena()); df_state->top_regs = &df_state->base_regs; df_regs_copy_contents(df_frame_arena(), &df_state->top_regs->v, &df_state->top_regs->v); + if(df_state->next_hover_regs != 0) + { + df_state->hover_regs = df_regs_copy(df_frame_arena(), df_state->next_hover_regs); + df_state->next_hover_regs = 0; + } + else + { + df_state->hover_regs = push_array(df_frame_arena(), DF_Regs, 1); + } ////////////////////////////// //- rjf: get events from the OS @@ -12272,15 +12276,6 @@ df_frame(void) } } - ////////////////////////////// - //- rjf: apply new rich hover info - // - arena_clear(df_state->rich_hover_info_current_arena); - MemoryCopyStruct(&df_state->rich_hover_info_current, &df_state->rich_hover_info_next); - df_state->rich_hover_info_current.dbgi_key = di_key_copy(df_state->rich_hover_info_current_arena, &df_state->rich_hover_info_current.dbgi_key); - arena_clear(df_state->rich_hover_info_next_arena); - MemoryZeroStruct(&df_state->rich_hover_info_next); - ////////////////////////////// //- rjf: animate confirmation // diff --git a/src/dbg_frontend/dbg_frontend_core.h b/src/dbg_frontend/dbg_frontend_core.h index ee876654..405254d8 100644 --- a/src/dbg_frontend/dbg_frontend_core.h +++ b/src/dbg_frontend/dbg_frontend_core.h @@ -308,6 +308,7 @@ struct DF_DragDropPayload //////////////////////////////// //~ rjf: Rich Hover Types +#if 0 // TODO(rjf): @msgs typedef struct DF_RichHoverInfo DF_RichHoverInfo; struct DF_RichHoverInfo { @@ -317,6 +318,7 @@ struct DF_RichHoverInfo Rng1U64 voff_range; DI_Key dbgi_key; }; +#endif //////////////////////////////// //~ rjf: View Rule Spec Types @@ -761,10 +763,8 @@ struct DF_State DF_DragDropState drag_drop_state; // rjf: rich hover info - Arena *rich_hover_info_next_arena; - Arena *rich_hover_info_current_arena; - DF_RichHoverInfo rich_hover_info_next; - DF_RichHoverInfo rich_hover_info_current; + DF_Regs *hover_regs; + DF_Regs *next_hover_regs; // rjf: config reading state Arena *cfg_path_arenas[D_CfgSrc_COUNT]; @@ -922,8 +922,8 @@ internal B32 df_drag_drop(DF_DragDropPayload *out_payload); internal void df_drag_kill(void); internal void df_queue_drag_drop(void); -internal void df_set_rich_hover_info(DF_RichHoverInfo *info); -internal DF_RichHoverInfo df_get_rich_hover_info(void); +internal void df_set_hover_regs(void); +internal DF_Regs *df_get_hover_regs(void); //////////////////////////////// //~ rjf: View Spec State Functions diff --git a/src/dbg_frontend/dbg_frontend_views.c b/src/dbg_frontend/dbg_frontend_views.c index 428ef3ff..f44f566b 100644 --- a/src/dbg_frontend/dbg_frontend_views.c +++ b/src/dbg_frontend/dbg_frontend_views.c @@ -5759,6 +5759,7 @@ DF_VIEW_UI_FUNCTION_DEF(call_stack) //////////////////////////////// //~ rjf: modules @view_hook_impl +#if 0 // TODO(rjf): @msgs typedef struct DF_ModulesViewState DF_ModulesViewState; struct DF_ModulesViewState { @@ -5776,9 +5777,11 @@ struct DF_ModulesViewState F32 range_col_pct; F32 dbg_col_pct; }; +#endif DF_VIEW_SETUP_FUNCTION_DEF(modules) { +#if 0 // TODO(rjf): @msgs DF_ModulesViewState *mv = df_view_user_state(view, DF_ModulesViewState); if(mv->initialized == 0) { @@ -5788,10 +5791,12 @@ DF_VIEW_SETUP_FUNCTION_DEF(modules) mv->range_col_pct = 0.30f; mv->dbg_col_pct = 0.50f; } +#endif } DF_VIEW_CMD_FUNCTION_DEF(modules) { +#if 0 // TODO(rjf): @msgs DF_ModulesViewState *mv = df_view_user_state(view, DF_ModulesViewState); for(DF_Cmd *cmd = 0; df_next_cmd(&cmd);) { @@ -5822,10 +5827,12 @@ DF_VIEW_CMD_FUNCTION_DEF(modules) }break; } } +#endif } DF_VIEW_UI_FUNCTION_DEF(modules) { +#if 0 // TODO(rjf): @msgs ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); DI_Scope *scope = di_scope_open(); @@ -6090,6 +6097,7 @@ DF_VIEW_UI_FUNCTION_DEF(modules) di_scope_close(scope); scratch_end(scratch); ProfEnd(); +#endif } //////////////////////////////// diff --git a/src/dbg_frontend/dbg_frontend_widgets.c b/src/dbg_frontend/dbg_frontend_widgets.c index 12b7eb5c..f5697144 100644 --- a/src/dbg_frontend/dbg_frontend_widgets.c +++ b/src/dbg_frontend/dbg_frontend_widgets.c @@ -1963,23 +1963,22 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe ////////////////////////////// //- rjf: mouse -> set global frontend hovered line info // -#if 0 // TODO(rjf): @msgs if(ui_hovering(text_container_sig) && contains_1s64(params->line_num_range, mouse_pt.line) && (ui_mouse().x - text_container_box->rect.x0 < params->line_num_width_px + line_num_padding_px)) { U64 line_slice_idx = mouse_pt.line-params->line_num_range.min; D_LineList *lines = ¶ms->line_infos[line_slice_idx]; if(lines->first != 0 && (df_regs()->file_path.size == 0 || lines->first->v.pt.line == mouse_pt.line)) { - DF_RichHoverInfo info = {0}; - info.process = d_handle_from_entity(selected_thread_process); - info.vaddr_range = d_vaddr_range_from_voff_range(selected_thread_module, lines->first->v.voff_range); - info.module = d_handle_from_entity(selected_thread_module); - info.dbgi_key = lines->first->v.dbgi_key; - info.voff_range = lines->first->v.voff_range; - df_set_rich_hover_info(&info); + DF_RegsScope(.process = selected_thread_process->handle, + .vaddr_range = ctrl_vaddr_range_from_voff_range(selected_thread_module, lines->first->v.voff_range), + .module = selected_thread_module->handle, + .dbgi_key = lines->first->v.dbgi_key, + .voff_range = lines->first->v.voff_range) + { + df_set_hover_regs(); + } } } -#endif ////////////////////////////// //- rjf: hover eval @@ -2069,12 +2068,12 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe // UI_Parent(text_container_box) ProfScope("build line text") UI_Focus(UI_FocusKind_Off) { - DF_RichHoverInfo rich_hover = df_get_rich_hover_info(); - Rng1U64 rich_hover_voff_range = rich_hover.voff_range; - if(rich_hover_voff_range.min == 0 && rich_hover_voff_range.max == 0) + DF_Regs *hover_regs = df_get_hover_regs(); + Rng1U64 hover_voff_range = hover_regs->voff_range; + if(hover_voff_range.min == 0 && hover_voff_range.max == 0) { - D_Entity *module = d_entity_from_handle(rich_hover.module); - rich_hover_voff_range = d_voff_range_from_vaddr_range(module, rich_hover.vaddr_range); + CTRL_Entity *module = ctrl_entity_from_handle(d_state->ctrl_entity_store, hover_regs->module); + hover_voff_range = ctrl_voff_range_from_vaddr_range(module, hover_regs->vaddr_range); } ui_set_next_pref_height(ui_px(params->line_height_px*(dim_1s64(params->line_num_range)+1), 1.f)); UI_WidthFill @@ -2359,9 +2358,9 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe for(D_LineNode *n = lines->first; n != 0; n = n->next) { if((n->v.pt.line == line_num || df_regs()->file_path.size == 0) && - ((di_key_match(&n->v.dbgi_key, &rich_hover.dbgi_key) && - n->v.voff_range.min <= rich_hover_voff_range.min && rich_hover_voff_range.min < n->v.voff_range.max) || - (params->line_vaddrs[line_idx] == rich_hover.vaddr_range.min && rich_hover.vaddr_range.min != 0))) + ((di_key_match(&n->v.dbgi_key, &hover_regs->dbgi_key) && + n->v.voff_range.min <= hover_voff_range.min && hover_voff_range.min < n->v.voff_range.max) || + (params->line_vaddrs[line_idx] == hover_regs->vaddr_range.min && hover_regs->vaddr_range.min != 0))) { matches = 1; line_info_line_num = n->v.pt.line;