From b05c472421d9d4dd919926c95a5c1de4eb9a721a Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Wed, 23 Sep 2020 15:51:46 -0700 Subject: Add arch member into Unwinder object. This simplifies some of the logic and removes the need to pass an Arch value to functions that should already know about the arch it is operating on. Includes fixes for debuggerd/libbacktrace. Added new unit tests to cover new cases. Test: All unit tests pass. Test: Faked unwinder failing to verify debuggerd error messages display Test: properly in backtrace and tombstone. Change-Id: I439fcae0695befcfb1cb4c0a786cc74949d33425 --- debuggerd/libdebuggerd/backtrace.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'debuggerd/libdebuggerd/backtrace.cpp') diff --git a/debuggerd/libdebuggerd/backtrace.cpp b/debuggerd/libdebuggerd/backtrace.cpp index f5a873c4d3..c543a83921 100644 --- a/debuggerd/libdebuggerd/backtrace.cpp +++ b/debuggerd/libdebuggerd/backtrace.cpp @@ -18,8 +18,9 @@ #include "libdebuggerd/backtrace.h" -#include #include +#include +#include #include #include #include @@ -65,7 +66,11 @@ void dump_backtrace_thread(int output_fd, unwindstack::Unwinder* unwinder, unwinder->SetRegs(thread.registers.get()); unwinder->Unwind(); if (unwinder->NumFrames() == 0) { - _LOG(&log, logtype::THREAD, "Unwind failed: tid = %d", thread.tid); + _LOG(&log, logtype::THREAD, "Unwind failed: tid = %d\n", thread.tid); + if (unwinder->LastErrorCode() != unwindstack::ERROR_NONE) { + _LOG(&log, logtype::THREAD, " Error code: %s\n", unwinder->LastErrorCodeString()); + _LOG(&log, logtype::THREAD, " Error address: 0x%" PRIx64 "\n", unwinder->LastErrorAddress()); + } return; } -- cgit v1.2.3