diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp index 140ef6d23..933a5972d 100644 --- a/debuggerd/libdebuggerd/tombstone.cpp +++ b/debuggerd/libdebuggerd/tombstone.cpp @@ -418,8 +418,10 @@ static bool dump_thread(log_t* log, BacktraceMap* map, Memory* process_memory, dump_registers(log, thread_info.registers.get()); + // Unwind will mutate the registers, so make a copy first. + std::unique_ptr regs_copy(thread_info.registers->Clone()); std::vector frames; - if (!Backtrace::Unwind(thread_info.registers.get(), map, &frames, 0, nullptr)) { + if (!Backtrace::Unwind(regs_copy.get(), map, &frames, 0, nullptr)) { _LOG(log, logtype::THREAD, "Failed to unwind"); return false; }