mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-09 15:28:08 +00:00
treat errored call stacks as valid call stack results - only reject on stale data. allow 0 rips for the top frames.
This commit is contained in:
+5
-17
@@ -3026,8 +3026,8 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U
|
|||||||
U64 rip = regs_rip_from_arch_block(arch, regs_block);
|
U64 rip = regs_rip_from_arch_block(arch, regs_block);
|
||||||
U64 rsp = regs_rsp_from_arch_block(arch, regs_block);
|
U64 rsp = regs_rsp_from_arch_block(arch, regs_block);
|
||||||
|
|
||||||
// rjf: cancel on 0 rip
|
// rjf: cancel on zero rip (except the top frame)
|
||||||
if(rip == 0)
|
if(rip == 0 && frame_node_count > 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3074,34 +3074,22 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U
|
|||||||
CTRL_UnwindStepResult step_result = {0};
|
CTRL_UnwindStepResult step_result = {0};
|
||||||
switch(process_entity->target_os)
|
switch(process_entity->target_os)
|
||||||
{
|
{
|
||||||
case OperatingSystem_Null:{}break;
|
default:{}break;
|
||||||
case OperatingSystem_Windows:
|
case OperatingSystem_Windows:
|
||||||
{
|
{
|
||||||
switch(arch)
|
switch(arch)
|
||||||
{
|
{
|
||||||
case Arch_Null:{}break;
|
default:{}break;
|
||||||
case Arch_x64:
|
case Arch_x64:
|
||||||
{
|
{
|
||||||
step_result = ctrl_unwind_step__pe_x64(process_entity->handle, module_entity->handle, module_entity->vaddr_range.min, regs_block, endt_us);
|
step_result = ctrl_unwind_step__pe_x64(process_entity->handle, module_entity->handle, module_entity->vaddr_range.min, regs_block, endt_us);
|
||||||
}break;
|
}break;
|
||||||
case Arch_x86:
|
|
||||||
case Arch_arm32:
|
|
||||||
case Arch_arm64:
|
|
||||||
{
|
|
||||||
NotImplemented;
|
|
||||||
}break;
|
|
||||||
default: { InvalidPath; } break;
|
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case OperatingSystem_Linux:
|
case OperatingSystem_Linux:
|
||||||
{
|
{
|
||||||
step_result = ctrl_unwind_step__dwarf(process_entity->handle, arch, regs_block, &frame_ctx, endt_us);
|
step_result = ctrl_unwind_step__dwarf(process_entity->handle, arch, regs_block, &frame_ctx, endt_us);
|
||||||
}break;
|
}break;
|
||||||
case OperatingSystem_Mac:
|
|
||||||
{
|
|
||||||
NotImplemented;
|
|
||||||
}break;
|
|
||||||
default: { InvalidPath; }break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop unwinding on errors or stale data
|
// stop unwinding on errors or stale data
|
||||||
@@ -6983,7 +6971,7 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out,
|
|||||||
pre_reg_gen = ctrl_reg_gen();
|
pre_reg_gen = ctrl_reg_gen();
|
||||||
pre_mem_gen = ctrl_mem_gen();
|
pre_mem_gen = ctrl_mem_gen();
|
||||||
unwind = ctrl_unwind_from_thread(arena, entity_ctx, thread_handle, os_now_microseconds()+5000);
|
unwind = ctrl_unwind_from_thread(arena, entity_ctx, thread_handle, os_now_microseconds()+5000);
|
||||||
if(unwind.flags == 0)
|
if(!(unwind.flags & CTRL_UnwindFlag_Stale))
|
||||||
{
|
{
|
||||||
good = 1;
|
good = 1;
|
||||||
call_stack[0] = ctrl_call_stack_from_unwind(arena, process, &unwind);
|
call_stack[0] = ctrl_call_stack_from_unwind(arena, process, &unwind);
|
||||||
|
|||||||
Reference in New Issue
Block a user