eliminate regs concept from engine; eliminate more d_entity mirroring ctrl_entity

This commit is contained in:
Ryan Fleury
2024-09-13 10:26:34 -07:00
parent 2dfa3dae42
commit f9c541ea7b
7 changed files with 20 additions and 361 deletions
-114
View File
@@ -127,103 +127,9 @@ D_EntityKindTable:
@expand(D_EntityKindTable a) `($(a.op_delete)*D_EntityKindFlag_CanDelete) | ($(a.op_freeze)*D_EntityKindFlag_CanFreeze) | ($(a.op_edit)*D_EntityKindFlag_CanEdit) | ($(a.op_rename)*D_EntityKindFlag_CanRename) | ($(a.op_enable)*D_EntityKindFlag_CanEnable) | ($(a.op_cond)*D_EntityKindFlag_CanCondition) | ($(a.op_dup)*D_EntityKindFlag_CanDuplicate) | ($(a.name_is_code)*D_EntityKindFlag_NameIsCode) | ($(a.name_is_path)*D_EntityKindFlag_NameIsPath) | ($(a.user_lifetime)*D_EntityKindFlag_UserDefinedLifetime) | ($(a.is_serialized)*D_EntityKindFlag_IsSerializedToConfig)`,
}
////////////////////////////////
//~ rjf: Registers Type Table
@table(c_type name_lower name)
D_RegTable:
{
// rjf: entity slots
{D_Handle machine Machine }
{D_Handle module Module }
{D_Handle process Process }
{D_Handle thread Thread }
{D_Handle window Window }
{D_Handle panel Panel }
{D_Handle view View }
{D_Handle prev_view PrevView }
{D_Handle dst_panel DstPanel }
{D_Handle entity Entity }
{D_HandleList entity_list EntityList }
// rjf: frame selection
{U64 unwind_count UnwindCount }
{U64 inline_depth InlineDepth }
// rjf: code / address location info
{String8 file_path FilePath }
{TxtPt cursor Cursor }
{TxtPt mark Mark }
{U128 text_key TextKey }
{TXT_LangKind lang_kind LangKind }
{D_LineList lines Lines }
{DI_Key dbgi_key DbgiKey }
{Rng1U64 vaddr_range VaddrRange }
{Rng1U64 voff_range VoffRange }
// rjf: general parameters
{U32 pid PID }
{B32 force_confirm ForceConfirm }
{B32 prefer_disasm PreferDisasm }
{Dir2 dir2 Dir2 }
{String8 string String }
{`MD_Node *` params_tree ParamsTree }
}
@enum D_RegSlot:
{
Null,
@expand(D_RegTable a) `$(a.name)`,
COUNT,
}
@struct D_Regs:
{
@expand(D_RegTable a) `$(a.c_type) $(a.name_lower)`
}
@data(Rng1U64) d_reg_slot_range_table:
{
`{0}`,
@expand(D_RegTable a) `{OffsetOf(D_Regs, $(a.name_lower)), OffsetOf(D_Regs, $(a.name_lower)) + sizeof($(a.c_type))}`
}
@gen
{
`#define d_regs_lit_init_top \\`
@expand(D_RegTable a) `.$(a.name_lower) = d_regs()->$(a.name_lower),\\`
``;
}
////////////////////////////////
//~ rjf: Built-In Command Tables
@table(name, name_lower, c_type)
D_CmdParamSlotTable:
{
{Window window `D_Handle`}
{Panel panel `D_Handle`}
{DestPanel dest_panel `D_Handle`}
{PrevView prev_view `D_Handle`}
{View view `D_Handle`}
{Entity entity `D_Handle`}
{EntityList entity_list `D_HandleList`}
{String string `String8`}
{FilePath file_path `String8`}
{TextPoint text_point `TxtPt`}
{ParamsTree params_tree `MD_Node *`}
{OSEvent os_event `struct OS_Event *`}
{VirtualAddr vaddr `U64`}
{VirtualOff voff `U64`}
{Index index `U64`}
{ID id `U64`}
{PreferDisassembly prefer_dasm `B32`}
{ForceConfirm force_confirm `B32`}
{Dir2 dir2 `Dir2`}
{UnwindIndex unwind_index `U64`}
{InlineDepth inline_depth `U64`}
}
@table(name ui_vis ipc_docs_vis q_slot q_view q_ent_kind q_allow_files q_allow_folders q_keep_oi q_select_oi q_is_code q_required canonical_icon string display_name desc search_tags )
// / | | | \___ ____________________________________/ | | | | |
// / | | | \ / | | | | |
@@ -276,26 +182,6 @@ D_CmdTable: // | | | |
COUNT,
}
/*
@enum D_CmdParamSlot:
{
Null,
@expand(D_CmdParamSlotTable a) `$(a.name)`,
COUNT,
}
@struct D_CmdParams:
{
@expand(D_CmdParamSlotTable a) `$(a.c_type) $(a.name_lower)`;
}
@data(Rng1U64) d_cmd_param_slot_range_table:
{
`{0}`,
@expand(D_CmdParamSlotTable a) `{OffsetOf(D_CmdParams, $(a.name_lower)), OffsetOf(D_CmdParams, $(a.name_lower)) + sizeof($(a.c_type))}`,
}
*/
////////////////////////////////
//~ rjf: Built-In View Rules
//
+7 -77
View File
@@ -88,33 +88,6 @@ d_handle_list_copy(Arena *arena, D_HandleList list)
return result;
}
////////////////////////////////
//~ rjf: Registers Type Pure Functions
internal void
d_regs_copy_contents(Arena *arena, D_Regs *dst, D_Regs *src)
{
MemoryCopyStruct(dst, src);
dst->entity_list = d_handle_list_copy(arena, src->entity_list);
dst->file_path = push_str8_copy(arena, src->file_path);
dst->lines = d_line_list_copy(arena, &src->lines);
dst->dbgi_key = di_key_copy(arena, &src->dbgi_key);
dst->string = push_str8_copy(arena, src->string);
dst->params_tree = md_tree_copy(arena, src->params_tree);
if(dst->entity_list.count == 0 && !d_handle_match(d_handle_zero(), dst->entity))
{
d_handle_list_push(arena, &dst->entity_list, dst->entity);
}
}
internal D_Regs *
d_regs_copy(Arena *arena, D_Regs *src)
{
D_Regs *dst = push_array(arena, D_Regs, 1);
d_regs_copy_contents(arena, dst, src);
return dst;
}
////////////////////////////////
//~ rjf: Config Type Functions
@@ -735,16 +708,16 @@ d_search_tags_from_entity(Arena *arena, D_Entity *entity)
{
Temp scratch = scratch_begin(&arena, 1);
CTRL_Entity *entity_ctrl = ctrl_entity_from_handle(d_state->ctrl_entity_store, entity->ctrl_handle);
D_Entity *process = d_entity_ancestor_from_kind(entity, D_EntityKind_Process);
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(entity_ctrl, D_EntityKind_Process);
CTRL_Unwind unwind = d_query_cached_unwind_from_thread(entity_ctrl);
String8List strings = {0};
for(U64 frame_num = unwind.frames.count; frame_num > 0; frame_num -= 1)
{
CTRL_UnwindFrame *f = &unwind.frames.v[frame_num-1];
U64 rip_vaddr = regs_rip_from_arch_block(entity->arch, f->regs);
D_Entity *module = d_module_from_process_vaddr(process, rip_vaddr);
U64 rip_voff = d_voff_from_vaddr(module, rip_vaddr);
DI_Key dbgi_key = d_dbgi_key_from_module(module);
CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr);
U64 rip_voff = ctrl_voff_from_vaddr(module, rip_vaddr);
DI_Key dbgi_key = ctrl_dbgi_key_from_module(module);
String8 procedure_name = d_symbol_name_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff, 0);
if(procedure_name.size != 0)
{
@@ -2469,6 +2442,7 @@ d_lines_from_file_path_line_num(Arena *arena, String8 file_path, S64 line_num)
////////////////////////////////
//~ rjf: Process/Thread/Module Info Lookups
#if 0 // TODO(rjf): @msgs
internal D_Entity *
d_module_from_process_vaddr(D_Entity *process, U64 vaddr)
{
@@ -2484,7 +2458,6 @@ d_module_from_process_vaddr(D_Entity *process, U64 vaddr)
return module;
}
#if 0 // TODO(rjf): @msgs
internal D_Entity *
d_module_from_thread(D_Entity *thread)
{
@@ -2577,11 +2550,13 @@ d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64
return base_vaddr;
}
#if 0 // TODO(rjf): @msgs
internal Arch
d_arch_from_entity(D_Entity *entity)
{
return entity->arch;
}
#endif
internal E_String2NumMap *
d_push_locals_map_from_dbgi_key_voff(Arena *arena, DI_Scope *scope, DI_Key *dbgi_key, U64 voff)
@@ -3217,44 +3192,6 @@ d_frame_arena(void)
return d_state->frame_arenas[d_state->frame_index%ArrayCount(d_state->frame_arenas)];
}
//- rjf: interaction registers
internal D_Regs *
d_regs(void)
{
D_Regs *regs = &d_state->top_regs->v;
return regs;
}
internal D_Regs *
d_base_regs(void)
{
D_Regs *regs = &d_state->base_regs.v;
return regs;
}
internal D_Regs *
d_push_regs(void)
{
D_Regs *top = d_regs();
D_RegsNode *n = push_array(d_frame_arena(), D_RegsNode, 1);
MemoryCopyStruct(&n->v, top);
SLLStackPush(d_state->top_regs, n);
return &n->v;
}
internal D_Regs *
d_pop_regs(void)
{
D_Regs *regs = &d_state->top_regs->v;
SLLStackPop(d_state->top_regs);
if(d_state->top_regs == 0)
{
d_state->top_regs = &d_state->base_regs;
}
return regs;
}
//- rjf: control state
internal D_RunKind
@@ -3883,7 +3820,6 @@ d_init(void)
d_state->entities_root = d_entity_alloc(&d_nil_entity, D_EntityKind_Root);
d_state->view_rule_spec_table_size = 1024;
d_state->view_rule_spec_table = push_array(arena, D_ViewRuleSpec *, d_state->view_rule_spec_table_size);
d_state->top_regs = &d_state->base_regs;
d_state->ctrl_msg_arena = arena_alloc();
// rjf: set up initial exception filtering rules
@@ -3937,8 +3873,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints)
d_state->frame_index += 1;
arena_clear(d_frame_arena());
d_state->frame_eval_memread_endt_us = os_now_microseconds() + 5000;
d_state->top_regs = &d_state->base_regs;
d_regs_copy_contents(d_frame_arena(), &d_state->top_regs->v, &d_state->top_regs->v);
B32 ctrl_running_pre_tick = d_state->ctrl_is_running;
//////////////////////////////
@@ -5049,10 +4983,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints)
d_state->ctrl_last_run_flags = run_flags;
d_state->ctrl_last_run_traps = ctrl_trap_list_copy(d_state->ctrl_last_run_arena, &run_traps_copy);
d_state->ctrl_is_running = 1;
// rjf: reset selected frame to top unwind
d_state->base_regs.v.unwind_count = 0;
d_state->base_regs.v.inline_depth = 0;
}
}
}
+5 -30
View File
@@ -445,16 +445,6 @@ struct D_Unwind
D_UnwindFrameArray frames;
};
////////////////////////////////
//~ rjf: Context Register Types
typedef struct D_RegsNode D_RegsNode;
struct D_RegsNode
{
D_RegsNode *next;
D_Regs v;
};
////////////////////////////////
//~ rjf: Command Specification Types
@@ -709,10 +699,6 @@ struct D_State
// rjf: frame info
Arena *frame_arenas[2];
// rjf: interaction registers
D_RegsNode base_regs;
D_RegsNode *top_regs;
// rjf: commands
Arena *cmds_arena;
D_CmdList cmds;
@@ -808,12 +794,6 @@ internal void d_handle_list_push_node(D_HandleList *list, D_HandleNode *node);
internal void d_handle_list_push(Arena *arena, D_HandleList *list, D_Handle handle);
internal D_HandleList d_handle_list_copy(Arena *arena, D_HandleList list);
////////////////////////////////
//~ rjf: Registers Type Pure Functions
internal void d_regs_copy_contents(Arena *arena, D_Regs *dst, D_Regs *src);
internal D_Regs *d_regs_copy(Arena *arena, D_Regs *src);
////////////////////////////////
//~ rjf: Config Type Pure Functions
@@ -1004,12 +984,14 @@ internal D_LineList d_lines_from_file_path_line_num(Arena *arena, String8 file_p
////////////////////////////////
//~ rjf: Process/Thread/Module Info Lookups
internal D_Entity *d_module_from_process_vaddr(D_Entity *process, U64 vaddr);
#if 0 // TODO(rjf): @msgs
internal D_Entity *d_module_from_process_vaddr(D_Entity *process, U64 vaddr);
internal D_Entity *d_module_from_thread(D_Entity *thread);
#endif
internal U64 d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 rip_vaddr);
internal Arch d_arch_from_entity(D_Entity *entity);
internal U64 d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 rip_vaddr);
#if 0 // TODO(rjf): @msgs
internal Arch d_arch_from_entity(D_Entity *entity);
#endif
internal E_String2NumMap *d_push_locals_map_from_dbgi_key_voff(Arena *arena, DI_Scope *scope, DI_Key *dbgi_key, U64 voff);
internal E_String2NumMap *d_push_member_map_from_dbgi_key_voff(Arena *arena, DI_Scope *scope, DI_Key *dbgi_key, U64 voff);
#if 0 // TODO(rjf): @msgs
@@ -1074,13 +1056,6 @@ internal String8 d_eval_string_from_file_path(Arena *arena, String8 string);
internal U64 d_frame_index(void);
internal Arena *d_frame_arena(void);
//- rjf: registers
internal D_Regs *d_regs(void);
internal D_Regs *d_base_regs(void);
internal D_Regs *d_push_regs(void);
internal D_Regs *d_pop_regs(void);
#define D_RegsScope DeferLoop(d_push_regs(), d_pop_regs())
//- rjf: control state
internal D_RunKind d_ctrl_last_run_kind(void);
internal U64 d_ctrl_last_run_frame_idx(void);
@@ -182,39 +182,6 @@ D_EntityKindFlags d_entity_kind_flags_table[30] =
(0*D_EntityKindFlag_CanDelete) | (0*D_EntityKindFlag_CanFreeze) | (0*D_EntityKindFlag_CanEdit) | (1*D_EntityKindFlag_CanRename) | (0*D_EntityKindFlag_CanEnable) | (0*D_EntityKindFlag_CanCondition) | (0*D_EntityKindFlag_CanDuplicate) | (0*D_EntityKindFlag_NameIsCode) | (0*D_EntityKindFlag_NameIsPath) | (0*D_EntityKindFlag_UserDefinedLifetime) | (0*D_EntityKindFlag_IsSerializedToConfig),
};
Rng1U64 d_reg_slot_range_table[29] =
{
{0},
{OffsetOf(D_Regs, machine), OffsetOf(D_Regs, machine) + sizeof(D_Handle)},
{OffsetOf(D_Regs, module), OffsetOf(D_Regs, module) + sizeof(D_Handle)},
{OffsetOf(D_Regs, process), OffsetOf(D_Regs, process) + sizeof(D_Handle)},
{OffsetOf(D_Regs, thread), OffsetOf(D_Regs, thread) + sizeof(D_Handle)},
{OffsetOf(D_Regs, window), OffsetOf(D_Regs, window) + sizeof(D_Handle)},
{OffsetOf(D_Regs, panel), OffsetOf(D_Regs, panel) + sizeof(D_Handle)},
{OffsetOf(D_Regs, view), OffsetOf(D_Regs, view) + sizeof(D_Handle)},
{OffsetOf(D_Regs, prev_view), OffsetOf(D_Regs, prev_view) + sizeof(D_Handle)},
{OffsetOf(D_Regs, dst_panel), OffsetOf(D_Regs, dst_panel) + sizeof(D_Handle)},
{OffsetOf(D_Regs, entity), OffsetOf(D_Regs, entity) + sizeof(D_Handle)},
{OffsetOf(D_Regs, entity_list), OffsetOf(D_Regs, entity_list) + sizeof(D_HandleList)},
{OffsetOf(D_Regs, unwind_count), OffsetOf(D_Regs, unwind_count) + sizeof(U64)},
{OffsetOf(D_Regs, inline_depth), OffsetOf(D_Regs, inline_depth) + sizeof(U64)},
{OffsetOf(D_Regs, file_path), OffsetOf(D_Regs, file_path) + sizeof(String8)},
{OffsetOf(D_Regs, cursor), OffsetOf(D_Regs, cursor) + sizeof(TxtPt)},
{OffsetOf(D_Regs, mark), OffsetOf(D_Regs, mark) + sizeof(TxtPt)},
{OffsetOf(D_Regs, text_key), OffsetOf(D_Regs, text_key) + sizeof(U128)},
{OffsetOf(D_Regs, lang_kind), OffsetOf(D_Regs, lang_kind) + sizeof(TXT_LangKind)},
{OffsetOf(D_Regs, lines), OffsetOf(D_Regs, lines) + sizeof(D_LineList)},
{OffsetOf(D_Regs, dbgi_key), OffsetOf(D_Regs, dbgi_key) + sizeof(DI_Key)},
{OffsetOf(D_Regs, vaddr_range), OffsetOf(D_Regs, vaddr_range) + sizeof(Rng1U64)},
{OffsetOf(D_Regs, voff_range), OffsetOf(D_Regs, voff_range) + sizeof(Rng1U64)},
{OffsetOf(D_Regs, pid), OffsetOf(D_Regs, pid) + sizeof(U32)},
{OffsetOf(D_Regs, force_confirm), OffsetOf(D_Regs, force_confirm) + sizeof(B32)},
{OffsetOf(D_Regs, prefer_disasm), OffsetOf(D_Regs, prefer_disasm) + sizeof(B32)},
{OffsetOf(D_Regs, dir2), OffsetOf(D_Regs, dir2) + sizeof(Dir2)},
{OffsetOf(D_Regs, string), OffsetOf(D_Regs, string) + sizeof(String8)},
{OffsetOf(D_Regs, params_tree), OffsetOf(D_Regs, params_tree) + sizeof(MD_Node *)},
};
D_ViewRuleSpecInfo d_core_view_rule_spec_info_table[21] =
{
{str8_lit_comp("default"), str8_lit_comp("Default"), str8_lit_comp(""), str8_lit_comp(""), (D_ViewRuleSpecInfoFlag_Inherited*0)|(D_ViewRuleSpecInfoFlag_Expandable*0)|(D_ViewRuleSpecInfoFlag_ExprResolution*0)|(D_ViewRuleSpecInfoFlag_VizBlockProd*1), },
@@ -50,40 +50,6 @@ D_EntityKind_ConversionFail,
D_EntityKind_COUNT,
} D_EntityKind;
typedef enum D_RegSlot
{
D_RegSlot_Null,
D_RegSlot_Machine,
D_RegSlot_Module,
D_RegSlot_Process,
D_RegSlot_Thread,
D_RegSlot_Window,
D_RegSlot_Panel,
D_RegSlot_View,
D_RegSlot_PrevView,
D_RegSlot_DstPanel,
D_RegSlot_Entity,
D_RegSlot_EntityList,
D_RegSlot_UnwindCount,
D_RegSlot_InlineDepth,
D_RegSlot_FilePath,
D_RegSlot_Cursor,
D_RegSlot_Mark,
D_RegSlot_TextKey,
D_RegSlot_LangKind,
D_RegSlot_Lines,
D_RegSlot_DbgiKey,
D_RegSlot_VaddrRange,
D_RegSlot_VoffRange,
D_RegSlot_PID,
D_RegSlot_ForceConfirm,
D_RegSlot_PreferDisasm,
D_RegSlot_Dir2,
D_RegSlot_String,
D_RegSlot_ParamsTree,
D_RegSlot_COUNT,
} D_RegSlot;
typedef enum D_CmdKind
{
D_CmdKind_Null,
@@ -147,69 +113,6 @@ D_ViewRuleKind_Geo3D,
D_ViewRuleKind_COUNT,
} D_ViewRuleKind;
typedef struct D_Regs D_Regs;
struct D_Regs
{
D_Handle machine;
D_Handle module;
D_Handle process;
D_Handle thread;
D_Handle window;
D_Handle panel;
D_Handle view;
D_Handle prev_view;
D_Handle dst_panel;
D_Handle entity;
D_HandleList entity_list;
U64 unwind_count;
U64 inline_depth;
String8 file_path;
TxtPt cursor;
TxtPt mark;
U128 text_key;
TXT_LangKind lang_kind;
D_LineList lines;
DI_Key dbgi_key;
Rng1U64 vaddr_range;
Rng1U64 voff_range;
U32 pid;
B32 force_confirm;
B32 prefer_disasm;
Dir2 dir2;
String8 string;
MD_Node * params_tree;
};
#define d_regs_lit_init_top \
.machine = d_regs()->machine,\
.module = d_regs()->module,\
.process = d_regs()->process,\
.thread = d_regs()->thread,\
.window = d_regs()->window,\
.panel = d_regs()->panel,\
.view = d_regs()->view,\
.prev_view = d_regs()->prev_view,\
.dst_panel = d_regs()->dst_panel,\
.entity = d_regs()->entity,\
.entity_list = d_regs()->entity_list,\
.unwind_count = d_regs()->unwind_count,\
.inline_depth = d_regs()->inline_depth,\
.file_path = d_regs()->file_path,\
.cursor = d_regs()->cursor,\
.mark = d_regs()->mark,\
.text_key = d_regs()->text_key,\
.lang_kind = d_regs()->lang_kind,\
.lines = d_regs()->lines,\
.dbgi_key = d_regs()->dbgi_key,\
.vaddr_range = d_regs()->vaddr_range,\
.voff_range = d_regs()->voff_range,\
.pid = d_regs()->pid,\
.force_confirm = d_regs()->force_confirm,\
.prefer_disasm = d_regs()->prefer_disasm,\
.dir2 = d_regs()->dir2,\
.string = d_regs()->string,\
.params_tree = d_regs()->params_tree,\
global B32 DEV_telemetry_capture = 0;
global B32 DEV_simulate_lag = 0;
global B32 DEV_draw_ui_text_pos = 0;
@@ -240,7 +143,6 @@ extern String8 d_entity_kind_name_lower_table[30];
extern String8 d_entity_kind_name_lower_plural_table[30];
extern String8 d_entity_kind_name_label_table[30];
extern D_EntityKindFlags d_entity_kind_flags_table[30];
extern Rng1U64 d_reg_slot_range_table[29];
C_LINKAGE_END
+4 -5
View File
@@ -1014,9 +1014,8 @@ df_window_open(Vec2F32 size, OS_Handle preferred_monitor, D_CfgSrc cfg_src)
{
os_window_set_monitor(window->os, preferred_monitor);
}
if(df_state->first_window == 0) D_RegsScope
if(df_state->first_window == 0) DF_RegsScope(.window = df_handle_from_window(window))
{
df_regs()->window = df_handle_from_window(window);
DF_FontSlot english_font_slots[] = {DF_FontSlot_Main, DF_FontSlot_Code};
DF_FontSlot icon_font_slot = DF_FontSlot_Icons;
for(U64 idx = 0; idx < ArrayCount(english_font_slots); idx += 1)
@@ -11676,7 +11675,7 @@ df_frame(void)
df_state->base_regs.v.inline_depth = 0;
if(df_regs()->inline_depth <= frame->inline_frame_count)
{
d_state->base_regs.v.inline_depth = df_regs()->inline_depth;
df_state->base_regs.v.inline_depth = df_regs()->inline_depth;
}
}
df_cmd(DF_CmdKind_FindThread, .thread = thread->handle);
@@ -11690,8 +11689,8 @@ df_frame(void)
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process);
CTRL_Unwind base_unwind = d_query_cached_unwind_from_thread(thread);
D_Unwind rich_unwind = d_unwind_from_ctrl_unwind(scratch.arena, di_scope, process, &base_unwind);
U64 crnt_unwind_idx = d_state->base_regs.v.unwind_count;
U64 crnt_inline_dpt = d_state->base_regs.v.inline_depth;
U64 crnt_unwind_idx = df_state->base_regs.v.unwind_count;
U64 crnt_inline_dpt = df_state->base_regs.v.inline_depth;
U64 next_unwind_idx = crnt_unwind_idx;
U64 next_inline_dpt = crnt_inline_dpt;
if(crnt_unwind_idx < rich_unwind.frames.concrete_frame_count)
+4 -4
View File
@@ -5710,11 +5710,11 @@ DF_VIEW_UI_FUNCTION_DEF(scheduler)
UI_TableCellSized(ui_children_sum(1.f)) UI_FocusHot((row_is_selected && cursor.x >= 2) ? UI_FocusKind_On : UI_FocusKind_Off)
{
CTRL_Entity *entity_ctrl = ctrl_entity_from_handle(d_state->ctrl_entity_store, entity->ctrl_handle);
D_Entity *process = d_entity_ancestor_from_kind(entity, D_EntityKind_Process);
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(entity_ctrl, D_EntityKind_Process);
U64 rip_vaddr = d_query_cached_rip_from_thread(entity_ctrl);
D_Entity *module = d_module_from_process_vaddr(process, rip_vaddr);
U64 rip_voff = d_voff_from_vaddr(module, rip_vaddr);
DI_Key dbgi_key = d_dbgi_key_from_module(module);
CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr);
U64 rip_voff = ctrl_voff_from_vaddr(module, rip_vaddr);
DI_Key dbgi_key = ctrl_dbgi_key_from_module(module);
D_LineList lines = d_lines_from_dbgi_key_voff(scratch.arena, &dbgi_key, rip_voff);
if(lines.first != 0)
{