continue work on ctrl entity visualization in watch views & further progress on new scheduler

This commit is contained in:
Ryan Fleury
2024-10-01 09:36:29 -07:00
parent 152cc709ce
commit 04815b4265
5 changed files with 116 additions and 85 deletions
+2 -1
View File
@@ -143,7 +143,8 @@ struct_members(CTRL_ProcessMetaEval)
struct_members(CTRL_ModuleMetaEval) struct_members(CTRL_ModuleMetaEval)
{ {
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")), member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Executable")), member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Name")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),exe, .pretty_name = str8_lit_comp("Executable Path")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),dbg, .pretty_name = str8_lit_comp("Debug Info Path")), member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),dbg, .pretty_name = str8_lit_comp("Debug Info Path")),
member_lit_comp(CTRL_MetaEval, type(Rng1U64), vaddr_range, .pretty_name = str8_lit_comp("Address Range")), member_lit_comp(CTRL_MetaEval, type(Rng1U64), vaddr_range, .pretty_name = str8_lit_comp("Address Range")),
}; };
+23 -4
View File
@@ -1857,7 +1857,7 @@ rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity)
} }
internal DR_FancyStringList internal DR_FancyStringList
rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, Vec4F32 secondary_color, F32 size) rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, Vec4F32 secondary_color, F32 size, B32 include_extras)
{ {
DR_FancyStringList result = {0}; DR_FancyStringList result = {0};
RD_IconKind icon_kind = RD_IconKind_Null; RD_IconKind icon_kind = RD_IconKind_Null;
@@ -1874,9 +1874,24 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, Vec4F32 secon
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Icons), size, secondary_color, rd_icon_kind_text_table[icon_kind]); dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Icons), size, secondary_color, rd_icon_kind_text_table[icon_kind]);
} }
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, secondary_color, str8_lit(" ")); dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, secondary_color, str8_lit(" "));
if(entity->kind == CTRL_EntityKind_Thread)
{
CTRL_EntityList processes = ctrl_entity_list_from_kind(d_state->ctrl_entity_store, CTRL_EntityKind_Process);
if(processes.count > 1)
{
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(entity, CTRL_EntityKind_Process);
String8 process_name = rd_name_from_ctrl_entity(arena, process);
Vec4F32 process_color = rd_rgba_from_ctrl_entity(process);
if(process_name.size != 0)
{
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, process_color, process_name);
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, secondary_color, str8_lit(" / "));
}
}
}
String8 name = rd_name_from_ctrl_entity(arena, entity); String8 name = rd_name_from_ctrl_entity(arena, entity);
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, color, name); dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, color, name);
if(entity->kind == CTRL_EntityKind_Thread) if(entity->kind == CTRL_EntityKind_Thread && include_extras)
{ {
F32 ext_size = size*0.95f; F32 ext_size = size*0.95f;
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, secondary_color, str8_lit(" ")); dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, secondary_color, str8_lit(" "));
@@ -3274,7 +3289,7 @@ rd_window_frame(RD_Window *ws)
String8 arch_str = string_from_arch(arch); String8 arch_str = string_from_arch(arch);
DR_FancyStringList fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, thread, DR_FancyStringList fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, thread,
rd_rgba_from_theme_color(RD_ThemeColor_TextWeak), rd_rgba_from_theme_color(RD_ThemeColor_TextWeak),
ui_top_font_size()); ui_top_font_size(), 0);
// TODO(rjf): @msgs show stop info (just icon or shortened description) // TODO(rjf): @msgs show stop info (just icon or shortened description)
@@ -3826,7 +3841,7 @@ rd_window_frame(RD_Window *ws)
UI_TextAlignment(UI_TextAlign_Center) UI_TextAlignment(UI_TextAlign_Center)
UI_TextPadding(ui_top_font_size()*1.5f) UI_TextPadding(ui_top_font_size()*1.5f)
{ {
DR_FancyStringList fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, ctrl_entity, ui_top_palette()->text_weak, ui_top_font_size()); DR_FancyStringList fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, ctrl_entity, ui_top_palette()->text_weak, ui_top_font_size(), 0);
UI_Box *title_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero()); UI_Box *title_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero());
ui_box_equip_display_fancy_strings(title_box, &fstrs); ui_box_equip_display_fancy_strings(title_box, &fstrs);
if(ctrl_entity->kind == CTRL_EntityKind_Thread) if(ctrl_entity->kind == CTRL_EntityKind_Thread)
@@ -13493,6 +13508,7 @@ rd_frame(void)
} }
// rjf: retry on stopped, pending debug info // rjf: retry on stopped, pending debug info
// TODO(rjf): CANNOT RETRY IN THIS WAY, NEED TO DEFER TO NEXT FRAME
if(!d_ctrl_targets_running() && (dbgi_pending || missing_rip)) if(!d_ctrl_targets_running() && (dbgi_pending || missing_rip))
{ {
rd_cmd(RD_CmdKind_FindThread, .thread = thread->handle); rd_cmd(RD_CmdKind_FindThread, .thread = thread->handle);
@@ -14476,6 +14492,9 @@ rd_frame(void)
if(rd_regs()->unwind_count < rich_unwind.frames.concrete_frame_count) if(rd_regs()->unwind_count < rich_unwind.frames.concrete_frame_count)
{ {
D_UnwindFrame *frame = &rich_unwind.frames.v[rd_regs()->unwind_count]; D_UnwindFrame *frame = &rich_unwind.frames.v[rd_regs()->unwind_count];
U64 rip_vaddr = regs_rip_from_arch_block(thread->arch, frame->regs);
CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr);
rd_state->base_regs.v.module = module->handle;
rd_state->base_regs.v.unwind_count = rd_regs()->unwind_count; rd_state->base_regs.v.unwind_count = rd_regs()->unwind_count;
rd_state->base_regs.v.inline_depth = 0; rd_state->base_regs.v.inline_depth = 0;
if(rd_regs()->inline_depth <= frame->inline_frame_count) if(rd_regs()->inline_depth <= frame->inline_frame_count)
+1 -1
View File
@@ -1176,7 +1176,7 @@ internal DR_FancyStringList rd_title_fstrs_from_entity(Arena *arena, RD_Entity *
internal Vec4F32 rd_rgba_from_ctrl_entity(CTRL_Entity *entity); internal Vec4F32 rd_rgba_from_ctrl_entity(CTRL_Entity *entity);
internal String8 rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity); internal String8 rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity);
internal DR_FancyStringList rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, Vec4F32 secondary_color, F32 size); internal DR_FancyStringList rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, Vec4F32 secondary_color, F32 size, B32 include_extras);
//////////////////////////////// ////////////////////////////////
//~ rjf: Evaluation Spaces //~ rjf: Evaluation Spaces
+89 -79
View File
@@ -1089,6 +1089,10 @@ rd_string_from_eval_viz_row_column(Arena *arena, EV_View *ev, EV_Row *row, RD_Wa
result = str8_lit("???"); result = str8_lit("???");
} }
} }
else
{
result = str8_lit("???");
}
di_scope_close(di_scope); di_scope_close(di_scope);
scratch_end(scratch); scratch_end(scratch);
}break; }break;
@@ -1209,9 +1213,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
} }
RD_WatchViewRowCtrl row_ctrls_[] = RD_WatchViewRowCtrl row_ctrls_[] =
{ {
{RD_EntityKind_Target, RD_CmdKind_LaunchAndRun }, {RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndRun },
{RD_EntityKind_Target, RD_CmdKind_LaunchAndInit }, {RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndInit },
{RD_EntityKind_Target, RD_CmdKind_SelectEntity }, {RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_SelectEntity },
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_FreezeThread },
}; };
RD_WatchViewRowCtrl *row_ctrls = row_ctrls_; RD_WatchViewRowCtrl *row_ctrls = row_ctrls_;
U64 row_ctrls_count = ArrayCount(row_ctrls_); U64 row_ctrls_count = ArrayCount(row_ctrls_);
@@ -1375,7 +1380,16 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
RD_WatchViewRowKind row_kind = rd_watch_view_row_kind_from_flags_row_info(flags, mark_rows.first, &row_info); RD_WatchViewRowKind row_kind = rd_watch_view_row_kind_from_flags_row_info(flags, mark_rows.first, &row_info);
if(row_kind == RD_WatchViewRowKind_PrettyEntityControls) if(row_kind == RD_WatchViewRowKind_PrettyEntityControls)
{ {
cursor_x_range = r1s64(1, 1+row_ctrls_count); U64 row_ctrl_count = 0;
for EachIndex(idx, row_ctrls_count)
{
if(row_ctrls[idx].entity_kind == row_info.collection_entity->kind &&
row_ctrls[idx].ctrl_entity_kind == row_info.collection_ctrl_entity->kind)
{
row_ctrl_count += 1;
}
}
cursor_x_range = r1s64(1, 1+row_ctrl_count);
} }
} }
cursor_tbl_range = r2s64(v2s64(cursor_x_range.min, 0), v2s64(cursor_x_range.max, block_tree.total_item_count-1)); cursor_tbl_range = r2s64(v2s64(cursor_x_range.min, 0), v2s64(cursor_x_range.max, block_tree.total_item_count-1));
@@ -1540,7 +1554,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
} }
}break; }break;
case RD_WatchViewRowKind_PrettyEntityControls: case RD_WatchViewRowKind_PrettyEntityControls:
if(!rd_entity_is_nil(row_info.collection_entity) && selection_tbl.min.x == 1 && selection_tbl.max.x == 1) if((!rd_entity_is_nil(row_info.collection_entity) || row_info.collection_ctrl_entity != &ctrl_entity_nil) && selection_tbl.min.x == 1 && selection_tbl.max.x == 1)
{ {
kind = OpKind_DoExpand; kind = OpKind_DoExpand;
}break; }break;
@@ -2157,6 +2171,23 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
B32 row_selected = (selection_tbl.min.y <= global_row_idx && global_row_idx <= selection_tbl.max.y); B32 row_selected = (selection_tbl.min.y <= global_row_idx && global_row_idx <= selection_tbl.max.y);
B32 row_expanded = ev_expansion_from_key(eval_view, row->key); B32 row_expanded = ev_expansion_from_key(eval_view, row->key);
E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr); E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr);
CTRL_Entity *row_ctrl_entity = rd_ctrl_entity_from_eval_space(row_eval.space);
CTRL_Entity *row_module = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->module);
switch(row_ctrl_entity->kind)
{
default:
case CTRL_EntityKind_Process:
if(row_eval.mode == E_Mode_Offset)
{
row_module = ctrl_module_from_process_vaddr(row_ctrl_entity, row_eval.value.u64);
}break;
case CTRL_EntityKind_Thread:
if(row_eval.mode == E_Mode_Value)
{
CTRL_Entity *process = ctrl_process_from_entity(row_ctrl_entity);
row_module = ctrl_module_from_process_vaddr(process, row_eval.value.u64);
}break;
}
E_Type *row_type = e_type_from_key(scratch.arena, row_eval.type_key); E_Type *row_type = e_type_from_key(scratch.arena, row_eval.type_key);
B32 row_is_expandable = ev_row_is_expandable(row); B32 row_is_expandable = ev_row_is_expandable(row);
B32 row_is_editable = ev_row_is_editable(row); B32 row_is_editable = ev_row_is_editable(row);
@@ -2243,7 +2274,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
////////////////////// //////////////////////
//- rjf: build row contents //- rjf: build row contents
// //
UI_Parent(row_box) switch(row_kind) RD_RegsScope(.module = row_module->handle) UI_Parent(row_box) switch(row_kind)
{ {
//////////////////// ////////////////////
//- rjf: header row //- rjf: header row
@@ -2434,6 +2465,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{ {
palette = rd_palette_from_code(RD_PaletteCode_NeutralPopButton); palette = rd_palette_from_code(RD_PaletteCode_NeutralPopButton);
} }
if(ctrl_entity->kind == RD_EntityKind_Thread && ctrl_handle_match(ctrl_entity->handle, rd_regs()->thread))
{
palette = rd_palette_from_code(RD_PaletteCode_NeutralPopButton);
}
//- rjf: build add-new buttons //- rjf: build add-new buttons
if(rd_entity_is_nil(entity) && collection_entity_kind == RD_EntityKind_Target) if(rd_entity_is_nil(entity) && collection_entity_kind == RD_EntityKind_Target)
@@ -2447,8 +2482,20 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
} }
//- rjf: build entity box //- rjf: build entity box
if(!rd_entity_is_nil(entity)) if(!rd_entity_is_nil(entity) || ctrl_entity != &ctrl_entity_nil)
{ {
//- rjf: unpack entity info
DR_FancyStringList fstrs = {0};
if(!rd_entity_is_nil(entity))
{
fstrs = rd_title_fstrs_from_entity(scratch.arena, entity, ui_top_palette()->text_weak, ui_top_font_size());
}
else if(ctrl_entity != &ctrl_entity_nil)
{
fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, ctrl_entity, ui_top_palette()->text_weak, ui_top_font_size(), 1);
}
//- rjf: build
ui_set_next_hover_cursor(OS_Cursor_HandPoint); ui_set_next_hover_cursor(OS_Cursor_HandPoint);
UI_Box *entity_box = &ui_nil_box; UI_Box *entity_box = &ui_nil_box;
UI_FocusHot(entity_box_selected ? UI_FocusKind_On : UI_FocusKind_Off) UI_Palette(palette) UI_FocusHot(entity_box_selected ? UI_FocusKind_On : UI_FocusKind_Off) UI_Palette(palette)
@@ -2458,7 +2505,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
UI_BoxFlag_DrawBackground| UI_BoxFlag_DrawBackground|
UI_BoxFlag_DrawHotEffects| UI_BoxFlag_DrawHotEffects|
UI_BoxFlag_DrawActiveEffects, UI_BoxFlag_DrawActiveEffects,
"###entity_%p", entity); "###entity_%p_%p", entity, ctrl_entity);
} }
{ {
UI_Parent(entity_box) UI_Parent(entity_box)
@@ -2467,7 +2514,6 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{ {
next_row_expanded = !row_expanded; next_row_expanded = !row_expanded;
} }
DR_FancyStringList fstrs = rd_title_fstrs_from_entity(scratch.arena, entity, ui_top_palette()->text_weak, ui_top_font_size());
UI_Box *title_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero()); UI_Box *title_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero());
ui_box_equip_display_fancy_strings(title_box, &fstrs); ui_box_equip_display_fancy_strings(title_box, &fstrs);
UI_Signal sig = ui_signal_from_box(entity_box); UI_Signal sig = ui_signal_from_box(entity_box);
@@ -2490,27 +2536,43 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
for EachIndex(idx, row_ctrls_count) for EachIndex(idx, row_ctrls_count)
{ {
RD_WatchViewRowCtrl *ctrl = &row_ctrls[idx]; RD_WatchViewRowCtrl *ctrl = &row_ctrls[idx];
if(ctrl->entity_kind == entity->kind) if(ctrl->entity_kind == entity->kind &&
ctrl->ctrl_entity_kind == ctrl_entity->kind)
{ {
UI_FocusHot(row_selected && selection_tbl.min.x <= ctrl_idx+1 && ctrl_idx+1 <= selection_tbl.max.x ? UI_FocusKind_On : UI_FocusKind_Off) UI_FocusHot(row_selected && selection_tbl.min.x <= ctrl_idx+1 && ctrl_idx+1 <= selection_tbl.max.x ? UI_FocusKind_On : UI_FocusKind_Off)
{ {
B32 is_frozen = ctrl_entity_tree_is_frozen(ctrl_entity);
RD_IconKind icon_kind = rd_cmd_kind_info_table[ctrl->kind].icon_kind; RD_IconKind icon_kind = rd_cmd_kind_info_table[ctrl->kind].icon_kind;
UI_Palette *palette = ui_top_palette();
if(ctrl->kind == RD_CmdKind_SelectEntity) if(ctrl->kind == RD_CmdKind_SelectEntity)
{ {
icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled; icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled;
} }
UI_Signal sig = rd_icon_buttonf(icon_kind, 0, "###row_ctrl_%I64x", idx); if(ctrl->kind == RD_CmdKind_FreezeThread)
if(ui_clicked(sig))
{ {
if(ctrl->kind == RD_CmdKind_SelectEntity) icon_kind = is_frozen ? RD_IconKind_Locked : RD_IconKind_Unlocked;
palette = rd_palette_from_code(is_frozen ? RD_PaletteCode_NegativePopButton : RD_PaletteCode_PositivePopButton);
}
UI_Palette(palette)
{
UI_Signal sig = rd_icon_buttonf(icon_kind, 0, "###row_ctrl_%I64x", idx);
if(ui_clicked(sig))
{ {
rd_cmd(sig.event_flags & OS_Modifier_Ctrl && entity->disabled ? RD_CmdKind_EnableEntity : if(ctrl->kind == RD_CmdKind_SelectEntity)
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity : {
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity)); rd_cmd(sig.event_flags & OS_Modifier_Ctrl && entity->disabled ? RD_CmdKind_EnableEntity :
} sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
else RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
{ }
rd_cmd(ctrl->kind, .entity = rd_handle_from_entity(entity)); else if(ctrl->kind == RD_CmdKind_FreezeThread)
{
rd_cmd(is_frozen ? RD_CmdKind_ThawThread : RD_CmdKind_FreezeThread,
.ctrl_entity = ctrl_entity->handle);
}
else
{
rd_cmd(ctrl->kind, .entity = rd_handle_from_entity(entity));
}
} }
} }
} }
@@ -2519,45 +2581,6 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
} }
} }
} }
//- rjf: build ctrl entity box
if(ctrl_entity != &ctrl_entity_nil)
{
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
UI_Box *entity_box = &ui_nil_box;
UI_FocusHot(entity_box_selected ? UI_FocusKind_On : UI_FocusKind_Off) UI_Palette(palette)
{
entity_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|
UI_BoxFlag_DrawBorder|
UI_BoxFlag_DrawBackground|
UI_BoxFlag_DrawHotEffects|
UI_BoxFlag_DrawActiveEffects,
"###entity_%p", ctrl_entity);
}
{
UI_Parent(entity_box)
{
// rjf: build expander, title
UI_PrefWidth(ui_em(2.f, 1.f)) if(ui_pressed(ui_expander(row_expanded, str8_lit("###expanded"))))
{
next_row_expanded = !row_expanded;
}
DR_FancyStringList fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, ctrl_entity, ui_top_palette()->text_weak, ui_top_font_size());
UI_Box *title_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero());
ui_box_equip_display_fancy_strings(title_box, &fstrs);
UI_Signal sig = ui_signal_from_box(entity_box);
if(ui_clicked(sig))
{
if(entity->kind == RD_EntityKind_Target)
{
rd_cmd(sig.event_flags & OS_Modifier_Ctrl && entity->disabled ? RD_CmdKind_EnableEntity :
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
}
}
}
}
}
}break; }break;
//////////////////// ////////////////////
@@ -6170,22 +6193,6 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(disasm)
default: break; default: break;
case RD_CmdKind_GoToAddress: case RD_CmdKind_GoToAddress:
{ {
RD_Entity *process = &d_nil_entity;
{
RD_Entity *entity = rd_entity_from_handle(cmd->regs->entity);
if(!rd_entity_is_nil(entity) &&
(entity->kind == RD_EntityKind_Process ||
entity->kind == RD_EntityKind_Thread ||
entity->kind == RD_EntityKind_Module))
{
process = entity;
if(entity->kind == RD_EntityKind_Thread ||
entity->kind == RD_EntityKind_Module)
{
process = rd_entity_ancestor_from_kind(process, RD_EntityKind_Process);
}
}
}
dv->goto_vaddr = cmd->regs->vaddr; dv->goto_vaddr = cmd->regs->vaddr;
}break; }break;
case RD_CmdKind_ToggleCodeBytesVisibility: {dv->style_flags ^= DASM_StyleFlag_CodeBytes;}break; case RD_CmdKind_ToggleCodeBytesVisibility: {dv->style_flags ^= DASM_StyleFlag_CodeBytes;}break;
@@ -6204,13 +6211,16 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(disasm)
////////////////////////////// //////////////////////////////
//- rjf: do goto vaddr //- rjf: do goto vaddr
// //
if(!is_loading && has_disasm && dv->goto_vaddr != 0) if(!is_loading && has_disasm && dv->goto_vaddr != 0 && contains_1u64(range, dv->goto_vaddr))
{ {
U64 vaddr = dv->goto_vaddr; U64 vaddr = dv->goto_vaddr;
dv->goto_vaddr = 0;
U64 line_idx = dasm_line_array_idx_from_code_off__linear_scan(&dasm_info.lines, vaddr-range.min); U64 line_idx = dasm_line_array_idx_from_code_off__linear_scan(&dasm_info.lines, vaddr-range.min);
S64 line_num = (S64)(line_idx+1); if(line_idx < dasm_info.lines.count)
cv->goto_line_num = line_num; {
S64 line_num = (S64)(line_idx+1);
dv->goto_vaddr = 0;
cv->goto_line_num = line_num;
}
} }
////////////////////////////// //////////////////////////////
+1
View File
@@ -97,6 +97,7 @@ typedef struct RD_WatchViewRowCtrl RD_WatchViewRowCtrl;
struct RD_WatchViewRowCtrl struct RD_WatchViewRowCtrl
{ {
RD_EntityKind entity_kind; RD_EntityKind entity_kind;
CTRL_EntityKind ctrl_entity_kind;
RD_CmdKind kind; RD_CmdKind kind;
}; };