diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index d85a5eb8..b2750792 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -5648,10 +5648,14 @@ ctrl_mem_stream_thread__entry_point(void *p) //- rjf: read successful -> submit to hash store U128 hash = {0}; - if(got_task && range_base != 0) + if(got_task && range_base != 0 && pre_read_mem_gen == post_read_mem_gen) { hash = hs_submit_data(key, &range_arena, str8((U8*)range_base, zero_terminated_size)); } + else if(range_arena != 0) + { + arena_release(range_arena); + } //- rjf: commit hash to cache if(got_task) OS_MutexScopeW(process_stripe->rw_mutex) diff --git a/src/ctrl/ctrl_core.h b/src/ctrl/ctrl_core.h index 4a291870..a9eb385e 100644 --- a/src/ctrl/ctrl_core.h +++ b/src/ctrl/ctrl_core.h @@ -15,7 +15,8 @@ typedef U64 CTRL_MachineID; //////////////////////////////// //~ rjf: Meta Evaluation Types -//- rjf: meta evaluation callstack +//- rjf: meta evaluation callstack types + typedef struct CTRL_MetaEvalFrame CTRL_MetaEvalFrame; struct CTRL_MetaEvalFrame { @@ -43,7 +44,8 @@ struct_members(CTRL_MetaEvalFrameArray) }; struct_type(CTRL_MetaEvalFrameArray); -//- rjf: meta evaluation instance +//- rjf: meta evaluation instance types + typedef struct CTRL_MetaEval CTRL_MetaEval; struct CTRL_MetaEval { @@ -80,6 +82,7 @@ struct_members(CTRL_MetaEval) struct_type(CTRL_MetaEval); //- rjf: meta evaluation array + typedef struct CTRL_MetaEvalArray CTRL_MetaEvalArray; struct CTRL_MetaEvalArray { diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index dca48081..cd68e2d1 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -7943,13 +7943,13 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(targets) { return rd_ev_vie EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(targets) { return rd_ev_view_rule_expr_id_from_num__meta_entities(num, user_data, RD_EntityKind_Target, 1); } EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(targets) { return rd_ev_view_rule_expr_num_from_id__meta_entities(id, user_data, RD_EntityKind_Target, 1); } EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(breakpoints) { return rd_ev_view_rule_expr_expand_info__meta_entities(arena, view, filter, expr, params, RD_EntityKind_Breakpoint); } -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(breakpoints) { return rd_ev_view_rule_expr_expand_range_info__meta_entities(arena, view, filter, expr, params, idx_range, user_data, RD_EntityKind_Breakpoint, 1); } -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(breakpoints){ return rd_ev_view_rule_expr_id_from_num__meta_entities(num, user_data, RD_EntityKind_Breakpoint, 1); } -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(breakpoints){ return rd_ev_view_rule_expr_num_from_id__meta_entities(id, user_data, RD_EntityKind_Breakpoint, 1); } +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(breakpoints) { return rd_ev_view_rule_expr_expand_range_info__meta_entities(arena, view, filter, expr, params, idx_range, user_data, RD_EntityKind_Breakpoint, 0); } +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(breakpoints){ return rd_ev_view_rule_expr_id_from_num__meta_entities(num, user_data, RD_EntityKind_Breakpoint, 0); } +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(breakpoints){ return rd_ev_view_rule_expr_num_from_id__meta_entities(id, user_data, RD_EntityKind_Breakpoint, 0); } EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_DEF(watch_pins) { return rd_ev_view_rule_expr_expand_info__meta_entities(arena, view, filter, expr, params, RD_EntityKind_WatchPin); } -EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(watch_pins) { return rd_ev_view_rule_expr_expand_range_info__meta_entities(arena, view, filter, expr, params, idx_range, user_data, RD_EntityKind_WatchPin, 1); } -EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(watch_pins) { return rd_ev_view_rule_expr_id_from_num__meta_entities(num, user_data, RD_EntityKind_WatchPin, 1); } -EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(watch_pins) { return rd_ev_view_rule_expr_num_from_id__meta_entities(id, user_data, RD_EntityKind_WatchPin, 1); } +EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(watch_pins) { return rd_ev_view_rule_expr_expand_range_info__meta_entities(arena, view, filter, expr, params, idx_range, user_data, RD_EntityKind_WatchPin, 0); } +EV_VIEW_RULE_EXPR_EXPAND_ID_FROM_NUM_FUNCTION_DEF(watch_pins) { return rd_ev_view_rule_expr_id_from_num__meta_entities(num, user_data, RD_EntityKind_WatchPin, 0); } +EV_VIEW_RULE_EXPR_EXPAND_NUM_FROM_ID_FUNCTION_DEF(watch_pins) { return rd_ev_view_rule_expr_num_from_id__meta_entities(id, user_data, RD_EntityKind_WatchPin, 0); } //- rjf: meta ctrl entities @@ -8221,6 +8221,18 @@ rd_ev_view_rule_expr_expand_range_info__meta_ctrl_entities(Arena *arena, EV_View return result; } +internal U64 +rd_ev_view_rule_expr_id_from_num__meta_ctrl_entities(U64 num, void *user_data, CTRL_EntityKind kind) +{ + +} + +internal U64 +rd_ev_view_rule_expr_num_from_id__meta_ctrl_entities(U64 id, void *user_data, CTRL_EntityKind kind) +{ + +} + typedef struct RD_DebugInfoTableExpandAccel RD_DebugInfoTableExpandAccel; struct RD_DebugInfoTableExpandAccel { @@ -10929,6 +10941,14 @@ rd_frame(void) { e_string2expr_map_insert(scratch.arena, ctx->macro_map, str8_lit("current_thread"), expr); } + if(kind == CTRL_EntityKind_Process && ctrl_handle_match(rd_base_regs()->process, entity->handle)) + { + e_string2expr_map_insert(scratch.arena, ctx->macro_map, str8_lit("current_process"), expr); + } + if(kind == CTRL_EntityKind_Module && ctrl_handle_match(rd_base_regs()->module, entity->handle)) + { + e_string2expr_map_insert(scratch.arena, ctx->macro_map, str8_lit("current_module"), expr); + } } } } diff --git a/src/raddbg/raddbg_core.h b/src/raddbg/raddbg_core.h index b33ba885..bd0253ca 100644 --- a/src/raddbg/raddbg_core.h +++ b/src/raddbg/raddbg_core.h @@ -1294,10 +1294,12 @@ internal void rd_window_frame(RD_Window *ws); internal EV_ExpandInfo rd_ev_view_rule_expr_expand_info__meta_entities(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, RD_EntityKind kind); internal EV_ExpandRangeInfo rd_ev_view_rule_expr_expand_range_info__meta_entities(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, Rng1U64 idx_range, void *user_data, RD_EntityKind kind, B32 add_new_at_top); internal U64 rd_ev_view_rule_expr_id_from_num__meta_entities(U64 num, void *user_data, RD_EntityKind kind, B32 add_new_at_top); -internal U64 rd_ev_view_rule_expr_num_from_id__meta_entities(U64 num, void *user_data, RD_EntityKind kind, B32 add_new_at_top); +internal U64 rd_ev_view_rule_expr_num_from_id__meta_entities(U64 id, void *user_data, RD_EntityKind kind, B32 add_new_at_top); internal EV_ExpandInfo rd_ev_view_rule_expr_expand_info__meta_ctrl_entities(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, CTRL_EntityKind kind); internal EV_ExpandRangeInfo rd_ev_view_rule_expr_expand_range_info__meta_ctrl_entities(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, Rng1U64 idx_range, void *user_data, CTRL_EntityKind kind); +internal U64 rd_ev_view_rule_expr_id_from_num__meta_ctrl_entities(U64 num, void *user_data, CTRL_EntityKind kind); +internal U64 rd_ev_view_rule_expr_num_from_id__meta_ctrl_entities(U64 id, void *user_data, CTRL_EntityKind kind); internal EV_ExpandInfo rd_ev_view_rule_expr_expand_info__debug_info_tables(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, RDI_SectionKind section); internal EV_ExpandRangeInfo rd_ev_view_rule_expr_expand_range_info__debug_info_tables(Arena *arena, EV_View *view, String8 filter, E_Expr *expr, MD_Node *params, Rng1U64 idx_range, void *user_data, RDI_SectionKind section); diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 0d89c19f..9480e170 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -840,8 +840,9 @@ rd_watch_view_row_info_from_row(EV_Row *row) } } - // rjf: extract collection entity,if any + // rjf: extract collection entities, if any RD_Entity *entity = rd_entity_from_id(key.child_id); + CTRL_Entity *ctrl_entity = &ctrl_entity_nil; // rjf: extract callstack thread, if any CTRL_Entity *thread = &ctrl_entity_nil; @@ -893,6 +894,7 @@ rd_watch_view_row_info_from_row(EV_Row *row) // rjf: fill info.collection_entity_kind = collection_entity_kind; info.collection_entity = entity; + info.collection_ctrl_entity = ctrl_entity; info.callstack_thread = thread; info.callstack_unwind_index = unwind_count; info.callstack_inline_depth = inline_depth; @@ -2413,7 +2415,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo if(rd_entity_is_nil(entity) && collection_entity_kind == RD_EntityKind_Target) UI_Palette(palette) { - ui_set_next_focus_hot(entity_box_selected ? UI_FocusKind_On : UI_FocusKind_Off); + ui_set_next_focus_hot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off); if(ui_clicked(rd_cmd_spec_button(rd_cmd_kind_info_table[RD_CmdKind_AddTarget].string))) { rd_cmd(RD_CmdKind_RunCommand, .string = rd_cmd_kind_info_table[RD_CmdKind_AddTarget].string); @@ -5224,10 +5226,11 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(scheduler) if(!wv->initialized) { rd_watch_view_init(wv); - rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.25f, .string = str8_lit("label.str"), .display_string = str8_lit("Label"), .dequote_string = 1); - rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.70f, .string = str8_lit("callstack.v"), .display_string = str8_lit("Call Stack")); + rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Expr, 0.25f); + rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.75f); } - rd_watch_view_build(wv, 0, str8_lit("threads"), str8_lit(""), 0, 10, rect); + rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader|RD_WatchViewFlag_PrettyNameMembers|RD_WatchViewFlag_PrettyEntityRows|RD_WatchViewFlag_DisableCacheLines, + str8_lit("threads"), str8_lit("only: label str id callstack v count vaddr inline_depth"), 0, 10, rect); ProfEnd(); } diff --git a/src/raddbg/raddbg_views.h b/src/raddbg/raddbg_views.h index bc431a07..1216e99a 100644 --- a/src/raddbg/raddbg_views.h +++ b/src/raddbg/raddbg_views.h @@ -122,6 +122,7 @@ struct RD_WatchViewRowInfo { RD_EntityKind collection_entity_kind; RD_Entity *collection_entity; + CTRL_Entity *collection_ctrl_entity; CTRL_Entity *callstack_thread; U64 callstack_unwind_index; U64 callstack_inline_depth;