Revert "[Berberis][CrashReporting] Extend ThreadInfo to have gue..."
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: I32b745cca95a619b78bdce0a7d948ac479d42f21
diff --git a/debuggerd/Android.bp b/debuggerd/Android.bp
index 0c5543e..3a882ea 100644
--- a/debuggerd/Android.bp
+++ b/debuggerd/Android.bp
@@ -452,7 +452,6 @@
header_libs: [
"bionic_libc_platform_headers",
- "libnative_bridge_support_accessor_headers",
],
static_libs: [
@@ -462,8 +461,6 @@
"libtombstone_proto",
"libprotobuf-cpp-lite",
-
- "libnative_bridge_guest_state_accessor",
],
shared_libs: [
@@ -479,15 +476,6 @@
// Required for tests.
required: ["crash_dump.policy"],
-
- target: {
- android: {
- header_libs: [
- "libnative_bridge_support_accessor_headers", // For dlext_namespaces.h
- ],
- shared_libs: ["libdl_android"], // For android_get_exported_namespace implementation
- },
- },
}
cc_binary {
diff --git a/debuggerd/crash_dump.cpp b/debuggerd/crash_dump.cpp
index bc00c86..203b485 100644
--- a/debuggerd/crash_dump.cpp
+++ b/debuggerd/crash_dump.cpp
@@ -25,7 +25,6 @@
#include <sys/wait.h>
#include <unistd.h>
-#include <cstdint>
#include <limits>
#include <map>
#include <memory>
@@ -43,7 +42,6 @@
#include <android-base/unique_fd.h>
#include <bionic/macros.h>
#include <bionic/reserved_signals.h>
-#include <bionic/tls_defines.h>
#include <cutils/sockets.h>
#include <log/log.h>
#include <private/android_filesystem_config.h>
@@ -54,18 +52,7 @@
#include <unwindstack/AndroidUnwinder.h>
#include <unwindstack/Error.h>
-#include <unwindstack/MachineArm.h>
-#include <unwindstack/MachineArm64.h>
-#include <unwindstack/MachineRiscv64.h>
#include <unwindstack/Regs.h>
-#include <unwindstack/RegsArm.h>
-#include <unwindstack/RegsArm64.h>
-#include <unwindstack/RegsRiscv64.h>
-#include <unwindstack/UserArm.h>
-#include <unwindstack/UserArm64.h>
-#include <unwindstack/UserRiscv64.h>
-
-#include <native_bridge_support/guest_state_accessor/accessor.h>
#include "libdebuggerd/backtrace.h"
#include "libdebuggerd/tombstone.h"
@@ -416,107 +403,6 @@
sigaction(SIGPIPE, &action, nullptr);
}
-static bool PtracePeek(int request, pid_t tid, uintptr_t addr, void* data, std::string err_msg,
- uintptr_t* result) {
- errno = 0;
- *result = ptrace(request, tid, addr, data);
- if (errno != 0) {
- PLOG(ERROR) << err_msg;
- return false;
- }
- return true;
-}
-
-static bool GetGuestRegistersFromCrashedProcess([[maybe_unused]] pid_t tid,
- NativeBridgeGuestRegs* guest_regs) {
- auto process_memory = unwindstack::Memory::CreateProcessMemoryCached(tid);
-
- uintptr_t header_ptr = 0;
- uintptr_t base = 0;
-#if defined(__x86_64__)
- if (!PtracePeek(PTRACE_PEEKUSER, tid, offsetof(user_regs_struct, fs_base), nullptr,
- "failed to read thread register for thread " + std::to_string(tid), &base)) {
- return false;
- }
-#elif defined(__aarch64__)
- // base is implicitly casted to uint64_t.
- struct iovec pt_iov {
- .iov_base = &base, .iov_len = sizeof(base),
- };
-
- if (ptrace(PTRACE_GETREGSET, tid, NT_ARM_TLS, &pt_iov) != 0) {
- PLOG(ERROR) << "failed to read thread register for thread " << tid;
- }
-#else
- // TODO(b/339287219): Add case for Riscv host.
- return false;
-#endif
- auto ptr_to_guest_slot = base + TLS_SLOT_NATIVE_BRIDGE_GUEST_STATE * sizeof(uintptr_t);
- if (!process_memory->ReadFully(ptr_to_guest_slot, &header_ptr, sizeof(uintptr_t))) {
- PLOG(ERROR) << "failed to get guest state TLS slot content for thread " << tid;
- return false;
- }
-
- NativeBridgeGuestStateHeader header;
- if (!process_memory->ReadFully(header_ptr, &header, sizeof(NativeBridgeGuestStateHeader))) {
- PLOG(ERROR) << "failed to get the guest state header for thread " << tid;
- return false;
- }
- if (header.signature != NATIVE_BRIDGE_GUEST_STATE_SIGNATURE) {
- // Return when ptr points to unmapped memory or no valid guest state.
- return false;
- }
- auto guest_state_data_copy = std::make_unique<unsigned char[]>(header.guest_state_data_size);
- if (!process_memory->ReadFully(reinterpret_cast<uintptr_t>(header.guest_state_data),
- guest_state_data_copy.get(), header.guest_state_data_size)) {
- PLOG(ERROR) << "failed to read the guest state data for thread " << tid;
- return false;
- }
-
- LoadGuestStateRegisters(guest_state_data_copy.get(), header.guest_state_data_size, guest_regs);
- return true;
-}
-
-static void ReadGuestRegisters(std::unique_ptr<unwindstack::Regs>* regs, pid_t tid) {
- NativeBridgeGuestRegs guest_regs;
- if (!GetGuestRegistersFromCrashedProcess(tid, &guest_regs)) {
- return;
- }
-
- switch (guest_regs.guest_arch) {
- case NATIVE_BRIDGE_ARCH_ARM: {
- unwindstack::arm_user_regs arm_user_regs = {};
- for (size_t i = 0; i < unwindstack::ARM_REG_LAST; i++) {
- arm_user_regs.regs[i] = guest_regs.regs_arm.r[i];
- }
- regs->reset(unwindstack::RegsArm::Read(&arm_user_regs));
- break;
- }
-#if defined(__LP64__)
- case NATIVE_BRIDGE_ARCH_ARM64: {
- unwindstack::arm64_user_regs arm64_user_regs = {};
- for (size_t i = 0; i < unwindstack::ARM64_REG_R31; i++) {
- arm64_user_regs.regs[i] = guest_regs.regs_arm64.x[i];
- }
- 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));
- break;
- }
- case NATIVE_BRIDGE_ARCH_RISCV64: {
- unwindstack::riscv64_user_regs riscv64_user_regs = {};
- // RISCV64_REG_PC is at the first position.
- riscv64_user_regs.regs[0] = guest_regs.regs_riscv64.ip;
- for (size_t i = 1; i < unwindstack::RISCV64_REG_REAL_COUNT; i++) {
- riscv64_user_regs.regs[i] = guest_regs.regs_riscv64.x[i];
- }
- regs->reset(unwindstack::RegsRiscv64::Read(&riscv64_user_regs, tid));
- break;
- }
-#endif
- }
-}
-
int main(int argc, char** argv) {
DefuseSignalHandlers();
InstallSigPipeHandler();
@@ -651,7 +537,6 @@
}
if (thread == g_target_thread) {
- ReadGuestRegisters(&info.guest_registers, thread);
// Read the thread's registers along with the rest of the crash info out of the pipe.
ReadCrashInfo(input_pipe, &siginfo, &info.registers, &process_info, &recoverable_crash);
info.siginfo = &siginfo;
diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/types.h b/debuggerd/libdebuggerd/include/libdebuggerd/types.h
index c799f24..4d69658 100644
--- a/debuggerd/libdebuggerd/include/libdebuggerd/types.h
+++ b/debuggerd/libdebuggerd/include/libdebuggerd/types.h
@@ -39,8 +39,6 @@
int signo = 0;
siginfo_t* siginfo = nullptr;
-
- std::unique_ptr<unwindstack::Regs> guest_registers;
};
// This struct is written into a pipe from inside the crashing process.