summaryrefslogtreecommitdiffstats
path: root/debuggerd/libdebuggerd/tombstone.cpp
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2018-04-20 12:04:41 -0700
committerJosh Gao <jmgao@google.com>2018-04-20 13:23:20 -0700
commit5d1c14f41bac357c730aa47d705c1f1da7625280 (patch)
tree7e33631043e5fa3fb04a5bac82685b0e753eb56b /debuggerd/libdebuggerd/tombstone.cpp
parent2f37a15472945194fed528cb8d3104aa4865fc4c (diff)
downloadsystem_core-5d1c14f41bac357c730aa47d705c1f1da7625280.tar.gz
system_core-5d1c14f41bac357c730aa47d705c1f1da7625280.tar.bz2
system_core-5d1c14f41bac357c730aa47d705c1f1da7625280.zip
libdebuggerd: clone registers before we Unwind with them.
Bug: http://b/77296294 Test: manual inspection of tombstone generated by crasher Change-Id: I4b017701d7d2041db4aefbbb90977e99b844c328
Diffstat (limited to 'debuggerd/libdebuggerd/tombstone.cpp')
-rw-r--r--debuggerd/libdebuggerd/tombstone.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp
index 55d6204ac..2b7529217 100644
--- a/debuggerd/libdebuggerd/tombstone.cpp
+++ b/debuggerd/libdebuggerd/tombstone.cpp
@@ -422,8 +422,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> regs_copy(thread_info.registers->Clone());
std::vector<backtrace_frame_data_t> 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;
}