mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:17 +00:00
contrib/plugins/uftrace: fix infinite stack unwind detection
So far, we were detecting infinite stacks but not stopping unwinding since break only exited inner loop. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260210201344.1403613-2-pierrick.bouvier@linaro.org Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
This commit is contained in:
@@ -443,7 +443,7 @@ static void cpu_unwind_stack(Cpu *cpu, uint64_t frame_pointer, uint64_t pc)
|
||||
/* check we don't have an infinite stack */
|
||||
for (size_t i = 0; i < depth; ++i) {
|
||||
if (frame_pointer == unwind[i].frame_pointer) {
|
||||
break;
|
||||
goto after_unwind;
|
||||
}
|
||||
}
|
||||
CallstackEntry e = {.frame_pointer = frame_pointer, .pc = pc};
|
||||
@@ -456,6 +456,7 @@ static void cpu_unwind_stack(Cpu *cpu, uint64_t frame_pointer, uint64_t pc)
|
||||
} while (frame_pointer && pc && depth < UNWIND_STACK_MAX_DEPTH);
|
||||
#undef UNWIND_STACK_MAX_DEPTH
|
||||
|
||||
after_unwind:
|
||||
/* push it from bottom to top */
|
||||
while (depth) {
|
||||
callstack_push(cpu->cs, unwind[depth - 1]);
|
||||
|
||||
Reference in New Issue
Block a user