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 {
