Revert "[Berberis][CrashReporting] Dump guest thread info to tom..."
Revert submission 3062926
Reason for revert: We want guest state to be present in all threads - revert to be able to fix the proto field type.
Reverted changes: /q/submissionid:3062926
Change-Id: I87b282a0d9caebe4eae2e7d8eca8ec8ebaa3eca6
diff --git a/debuggerd/crash_dump.cpp b/debuggerd/crash_dump.cpp
index 4640aeb..bc00c86 100644
--- a/debuggerd/crash_dump.cpp
+++ b/debuggerd/crash_dump.cpp
@@ -30,7 +30,6 @@
#include <map>
#include <memory>
#include <set>
-#include <string>
#include <vector>
#include <android-base/errno_restorer.h>
@@ -82,10 +81,6 @@
using android::base::StringPrintf;
using android::base::unique_fd;
-// This stores guest architecture. When the architecture is supported, tombstone file will output
-// guest state information.
-static Architecture g_guest_arch;
-
static bool pid_contains_tid(int pid_proc_fd, pid_t tid) {
struct stat st;
std::string task_path = StringPrintf("task/%d", tid);
@@ -495,8 +490,6 @@
arm_user_regs.regs[i] = guest_regs.regs_arm.r[i];
}
regs->reset(unwindstack::RegsArm::Read(&arm_user_regs));
-
- g_guest_arch = Architecture::ARM32;
break;
}
#if defined(__LP64__)
@@ -508,8 +501,6 @@
arm64_user_regs.sp = guest_regs.regs_arm64.sp;
arm64_user_regs.pc = guest_regs.regs_arm64.ip;
regs->reset(unwindstack::RegsArm64::Read(&arm64_user_regs));
-
- g_guest_arch = Architecture::ARM64;
break;
}
case NATIVE_BRIDGE_ARCH_RISCV64: {
@@ -520,8 +511,6 @@
riscv64_user_regs.regs[i] = guest_regs.regs_riscv64.x[i];
}
regs->reset(unwindstack::RegsRiscv64::Read(&riscv64_user_regs, tid));
-
- g_guest_arch = Architecture::RISCV64;
break;
}
#endif
@@ -786,32 +775,8 @@
{
ATRACE_NAME("engrave_tombstone");
- unwindstack::ArchEnum regs_arch = unwindstack::ARCH_UNKNOWN;
- switch (g_guest_arch) {
- case Architecture::ARM32: {
- regs_arch = unwindstack::ARCH_ARM;
- break;
- }
- case Architecture::ARM64: {
- regs_arch = unwindstack::ARCH_ARM64;
- break;
- }
- case Architecture::RISCV64: {
- regs_arch = unwindstack::ARCH_RISCV64;
- break;
- }
- default: {
- }
- }
- if (regs_arch == unwindstack::ARCH_UNKNOWN) {
- engrave_tombstone(std::move(g_output_fd), std::move(g_proto_fd), &unwinder, thread_info,
- g_target_thread, process_info, &open_files, &amfd_data);
- } else {
- unwindstack::AndroidRemoteUnwinder guest_unwinder(vm_pid, regs_arch);
- engrave_tombstone(std::move(g_output_fd), std::move(g_proto_fd), &unwinder, thread_info,
- g_target_thread, process_info, &open_files, &amfd_data, &g_guest_arch,
- &guest_unwinder);
- }
+ engrave_tombstone(std::move(g_output_fd), std::move(g_proto_fd), &unwinder, thread_info,
+ g_target_thread, process_info, &open_files, &amfd_data);
}
}
diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h b/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h
index 6371dbe..be999e0 100644
--- a/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h
+++ b/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h
@@ -28,7 +28,6 @@
#include <android-base/unique_fd.h>
#include "open_files_list.h"
-#include "tombstone.pb.h"
#include "types.h"
// Forward declarations
@@ -55,17 +54,14 @@
unwindstack::AndroidUnwinder* unwinder,
const std::map<pid_t, ThreadInfo>& thread_info, pid_t target_thread,
const ProcessInfo& process_info, OpenFilesList* open_files,
- std::string* amfd_data, Architecture* guest_arch = nullptr,
- unwindstack::AndroidUnwinder* guest_unwinder = nullptr);
+ std::string* amfd_data);
void engrave_tombstone_ucontext(int tombstone_fd, int proto_fd, uint64_t abort_msg_address,
siginfo_t* siginfo, ucontext_t* ucontext);
void engrave_tombstone_proto(Tombstone* tombstone, unwindstack::AndroidUnwinder* unwinder,
const std::map<pid_t, ThreadInfo>& threads, pid_t target_thread,
- const ProcessInfo& process_info, const OpenFilesList* open_files,
- Architecture* guest_arch,
- unwindstack::AndroidUnwinder* guest_unwinder);
+ const ProcessInfo& process_info, const OpenFilesList* open_files);
bool tombstone_proto_to_text(
const Tombstone& tombstone,
diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp
index 0da2ca7..5a416d6 100644
--- a/debuggerd/libdebuggerd/tombstone.cpp
+++ b/debuggerd/libdebuggerd/tombstone.cpp
@@ -125,12 +125,10 @@
unwindstack::AndroidUnwinder* unwinder,
const std::map<pid_t, ThreadInfo>& threads, pid_t target_thread,
const ProcessInfo& process_info, OpenFilesList* open_files,
- std::string* amfd_data, Architecture* guest_arch,
- unwindstack::AndroidUnwinder* guest_unwinder) {
+ std::string* amfd_data) {
// Don't copy log messages to tombstone unless this is a development device.
Tombstone tombstone;
- engrave_tombstone_proto(&tombstone, unwinder, threads, target_thread, process_info, open_files,
- guest_arch, guest_unwinder);
+ engrave_tombstone_proto(&tombstone, unwinder, threads, target_thread, process_info, open_files);
if (proto_fd != -1) {
if (!tombstone.SerializeToFileDescriptor(proto_fd.get())) {
diff --git a/debuggerd/libdebuggerd/tombstone_proto.cpp b/debuggerd/libdebuggerd/tombstone_proto.cpp
index 5e170df..5546b7b 100644
--- a/debuggerd/libdebuggerd/tombstone_proto.cpp
+++ b/debuggerd/libdebuggerd/tombstone_proto.cpp
@@ -482,8 +482,7 @@
}
static void dump_thread(Tombstone* tombstone, unwindstack::AndroidUnwinder* unwinder,
- const ThreadInfo& thread_info, bool memory_dump = false,
- unwindstack::AndroidUnwinder* guest_unwinder = nullptr) {
+ const ThreadInfo& thread_info, bool memory_dump = false) {
Thread thread;
thread.set_id(thread_info.tid);
@@ -510,26 +509,6 @@
auto& threads = *tombstone->mutable_threads();
threads[thread_info.tid] = thread;
-
- if (guest_unwinder) {
- if (!thread_info.guest_registers) {
- async_safe_format_log(ANDROID_LOG_INFO, LOG_TAG,
- "No guest state registers information for tid %d", thread_info.tid);
- return;
- }
- Thread guest_thread;
- unwindstack::AndroidUnwinderData guest_data;
- guest_data.saved_initial_regs = std::make_optional<std::unique_ptr<unwindstack::Regs>>();
- if (guest_unwinder->Unwind(thread_info.guest_registers.get(), guest_data)) {
- dump_thread_backtrace(guest_data.frames, guest_thread);
- } else {
- async_safe_format_log(ANDROID_LOG_ERROR, LOG_TAG,
- "Unwind guest state registers failed for tid %d: Error %s",
- thread_info.tid, guest_data.GetErrorString().c_str());
- }
- dump_registers(guest_unwinder, *guest_data.saved_initial_regs, guest_thread, memory_dump);
- *tombstone->mutable_guest_thread() = guest_thread;
- }
}
static void dump_mappings(Tombstone* tombstone, unwindstack::Maps* maps,
@@ -707,17 +686,10 @@
void engrave_tombstone_proto(Tombstone* tombstone, unwindstack::AndroidUnwinder* unwinder,
const std::map<pid_t, ThreadInfo>& threads, pid_t target_tid,
- const ProcessInfo& process_info, const OpenFilesList* open_files,
- Architecture* guest_arch,
- unwindstack::AndroidUnwinder* guest_unwinder) {
+ const ProcessInfo& process_info, const OpenFilesList* open_files) {
Tombstone result;
result.set_arch(get_arch());
- if (guest_arch != nullptr) {
- result.set_guest_arch(*guest_arch);
- } else {
- result.set_guest_arch(Architecture::NONE);
- }
result.set_build_fingerprint(android::base::GetProperty("ro.build.fingerprint", "unknown"));
result.set_revision(android::base::GetProperty("ro.revision", "unknown"));
result.set_timestamp(get_timestamp());
@@ -778,7 +750,7 @@
dump_abort_message(&result, unwinder->GetProcessMemory(), process_info);
dump_crash_details(&result, unwinder->GetProcessMemory(), process_info);
// Dump the target thread, but save the memory around the registers.
- dump_thread(&result, unwinder, target_thread, /* memory_dump */ true, guest_unwinder);
+ dump_thread(&result, unwinder, target_thread, /* memory_dump */ true);
for (const auto& [tid, thread_info] : threads) {
if (tid != target_tid) {
diff --git a/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp b/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp
index 7b29692..08c1cc0 100644
--- a/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp
+++ b/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp
@@ -79,8 +79,8 @@
return describe_end(value, desc);
}
-static const char* abi_string(const Architecture& arch) {
- switch (arch) {
+static const char* abi_string(const Tombstone& tombstone) {
+ switch (tombstone.arch()) {
case Architecture::ARM32:
return "arm";
case Architecture::ARM64:
@@ -578,37 +578,11 @@
}
}
-static void print_guest_thread(CallbackType callback, const Tombstone& tombstone,
- const Thread& guest_thread) {
- CBS("--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---");
- CBS("Guest thread information");
- print_thread_registers(callback, tombstone, guest_thread, true);
-
- CBS("");
- CB(true, "%d total frames", guest_thread.current_backtrace().size());
- CB(true, "backtrace:");
- print_backtrace(callback, tombstone, guest_thread.current_backtrace(), true);
-
- print_thread_memory_dump(callback, tombstone, guest_thread);
-
- CBS("");
-
- // No memory maps to print.
- if (!tombstone.memory_mappings().empty()) {
- print_memory_maps(callback, tombstone);
- } else {
- CBS("No memory maps found");
- }
-}
-
bool tombstone_proto_to_text(const Tombstone& tombstone, CallbackType callback) {
CBL("*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***");
CBL("Build fingerprint: '%s'", tombstone.build_fingerprint().c_str());
CBL("Revision: '%s'", tombstone.revision().c_str());
- CBL("ABI: '%s'", abi_string(tombstone.arch()));
- if (tombstone.guest_arch() != Architecture::NONE) {
- CBL("Guest architecture: '%s'", abi_string(tombstone.guest_arch()));
- }
+ CBL("ABI: '%s'", abi_string(tombstone));
CBL("Timestamp: %s", tombstone.timestamp().c_str());
CBL("Process uptime: %ds", tombstone.process_uptime());
@@ -661,10 +635,5 @@
print_logs(callback, tombstone, 0);
- // Process guest thread
- if (tombstone.has_guest_thread()) {
- print_guest_thread(callback, tombstone, tombstone.guest_thread());
- }
-
return true;
}
diff --git a/debuggerd/proto/tombstone.proto b/debuggerd/proto/tombstone.proto
index 4ddc54f..e70d525 100644
--- a/debuggerd/proto/tombstone.proto
+++ b/debuggerd/proto/tombstone.proto
@@ -22,7 +22,6 @@
message Tombstone {
Architecture arch = 1;
- Architecture guest_arch = 24;
string build_fingerprint = 2;
string revision = 3;
string timestamp = 4;
@@ -43,7 +42,6 @@
repeated Cause causes = 15;
map<uint32, Thread> threads = 16;
- Thread guest_thread = 25;
repeated MemoryMapping memory_mappings = 17;
repeated LogBuffer log_buffers = 18;
repeated FD open_fds = 19;
@@ -51,7 +49,7 @@
uint32 page_size = 22;
bool has_been_16kb_mode = 23;
- reserved 26 to 999;
+ reserved 24 to 999;
}
enum Architecture {
@@ -60,9 +58,8 @@
X86 = 2;
X86_64 = 3;
RISCV64 = 4;
- NONE = 5;
- reserved 6 to 999;
+ reserved 5 to 999;
}
message Signal {