diff --git a/init/Android.bp b/init/Android.bp index dd67d04c0..f91265e8a 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -178,7 +178,6 @@ libinit_cc_defaults { "update_metadata-protos", ], shared_libs: [ - "libbacktrace", "libbase", "libbootloader_message", "libcrypto", @@ -195,6 +194,7 @@ libinit_cc_defaults { "libprocessgroup", "libprocessgroup_setup", "libselinux", + "libunwindstack", "libutils", "libziparchive", ], @@ -352,7 +352,6 @@ cc_binary { "libgsi", "liblzma", "libunwindstack_no_dex", - "libbacktrace_no_dex", "libmodprobe", "libext2_uuid", "libprotobuf-cpp-lite", diff --git a/init/init.cpp b/init/init.cpp index 038f1725d..f8330bc5b 100644 --- a/init/init.cpp +++ b/init/init.cpp @@ -48,7 +48,6 @@ #include #include #include -#include #include #include #include @@ -58,6 +57,7 @@ #include #include #include +#include #include "action_parser.h" #include "builtins.h" @@ -253,12 +253,14 @@ static class ShutdownState { } shutdown_state; static void UnwindMainThreadStack() { - std::unique_ptr backtrace(Backtrace::Create(BACKTRACE_CURRENT_PROCESS, 1)); - if (!backtrace->Unwind(0)) { - LOG(ERROR) << __FUNCTION__ << "sys.powerctl: Failed to unwind callstack."; + unwindstack::AndroidLocalUnwinder unwinder; + unwindstack::AndroidUnwinderData data; + if (!unwinder.Unwind(data)) { + LOG(ERROR) << __FUNCTION__ + << "sys.powerctl: Failed to unwind callstack: " << data.GetErrorString(); } - for (size_t i = 0; i < backtrace->NumFrames(); i++) { - LOG(ERROR) << "sys.powerctl: " << backtrace->FormatFrameData(i); + for (const auto& frame : data.frames) { + LOG(ERROR) << "sys.powerctl: " << unwinder.FormatFrame(frame); } } diff --git a/init/reboot_utils.cpp b/init/reboot_utils.cpp index b3fa9fd3b..f8e1de047 100644 --- a/init/reboot_utils.cpp +++ b/init/reboot_utils.cpp @@ -26,8 +26,8 @@ #include #include #include -#include #include +#include #include "capabilities.h" #include "reboot_utils.h" @@ -157,13 +157,13 @@ void __attribute__((noreturn)) InitFatalReboot(int signal_number) { // In the parent, let's try to get a backtrace then shutdown. LOG(ERROR) << __FUNCTION__ << ": signal " << signal_number; - std::unique_ptr backtrace( - Backtrace::Create(BACKTRACE_CURRENT_PROCESS, BACKTRACE_CURRENT_THREAD)); - if (!backtrace->Unwind(0)) { - LOG(ERROR) << __FUNCTION__ << ": Failed to unwind callstack."; + unwindstack::AndroidLocalUnwinder unwinder; + unwindstack::AndroidUnwinderData data; + if (!unwinder.Unwind(data)) { + LOG(ERROR) << __FUNCTION__ << ": Failed to unwind callstack: " << data.GetErrorString(); } - for (size_t i = 0; i < backtrace->NumFrames(); i++) { - LOG(ERROR) << backtrace->FormatFrameData(i); + for (const auto& frame : data.frames) { + LOG(ERROR) << unwinder.FormatFrame(frame); } if (init_fatal_panic) { LOG(ERROR) << __FUNCTION__ << ": Trigger crash";