mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 13:58:40 +00:00
relocate entity; fix incorrect eval mode for procedures view; fix incorrect evaluation of callstack frames in new callstack view
This commit is contained in:
+24
-3
@@ -3345,7 +3345,6 @@ df_lines_from_file_path_line_num(Arena *arena, String8 file_path, S64 line_num)
|
|||||||
internal DF_Entity *
|
internal DF_Entity *
|
||||||
df_module_from_process_vaddr(DF_Entity *process, U64 vaddr)
|
df_module_from_process_vaddr(DF_Entity *process, U64 vaddr)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
|
||||||
DF_Entity *module = &df_g_nil_entity;
|
DF_Entity *module = &df_g_nil_entity;
|
||||||
for(DF_Entity *child = process->first; !df_entity_is_nil(child); child = child->next)
|
for(DF_Entity *child = process->first; !df_entity_is_nil(child); child = child->next)
|
||||||
{
|
{
|
||||||
@@ -3355,7 +3354,6 @@ df_module_from_process_vaddr(DF_Entity *process, U64 vaddr)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ProfEnd();
|
|
||||||
return module;
|
return module;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4955,7 +4953,7 @@ df_expr_from_eval_viz_block_index(Arena *arena, DF_EvalVizBlock *block, U64 inde
|
|||||||
RDI_TypeNode *type_node = rdi_element_from_name_idx(module->rdi, TypeNodes, type_idx);
|
RDI_TypeNode *type_node = rdi_element_from_name_idx(module->rdi, TypeNodes, type_idx);
|
||||||
E_TypeKey type_key = e_type_key_ext(e_type_kind_from_rdi(type_node->kind), type_idx, (U32)(module - e_parse_ctx->modules));
|
E_TypeKey type_key = e_type_key_ext(e_type_kind_from_rdi(type_node->kind), type_idx, (U32)(module - e_parse_ctx->modules));
|
||||||
item_expr = e_push_expr(arena, E_ExprKind_LeafBytecode, 0);
|
item_expr = e_push_expr(arena, E_ExprKind_LeafBytecode, 0);
|
||||||
item_expr->mode = E_Mode_Offset;
|
item_expr->mode = E_Mode_Value;
|
||||||
item_expr->space = module->space;
|
item_expr->space = module->space;
|
||||||
item_expr->type_key = type_key;
|
item_expr->type_key = type_key;
|
||||||
item_expr->bytecode = bytecode;
|
item_expr->bytecode = bytecode;
|
||||||
@@ -7937,6 +7935,29 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
case DF_CoreCmdKind_RelocateEntity:
|
||||||
|
{
|
||||||
|
DF_Entity *entity = df_entity_from_handle(params.entity);
|
||||||
|
DF_Entity *location = df_entity_child_from_kind(entity, DF_EntityKind_Location);
|
||||||
|
if(df_entity_is_nil(location))
|
||||||
|
{
|
||||||
|
location = df_entity_alloc(entity, DF_EntityKind_Location);
|
||||||
|
}
|
||||||
|
location->flags &= ~DF_EntityFlag_HasTextPoint;
|
||||||
|
location->flags &= ~DF_EntityFlag_HasVAddr;
|
||||||
|
if(params.text_point.line != 0)
|
||||||
|
{
|
||||||
|
df_entity_equip_txt_pt(location, params.text_point);
|
||||||
|
}
|
||||||
|
if(params.vaddr != 0)
|
||||||
|
{
|
||||||
|
df_entity_equip_vaddr(location, params.vaddr);
|
||||||
|
}
|
||||||
|
if(params.file_path.size != 0)
|
||||||
|
{
|
||||||
|
df_entity_equip_name(location, params.file_path);
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
//- rjf: breakpoints
|
//- rjf: breakpoints
|
||||||
case DF_CoreCmdKind_AddBreakpoint:
|
case DF_CoreCmdKind_AddBreakpoint:
|
||||||
|
|||||||
@@ -1630,10 +1630,8 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
|||||||
type_key = e_type_key_ext(E_TypeKind_Function, row->inline_site->type_idx, e_parse_ctx_module_idx_from_rdi(row->rdi));
|
type_key = e_type_key_ext(E_TypeKind_Function, row->inline_site->type_idx, e_parse_ctx_module_idx_from_rdi(row->rdi));
|
||||||
}
|
}
|
||||||
U64 row_vaddr = regs_rip_from_arch_block(arch, row->regs);
|
U64 row_vaddr = regs_rip_from_arch_block(arch, row->regs);
|
||||||
DF_Entity *module = df_module_from_process_vaddr(process, row_vaddr);
|
|
||||||
U64 row_voff = df_voff_from_vaddr(module, row_vaddr);
|
|
||||||
E_OpList ops = {0};
|
E_OpList ops = {0};
|
||||||
e_oplist_push_op(scratch.arena, &ops, RDI_EvalOp_ModuleOff, row_voff);
|
e_oplist_push_op(scratch.arena, &ops, RDI_EvalOp_ConstU64, row_vaddr);
|
||||||
String8 bytecode = e_bytecode_from_oplist(scratch.arena, &ops);
|
String8 bytecode = e_bytecode_from_oplist(scratch.arena, &ops);
|
||||||
E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafBytecode, 0);
|
E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafBytecode, 0);
|
||||||
expr->bytecode = bytecode;
|
expr->bytecode = bytecode;
|
||||||
|
|||||||
Reference in New Issue
Block a user