mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
eliminate d_entity-based module mapping code; all of this is done via ctrl systems now
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
//
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user