Merge "snapuserd: Use GTEST_SKIP in snapuserd_test." into android15-tests-dev am: a8537415c1

Original change: https://android-review.googlesource.com/c/platform/system/core/+/3365128

Change-Id: I12b0472a65d5c11ece024801392cc265cf0c5049
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..c77a803
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,5 @@
+dirgroup {
+    name: "trusty_dirgroup_system_core",
+    dirs: ["."],
+    visibility: ["//trusty/vendor/google/aosp/scripts"],
+}
diff --git a/METADATA b/METADATA
deleted file mode 100644
index d97975c..0000000
--- a/METADATA
+++ /dev/null
@@ -1,3 +0,0 @@
-third_party {
-  license_type: NOTICE
-}
diff --git a/debuggerd/Android.bp b/debuggerd/Android.bp
index 0c5543e..3257a2c 100644
--- a/debuggerd/Android.bp
+++ b/debuggerd/Android.bp
@@ -200,22 +200,18 @@
     ramdisk_available: true,
     recovery_available: true,
     vendor_ramdisk_available: true,
+    host_supported: true,
 
     local_include_dirs: ["libdebuggerd/include"],
     export_include_dirs: ["libdebuggerd/include"],
 
     srcs: [
         "libdebuggerd/tombstone_proto_to_text.cpp",
-    ],
-
-    header_libs: [
-        "bionic_libc_platform_headers",
+        "libdebuggerd/utility_host.cpp",
     ],
 
     static_libs: [
         "libbase",
-        "liblog_for_runtime_apex",
-        "libunwindstack",
     ],
 
     whole_static_libs: [
@@ -223,6 +219,10 @@
         "libprotobuf-cpp-lite",
     ],
 
+    shared_libs: [
+        "liblog",
+    ],
+
     apex_available: [
         "//apex_available:platform",
         "com.android.runtime",
@@ -331,15 +331,18 @@
 
 cc_binary {
     name: "pbtombstone",
+    host_supported: true,
     defaults: ["debuggerd_defaults"],
-    srcs: ["pbtombstone.cpp"],
+    srcs: [
+        "pbtombstone.cpp",
+        "tombstone_symbolize.cpp",
+    ],
     static_libs: [
         "libbase",
-        "libdebuggerd",
+        "libdebuggerd_tombstone_proto_to_text",
         "liblog",
         "libprotobuf-cpp-lite",
         "libtombstone_proto",
-        "libunwindstack",
     ],
 }
 
@@ -359,6 +362,7 @@
         "libdebuggerd/test/dump_memory_test.cpp",
         "libdebuggerd/test/elf_fake.cpp",
         "libdebuggerd/test/log_fake.cpp",
+        "libdebuggerd/test/mte_stack_record_test.cpp",
         "libdebuggerd/test/open_files_list_test.cpp",
         "libdebuggerd/test/tombstone_proto_to_text_test.cpp",
     ],
diff --git a/debuggerd/crash_dump.cpp b/debuggerd/crash_dump.cpp
index 8dd2b0d..15e8319 100644
--- a/debuggerd/crash_dump.cpp
+++ b/debuggerd/crash_dump.cpp
@@ -470,14 +470,12 @@
   }
 
   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) {
+  if (!process_memory->ReadFully(header_ptr, &header, sizeof(NativeBridgeGuestStateHeader)) ||
+      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)) {
@@ -662,6 +660,15 @@
         info.pac_enabled_keys = -1;
       }
 
+#if defined(__aarch64__)
+      struct iovec tls_iov = {
+          &info.tls,
+          sizeof(info.tls),
+      };
+      if (ptrace(PTRACE_GETREGSET, thread, NT_ARM_TLS, reinterpret_cast<void*>(&tls_iov)) == -1) {
+        info.tls = 0;
+      }
+#endif
       if (thread == g_target_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);
diff --git a/debuggerd/debuggerd_test.cpp b/debuggerd/debuggerd_test.cpp
index baddf65..5bdc946 100644
--- a/debuggerd/debuggerd_test.cpp
+++ b/debuggerd/debuggerd_test.cpp
@@ -18,6 +18,7 @@
 #include <dlfcn.h>
 #include <err.h>
 #include <fcntl.h>
+#include <inttypes.h>
 #include <linux/prctl.h>
 #include <malloc.h>
 #include <pthread.h>
@@ -69,7 +70,7 @@
 #include "crash_test.h"
 #include "debuggerd/handler.h"
 #include "gtest/gtest.h"
-#include "libdebuggerd/utility.h"
+#include "libdebuggerd/utility_host.h"
 #include "protocol.h"
 #include "tombstoned/tombstoned.h"
 #include "util.h"
@@ -1771,6 +1772,75 @@
   AssertDeath(SIGABRT);
 }
 
+extern "C" void malloc_enable();
+extern "C" void malloc_disable();
+
+TEST_F(CrasherTest, seccomp_tombstone_no_allocation) {
+  int intercept_result;
+  unique_fd output_fd;
+
+  static const auto dump_type = kDebuggerdTombstone;
+  StartProcess(
+      []() {
+        std::thread a(foo);
+        std::thread b(bar);
+
+        std::this_thread::sleep_for(100ms);
+
+        // Disable allocations to verify that nothing in the fallback
+        // signal handler does an allocation.
+        malloc_disable();
+        raise_debugger_signal(dump_type);
+        _exit(0);
+      },
+      &seccomp_fork);
+
+  StartIntercept(&output_fd, dump_type);
+  FinishCrasher();
+  AssertDeath(0);
+  FinishIntercept(&intercept_result);
+  ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
+
+  std::string result;
+  ConsumeFd(std::move(output_fd), &result);
+  ASSERT_BACKTRACE_FRAME(result, "raise_debugger_signal");
+  ASSERT_BACKTRACE_FRAME(result, "foo");
+  ASSERT_BACKTRACE_FRAME(result, "bar");
+}
+
+TEST_F(CrasherTest, seccomp_backtrace_no_allocation) {
+  int intercept_result;
+  unique_fd output_fd;
+
+  static const auto dump_type = kDebuggerdNativeBacktrace;
+  StartProcess(
+      []() {
+        std::thread a(foo);
+        std::thread b(bar);
+
+        std::this_thread::sleep_for(100ms);
+
+        // Disable allocations to verify that nothing in the fallback
+        // signal handler does an allocation.
+        malloc_disable();
+        raise_debugger_signal(dump_type);
+        _exit(0);
+      },
+      &seccomp_fork);
+
+  StartIntercept(&output_fd, dump_type);
+  FinishCrasher();
+  AssertDeath(0);
+  FinishIntercept(&intercept_result);
+  ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
+
+  std::string result;
+  ConsumeFd(std::move(output_fd), &result);
+  ASSERT_BACKTRACE_FRAME(result, "raise_debugger_signal");
+  ASSERT_BACKTRACE_FRAME(result, "foo");
+  ASSERT_BACKTRACE_FRAME(result, "bar");
+}
+
 TEST_F(CrasherTest, competing_tracer) {
   int intercept_result;
   unique_fd output_fd;
@@ -3232,3 +3302,30 @@
   ASSERT_MATCH(result, ":\\s*This line has a newline.");
   ASSERT_MATCH(result, ":\\s*This is on the next line.");
 }
+
+TEST_F(CrasherTest, log_with_non_utf8) {
+  StartProcess([]() { LOG(FATAL) << "Invalid UTF-8: \xA0\xB0\xC0\xD0 and some other data."; });
+
+  unique_fd output_fd;
+  StartIntercept(&output_fd);
+  FinishCrasher();
+  AssertDeath(SIGABRT);
+  int intercept_result;
+  FinishIntercept(&intercept_result);
+  ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
+
+  std::string result;
+  ConsumeFd(std::move(output_fd), &result);
+  // Verify the abort message is sanitized properly.
+  size_t pos = result.find(
+      "Abort message: 'Invalid UTF-8: "
+      "\x5C\x32\x34\x30\x5C\x32\x36\x30\x5C\x33\x30\x30\x5C\x33\x32\x30 and some other data.'");
+  EXPECT_TRUE(pos != std::string::npos) << "Couldn't find sanitized abort message: " << result;
+
+  // Make sure that the log message is sanitized properly too.
+  EXPECT_TRUE(
+      result.find("Invalid UTF-8: \x5C\x32\x34\x30\x5C\x32\x36\x30\x5C\x33\x30\x30\x5C\x33\x32\x30 "
+                  "and some other data.",
+                  pos + 30) != std::string::npos)
+      << "Couldn't find sanitized log message: " << result;
+}
diff --git a/debuggerd/handler/debuggerd_fallback.cpp b/debuggerd/handler/debuggerd_fallback.cpp
index 4721391..8ab5f25 100644
--- a/debuggerd/handler/debuggerd_fallback.cpp
+++ b/debuggerd/handler/debuggerd_fallback.cpp
@@ -48,50 +48,69 @@
 extern "C" bool __linker_enable_fallback_allocator();
 extern "C" void __linker_disable_fallback_allocator();
 
-// This is incredibly sketchy to do inside of a signal handler, especially when libbacktrace
-// uses the C++ standard library throughout, but this code runs in the linker, so we'll be using
-// the linker's malloc instead of the libc one. Switch it out for a replacement, just in case.
-//
-// This isn't the default method of dumping because it can fail in cases such as address space
-// exhaustion.
+// This file implements a fallback path for processes that do not allow the
+// normal fork and exec of crash_dump to handle crashes/unwinds.
+// The issue is that all of this happens from within a signal handler, which
+// can cause problems since this code uses the linker allocator which is not
+// thread safe. In order to avoid any problems allocating, the code calls
+// a function to switch to use a fallback allocator in the linker that will
+// only be used for the current thread. All of the libunwindstack code does
+// allocations using C++ stl, but should be fine since the code runs in the
+// linker and should use the fallback handler.
+
+// This method can still fail if the virtual space is exhausted on a 32 bit
+// process or mmap failing due to hitting the maximum number of maps (65535
+// total maps) on a 64 bit process.
+
+// Class to handle automatically turning on and off the fallback allocator.
+class ScopedUseFallbackAllocator {
+ public:
+  ScopedUseFallbackAllocator() { Enable(); }
+
+  ~ScopedUseFallbackAllocator() { Disable(); }
+
+  bool Enable() {
+    if (!enabled_) {
+      enabled_ = __linker_enable_fallback_allocator();
+      if (!enabled_) {
+        async_safe_format_log(ANDROID_LOG_ERROR, "libc",
+                              "Unable to enable fallback allocator, already in use.");
+      }
+    }
+    return enabled_;
+  }
+
+  void Disable() {
+    if (enabled_) {
+      __linker_disable_fallback_allocator();
+      enabled_ = false;
+    }
+  }
+
+  bool enabled() { return enabled_; }
+
+ private:
+  bool enabled_ = false;
+};
+
 static void debuggerd_fallback_trace(int output_fd, ucontext_t* ucontext) {
-  if (!__linker_enable_fallback_allocator()) {
-    async_safe_format_log(ANDROID_LOG_ERROR, "libc", "fallback allocator already in use");
-    return;
-  }
+  std::unique_ptr<unwindstack::Regs> regs;
 
-  {
-    std::unique_ptr<unwindstack::Regs> regs;
+  ThreadInfo thread;
+  thread.pid = getpid();
+  thread.tid = gettid();
+  thread.thread_name = get_thread_name(gettid());
+  thread.registers.reset(
+      unwindstack::Regs::CreateFromUcontext(unwindstack::Regs::CurrentArch(), ucontext));
 
-    ThreadInfo thread;
-    thread.pid = getpid();
-    thread.tid = gettid();
-    thread.thread_name = get_thread_name(gettid());
-    thread.registers.reset(
-        unwindstack::Regs::CreateFromUcontext(unwindstack::Regs::CurrentArch(), ucontext));
-
-    // Do not use the thread cache here because it will call pthread_key_create
-    // which doesn't work in linker code. See b/189803009.
-    // Use a normal cached object because the thread is stopped, and there
-    // is no chance of data changing between reads.
-    auto process_memory = unwindstack::Memory::CreateProcessMemoryCached(getpid());
-    // TODO: Create this once and store it in a global?
-    unwindstack::AndroidLocalUnwinder unwinder(process_memory);
-    dump_backtrace_thread(output_fd, &unwinder, thread);
-  }
-  __linker_disable_fallback_allocator();
-}
-
-static void debuggerd_fallback_tombstone(int output_fd, int proto_fd, ucontext_t* ucontext,
-                                         siginfo_t* siginfo, void* abort_message) {
-  if (!__linker_enable_fallback_allocator()) {
-    async_safe_format_log(ANDROID_LOG_ERROR, "libc", "fallback allocator already in use");
-    return;
-  }
-
-  engrave_tombstone_ucontext(output_fd, proto_fd, reinterpret_cast<uintptr_t>(abort_message),
-                             siginfo, ucontext);
-  __linker_disable_fallback_allocator();
+  // Do not use the thread cache here because it will call pthread_key_create
+  // which doesn't work in linker code. See b/189803009.
+  // Use a normal cached object because the thread is stopped, and there
+  // is no chance of data changing between reads.
+  auto process_memory = unwindstack::Memory::CreateProcessMemoryCached(getpid());
+  // TODO: Create this once and store it in a global?
+  unwindstack::AndroidLocalUnwinder unwinder(process_memory);
+  dump_backtrace_thread(output_fd, &unwinder, thread);
 }
 
 static bool forward_output(int src_fd, int dst_fd, pid_t expected_tid) {
@@ -154,6 +173,11 @@
 }
 
 static void trace_handler(siginfo_t* info, ucontext_t* ucontext) {
+  ScopedUseFallbackAllocator allocator;
+  if (!allocator.enabled()) {
+    return;
+  }
+
   static std::atomic<uint64_t> trace_output(pack_thread_fd(-1, -1));
 
   if (info->si_value.sival_ptr == kDebuggerdFallbackSivalPtrRequestDump) {
@@ -181,6 +205,11 @@
       async_safe_format_log(ANDROID_LOG_ERROR, "libc", "failed to write to output fd");
     }
 
+    // Stop using the fallback allocator before the close. This will prevent
+    // a race condition where the thread backtracing all of the threads tries
+    // to re-acquire the fallback allocator.
+    allocator.Disable();
+
     close(fd);
     return;
   }
@@ -210,10 +239,15 @@
 
   // Send a signal to all of our siblings, asking them to dump their stack.
   pid_t current_tid = gettid();
-  if (!iterate_tids(current_tid, [&output_fd, &current_tid](pid_t tid) {
+  if (!iterate_tids(current_tid, [&allocator, &output_fd, &current_tid](pid_t tid) {
         if (current_tid == tid) {
           return;
         }
+
+        if (!allocator.enabled()) {
+          return;
+        }
+
         // Use a pipe, to be able to detect situations where the thread gracefully exits before
         // receiving our signal.
         unique_fd pipe_read, pipe_write;
@@ -233,22 +267,29 @@
           return;
         }
 
+        // Disable our use of the fallback allocator while the target thread
+        // is getting the backtrace.
+        allocator.Disable();
+
         siginfo_t siginfo = {};
         siginfo.si_code = SI_QUEUE;
         siginfo.si_value.sival_ptr = kDebuggerdFallbackSivalPtrRequestDump;
         siginfo.si_pid = getpid();
         siginfo.si_uid = getuid();
 
-        if (syscall(__NR_rt_tgsigqueueinfo, getpid(), tid, BIONIC_SIGNAL_DEBUGGER, &siginfo) != 0) {
+        if (syscall(__NR_rt_tgsigqueueinfo, getpid(), tid, BIONIC_SIGNAL_DEBUGGER, &siginfo) == 0) {
+          if (!forward_output(pipe_read.get(), output_fd.get(), tid)) {
+            async_safe_format_log(ANDROID_LOG_ERROR, "libc",
+                                  "timeout expired while waiting for thread %d to dump", tid);
+          }
+        } else {
           async_safe_format_log(ANDROID_LOG_ERROR, "libc", "failed to send trace signal to %d: %s",
                                 tid, strerror(errno));
-          return;
         }
 
-        bool success = forward_output(pipe_read.get(), output_fd.get(), tid);
-        if (!success) {
-          async_safe_format_log(ANDROID_LOG_ERROR, "libc",
-                                "timeout expired while waiting for thread %d to dump", tid);
+        // The thread should be finished now, so try and re-enable the fallback allocator.
+        if (!allocator.Enable()) {
+          return;
         }
 
         // Regardless of whether the poll succeeds, check to see if the thread took fd ownership.
@@ -260,14 +301,15 @@
             close(fd);
           }
         }
-
-        return;
       })) {
     async_safe_format_log(ANDROID_LOG_ERROR, "libc", "failed to open /proc/%d/task: %s",
                           current_tid, strerror(errno));
   }
 
-  dump_backtrace_footer(output_fd.get());
+  if (allocator.enabled()) {
+    dump_backtrace_footer(output_fd.get());
+  }
+
   tombstoned_notify_completion(tombstone_socket.get());
 }
 
@@ -295,7 +337,13 @@
   unique_fd tombstone_socket, output_fd, proto_fd;
   bool tombstoned_connected = tombstoned_connect(getpid(), &tombstone_socket, &output_fd, &proto_fd,
                                                  kDebuggerdTombstoneProto);
-  debuggerd_fallback_tombstone(output_fd.get(), proto_fd.get(), ucontext, info, abort_message);
+  {
+    ScopedUseFallbackAllocator allocator;
+    if (allocator.enabled()) {
+      engrave_tombstone_ucontext(output_fd.get(), proto_fd.get(),
+                                 reinterpret_cast<uintptr_t>(abort_message), info, ucontext);
+    }
+  }
   if (tombstoned_connected) {
     tombstoned_notify_completion(tombstone_socket.get());
   }
diff --git a/debuggerd/handler/debuggerd_handler.cpp b/debuggerd/handler/debuggerd_handler.cpp
index e26746b..88278ca 100644
--- a/debuggerd/handler/debuggerd_handler.cpp
+++ b/debuggerd/handler/debuggerd_handler.cpp
@@ -36,10 +36,12 @@
 #include <sys/uio.h>
 #include <sys/un.h>
 #include <sys/wait.h>
+#include <time.h>
 #include <unistd.h>
 
 #include <android-base/macros.h>
 #include <android-base/parsebool.h>
+#include <android-base/parseint.h>
 #include <android-base/properties.h>
 #include <android-base/unique_fd.h>
 #include <async_safe/log.h>
@@ -115,6 +117,59 @@
          (permissive_env && ParseBool(permissive_env) == ParseBoolResult::kTrue);
 }
 
+static bool parse_uint_with_error_reporting(const char* s, const char* name, int* v) {
+  if (android::base::ParseInt(s, v) && *v >= 0) {
+    return true;
+  }
+  async_safe_format_log(ANDROID_LOG_ERROR, "libc", "invalid %s: %s", name, s);
+  return false;
+}
+
+// We cannot use base::GetIntProperty, because that internally uses
+// std::string, which allocates.
+static bool property_parse_int(const char* name, int* out) {
+  const prop_info* pi = __system_property_find(name);
+  if (!pi) return false;
+  struct cookie_t {
+    int* out;
+    bool empty;
+  } cookie{out, true};
+  __system_property_read_callback(
+      pi,
+      [](void* raw_cookie, const char* name, const char* value, uint32_t) {
+        // Property is set to empty value, ignoring.
+        if (!*value) return;
+        cookie_t* cookie = reinterpret_cast<cookie_t*>(raw_cookie);
+        if (parse_uint_with_error_reporting(value, name, cookie->out)) cookie->empty = false;
+      },
+      &cookie);
+  return !cookie.empty;
+}
+
+static int permissive_mte_renable_timer() {
+  if (char* env = getenv("MTE_PERMISSIVE_REENABLE_TIME_CPUMS")) {
+    int v;
+    if (parse_uint_with_error_reporting(env, "MTE_PERMISSIVE_REENABLE_TIME_CPUMS", &v)) return v;
+  }
+
+  char process_sysprop_name[512];
+  async_safe_format_buffer(process_sysprop_name, sizeof(process_sysprop_name),
+                           "persist.sys.mte.permissive_reenable_timer.process.%s", getprogname());
+  int v;
+  if (property_parse_int(process_sysprop_name, &v)) return v;
+  if (property_parse_int("persist.sys.mte.permissive_reenable_timer.default", &v)) return v;
+  char process_deviceconf_sysprop_name[512];
+  async_safe_format_buffer(
+      process_deviceconf_sysprop_name, sizeof(process_deviceconf_sysprop_name),
+      "persist.device_config.memory_safety_native.permissive_reenable_timer.process.%s",
+      getprogname());
+  if (property_parse_int(process_deviceconf_sysprop_name, &v)) return v;
+  if (property_parse_int(
+          "persist.device_config.memory_safety_native.permissive_reenable_timer.default", &v))
+    return v;
+  return 0;
+}
+
 static inline void futex_wait(volatile void* ftx, int value) {
   syscall(__NR_futex, ftx, FUTEX_WAIT, value, nullptr, nullptr, 0);
 }
@@ -334,6 +389,13 @@
   return kDebuggerdTombstoneProto;
 }
 
+static const char* get_unwind_type(const debugger_thread_info* thread_info) {
+  if (thread_info->siginfo->si_signo == BIONIC_SIGNAL_DEBUGGER) {
+    return "Unwind request";
+  }
+  return "Crash due to signal";
+}
+
 static int debuggerd_dispatch_pseudothread(void* arg) {
   debugger_thread_info* thread_info = static_cast<debugger_thread_info*>(arg);
 
@@ -447,8 +509,8 @@
 
     execle(CRASH_DUMP_PATH, CRASH_DUMP_NAME, main_tid, pseudothread_tid, debuggerd_dump_type,
            nullptr, nullptr);
-    async_safe_format_log(ANDROID_LOG_FATAL, "libc", "failed to exec crash_dump helper: %s",
-                          strerror(errno));
+    async_safe_format_log(ANDROID_LOG_FATAL, "libc", "%s: failed to exec crash_dump helper: %s",
+                          get_unwind_type(thread_info), strerror(errno));
     return 1;
   }
 
@@ -469,26 +531,30 @@
   } else {
     // Something went wrong, log it.
     if (rc == -1) {
-      async_safe_format_log(ANDROID_LOG_FATAL, "libc", "read of IPC pipe failed: %s",
-                            strerror(errno));
+      async_safe_format_log(ANDROID_LOG_FATAL, "libc", "%s: read of IPC pipe failed: %s",
+                            get_unwind_type(thread_info), strerror(errno));
     } else if (rc == 0) {
       async_safe_format_log(ANDROID_LOG_FATAL, "libc",
-                            "crash_dump helper failed to exec, or was killed");
+                            "%s: crash_dump helper failed to exec, or was killed",
+                            get_unwind_type(thread_info));
     } else if (rc != 1) {
       async_safe_format_log(ANDROID_LOG_FATAL, "libc",
-                            "read of IPC pipe returned unexpected value: %zd", rc);
+                            "%s: read of IPC pipe returned unexpected value: %zd",
+                            get_unwind_type(thread_info), rc);
     } else if (buf[0] != '\1') {
-      async_safe_format_log(ANDROID_LOG_FATAL, "libc", "crash_dump helper reported failure");
+      async_safe_format_log(ANDROID_LOG_FATAL, "libc", "%s: crash_dump helper reported failure",
+                            get_unwind_type(thread_info));
     }
   }
 
   // Don't leave a zombie child.
   int status;
   if (TEMP_FAILURE_RETRY(waitpid(crash_dump_pid, &status, 0)) == -1) {
-    async_safe_format_log(ANDROID_LOG_FATAL, "libc", "failed to wait for crash_dump helper: %s",
-                          strerror(errno));
+    async_safe_format_log(ANDROID_LOG_FATAL, "libc", "%s: failed to wait for crash_dump helper: %s",
+                          get_unwind_type(thread_info), strerror(errno));
   } else if (WIFSTOPPED(status) || WIFSIGNALED(status)) {
-    async_safe_format_log(ANDROID_LOG_FATAL, "libc", "crash_dump helper crashed or stopped");
+    async_safe_format_log(ANDROID_LOG_FATAL, "libc", "%s: crash_dump helper crashed or stopped",
+                          get_unwind_type(thread_info));
   }
 
   if (success) {
@@ -599,12 +665,40 @@
     if (tagged_addr_ctrl < 0) {
       fatal_errno("failed to PR_GET_TAGGED_ADDR_CTRL");
     }
+    int previous = tagged_addr_ctrl & PR_MTE_TCF_MASK;
     tagged_addr_ctrl = (tagged_addr_ctrl & ~PR_MTE_TCF_MASK) | PR_MTE_TCF_NONE;
     if (prctl(PR_SET_TAGGED_ADDR_CTRL, tagged_addr_ctrl, 0, 0, 0) < 0) {
       fatal_errno("failed to PR_SET_TAGGED_ADDR_CTRL");
     }
-    async_safe_format_log(ANDROID_LOG_ERROR, "libc",
-                          "MTE ERROR DETECTED BUT RUNNING IN PERMISSIVE MODE. CONTINUING.");
+    if (int reenable_timer = permissive_mte_renable_timer()) {
+      async_safe_format_log(ANDROID_LOG_ERROR, "libc",
+                            "MTE ERROR DETECTED BUT RUNNING IN PERMISSIVE MODE. CONTINUING WITH "
+                            "MTE DISABLED FOR %d MS OF CPU TIME.",
+                            reenable_timer);
+      timer_t timerid{};
+      struct sigevent sev {};
+      sev.sigev_signo = BIONIC_ENABLE_MTE;
+      sev.sigev_notify = SIGEV_THREAD_ID;
+      sev.sigev_value.sival_int = previous;
+      sev.sigev_notify_thread_id = __gettid();
+      // This MUST be CLOCK_THREAD_CPUTIME_ID. If we used CLOCK_MONOTONIC we could get stuck
+      // in an endless loop of re-running the same instruction, calling this signal handler,
+      // and re-enabling MTE before we had a chance to re-run the instruction.
+      if (timer_create(CLOCK_THREAD_CPUTIME_ID, &sev, &timerid) == -1) {
+        fatal_errno("timer_create() failed");
+      }
+      struct itimerspec its {};
+      its.it_value.tv_sec = reenable_timer / 1000;
+      its.it_value.tv_nsec = (reenable_timer % 1000) * 1000000;
+
+      if (timer_settime(timerid, 0, &its, nullptr) == -1) {
+        fatal_errno("timer_settime() failed");
+      }
+    } else {
+      async_safe_format_log(
+          ANDROID_LOG_ERROR, "libc",
+          "MTE ERROR DETECTED BUT RUNNING IN PERMISSIVE MODE. CONTINUING WITH MTE DISABLED.");
+    }
     pthread_mutex_unlock(&crash_mutex);
   }
 
@@ -755,7 +849,6 @@
   // Use the alternate signal stack if available so we can catch stack overflows.
   action.sa_flags |= SA_ONSTACK;
 
-#define SA_EXPOSE_TAGBITS 0x00000800
   // Request that the kernel set tag bits in the fault address. This is necessary for diagnosing MTE
   // faults.
   action.sa_flags |= SA_EXPOSE_TAGBITS;
diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h b/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h
index dfdfabd..39989c3 100644
--- a/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h
+++ b/debuggerd/libdebuggerd/include/libdebuggerd/tombstone.h
@@ -67,11 +67,10 @@
                              const Architecture* guest_arch,
                              unwindstack::AndroidUnwinder* guest_unwinder);
 
-bool tombstone_proto_to_text(
-    const Tombstone& tombstone,
-    std::function<void(const std::string& line, bool should_log)> callback);
-
 void fill_in_backtrace_frame(BacktraceFrame* f, const unwindstack::FrameData& frame);
 void set_human_readable_cause(Cause* cause, uint64_t fault_addr);
-
+#if defined(__aarch64__)
+void dump_stack_history(unwindstack::AndroidUnwinder* unwinder, uintptr_t target_tls,
+                        StackHistoryBuffer& shb_ob, bool nounwind = false);
+#endif
 #endif  // _DEBUGGERD_TOMBSTONE_H
diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/tombstone_proto_to_text.h b/debuggerd/libdebuggerd/include/libdebuggerd/tombstone_proto_to_text.h
new file mode 100644
index 0000000..2de9723
--- /dev/null
+++ b/debuggerd/libdebuggerd/include/libdebuggerd/tombstone_proto_to_text.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <functional>
+#include <string>
+
+class BacktraceFrame;
+class Tombstone;
+
+bool tombstone_proto_to_text(
+    const Tombstone& tombstone,
+    std::function<void(const std::string& line, bool should_log)> callback,
+    std::function<void(const BacktraceFrame& frame)> symbolize);
diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/types.h b/debuggerd/libdebuggerd/include/libdebuggerd/types.h
index c799f24..f7fc2a3 100644
--- a/debuggerd/libdebuggerd/include/libdebuggerd/types.h
+++ b/debuggerd/libdebuggerd/include/libdebuggerd/types.h
@@ -41,6 +41,9 @@
   siginfo_t* siginfo = nullptr;
 
   std::unique_ptr<unwindstack::Regs> guest_registers;
+#if defined(__aarch64__)
+  uintptr_t tls;  // This is currently used for MTE stack history buffer.
+#endif
 };
 
 // This struct is written into a pipe from inside the crashing process.
diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/utility.h b/debuggerd/libdebuggerd/include/libdebuggerd/utility.h
index 26c2cd4..b86c13d 100644
--- a/debuggerd/libdebuggerd/include/libdebuggerd/utility.h
+++ b/debuggerd/libdebuggerd/include/libdebuggerd/utility.h
@@ -91,10 +91,3 @@
 void get_signal_sender(char* buf, size_t n, const siginfo_t*);
 const char* get_signame(const siginfo_t*);
 const char* get_sigcode(const siginfo_t*);
-
-// Number of bytes per MTE granule.
-constexpr size_t kTagGranuleSize = 16;
-
-// Number of rows and columns to display in an MTE tag dump.
-constexpr size_t kNumTagColumns = 16;
-constexpr size_t kNumTagRows = 16;
diff --git a/debuggerd/libdebuggerd/include/libdebuggerd/utility_host.h b/debuggerd/libdebuggerd/include/libdebuggerd/utility_host.h
new file mode 100644
index 0000000..df22e01
--- /dev/null
+++ b/debuggerd/libdebuggerd/include/libdebuggerd/utility_host.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2024, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <string>
+
+#include <stddef.h>
+
+std::string describe_tagged_addr_ctrl(long ctrl);
+std::string describe_pac_enabled_keys(long keys);
+
+// Number of bytes per MTE granule.
+constexpr size_t kTagGranuleSize = 16;
+
+// Number of rows and columns to display in an MTE tag dump.
+constexpr size_t kNumTagColumns = 16;
+constexpr size_t kNumTagRows = 16;
+
+std::string oct_encode(const std::string& data);
diff --git a/debuggerd/libdebuggerd/scudo.cpp b/debuggerd/libdebuggerd/scudo.cpp
index 4ee87c8..71d5fcf 100644
--- a/debuggerd/libdebuggerd/scudo.cpp
+++ b/debuggerd/libdebuggerd/scudo.cpp
@@ -18,6 +18,7 @@
 
 #include "libdebuggerd/scudo.h"
 #include "libdebuggerd/tombstone.h"
+#include "libdebuggerd/utility_host.h"
 
 #include "unwindstack/AndroidUnwinder.h"
 #include "unwindstack/Memory.h"
diff --git a/debuggerd/libdebuggerd/test/host_signal_fixup.h b/debuggerd/libdebuggerd/test/host_signal_fixup.h
deleted file mode 100644
index 762bae5..0000000
--- a/debuggerd/libdebuggerd/test/host_signal_fixup.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEBUGGERD_TEST_HOST_SIGNAL_FIXUP_H
-#define _DEBUGGERD_TEST_HOST_SIGNAL_FIXUP_H
-
-#include <signal.h>
-
-#if !defined(__BIONIC__)
-
-// In order to compile parts of debuggerd for the host, we need to
-// define these values.
-
-#if !defined(NSIGILL)
-#define NSIGILL ILL_BADSTK
-#endif
-
-#if !defined(BUS_MCEERR_AR)
-#define BUS_MCEERR_AR 4
-#endif
-#if !defined(BUS_MCEERR_AO)
-#define BUS_MCEERR_AO 5
-#endif
-#if !defined(NSIGBUS)
-#define NSIGBUS BUS_MCEERR_AO
-#endif
-
-#if !defined(NSIGFPE)
-#define NSIGFPE FPE_FLTSUB
-#endif
-
-#if !defined(NSIGSEGV)
-#define NSIGSEGV SEGV_ACCERR
-#endif
-
-#if !defined(TRAP_BRANCH)
-#define TRAP_BRANCH 3
-#endif
-#if !defined(TRAP_HWBKPT)
-#define TRAP_HWBKPT 4
-#endif
-#if !defined(NSIGTRAP)
-#define NSIGTRAP TRAP_HWBKPT
-#endif
-
-#if !defined(SI_DETHREAD)
-#define SI_DETHREAD (-7)
-#endif
-
-#endif
-
-#endif // _DEBUGGERD_TEST_HOST_SIGNAL_FIXUP_H
diff --git a/debuggerd/libdebuggerd/test/mte_stack_record_test.cpp b/debuggerd/libdebuggerd/test/mte_stack_record_test.cpp
new file mode 100644
index 0000000..bcda0ca
--- /dev/null
+++ b/debuggerd/libdebuggerd/test/mte_stack_record_test.cpp
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#if defined(__aarch64__)
+
+#include <stdint.h>
+#include <sys/mman.h>
+
+#include <optional>
+
+#include "bionic/mte.h"
+#include "bionic/page.h"
+#include "unwindstack/AndroidUnwinder.h"
+#include "unwindstack/Memory.h"
+
+#include <android-base/test_utils.h>
+#include <procinfo/process_map.h>
+
+#include "gtest/gtest.h"
+
+#include "libdebuggerd/tombstone.h"
+
+struct ScopedUnmap {
+  void* ptr;
+  size_t size;
+  ~ScopedUnmap() { munmap(ptr, size); }
+};
+
+class MteStackHistoryTest : public ::testing::TestWithParam<int> {
+  void SetUp() override {
+#if !defined(__aarch64__)
+    GTEST_SKIP();
+#endif
+    SKIP_WITH_HWASAN;
+    unwinder.emplace();
+    unwindstack::ErrorData E;
+    ASSERT_TRUE(unwinder->Initialize(E));
+  }
+
+ protected:
+  // std::optional so we don't construct it for the SKIP cases.
+  std::optional<unwindstack::AndroidLocalUnwinder> unwinder;
+};
+
+TEST(MteStackHistoryUnwindTest, TestOne) {
+#if !defined(__aarch64__)
+  GTEST_SKIP();
+#endif
+  SKIP_WITH_HWASAN;
+  size_t size = stack_mte_ringbuffer_size(0);
+  char* data = static_cast<char*>(stack_mte_ringbuffer_allocate(0, nullptr));
+  ScopedUnmap s{data, size};
+
+  uintptr_t taggedfp = (1ULL << 56) | 1;
+  uintptr_t pc = reinterpret_cast<uintptr_t>(&memcpy);
+  memcpy(data, &pc, sizeof(pc));
+  memcpy(data + 8, &taggedfp, sizeof(taggedfp));
+
+  // The MTE TLS is at TLS - 3, so we allocate 3 placeholders.
+  void* tls[4] = {data + 16};
+
+  unwindstack::AndroidLocalUnwinder unwinder;
+  unwindstack::ErrorData E;
+  unwinder.Initialize(E);
+  StackHistoryBuffer shb;
+  dump_stack_history(&unwinder, reinterpret_cast<uintptr_t>(&tls[3]), shb, /* nounwind= */ false);
+  ASSERT_EQ(shb.entries_size(), 1);
+  const StackHistoryBufferEntry& e = shb.entries(0);
+  EXPECT_EQ(e.addr().pc(), pc);
+  EXPECT_EQ(e.addr().file_name(), "/apex/com.android.runtime/lib64/bionic/libc.so");
+  EXPECT_EQ(e.fp(), 1ULL);
+  EXPECT_EQ(e.tag(), 1ULL);
+}
+
+static std::optional<android::procinfo::MapInfo> FindMapping(void* data) {
+  std::optional<android::procinfo::MapInfo> result;
+  android::procinfo::ReadMapFile(
+      "/proc/self/maps", [&result, data](const android::procinfo::MapInfo& info) {
+        auto data_int = reinterpret_cast<uint64_t>(data) & ((1ULL << 56ULL) - 1ULL);
+        if (info.start <= data_int && data_int < info.end) {
+          result = info;
+        }
+      });
+  return result;
+}
+
+TEST_P(MteStackHistoryTest, TestFree) {
+  int size_cls = GetParam();
+  size_t size = stack_mte_ringbuffer_size(size_cls);
+  void* data = stack_mte_ringbuffer_allocate(size_cls, nullptr);
+  EXPECT_EQ(stack_mte_ringbuffer_size_from_pointer(reinterpret_cast<uintptr_t>(data)), size);
+  auto before = FindMapping(data);
+  ASSERT_TRUE(before.has_value());
+  EXPECT_EQ(before->end - before->start, size);
+  stack_mte_free_ringbuffer(reinterpret_cast<uintptr_t>(data));
+  for (size_t i = 0; i < size; i += page_size()) {
+    auto after = FindMapping(static_cast<char*>(data) + i);
+    EXPECT_TRUE(!after.has_value() || after->name != before->name);
+  }
+}
+
+TEST_P(MteStackHistoryTest, TestEmpty) {
+  int size_cls = GetParam();
+  size_t size = stack_mte_ringbuffer_size(size_cls);
+  void* data = stack_mte_ringbuffer_allocate(size_cls, nullptr);
+  ScopedUnmap s{data, size};
+  // The MTE TLS is at TLS - 3, so we allocate 3 placeholders.
+  void* tls[4] = {data};
+
+  StackHistoryBuffer shb;
+  dump_stack_history(&*unwinder, reinterpret_cast<uintptr_t>(&tls[3]), shb, /* nounwind= */ true);
+  EXPECT_EQ(shb.entries_size(), 0);
+}
+
+TEST_P(MteStackHistoryTest, TestFull) {
+  int size_cls = GetParam();
+  size_t size = stack_mte_ringbuffer_size(size_cls);
+  char* data = static_cast<char*>(stack_mte_ringbuffer_allocate(size_cls, nullptr));
+  ScopedUnmap s{data, size};
+  uintptr_t itr = 1;
+  for (char* d = data; d < &data[size]; d += 16) {
+    uintptr_t taggedfp = ((itr & 15) << 56) | itr;
+    uintptr_t pc = itr;
+    memcpy(d, &pc, sizeof(pc));
+    memcpy(d + 8, &taggedfp, sizeof(taggedfp));
+    ++itr;
+  }
+  // The MTE TLS is at TLS - 3, so we allocate 3 placeholders.
+  // Because the buffer is full, and we point at one past the last inserted element,
+  // due to wrap-around we point at the beginning of the buffer.
+  void* tls[4] = {data};
+
+  StackHistoryBuffer shb;
+  dump_stack_history(&*unwinder, reinterpret_cast<uintptr_t>(&tls[3]), shb, /* nounwind= */ true);
+  EXPECT_EQ(static_cast<size_t>(shb.entries_size()), size / 16);
+  for (const auto& entry : shb.entries()) {
+    EXPECT_EQ(entry.addr().pc(), --itr);
+    EXPECT_EQ(entry.addr().pc(), entry.fp());
+    EXPECT_EQ(entry.addr().pc() & 15, entry.tag());
+  }
+}
+
+TEST_P(MteStackHistoryTest, TestHalfFull) {
+  int size_cls = GetParam();
+  size_t size = stack_mte_ringbuffer_size(size_cls);
+  size_t half_size = size / 2;
+
+  char* data = static_cast<char*>(stack_mte_ringbuffer_allocate(size_cls, nullptr));
+  ScopedUnmap s{data, size};
+
+  uintptr_t itr = 1;
+  for (char* d = data; d < &data[half_size]; d += 16) {
+    uintptr_t taggedfp = ((itr & 15) << 56) | itr;
+    uintptr_t pc = itr;
+    memcpy(d, &pc, sizeof(pc));
+    memcpy(d + 8, &taggedfp, sizeof(taggedfp));
+    ++itr;
+  }
+  // The MTE TLS is at TLS - 3, so we allocate 3 placeholders.
+  void* tls[4] = {&data[half_size]};
+
+  StackHistoryBuffer shb;
+  dump_stack_history(&*unwinder, reinterpret_cast<uintptr_t>(&tls[3]), shb, /* nounwind= */ true);
+  EXPECT_EQ(static_cast<size_t>(shb.entries_size()), half_size / 16);
+  for (const auto& entry : shb.entries()) {
+    EXPECT_EQ(entry.addr().pc(), --itr);
+    EXPECT_EQ(entry.addr().pc(), entry.fp());
+    EXPECT_EQ(entry.addr().pc() & 15, entry.tag());
+  }
+}
+
+INSTANTIATE_TEST_SUITE_P(MteStackHistoryTestInstance, MteStackHistoryTest, testing::Range(0, 8));
+
+#endif
diff --git a/debuggerd/libdebuggerd/test/tombstone_proto_to_text_test.cpp b/debuggerd/libdebuggerd/test/tombstone_proto_to_text_test.cpp
index a4c08a4..aad209a 100644
--- a/debuggerd/libdebuggerd/test/tombstone_proto_to_text_test.cpp
+++ b/debuggerd/libdebuggerd/test/tombstone_proto_to_text_test.cpp
@@ -22,6 +22,7 @@
 #include <android-base/test_utils.h>
 
 #include "libdebuggerd/tombstone.h"
+#include "libdebuggerd/tombstone_proto_to_text.h"
 #include "tombstone.pb.h"
 
 using CallbackType = std::function<void(const std::string& line, bool should_log)>;
@@ -60,12 +61,16 @@
 
   void ProtoToString() {
     text_ = "";
-    EXPECT_TRUE(
-        tombstone_proto_to_text(*tombstone_, [this](const std::string& line, bool should_log) {
+    EXPECT_TRUE(tombstone_proto_to_text(
+        *tombstone_,
+        [this](const std::string& line, bool should_log) {
           if (should_log) {
             text_ += "LOG ";
           }
           text_ += line + '\n';
+        },
+        [&](const BacktraceFrame& frame) {
+          text_ += "SYMBOLIZE " + frame.build_id() + " " + std::to_string(frame.pc()) + "\n";
         }));
   }
 
@@ -134,3 +139,39 @@
   ProtoToString();
   EXPECT_MATCH(text_, R"(CRASH_DETAIL_NAME: 'helloworld\\1\\255\\3')");
 }
+
+TEST_F(TombstoneProtoToTextTest, stack_record) {
+  auto* cause = tombstone_->add_causes();
+  cause->set_human_readable("stack tag-mismatch on thread 123");
+  auto* stack = tombstone_->mutable_stack_history_buffer();
+  stack->set_tid(123);
+  {
+    auto* shb_entry = stack->add_entries();
+    shb_entry->set_fp(0x1);
+    shb_entry->set_tag(0xb);
+    auto* addr = shb_entry->mutable_addr();
+    addr->set_rel_pc(0x567);
+    addr->set_file_name("foo.so");
+    addr->set_build_id("ABC123");
+  }
+  {
+    auto* shb_entry = stack->add_entries();
+    shb_entry->set_fp(0x2);
+    shb_entry->set_tag(0xc);
+    auto* addr = shb_entry->mutable_addr();
+    addr->set_rel_pc(0x678);
+    addr->set_file_name("bar.so");
+  }
+  ProtoToString();
+  EXPECT_MATCH(text_, "stack tag-mismatch on thread 123");
+  EXPECT_MATCH(text_, "stack_record fp:0x1 tag:0xb pc:foo\\.so\\+0x567 \\(BuildId: ABC123\\)");
+  EXPECT_MATCH(text_, "stack_record fp:0x2 tag:0xc pc:bar\\.so\\+0x678");
+}
+
+TEST_F(TombstoneProtoToTextTest, symbolize) {
+  BacktraceFrame* frame = main_thread_->add_current_backtrace();
+  frame->set_pc(12345);
+  frame->set_build_id("0123456789abcdef");
+  ProtoToString();
+  EXPECT_MATCH(text_, "\\(BuildId: 0123456789abcdef\\)\\nSYMBOLIZE 0123456789abcdef 12345\\n");
+}
diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp
index 0ce5573..30c6fe4 100644
--- a/debuggerd/libdebuggerd/tombstone.cpp
+++ b/debuggerd/libdebuggerd/tombstone.cpp
@@ -17,6 +17,7 @@
 #define LOG_TAG "DEBUG"
 
 #include "libdebuggerd/tombstone.h"
+#include "libdebuggerd/tombstone_proto_to_text.h"
 
 #include <errno.h>
 #include <signal.h>
@@ -145,7 +146,10 @@
   log.tfd = output_fd.get();
   log.amfd_data = amfd_data;
 
-  tombstone_proto_to_text(tombstone, [&log](const std::string& line, bool should_log) {
-    _LOG(&log, should_log ? logtype::HEADER : logtype::LOGS, "%s\n", line.c_str());
-  });
+  tombstone_proto_to_text(
+      tombstone,
+      [&log](const std::string& line, bool should_log) {
+        _LOG(&log, should_log ? logtype::HEADER : logtype::LOGS, "%s\n", line.c_str());
+      },
+      [](const BacktraceFrame&) {});
 }
diff --git a/debuggerd/libdebuggerd/tombstone_proto.cpp b/debuggerd/libdebuggerd/tombstone_proto.cpp
index 3e8ab6e..ef303f0 100644
--- a/debuggerd/libdebuggerd/tombstone_proto.cpp
+++ b/debuggerd/libdebuggerd/tombstone_proto.cpp
@@ -27,16 +27,20 @@
 #include <inttypes.h>
 #include <signal.h>
 #include <stddef.h>
+#include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/mman.h>
 #include <sys/sysinfo.h>
 #include <time.h>
 
+#include <map>
 #include <memory>
 #include <optional>
 #include <set>
 #include <string>
+#include <utility>
+#include <vector>
 
 #include <async_safe/log.h>
 
@@ -49,9 +53,11 @@
 
 #include <android/log.h>
 #include <android/set_abort_message.h>
-#include <bionic/macros.h>
-#include <bionic/reserved_signals.h>
 #include <bionic/crash_detail_internal.h>
+#include <bionic/macros.h>
+#include <bionic/mte.h>
+#include <bionic/reserved_signals.h>
+#include <bionic/tls_defines.h>
 #include <log/log.h>
 #include <log/log_read.h>
 #include <log/logprint.h>
@@ -66,6 +72,7 @@
 
 #include "libdebuggerd/open_files_list.h"
 #include "libdebuggerd/utility.h"
+#include "libdebuggerd/utility_host.h"
 #include "util.h"
 
 #include "tombstone.pb.h"
@@ -202,8 +209,117 @@
       error_type_str, diff, byte_suffix, location_str, heap_object.size(), heap_object.address()));
 }
 
+#if defined(__aarch64__)
+void dump_stack_history(unwindstack::AndroidUnwinder* unwinder, uintptr_t target_tls,
+                        StackHistoryBuffer& shb_obj, bool nounwind) {
+  auto process_memory = unwinder->GetProcessMemory();
+  target_tls += sizeof(void*) * TLS_SLOT_STACK_MTE;
+  uintptr_t stack_mte;
+  if (!process_memory->ReadFully(target_tls, &stack_mte, sizeof(stack_mte))) {
+    async_safe_format_log(ANDROID_LOG_ERROR, LOG_TAG,
+                          "dump_stack_history: failed to read TLS_SLOT_STACK_MTE: %m");
+    return;
+  }
+  if (stack_mte == 0) {
+    async_safe_format_log(ANDROID_LOG_DEBUG, LOG_TAG,
+                          "dump_stack_history: stack history buffer is null");
+    return;
+  }
+  uintptr_t untagged_stack_mte = untag_address(stack_mte);
+  uintptr_t buf_size = stack_mte_ringbuffer_size_from_pointer(stack_mte);
+  if (buf_size == 0) {
+    async_safe_format_log(ANDROID_LOG_ERROR, LOG_TAG, "dump_stack_history: empty size");
+    return;
+  }
+  uintptr_t buf_start = untagged_stack_mte & ~(buf_size - 1ULL);
+  std::vector<char> buf(buf_size);
+  if (!process_memory->ReadFully(buf_start, buf.data(), buf.size())) {
+    async_safe_format_log(ANDROID_LOG_ERROR, LOG_TAG,
+                          "dump_stack_history: failed to read stack history: %m");
+    return;
+  }
+  uintptr_t original_off = untagged_stack_mte - buf_start;
+  if (original_off % 16 || original_off > buf_size) {
+    async_safe_format_log(ANDROID_LOG_ERROR, LOG_TAG,
+                          "dump_stack_history: invalid offset: %" PRIuPTR, original_off);
+    return;
+  }
+
+  // The original_off is the next slot that would have been written, so the last
+  // slot that was written is the previous one.
+  for (uintptr_t idx = 16; idx <= buf_size; idx += 16) {
+    int64_t off = original_off - idx;
+    if (off < 0) off += buf_size;
+    uintptr_t pc, taggedfp;
+    memcpy(&pc, &(buf[off]), sizeof(pc));
+    memcpy(&taggedfp, &(buf[off + sizeof(pc)]), sizeof(taggedfp));
+
+    if (pc == 0) break;
+    uintptr_t fp = untag_address(taggedfp);
+    uintptr_t tag = taggedfp >> 56;
+
+    unwindstack::FrameData frame_data;
+
+    if (nounwind) {
+      frame_data.pc = pc;
+    } else {
+      // +4 is to counteract the "pc adjustment" in BuildFrameFromPcOnly.
+      // BuildFrameFromPcOnly assumes we are unwinding, so it needs to correct for that
+      // the PC is the return address. That is not the case here.
+      // It doesn't really matter, because either should be in the correct function, but
+      // this is more correct (and consistent with the nounwind case).
+      frame_data = unwinder->BuildFrameFromPcOnly(pc);
+      frame_data.pc += 4;
+      frame_data.rel_pc += 4;
+    }
+
+    StackHistoryBufferEntry* entry = shb_obj.add_entries();
+    fill_in_backtrace_frame(entry->mutable_addr(), frame_data);
+    entry->set_fp(fp);
+    entry->set_tag(tag);
+  }
+}
+
+static pid_t get_containing_thread(unwindstack::MapInfo* map_info, pid_t main_tid) {
+  if (map_info == nullptr) return 0;
+
+  std::string name = map_info->name();
+  if (name == "[stack]") {
+    return main_tid;
+  }
+  int tid;
+  if (sscanf(name.c_str(), "[anon:stack_and_tls:%d", &tid) != 1) {
+    return 0;
+  }
+  return tid;
+}
+
+static std::optional<std::string> maybe_stack_mte_cause(
+    Tombstone* tombstone, unwindstack::AndroidUnwinder* unwinder, const ThreadInfo& target_thread,
+    [[maybe_unused]] const std::map<pid_t, ThreadInfo>& threads, uint64_t fault_addr) {
+  unwindstack::Maps* maps = unwinder->GetMaps();
+  auto map_info = maps->Find(untag_address(fault_addr));
+  pid_t tid = get_containing_thread(map_info.get(), target_thread.tid);
+  if (!tid) {
+    return std::nullopt;
+  }
+  auto it = threads.find(tid);
+  if (it != threads.end()) {
+    StackHistoryBuffer* shb = tombstone->mutable_stack_history_buffer();
+    shb->set_tid(tid);
+    dump_stack_history(unwinder, it->second.tls, *shb);
+  } else {
+    async_safe_format_log(ANDROID_LOG_ERROR, LOG_TAG,
+                          "dump_probable_cause: unknown target thread %d", tid);
+  }
+  return StringPrintf("stack tag-mismatch on thread %u", tid);
+}
+
+#endif
+
 static void dump_probable_cause(Tombstone* tombstone, unwindstack::AndroidUnwinder* unwinder,
-                                const ProcessInfo& process_info, const ThreadInfo& target_thread) {
+                                const ProcessInfo& process_info, const ThreadInfo& target_thread,
+                                [[maybe_unused]] const std::map<pid_t, ThreadInfo>& threads) {
 #if defined(USE_SCUDO)
   ScudoCrashData scudo_crash_data(unwinder->GetProcessMemory().get(), process_info);
   if (scudo_crash_data.CrashIsMine()) {
@@ -244,10 +360,21 @@
     auto map_info = maps->Find(fault_addr);
     if (map_info != nullptr && map_info->flags() == PROT_EXEC) {
       cause = "execute-only (no-read) memory access error; likely due to data in .text.";
+    } else if (fault_addr == target_thread.registers->pc() &&
+               map_info != nullptr && (map_info->flags() & PROT_EXEC) == 0) {
+      cause = "trying to execute non-executable memory.";
     } else {
       cause = get_stack_overflow_cause(fault_addr, target_thread.registers->sp(), maps);
     }
-  } else if (si->si_signo == SIGSYS && si->si_code == SYS_SECCOMP) {
+  }
+#if defined(__aarch64__) && defined(SEGV_MTESERR)
+  else if (si->si_signo == SIGSEGV && si->si_code == SEGV_MTESERR) {
+    // If this was a heap MTE crash, it would have been handled by scudo. Checking whether it
+    // is a stack one.
+    cause = maybe_stack_mte_cause(tombstone, unwinder, target_thread, threads, fault_addr);
+  }
+#endif
+  else if (si->si_signo == SIGSYS && si->si_code == SYS_SECCOMP) {
     cause = StringPrintf("seccomp prevented call to disallowed %s system call %d", ABI_STRING,
                          si->si_syscall);
   }
@@ -339,7 +466,8 @@
   }
   msg.resize(index);
 
-  tombstone->set_abort_message(msg);
+  // Make sure only UTF8 characters are present since abort_message is a string.
+  tombstone->set_abort_message(oct_encode(msg));
 }
 
 static void dump_open_fds(Tombstone* tombstone, const OpenFilesList* open_files) {
@@ -647,7 +775,8 @@
       log_msg->set_tid(log_entry.entry.tid);
       log_msg->set_priority(prio);
       log_msg->set_tag(tag);
-      log_msg->set_message(msg);
+      // Make sure only UTF8 characters are present since message is a string.
+      log_msg->set_message(oct_encode(msg));
     } while ((msg = nl));
   }
   android_logger_list_free(logger_list);
@@ -787,7 +916,7 @@
     }
   }
 
-  dump_probable_cause(&result, unwinder, process_info, target_thread);
+  dump_probable_cause(&result, unwinder, process_info, target_thread, threads);
 
   dump_mappings(&result, unwinder->GetMaps(), unwinder->GetProcessMemory());
 
diff --git a/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp b/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp
index 1900719..e885c5a 100644
--- a/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp
+++ b/debuggerd/libdebuggerd/tombstone_proto_to_text.cpp
@@ -14,13 +14,14 @@
  * limitations under the License.
  */
 
-#include <libdebuggerd/tombstone.h>
+#include <libdebuggerd/tombstone_proto_to_text.h>
+#include <libdebuggerd/utility_host.h>
 
 #include <inttypes.h>
 
-#include <charconv>
+#include <algorithm>
 #include <functional>
-#include <limits>
+#include <optional>
 #include <set>
 #include <string>
 #include <unordered_set>
@@ -30,9 +31,8 @@
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
-#include <bionic/macros.h>
-#include <sys/prctl.h>
 
+#include "libdebuggerd/utility_host.h"
 #include "tombstone.pb.h"
 
 using android::base::StringAppendF;
@@ -42,6 +42,7 @@
 #define CBL(...) CB(true, __VA_ARGS__)
 #define CBS(...) CB(false, __VA_ARGS__)
 using CallbackType = std::function<void(const std::string& line, bool should_log)>;
+using SymbolizeCallbackType = std::function<void(const BacktraceFrame& frame)>;
 
 #define DESCRIBE_FLAG(flag) \
   if (value & flag) {       \
@@ -57,28 +58,6 @@
   return desc.empty() ? "" : " (" + desc.substr(2) + ")";
 }
 
-static std::string describe_tagged_addr_ctrl(long value) {
-  std::string desc;
-  DESCRIBE_FLAG(PR_TAGGED_ADDR_ENABLE);
-  DESCRIBE_FLAG(PR_MTE_TCF_SYNC);
-  DESCRIBE_FLAG(PR_MTE_TCF_ASYNC);
-  if (value & PR_MTE_TAG_MASK) {
-    desc += StringPrintf(", mask 0x%04lx", (value & PR_MTE_TAG_MASK) >> PR_MTE_TAG_SHIFT);
-    value &= ~PR_MTE_TAG_MASK;
-  }
-  return describe_end(value, desc);
-}
-
-static std::string describe_pac_enabled_keys(long value) {
-  std::string desc;
-  DESCRIBE_FLAG(PR_PAC_APIAKEY);
-  DESCRIBE_FLAG(PR_PAC_APIBKEY);
-  DESCRIBE_FLAG(PR_PAC_APDAKEY);
-  DESCRIBE_FLAG(PR_PAC_APDBKEY);
-  DESCRIBE_FLAG(PR_PAC_APGAKEY);
-  return describe_end(value, desc);
-}
-
 static const char* abi_string(const Architecture& arch) {
   switch (arch) {
     case Architecture::ARM32:
@@ -113,6 +92,13 @@
   }
 }
 
+static uint64_t untag_address(Architecture arch, uint64_t addr) {
+  if (arch == Architecture::ARM64) {
+    return addr & ((1ULL << 56) - 1);
+  }
+  return addr;
+}
+
 static void print_thread_header(CallbackType callback, const Tombstone& tombstone,
                                 const Thread& thread, bool should_log) {
   const char* process_name = "<unknown>";
@@ -200,7 +186,8 @@
   print_register_row(callback, word_size, special_row, should_log);
 }
 
-static void print_backtrace(CallbackType callback, const Tombstone& tombstone,
+static void print_backtrace(CallbackType callback, SymbolizeCallbackType symbolize,
+                            const Tombstone& tombstone,
                             const google::protobuf::RepeatedPtrField<BacktraceFrame>& backtrace,
                             bool should_log) {
   int index = 0;
@@ -225,11 +212,14 @@
     }
     line += function + build_id;
     CB(should_log, "%s", line.c_str());
+
+    symbolize(frame);
   }
 }
 
-static void print_thread_backtrace(CallbackType callback, const Tombstone& tombstone,
-                                   const Thread& thread, bool should_log) {
+static void print_thread_backtrace(CallbackType callback, SymbolizeCallbackType symbolize,
+                                   const Tombstone& tombstone, const Thread& thread,
+                                   bool should_log) {
   CBS("");
   CB(should_log, "%d total frames", thread.current_backtrace().size());
   CB(should_log, "backtrace:");
@@ -237,7 +227,7 @@
     CB(should_log, "  NOTE: %s",
        android::base::Join(thread.backtrace_note(), "\n  NOTE: ").c_str());
   }
-  print_backtrace(callback, tombstone, thread.current_backtrace(), should_log);
+  print_backtrace(callback, symbolize, tombstone, thread.current_backtrace(), should_log);
 }
 
 static void print_thread_memory_dump(CallbackType callback, const Tombstone& tombstone,
@@ -290,10 +280,11 @@
   }
 }
 
-static void print_thread(CallbackType callback, const Tombstone& tombstone, const Thread& thread) {
+static void print_thread(CallbackType callback, SymbolizeCallbackType symbolize,
+                         const Tombstone& tombstone, const Thread& thread) {
   print_thread_header(callback, tombstone, thread, false);
   print_thread_registers(callback, tombstone, thread, false);
-  print_thread_backtrace(callback, tombstone, thread, false);
+  print_thread_backtrace(callback, symbolize, tombstone, thread, false);
   print_thread_memory_dump(callback, tombstone, thread);
 }
 
@@ -321,7 +312,8 @@
 
   size_t tag_index = 0;
   size_t num_tags = tags.length();
-  uintptr_t fault_granule = untag_address(signal.fault_address()) & ~(kTagGranuleSize - 1);
+  uintptr_t fault_granule =
+      untag_address(tombstone.arch(), signal.fault_address()) & ~(kTagGranuleSize - 1);
   for (size_t row = 0; tag_index < num_tags; ++row) {
     uintptr_t row_addr =
         (memory_dump.begin_address() + row * kNumTagColumns * kTagGranuleSize) & kRowStartMask;
@@ -369,7 +361,7 @@
 
   const Signal& signal_info = tombstone.signal_info();
   bool has_fault_address = signal_info.has_fault_address();
-  uint64_t fault_address = untag_address(signal_info.fault_address());
+  uint64_t fault_address = untag_address(tombstone.arch(), signal_info.fault_address());
   bool preamble_printed = false;
   bool printed_fault_address_marker = false;
   for (const auto& map : tombstone.memory_mappings()) {
@@ -427,29 +419,8 @@
   }
 }
 
-static std::string oct_encode(const std::string& data) {
-  std::string oct_encoded;
-  oct_encoded.reserve(data.size());
-
-  // N.B. the unsigned here is very important, otherwise e.g. \255 would render as
-  // \-123 (and overflow our buffer).
-  for (unsigned char c : data) {
-    if (isprint(c)) {
-      oct_encoded += c;
-    } else {
-      std::string oct_digits("\\\0\0\0", 4);
-      // char is encodable in 3 oct digits
-      static_assert(std::numeric_limits<unsigned char>::max() <= 8 * 8 * 8);
-      auto [ptr, ec] = std::to_chars(oct_digits.data() + 1, oct_digits.data() + 4, c, 8);
-      oct_digits.resize(ptr - oct_digits.data());
-      oct_encoded += oct_digits;
-    }
-  }
-  return oct_encoded;
-}
-
-static void print_main_thread(CallbackType callback, const Tombstone& tombstone,
-                              const Thread& thread) {
+static void print_main_thread(CallbackType callback, SymbolizeCallbackType symbolize,
+                              const Tombstone& tombstone, const Thread& thread) {
   print_thread_header(callback, tombstone, thread, true);
 
   const Signal& signal_info = tombstone.signal_info();
@@ -503,7 +474,7 @@
     CBL("      in this process. The stack trace below is the first system call or context");
     CBL("      switch that was executed after the memory corruption happened.");
   }
-  print_thread_backtrace(callback, tombstone, thread, true);
+  print_thread_backtrace(callback, symbolize, tombstone, thread, true);
 
   if (tombstone.causes_size() > 1) {
     CBS("");
@@ -511,6 +482,19 @@
         "order of likelihood.");
   }
 
+  if (tombstone.has_stack_history_buffer()) {
+    for (const StackHistoryBufferEntry& shbe : tombstone.stack_history_buffer().entries()) {
+      std::string stack_record_str = StringPrintf(
+          "stack_record fp:0x%" PRIx64 " tag:0x%" PRIx64 " pc:%s+0x%" PRIx64, shbe.fp(), shbe.tag(),
+          shbe.addr().file_name().c_str(), shbe.addr().rel_pc());
+      if (!shbe.addr().build_id().empty()) {
+        StringAppendF(&stack_record_str, " (BuildId: %s)", shbe.addr().build_id().c_str());
+      }
+
+      CBL("%s", stack_record_str.c_str());
+    }
+  }
+
   for (const Cause& cause : tombstone.causes()) {
     if (tombstone.causes_size() > 1) {
       CBS("");
@@ -523,13 +507,13 @@
       if (heap_object.deallocation_backtrace_size() != 0) {
         CBS("");
         CBL("deallocated by thread %" PRIu64 ":", heap_object.deallocation_tid());
-        print_backtrace(callback, tombstone, heap_object.deallocation_backtrace(), true);
+        print_backtrace(callback, symbolize, tombstone, heap_object.deallocation_backtrace(), true);
       }
 
       if (heap_object.allocation_backtrace_size() != 0) {
         CBS("");
         CBL("allocated by thread %" PRIu64 ":", heap_object.allocation_tid());
-        print_backtrace(callback, tombstone, heap_object.allocation_backtrace(), true);
+        print_backtrace(callback, symbolize, tombstone, heap_object.allocation_backtrace(), true);
       }
     }
   }
@@ -578,8 +562,9 @@
   }
 }
 
-static void print_guest_thread(CallbackType callback, const Tombstone& tombstone,
-                               const Thread& guest_thread, pid_t tid, bool should_log) {
+static void print_guest_thread(CallbackType callback, SymbolizeCallbackType symbolize,
+                               const Tombstone& tombstone, const Thread& guest_thread, pid_t tid,
+                               bool should_log) {
   CBS("--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---");
   CBS("Guest thread information for tid: %d", tid);
   print_thread_registers(callback, tombstone, guest_thread, should_log);
@@ -587,12 +572,13 @@
   CBS("");
   CB(true, "%d total frames", guest_thread.current_backtrace().size());
   CB(true, "backtrace:");
-  print_backtrace(callback, tombstone, guest_thread.current_backtrace(), should_log);
+  print_backtrace(callback, symbolize, tombstone, guest_thread.current_backtrace(), should_log);
 
   print_thread_memory_dump(callback, tombstone, guest_thread);
 }
 
-bool tombstone_proto_to_text(const Tombstone& tombstone, CallbackType callback) {
+bool tombstone_proto_to_text(const Tombstone& tombstone, CallbackType callback,
+                             SymbolizeCallbackType symbolize) {
   CBL("*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***");
   CBL("Build fingerprint: '%s'", tombstone.build_fingerprint().c_str());
   CBL("Revision: '%s'", tombstone.revision().c_str());
@@ -620,14 +606,15 @@
 
   const auto& main_thread = main_thread_it->second;
 
-  print_main_thread(callback, tombstone, main_thread);
+  print_main_thread(callback, symbolize, tombstone, main_thread);
 
   print_logs(callback, tombstone, 50);
 
   const auto& guest_threads = tombstone.guest_threads();
   auto main_guest_thread_it = guest_threads.find(tombstone.tid());
   if (main_guest_thread_it != threads.end()) {
-    print_guest_thread(callback, tombstone, main_guest_thread_it->second, tombstone.tid(), true);
+    print_guest_thread(callback, symbolize, tombstone, main_guest_thread_it->second,
+                       tombstone.tid(), true);
   }
 
   // protobuf's map is unordered, so sort the keys first.
@@ -640,10 +627,10 @@
 
   for (const auto& tid : thread_ids) {
     CBS("--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---");
-    print_thread(callback, tombstone, threads.find(tid)->second);
+    print_thread(callback, symbolize, tombstone, threads.find(tid)->second);
     auto guest_thread_it = guest_threads.find(tid);
     if (guest_thread_it != guest_threads.end()) {
-      print_guest_thread(callback, tombstone, guest_thread_it->second, tid, false);
+      print_guest_thread(callback, symbolize, tombstone, guest_thread_it->second, tid, false);
     }
   }
 
diff --git a/debuggerd/libdebuggerd/utility.cpp b/debuggerd/libdebuggerd/utility.cpp
index 742ac7c..b5a93b7 100644
--- a/debuggerd/libdebuggerd/utility.cpp
+++ b/debuggerd/libdebuggerd/utility.cpp
@@ -17,6 +17,7 @@
 #define LOG_TAG "DEBUG"
 
 #include "libdebuggerd/utility.h"
+#include "libdebuggerd/utility_host.h"
 
 #include <errno.h>
 #include <signal.h>
diff --git a/debuggerd/libdebuggerd/utility_host.cpp b/debuggerd/libdebuggerd/utility_host.cpp
new file mode 100644
index 0000000..4efa03c
--- /dev/null
+++ b/debuggerd/libdebuggerd/utility_host.cpp
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2024, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "libdebuggerd/utility_host.h"
+
+#include <sys/prctl.h>
+
+#include <charconv>
+#include <limits>
+#include <string>
+
+#include <android-base/stringprintf.h>
+
+using android::base::StringPrintf;
+
+#ifndef PR_MTE_TAG_SHIFT
+#define PR_MTE_TAG_SHIFT 3
+#endif
+
+#ifndef PR_MTE_TAG_MASK
+#define PR_MTE_TAG_MASK (0xffffUL << PR_MTE_TAG_SHIFT)
+#endif
+
+#ifndef PR_MTE_TCF_ASYNC
+#define PR_MTE_TCF_ASYNC (1UL << 2)
+#endif
+
+#ifndef PR_MTE_TCF_SYNC
+#define PR_MTE_TCF_SYNC (1UL << 1)
+#endif
+
+#ifndef PR_PAC_APIAKEY
+#define PR_PAC_APIAKEY (1UL << 0)
+#endif
+
+#ifndef PR_PAC_APIBKEY
+#define PR_PAC_APIBKEY (1UL << 1)
+#endif
+
+#ifndef PR_PAC_APDAKEY
+#define PR_PAC_APDAKEY (1UL << 2)
+#endif
+
+#ifndef PR_PAC_APDBKEY
+#define PR_PAC_APDBKEY (1UL << 3)
+#endif
+
+#ifndef PR_PAC_APGAKEY
+#define PR_PAC_APGAKEY (1UL << 4)
+#endif
+
+#ifndef PR_TAGGED_ADDR_ENABLE
+#define PR_TAGGED_ADDR_ENABLE (1UL << 0)
+#endif
+
+#define DESCRIBE_FLAG(flag) \
+  if (value & flag) {       \
+    desc += ", ";           \
+    desc += #flag;          \
+    value &= ~flag;         \
+  }
+
+static std::string describe_end(long value, std::string& desc) {
+  if (value) {
+    desc += StringPrintf(", unknown 0x%lx", value);
+  }
+  return desc.empty() ? "" : " (" + desc.substr(2) + ")";
+}
+
+std::string describe_tagged_addr_ctrl(long value) {
+  std::string desc;
+  DESCRIBE_FLAG(PR_TAGGED_ADDR_ENABLE);
+  DESCRIBE_FLAG(PR_MTE_TCF_SYNC);
+  DESCRIBE_FLAG(PR_MTE_TCF_ASYNC);
+  if (value & PR_MTE_TAG_MASK) {
+    desc += StringPrintf(", mask 0x%04lx", (value & PR_MTE_TAG_MASK) >> PR_MTE_TAG_SHIFT);
+    value &= ~PR_MTE_TAG_MASK;
+  }
+  return describe_end(value, desc);
+}
+
+std::string describe_pac_enabled_keys(long value) {
+  std::string desc;
+  DESCRIBE_FLAG(PR_PAC_APIAKEY);
+  DESCRIBE_FLAG(PR_PAC_APIBKEY);
+  DESCRIBE_FLAG(PR_PAC_APDAKEY);
+  DESCRIBE_FLAG(PR_PAC_APDBKEY);
+  DESCRIBE_FLAG(PR_PAC_APGAKEY);
+  return describe_end(value, desc);
+}
+
+std::string oct_encode(const std::string& data) {
+  std::string oct_encoded;
+  oct_encoded.reserve(data.size());
+
+  // N.B. the unsigned here is very important, otherwise e.g. \255 would render as
+  // \-123 (and overflow our buffer).
+  for (unsigned char c : data) {
+    if (isprint(c)) {
+      oct_encoded += c;
+    } else {
+      std::string oct_digits("\\\0\0\0", 4);
+      // char is encodable in 3 oct digits
+      static_assert(std::numeric_limits<unsigned char>::max() <= 8 * 8 * 8);
+      auto [ptr, ec] = std::to_chars(oct_digits.data() + 1, oct_digits.data() + 4, c, 8);
+      oct_digits.resize(ptr - oct_digits.data());
+      oct_encoded += oct_digits;
+    }
+  }
+  return oct_encoded;
+}
diff --git a/debuggerd/pbtombstone.cpp b/debuggerd/pbtombstone.cpp
index 7527e31..0902b38 100644
--- a/debuggerd/pbtombstone.cpp
+++ b/debuggerd/pbtombstone.cpp
@@ -16,32 +16,55 @@
 
 #include <err.h>
 #include <fcntl.h>
+#include <getopt.h>
 #include <stdio.h>
 #include <unistd.h>
 
+#include <string>
+#include <vector>
+
 #include <android-base/unique_fd.h>
-#include <libdebuggerd/tombstone.h>
+#include <libdebuggerd/tombstone_proto_to_text.h>
 
 #include "tombstone.pb.h"
+#include "tombstone_symbolize.h"
 
 using android::base::unique_fd;
 
 [[noreturn]] void usage(bool error) {
-  fprintf(stderr, "usage: pbtombstone TOMBSTONE.PB\n");
+  fprintf(stderr, "usage: pbtombstone [OPTION] TOMBSTONE.PB\n");
   fprintf(stderr, "Convert a protobuf tombstone to text.\n");
+  fprintf(stderr, "Arguments:\n");
+  fprintf(stderr, "  -h, --help                   print this message\n");
+  fprintf(stderr, "  --debug-file-directory PATH  specify the path to a symbols directory\n");
   exit(error);
 }
 
-int main(int argc, const char* argv[]) {
-  if (argc != 2) {
+int main(int argc, char* argv[]) {
+  std::vector<std::string> debug_file_directories;
+  static struct option long_options[] = {
+      {"debug-file-directory", required_argument, 0, 0},
+      {"help", no_argument, 0, 'h'},
+      {},
+  };
+  int c;
+  while ((c = getopt_long(argc, argv, "h", long_options, 0)) != -1) {
+    switch (c) {
+      case 0:
+        debug_file_directories.push_back(optarg);
+        break;
+
+      case 'h':
+        usage(false);
+        break;
+    }
+  }
+
+  if (optind != argc-1) {
     usage(true);
   }
 
-  if (strcmp("-h", argv[1]) == 0 || strcmp("--help", argv[1]) == 0) {
-    usage(false);
-  }
-
-  unique_fd fd(open(argv[1], O_RDONLY | O_CLOEXEC));
+  unique_fd fd(open(argv[optind], O_RDONLY | O_CLOEXEC));
   if (fd == -1) {
     err(1, "failed to open tombstone '%s'", argv[1]);
   }
@@ -51,8 +74,11 @@
     err(1, "failed to parse tombstone");
   }
 
+  Symbolizer sym;
+  sym.Start(debug_file_directories);
   bool result = tombstone_proto_to_text(
-      tombstone, [](const std::string& line, bool) { printf("%s\n", line.c_str()); });
+      tombstone, [](const std::string& line, bool) { printf("%s\n", line.c_str()); },
+      [&](const BacktraceFrame& frame) { symbolize_backtrace_frame(frame, sym); });
 
   if (!result) {
     errx(1, "tombstone was malformed");
diff --git a/debuggerd/proto/Android.bp b/debuggerd/proto/Android.bp
index 7b9e780..70deb3c 100644
--- a/debuggerd/proto/Android.bp
+++ b/debuggerd/proto/Android.bp
@@ -38,6 +38,7 @@
     ramdisk_available: true,
     recovery_available: true,
     vendor_ramdisk_available: true,
+    host_supported: true,
 }
 
 java_library_static {
diff --git a/debuggerd/proto/tombstone.proto b/debuggerd/proto/tombstone.proto
index b662d36..444c973 100644
--- a/debuggerd/proto/tombstone.proto
+++ b/debuggerd/proto/tombstone.proto
@@ -22,6 +22,21 @@
   reserved 3 to 999;
 }
 
+message StackHistoryBufferEntry {
+  BacktraceFrame addr = 1;
+  uint64 fp = 2;
+  uint64 tag = 3;
+
+  reserved 4 to 999;
+}
+
+message StackHistoryBuffer {
+  uint64 tid = 1;
+  repeated StackHistoryBufferEntry entries = 2;
+
+  reserved 3 to 999;
+}
+
 message Tombstone {
   Architecture arch = 1;
   Architecture guest_arch = 24;
@@ -53,7 +68,9 @@
   uint32 page_size = 22;
   bool has_been_16kb_mode = 23;
 
-  reserved 26 to 999;
+  StackHistoryBuffer stack_history_buffer = 26;
+
+  reserved 27 to 999;
 }
 
 enum Architecture {
diff --git a/debuggerd/test_permissive_mte/Android.bp b/debuggerd/test_permissive_mte/Android.bp
index 0ad3243..f333242 100644
--- a/debuggerd/test_permissive_mte/Android.bp
+++ b/debuggerd/test_permissive_mte/Android.bp
@@ -39,7 +39,7 @@
         "src/**/PermissiveMteTest.java",
         ":libtombstone_proto-src",
     ],
-    data: [":mte_crash"],
+    device_first_data: [":mte_crash"],
     test_config: "AndroidTest.xml",
     test_suites: ["general-tests"],
 }
diff --git a/debuggerd/test_permissive_mte/mte_crash.cpp b/debuggerd/test_permissive_mte/mte_crash.cpp
index 97ad73f..75b70ed 100644
--- a/debuggerd/test_permissive_mte/mte_crash.cpp
+++ b/debuggerd/test_permissive_mte/mte_crash.cpp
@@ -20,5 +20,14 @@
 int main(int, char**) {
   volatile char* f = (char*)malloc(1);
   printf("%c\n", f[17]);
+#ifdef __aarch64__
+  if (getenv("MTE_PERMISSIVE_REENABLE_TIME_CPUMS")) {
+    // Burn some cycles because the MTE_PERMISSIVE_REENABLE_TIME_CPUMS is based on CPU clock.
+    for (int i = 0; i < 1000000000; ++i) {
+      asm("isb");
+    }
+    printf("%c\n", f[17]);
+  }
+#endif
   return 0;
 }
diff --git a/debuggerd/test_permissive_mte/src/com/android/tests/debuggerd/PermissiveMteTest.java b/debuggerd/test_permissive_mte/src/com/android/tests/debuggerd/PermissiveMteTest.java
index 0203adc..544299d 100644
--- a/debuggerd/test_permissive_mte/src/com/android/tests/debuggerd/PermissiveMteTest.java
+++ b/debuggerd/test_permissive_mte/src/com/android/tests/debuggerd/PermissiveMteTest.java
@@ -97,6 +97,34 @@
     }
     assertThat(numberTombstones).isEqualTo(1);
   }
+
+  @Test
+  public void testReenableCrash() throws Exception {
+    CommandResult result =
+        getDevice().executeShellV2Command("MTE_PERMISSIVE=1 MTE_PERMISSIVE_REENABLE_TIME_CPUMS=1 "
+                                          + "/data/local/tmp/mte_crash testReenableCrash "
+                                          + mUUID);
+    assertThat(result.getExitCode()).isEqualTo(0);
+    int numberTombstones = 0;
+    String[] tombstones = getDevice().getChildren("/data/tombstones");
+    for (String tombstone : tombstones) {
+      if (!tombstone.endsWith(".pb")) {
+        continue;
+      }
+      String tombstonePath = "/data/tombstones/" + tombstone;
+      Tombstone tombstoneProto = parseTombstone(tombstonePath);
+      if (!tombstoneProto.getCommandLineList().stream().anyMatch(x -> x.contains(mUUID))) {
+        continue;
+      }
+      if (!tombstoneProto.getCommandLineList().stream().anyMatch(
+              x -> x.contains("testReenableCrash"))) {
+        continue;
+      }
+      numberTombstones++;
+    }
+    assertThat(numberTombstones).isEqualTo(2);
+  }
+
   @Test
   public void testCrashProperty() throws Exception {
     String prevValue = getDevice().getProperty("persist.sys.mte.permissive");
diff --git a/debuggerd/tombstone_symbolize.cpp b/debuggerd/tombstone_symbolize.cpp
new file mode 100644
index 0000000..07735d0
--- /dev/null
+++ b/debuggerd/tombstone_symbolize.cpp
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "tombstone_symbolize.h"
+
+#include <fcntl.h>
+#include <inttypes.h>
+#include <unistd.h>
+
+#include <string>
+#include <vector>
+
+#include "android-base/stringprintf.h"
+#include "android-base/unique_fd.h"
+
+#include "tombstone.pb.h"
+
+using android::base::StringPrintf;
+using android::base::unique_fd;
+
+bool Symbolizer::Start(const std::vector<std::string>& debug_file_directories) {
+  unique_fd parent_in, parent_out, child_in, child_out;
+  if (!Pipe(&parent_in, &child_out) || !Pipe(&child_in, &parent_out)) {
+    return false;
+  }
+
+  std::vector<const char *> args;
+  args.push_back("llvm-symbolizer");
+  for (const std::string &dir : debug_file_directories) {
+    args.push_back("--debug-file-directory");
+    args.push_back(dir.c_str());
+  }
+  args.push_back(0);
+
+  int pid = fork();
+  if (pid == -1) {
+    return false;
+  } else if (pid == 0) {
+    parent_in.reset();
+    parent_out.reset();
+
+    dup2(child_in.get(), STDIN_FILENO);
+    dup2(child_out.get(), STDOUT_FILENO);
+
+    execvp("llvm-symbolizer", const_cast<char *const *>(args.data()));
+
+    fprintf(stderr, "unable to start llvm-symbolizer: %s\n", strerror(errno));
+    _exit(1);
+  } else {
+    child_in.reset();
+    child_out.reset();
+
+    // TODO: Check that llvm-symbolizer started up successfully.
+    // There used to be an easy way to do this, but it was removed in:
+    // https://github.com/llvm/llvm-project/commit/1792852f86dc75efa1f44d46b1a0daf386d64afa
+
+    in_fd = std::move(parent_in);
+    out_fd = std::move(parent_out);
+    return true;
+  }
+}
+
+std::string Symbolizer::read_response() {
+  std::string resp;
+
+  while (resp.size() < 2 || resp[resp.size() - 2] != '\n' || resp[resp.size() - 1] != '\n') {
+    char buf[4096];
+    ssize_t size = read(in_fd, buf, 4096);
+    if (size <= 0) {
+      return "";
+    }
+    resp.append(buf, size);
+  }
+
+  return resp;
+}
+
+std::vector<Symbolizer::Frame> Symbolizer::SymbolizeCode(std::string path, uint64_t rel_pc) {
+  std::string request = StringPrintf("CODE %s 0x%" PRIx64 "\n", path.c_str(), rel_pc);
+  if (write(out_fd, request.c_str(), request.size()) != static_cast<ssize_t>(request.size())) {
+    return {};
+  }
+
+  std::string response = read_response();
+  if (response.empty()) {
+    return {};
+  }
+
+  std::vector<Symbolizer::Frame> frames;
+
+  size_t frame_start = 0;
+  while (frame_start < response.size() - 1) {
+    Symbolizer::Frame frame;
+
+    size_t second_line_start = response.find('\n', frame_start) + 1;
+    if (second_line_start == std::string::npos + 1) {
+      return {};
+    }
+
+    size_t third_line_start = response.find('\n', second_line_start) + 1;
+    if (third_line_start == std::string::npos + 1) {
+      return {};
+    }
+
+    frame.function_name = response.substr(frame_start, second_line_start - frame_start - 1);
+
+    size_t column_number_start = response.rfind(':', third_line_start);
+    if (column_number_start == std::string::npos) {
+      return {};
+    }
+
+    size_t line_number_start = response.rfind(':', column_number_start - 1);
+    if (line_number_start == std::string::npos) {
+      return {};
+    }
+
+    frame.file = response.substr(second_line_start, line_number_start - second_line_start);
+
+    errno = 0;
+    frame.line = strtoull(response.c_str() + line_number_start + 1, 0, 10);
+    frame.column = strtoull(response.c_str() + column_number_start + 1, 0, 10);
+    if (errno != 0) {
+      return {};
+    }
+
+    frames.push_back(frame);
+
+    frame_start = third_line_start;
+  }
+
+  if (frames.size() == 1 && frames[0].file == "??") {
+    return {};
+  }
+
+  return frames;
+}
+
+void symbolize_backtrace_frame(const BacktraceFrame& frame, Symbolizer& sym) {
+  if (frame.build_id().empty()) {
+    return;
+  }
+
+  for (Symbolizer::Frame f : sym.SymbolizeCode("BUILDID:" + frame.build_id(), frame.rel_pc())) {
+    printf("          %s:%" PRId64 ":%" PRId64 " (%s)\n", f.file.c_str(), f.line, f.column,
+           f.function_name.c_str());
+  }
+}
diff --git a/debuggerd/tombstone_symbolize.h b/debuggerd/tombstone_symbolize.h
new file mode 100644
index 0000000..c22d677
--- /dev/null
+++ b/debuggerd/tombstone_symbolize.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include "android-base/unique_fd.h"
+
+class BacktraceFrame;
+
+class Symbolizer {
+  android::base::unique_fd in_fd, out_fd;
+
+  std::string read_response();
+
+ public:
+  bool Start(const std::vector<std::string>& debug_file_directories);
+
+  struct Frame {
+    std::string function_name, file;
+    uint64_t line, column;
+  };
+
+  std::vector<Frame> SymbolizeCode(std::string path, uint64_t rel_pc);
+};
+
+void symbolize_backtrace_frame(const BacktraceFrame& frame, Symbolizer& sym);
diff --git a/debuggerd/tombstoned/tombstoned.cpp b/debuggerd/tombstoned/tombstoned.cpp
index fa67d46..2c72379 100644
--- a/debuggerd/tombstoned/tombstoned.cpp
+++ b/debuggerd/tombstoned/tombstoned.cpp
@@ -158,7 +158,7 @@
       }
     }
 
-    return std::move(result);
+    return result;
   }
 
   std::optional<CrashOutput> get_output(DebuggerdDumpType dump_type) {
diff --git a/fastboot/Android.bp b/fastboot/Android.bp
index 774af28..d3e0581 100644
--- a/fastboot/Android.bp
+++ b/fastboot/Android.bp
@@ -186,6 +186,7 @@
         "libprotobuf-cpp-lite",
         "libsparse",
         "libutils",
+        "libselinux",
     ],
 
     static_libs: [
@@ -200,7 +201,6 @@
         "update_metadata-protos",
         "liburing",
     ],
-    include_dirs: ["bionic/libc/kernel"],
 
     header_libs: [
         "avb_headers",
@@ -429,6 +429,7 @@
     ],
     data: [
         ":fastboot_test_dtb",
+        ":fastboot_test_dtb_replace",
         ":fastboot_test_bootconfig",
         ":fastboot_test_vendor_ramdisk_none",
         ":fastboot_test_vendor_ramdisk_platform",
diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index 6b9e493..156dc3b 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -552,6 +552,12 @@
             "                            Secondary images may be flashed to inactive slot.\n"
             " flash PARTITION [FILENAME] Flash given partition, using the image from\n"
             "                            $ANDROID_PRODUCT_OUT if no filename is given.\n"
+            " flash vendor_boot:RAMDISK [FILENAME]\n"
+            "                            Flash vendor_boot ramdisk, fetching the existing\n"
+            "                            vendor_boot image and repackaging it with the new\n"
+            "                            ramdisk.\n"
+            " --dtb DTB                  If set with flash vendor_boot:RAMDISK, then\n"
+            "                            update the vendor_boot image with provided DTB.\n"
             "\n"
             "basics:\n"
             " devices [-l]               List devices in bootloader (-l: with device paths).\n"
@@ -1020,6 +1026,8 @@
 }
 
 int64_t get_sparse_limit(int64_t size, const FlashingPlan* fp) {
+    if (!fp) return 0;
+
     int64_t limit = int64_t(fp->sparse_limit);
     if (limit == 0) {
         // Unlimited, so see what the target device's limit is.
@@ -1465,6 +1473,7 @@
 static std::string repack_ramdisk(const char* pname, struct fastboot_buffer* buf,
                                   fastboot::IFastBootDriver* fb) {
     std::string_view pname_sv{pname};
+    struct fastboot_buffer dtb_buf = {.sz = 0, .fd = unique_fd(-1)};
 
     if (!android::base::StartsWith(pname_sv, "vendor_boot:") &&
         !android::base::StartsWith(pname_sv, "vendor_boot_a:") &&
@@ -1480,10 +1489,25 @@
     std::string partition(pname_sv.substr(0, pname_sv.find(':')));
     std::string ramdisk(pname_sv.substr(pname_sv.find(':') + 1));
 
+    if (!g_dtb_path.empty()) {
+        if (!load_buf(g_dtb_path.c_str(), &dtb_buf, nullptr)) {
+            die("cannot load '%s': %s", g_dtb_path.c_str(), strerror(errno));
+        }
+
+        if (dtb_buf.type != FB_BUFFER_FD) {
+            die("Flashing sparse vendor ramdisk image with dtb is not supported.");
+        }
+        if (dtb_buf.sz <= 0) {
+            die("repack_ramdisk() sees invalid dtb size: %" PRId64, buf->sz);
+        }
+        verbose("Updating DTB with %s", pname_sv.data());
+    }
+
     unique_fd vendor_boot(make_temporary_fd("vendor boot repack"));
     uint64_t vendor_boot_size = fetch_partition(partition, vendor_boot, fb);
     auto repack_res = replace_vendor_ramdisk(vendor_boot, vendor_boot_size, ramdisk, buf->fd,
-                                             static_cast<uint64_t>(buf->sz));
+                                             static_cast<uint64_t>(buf->sz), dtb_buf.fd,
+                                             static_cast<uint64_t>(dtb_buf.sz));
     if (!repack_res.ok()) {
         die("%s", repack_res.error().message().c_str());
     }
diff --git a/fastboot/fuzzer/fastboot_fuzzer.cpp b/fastboot/fuzzer/fastboot_fuzzer.cpp
index 60940fe..4594a8a 100644
--- a/fastboot/fuzzer/fastboot_fuzzer.cpp
+++ b/fastboot/fuzzer/fastboot_fuzzer.cpp
@@ -15,6 +15,7 @@
  *
  */
 #include <android-base/file.h>
+#include <android-base/unique_fd.h>
 #include "fastboot.h"
 #include "socket.h"
 #include "socket_mock_fuzz.h"
@@ -25,6 +26,7 @@
 #include <fuzzer/FuzzedDataProvider.h>
 
 using namespace std;
+using android::base::unique_fd;
 
 const size_t kYearMin = 2000;
 const size_t kYearMax = 2127;
@@ -255,7 +257,7 @@
     uint64_t ramdisk_size =
             fdp_->ConsumeBool() ? content_ramdisk_fd.size() : fdp_->ConsumeIntegral<uint64_t>();
     (void)replace_vendor_ramdisk(vendor_boot_fd, vendor_boot_size, ramdisk_name, ramdisk_fd,
-                                 ramdisk_size);
+                                 ramdisk_size, unique_fd(-1), 0);
     close(vendor_boot_fd);
     close(ramdisk_fd);
 }
diff --git a/fastboot/fuzzy_fastboot/transport_sniffer.cpp b/fastboot/fuzzy_fastboot/transport_sniffer.cpp
index b55ffd3..0aef350 100644
--- a/fastboot/fuzzy_fastboot/transport_sniffer.cpp
+++ b/fastboot/fuzzy_fastboot/transport_sniffer.cpp
@@ -90,7 +90,7 @@
     // and be printed as a string, or just a raw byte-buffer
     const auto msg = [&ret, no_print](const std::vector<char>& buf) {
         ret += android::base::StringPrintf("(%lu bytes): ", buf.size());
-        std::vector<const char>::iterator iter = buf.end();
+        std::vector<char>::const_iterator iter = buf.end();
         const unsigned max_chars = 50;
         if (buf.size() > max_chars) {
             iter = buf.begin() + max_chars;
diff --git a/fastboot/testdata/Android.bp b/fastboot/testdata/Android.bp
index a490fe2..47bf095 100644
--- a/fastboot/testdata/Android.bp
+++ b/fastboot/testdata/Android.bp
@@ -40,6 +40,14 @@
     cmd: "$(location fastboot_gen_rand) --seed dtb --length 1024 > $(out)",
 }
 
+// Fake dtb image for replacement.
+genrule {
+    name: "fastboot_test_dtb_replace",
+    defaults: ["fastboot_test_data_gen_defaults"],
+    out: ["dtb_replace.img"],
+    cmd: "$(location fastboot_gen_rand) --seed dtb --length 2048 > $(out)",
+}
+
 // Fake bootconfig image.
 genrule {
     name: "fastboot_test_bootconfig",
diff --git a/fastboot/vendor_boot_img_utils.cpp b/fastboot/vendor_boot_img_utils.cpp
index 9f05253..da547f1 100644
--- a/fastboot/vendor_boot_img_utils.cpp
+++ b/fastboot/vendor_boot_img_utils.cpp
@@ -209,7 +209,8 @@
 
 // Replace the vendor ramdisk as a whole.
 [[nodiscard]] Result<std::string> replace_default_vendor_ramdisk(const std::string& vendor_boot,
-                                                                 const std::string& new_ramdisk) {
+                                                                 const std::string& new_ramdisk,
+                                                                 const std::string& new_dtb) {
     if (auto res = check_vendor_boot_hdr(vendor_boot, 3); !res.ok()) return res.error();
     auto hdr = reinterpret_cast<const vendor_boot_img_hdr_v3*>(vendor_boot.data());
     auto hdr_size = get_vendor_boot_header_size(hdr);
@@ -244,8 +245,19 @@
         return res.error();
     if (auto res = updater.CheckOffset(o + p, o + new_p); !res.ok()) return res.error();
 
-    // Copy DTB (Q bytes).
-    if (auto res = updater.Copy(q); !res.ok()) return res.error();
+    // Copy DTB (Q bytes). Replace if a new one was provided.
+    new_hdr->dtb_size = !new_dtb.empty() ? new_dtb.size() : hdr->dtb_size;
+    const uint32_t new_q = round_up(new_hdr->dtb_size, new_hdr->page_size);
+    if (new_dtb.empty()) {
+        if (auto res = updater.Copy(q); !res.ok()) return res.error();
+    } else {
+        if (auto res = updater.Replace(hdr->dtb_size, new_dtb); !res.ok()) return res.error();
+        if (auto res = updater.Skip(q - hdr->dtb_size, new_q - new_hdr->dtb_size); !res.ok())
+            return res.error();
+    }
+    if (auto res = updater.CheckOffset(o + p + q, o + new_p + new_q); !res.ok()) {
+        return res.error();
+    }
 
     if (new_hdr->header_version >= 4) {
         auto hdr_v4 = static_cast<const vendor_boot_img_hdr_v4*>(hdr);
@@ -256,7 +268,7 @@
         auto new_hdr_v4 = static_cast<const vendor_boot_img_hdr_v4*>(new_hdr);
         auto new_r = round_up(new_hdr_v4->vendor_ramdisk_table_size, new_hdr->page_size);
         if (auto res = updater.Skip(r, new_r); !res.ok()) return res.error();
-        if (auto res = updater.CheckOffset(o + p + q + r, o + new_p + q + new_r); !res.ok())
+        if (auto res = updater.CheckOffset(o + p + q + r, o + new_p + new_q + new_r); !res.ok())
             return res.error();
 
         // Replace table with single entry representing the full ramdisk.
@@ -303,7 +315,8 @@
 // replace it with the content of |new_ramdisk|.
 [[nodiscard]] Result<std::string> replace_vendor_ramdisk_fragment(const std::string& ramdisk_name,
                                                                   const std::string& vendor_boot,
-                                                                  const std::string& new_ramdisk) {
+                                                                  const std::string& new_ramdisk,
+                                                                  const std::string& new_dtb) {
     if (auto res = check_vendor_boot_hdr(vendor_boot, 4); !res.ok()) return res.error();
     auto hdr = reinterpret_cast<const vendor_boot_img_hdr_v4*>(vendor_boot.data());
     auto hdr_size = get_vendor_boot_header_size(hdr);
@@ -368,8 +381,19 @@
         return res.error();
     if (auto res = updater.CheckOffset(o + p, o + new_p); !res.ok()) return res.error();
 
-    // Copy DTB (Q bytes).
-    if (auto res = updater.Copy(q); !res.ok()) return res.error();
+    // Copy DTB (Q bytes). Replace if a new one was provided.
+    new_hdr->dtb_size = !new_dtb.empty() ? new_dtb.size() : hdr->dtb_size;
+    const uint32_t new_q = round_up(new_hdr->dtb_size, new_hdr->page_size);
+    if (new_dtb.empty()) {
+        if (auto res = updater.Copy(q); !res.ok()) return res.error();
+    } else {
+        if (auto res = updater.Replace(hdr->dtb_size, new_dtb); !res.ok()) return res.error();
+        if (auto res = updater.Skip(q - hdr->dtb_size, new_q - new_hdr->dtb_size); !res.ok())
+            return res.error();
+    }
+    if (auto res = updater.CheckOffset(o + p + q, o + new_p + new_q); !res.ok()) {
+        return res.error();
+    }
 
     // Copy table, but with corresponding entries modified, including:
     // - ramdisk_size of the entry replaced
@@ -392,7 +416,7 @@
                                             hdr->vendor_ramdisk_table_entry_size);
         !res.ok())
         return res.error();
-    if (auto res = updater.CheckOffset(o + p + q + r, o + new_p + q + r); !res.ok())
+    if (auto res = updater.CheckOffset(o + p + q + r, o + new_p + new_q + r); !res.ok())
         return res.error();
 
     // Copy bootconfig (S bytes).
@@ -404,11 +428,11 @@
 
 }  // namespace
 
-[[nodiscard]] Result<void> replace_vendor_ramdisk(android::base::borrowed_fd vendor_boot_fd,
-                                                  uint64_t vendor_boot_size,
-                                                  const std::string& ramdisk_name,
-                                                  android::base::borrowed_fd new_ramdisk_fd,
-                                                  uint64_t new_ramdisk_size) {
+[[nodiscard]] Result<void> replace_vendor_ramdisk(
+        android::base::borrowed_fd vendor_boot_fd, uint64_t vendor_boot_size,
+        const std::string& ramdisk_name, android::base::borrowed_fd new_ramdisk_fd,
+        uint64_t new_ramdisk_size, android::base::borrowed_fd new_dtb_fd, uint64_t new_dtb_size) {
+    Result<std::string> new_dtb = {""};
     if (new_ramdisk_size > std::numeric_limits<uint32_t>::max()) {
         return Errorf("New vendor ramdisk is too big");
     }
@@ -417,12 +441,17 @@
     if (!vendor_boot.ok()) return vendor_boot.error();
     auto new_ramdisk = load_file(new_ramdisk_fd, new_ramdisk_size, "new vendor ramdisk");
     if (!new_ramdisk.ok()) return new_ramdisk.error();
+    if (new_dtb_size > 0 && new_dtb_fd >= 0) {
+        new_dtb = load_file(new_dtb_fd, new_dtb_size, "new dtb");
+        if (!new_dtb.ok()) return new_dtb.error();
+    }
 
     Result<std::string> new_vendor_boot;
     if (ramdisk_name == "default") {
-        new_vendor_boot = replace_default_vendor_ramdisk(*vendor_boot, *new_ramdisk);
+        new_vendor_boot = replace_default_vendor_ramdisk(*vendor_boot, *new_ramdisk, *new_dtb);
     } else {
-        new_vendor_boot = replace_vendor_ramdisk_fragment(ramdisk_name, *vendor_boot, *new_ramdisk);
+        new_vendor_boot =
+                replace_vendor_ramdisk_fragment(ramdisk_name, *vendor_boot, *new_ramdisk, *new_dtb);
     }
     if (!new_vendor_boot.ok()) return new_vendor_boot.error();
     if (auto res = store_file(vendor_boot_fd, *new_vendor_boot, "new vendor boot image"); !res.ok())
diff --git a/fastboot/vendor_boot_img_utils.h b/fastboot/vendor_boot_img_utils.h
index 0b702bc..0ca78da 100644
--- a/fastboot/vendor_boot_img_utils.h
+++ b/fastboot/vendor_boot_img_utils.h
@@ -31,4 +31,4 @@
 [[nodiscard]] android::base::Result<void> replace_vendor_ramdisk(
         android::base::borrowed_fd vendor_boot_fd, uint64_t vendor_boot_size,
         const std::string& ramdisk_name, android::base::borrowed_fd new_ramdisk_fd,
-        uint64_t new_ramdisk_size);
+        uint64_t new_ramdisk_size, android::base::borrowed_fd new_dtb_fd, uint64_t new_dtb_size);
diff --git a/fastboot/vendor_boot_img_utils_test.cpp b/fastboot/vendor_boot_img_utils_test.cpp
index 467c6e9..841e532 100644
--- a/fastboot/vendor_boot_img_utils_test.cpp
+++ b/fastboot/vendor_boot_img_utils_test.cpp
@@ -163,7 +163,7 @@
   protected:
     // |rel_path| is the relative path under test data directory.
     TestFileHandle(const std::filesystem::path& rel_path)
-        : abs_path_(std::move(std::filesystem::path(GetExecutableDirectory()) / rel_path)) {}
+        : abs_path_(std::filesystem::path(GetExecutableDirectory()) / rel_path) {}
     // Given |read_fd|, the readonly fd on the test file, return an fd that's suitable for client
     // to use. Implementation is responsible for managing the lifetime of the returned fd.
     virtual android::base::Result<borrowed_fd> Transform(const std::filesystem::path& abs_path,
@@ -241,6 +241,7 @@
 
 struct RepackVendorBootImgTestParam {
     std::string vendor_boot_file_name;
+    std::string dtb_file_name;
     uint32_t expected_header_version;
     friend std::ostream& operator<<(std::ostream& os, const RepackVendorBootImgTestParam& param) {
         return os << param.vendor_boot_file_name;
@@ -252,22 +253,50 @@
     virtual void SetUp() {
         vboot = std::make_unique<ReadWriteTestFileHandle>(GetParam().vendor_boot_file_name);
         ASSERT_RESULT_OK(vboot->Open());
+
+        if (!GetParam().dtb_file_name.empty()) {
+            dtb_replacement = std::make_unique<ReadOnlyTestFileHandle>(GetParam().dtb_file_name);
+            ASSERT_RESULT_OK(dtb_replacement->Open());
+        }
     }
     std::unique_ptr<TestFileHandle> vboot;
+    std::unique_ptr<TestFileHandle> dtb_replacement;
 };
 
 TEST_P(RepackVendorBootImgTest, InvalidSize) {
-    EXPECT_ERROR(replace_vendor_ramdisk(vboot->fd(), vboot->size() + 1, "default",
-                                        env->replace->fd(), env->replace->size()),
-                 HasSubstr("Size of vendor boot does not match"));
-    EXPECT_ERROR(replace_vendor_ramdisk(vboot->fd(), vboot->size(), "default", env->replace->fd(),
-                                        env->replace->size() + 1),
-                 HasSubstr("Size of new vendor ramdisk does not match"));
+    EXPECT_ERROR(
+            replace_vendor_ramdisk(vboot->fd(), vboot->size() + 1, "default", env->replace->fd(),
+                                   env->replace->size(),
+                                   !GetParam().dtb_file_name.empty() ? dtb_replacement->fd()
+                                                                     : android::base::unique_fd(-1),
+                                   !GetParam().dtb_file_name.empty() ? dtb_replacement->size() : 0),
+            HasSubstr("Size of vendor boot does not match"));
+    EXPECT_ERROR(
+            replace_vendor_ramdisk(vboot->fd(), vboot->size(), "default", env->replace->fd(),
+                                   env->replace->size() + 1,
+                                   !GetParam().dtb_file_name.empty() ? dtb_replacement->fd()
+                                                                     : android::base::unique_fd(-1),
+                                   !GetParam().dtb_file_name.empty() ? dtb_replacement->size() : 0),
+            HasSubstr("Size of new vendor ramdisk does not match"));
+    if (!GetParam().dtb_file_name.empty()) {
+        EXPECT_ERROR(replace_vendor_ramdisk(vboot->fd(), vboot->size(), "default",
+                                            env->replace->fd(), env->replace->size(),
+                                            dtb_replacement->fd(), dtb_replacement->size() + 1),
+                     HasSubstr("Size of new dtb does not match"));
+    }
+    EXPECT_ERROR(
+            replace_vendor_ramdisk(
+                    vboot->fd(), vboot->size(), "default", env->replace->fd(), env->replace->size(),
+                    android::base::unique_fd(std::numeric_limits<int32_t>::max()), 1),
+            HasSubstr("Can't seek to the beginning of new dtb image"));
 }
 
 TEST_P(RepackVendorBootImgTest, ReplaceUnknown) {
-    auto res = replace_vendor_ramdisk(vboot->fd(), vboot->size(), "unknown", env->replace->fd(),
-                                      env->replace->size());
+    auto res = replace_vendor_ramdisk(
+            vboot->fd(), vboot->size(), "unknown", env->replace->fd(), env->replace->size(),
+            !GetParam().dtb_file_name.empty() ? dtb_replacement->fd()
+                                              : android::base::unique_fd(-1),
+            !GetParam().dtb_file_name.empty() ? dtb_replacement->size() : 0);
     if (GetParam().expected_header_version == 3) {
         EXPECT_ERROR(res, Eq("Require vendor boot header V4 but is V3"));
     } else if (GetParam().expected_header_version == 4) {
@@ -279,8 +308,11 @@
     auto old_content = vboot->Read();
     ASSERT_RESULT_OK(old_content);
 
-    ASSERT_RESULT_OK(replace_vendor_ramdisk(vboot->fd(), vboot->size(), "default",
-                                            env->replace->fd(), env->replace->size()));
+    ASSERT_RESULT_OK(replace_vendor_ramdisk(
+            vboot->fd(), vboot->size(), "default", env->replace->fd(), env->replace->size(),
+            !GetParam().dtb_file_name.empty() ? dtb_replacement->fd()
+                                              : android::base::unique_fd(-1),
+            !GetParam().dtb_file_name.empty() ? dtb_replacement->size() : 0));
     EXPECT_RESULT(vboot->fsize(), vboot->size()) << "File size should not change after repack";
 
     auto new_content_res = vboot->Read();
@@ -291,14 +323,23 @@
     ASSERT_EQ(0, memcmp(VENDOR_BOOT_MAGIC, hdr->magic, VENDOR_BOOT_MAGIC_SIZE));
     ASSERT_EQ(GetParam().expected_header_version, hdr->header_version);
     EXPECT_EQ(hdr->vendor_ramdisk_size, env->replace->size());
-    EXPECT_EQ(hdr->dtb_size, env->dtb->size());
+    if (GetParam().dtb_file_name.empty()) {
+        EXPECT_EQ(hdr->dtb_size, env->dtb->size());
+    } else {
+        EXPECT_EQ(hdr->dtb_size, dtb_replacement->size());
+    }
 
     auto o = round_up(sizeof(vendor_boot_img_hdr_v3), hdr->page_size);
     auto p = round_up(hdr->vendor_ramdisk_size, hdr->page_size);
     auto q = round_up(hdr->dtb_size, hdr->page_size);
 
     EXPECT_THAT(new_content.substr(o, p), IsPadded(env->replace_content));
-    EXPECT_THAT(new_content.substr(o + p, q), IsPadded(env->dtb_content));
+    if (GetParam().dtb_file_name.empty()) {
+        EXPECT_THAT(new_content.substr(o + p, q), IsPadded(env->dtb_content));
+    } else {
+        auto dtb_content_res = dtb_replacement->Read();
+        EXPECT_THAT(new_content.substr(o + p, q), IsPadded(*dtb_content_res));
+    }
 
     if (hdr->header_version < 4) return;
 
@@ -321,11 +362,17 @@
 
 INSTANTIATE_TEST_SUITE_P(
         RepackVendorBootImgTest, RepackVendorBootImgTest,
-        ::testing::Values(RepackVendorBootImgTestParam{"vendor_boot_v3.img", 3},
-                          RepackVendorBootImgTestParam{"vendor_boot_v4_with_frag.img", 4},
-                          RepackVendorBootImgTestParam{"vendor_boot_v4_without_frag.img", 4}),
+        ::testing::Values(RepackVendorBootImgTestParam{"vendor_boot_v3.img", "", 3},
+                          RepackVendorBootImgTestParam{"vendor_boot_v4_with_frag.img", "", 4},
+                          RepackVendorBootImgTestParam{"vendor_boot_v4_without_frag.img", "", 4},
+                          RepackVendorBootImgTestParam{"vendor_boot_v4_with_frag.img",
+                                                       "dtb_replace.img", 4},
+                          RepackVendorBootImgTestParam{"vendor_boot_v4_without_frag.img",
+                                                       "dtb_replace.img", 4}),
         [](const auto& info) {
-            return android::base::StringReplace(info.param.vendor_boot_file_name, ".", "_", false);
+            std::string test_name =
+                    android::base::StringReplace(info.param.vendor_boot_file_name, ".", "_", false);
+            return test_name + (!info.param.dtb_file_name.empty() ? "_replace_dtb" : "");
         });
 
 std::string_view GetRamdiskName(const vendor_ramdisk_table_entry_v4* entry) {
@@ -368,7 +415,8 @@
     ASSERT_RESULT_OK(old_content);
 
     ASSERT_RESULT_OK(replace_vendor_ramdisk(vboot->fd(), vboot->size(), replace_ramdisk_name,
-                                            env->replace->fd(), env->replace->size()));
+                                            env->replace->fd(), env->replace->size(),
+                                            android::base::unique_fd(-1), 0));
     EXPECT_RESULT(vboot->fsize(), vboot->size()) << "File size should not change after repack";
 
     auto new_content_res = vboot->Read();
diff --git a/fs_mgr/TEST_MAPPING b/fs_mgr/TEST_MAPPING
index 32e8b88..13af1e2 100644
--- a/fs_mgr/TEST_MAPPING
+++ b/fs_mgr/TEST_MAPPING
@@ -27,13 +27,18 @@
     },
     {
       "name": "cow_api_test"
-    },
+    }
+  ],
+  "postsubmit": [
     {
       "name": "snapuserd_test"
     }
   ],
   "kernel-presubmit": [
     {
+      "name": "adb-remount-sh"
+    },
+    {
       "name": "libdm_test"
     },
     {
diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp
index 5156754..9f52f44 100644
--- a/fs_mgr/fs_mgr.cpp
+++ b/fs_mgr/fs_mgr.cpp
@@ -28,6 +28,7 @@
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
+#include <sys/statvfs.h>
 #include <sys/swap.h>
 #include <sys/types.h>
 #include <sys/utsname.h>
@@ -37,10 +38,8 @@
 
 #include <array>
 #include <chrono>
-#include <functional>
 #include <map>
 #include <memory>
-#include <numeric>
 #include <string>
 #include <string_view>
 #include <thread>
@@ -65,6 +64,7 @@
 #include <fs_mgr/file_wait.h>
 #include <fs_mgr_overlayfs.h>
 #include <fscrypt/fscrypt.h>
+#include <fstab/fstab.h>
 #include <libdm/dm.h>
 #include <libdm/loop_control.h>
 #include <liblp/metadata_format.h>
@@ -81,7 +81,7 @@
 #define F2FS_FSCK_BIN   "/system/bin/fsck.f2fs"
 #define MKSWAP_BIN      "/system/bin/mkswap"
 #define TUNE2FS_BIN     "/system/bin/tune2fs"
-#define RESIZE2FS_BIN "/system/bin/resize2fs"
+#define RESIZE2FS_BIN   "/system/bin/resize2fs"
 
 #define FSCK_LOG_FILE   "/dev/fscklogs/log"
 
@@ -137,8 +137,8 @@
 static void log_fs_stat(const std::string& blk_device, int fs_stat) {
     std::string msg =
             android::base::StringPrintf("\nfs_stat,%s,0x%x\n", blk_device.c_str(), fs_stat);
-    android::base::unique_fd fd(TEMP_FAILURE_RETRY(open(FSCK_LOG_FILE, O_WRONLY | O_CLOEXEC |
-                                                        O_APPEND | O_CREAT, 0664)));
+    android::base::unique_fd fd(TEMP_FAILURE_RETRY(
+            open(FSCK_LOG_FILE, O_WRONLY | O_CLOEXEC | O_APPEND | O_CREAT, 0664)));
     if (fd == -1 || !android::base::WriteStringToFd(msg, fd)) {
         LWARNING << __FUNCTION__ << "() cannot log " << msg;
     }
@@ -215,10 +215,6 @@
          */
         if (!(*fs_stat & FS_STAT_FULL_MOUNT_FAILED)) {  // already tried if full mount failed
             errno = 0;
-            if (fs_type == "ext4") {
-                // This option is only valid with ext4
-                tmpmnt_opts += ",nomblk_io_submit";
-            }
             ret = mount(blk_device.c_str(), target.c_str(), fs_type.c_str(), tmpmnt_flags,
                         tmpmnt_opts.c_str());
             PINFO << __FUNCTION__ << "(): mount(" << blk_device << "," << target << "," << fs_type
@@ -596,7 +592,7 @@
 
     // Must give `-T now` to prevent last_fsck_time from growing too large,
     // otherwise, tune2fs won't enable metadata_csum.
-    const char* tune2fs_args[] = {TUNE2FS_BIN, "-O",        "metadata_csum,64bit,extent",
+    const char* tune2fs_args[] = {TUNE2FS_BIN, "-O",  "metadata_csum,64bit,extent",
                                   "-T",        "now", blk_device.c_str()};
     const char* resize2fs_args[] = {RESIZE2FS_BIN, "-b", blk_device.c_str()};
 
@@ -930,7 +926,8 @@
 // attempted_idx: On return, will indicate which fstab entry
 //     succeeded. In case of failure, it will be the start_idx.
 // Sets errno to match the 1st mount failure on failure.
-static bool mount_with_alternatives(Fstab& fstab, int start_idx, int* end_idx, int* attempted_idx) {
+static bool mount_with_alternatives(Fstab& fstab, int start_idx, bool interrupted, int* end_idx,
+                                    int* attempted_idx) {
     unsigned long i;
     int mount_errno = 0;
     bool mounted = false;
@@ -949,6 +946,13 @@
             continue;
         }
 
+        if (interrupted) {
+            LINFO << __FUNCTION__ << "(): skipping fstab mountpoint=" << fstab[i].mount_point
+                  << " rec[" << i << "].fs_type=" << fstab[i].fs_type
+                  << " (previously interrupted during encryption step)";
+            continue;
+        }
+
         // fstab[start_idx].blk_device is already updated to /dev/dm-<N> by
         // AVB related functions. Copy it from start_idx to the current index i.
         if ((i != start_idx) && fstab[i].fs_mgr_flags.logical &&
@@ -1416,19 +1420,59 @@
     return GetEntryForMountPoint(&fstab, mount_point) != nullptr;
 }
 
+std::string fs_mgr_metadata_encryption_in_progress_file_name(const FstabEntry& entry) {
+    return entry.metadata_key_dir + "/in_progress";
+}
+
+bool WasMetadataEncryptionInterrupted(const FstabEntry& entry) {
+    if (!should_use_metadata_encryption(entry)) return false;
+    return access(fs_mgr_metadata_encryption_in_progress_file_name(entry).c_str(), R_OK) == 0;
+}
+
+static FstabEntry* LocateFormattableEntry(FstabEntry* const begin, FstabEntry* const end) {
+    if (begin == end) {
+        return nullptr;
+    }
+    const bool dev_option_enabled =
+            android::base::GetBoolProperty("ro.product.build.16k_page.enabled", false);
+    FstabEntry* f2fs_entry = nullptr;
+    for (auto iter = begin; iter != end && iter->blk_device == begin->blk_device; iter++) {
+        if (iter->fs_mgr_flags.formattable) {
+            if (getpagesize() != 4096 && is_f2fs(iter->fs_type) && dev_option_enabled) {
+                f2fs_entry = iter;
+                continue;
+            }
+            if (f2fs_entry) {
+                LOG(INFO) << "Skipping F2FS format for block device " << iter->blk_device << " @ "
+                          << iter->mount_point
+                          << " in non-4K mode for dev option enabled devices, "
+                             "as these devices need to toggle between 4K/16K mode, and F2FS does "
+                             "not support page_size != block_size configuration.";
+            }
+            return iter;
+        }
+    }
+    if (f2fs_entry) {
+        LOG(INFO) << "Using F2FS for " << f2fs_entry->blk_device << " @ " << f2fs_entry->mount_point
+                  << " even though we are in non-4K mode. Device might require a data wipe after "
+                     "going back to 4K mode, as F2FS does not support page_size != block_size";
+    }
+    return f2fs_entry;
+}
+
 // When multiple fstab records share the same mount_point, it will try to mount each
 // one in turn, and ignore any duplicates after a first successful mount.
 // Returns -1 on error, and  FS_MGR_MNTALL_* otherwise.
-MountAllResult fs_mgr_mount_all(Fstab* fstab, int mount_mode) {
+int fs_mgr_mount_all(Fstab* fstab, int mount_mode) {
     int encryptable = FS_MGR_MNTALL_DEV_NOT_ENCRYPTABLE;
     int error_count = 0;
     CheckpointManager checkpoint_manager;
     AvbUniquePtr avb_handle(nullptr);
     bool wiped = false;
-
     bool userdata_mounted = false;
+
     if (fstab->empty()) {
-        return {FS_MGR_MNTALL_FAIL, userdata_mounted};
+        return FS_MGR_MNTALL_FAIL;
     }
 
     bool scratch_can_be_mounted = true;
@@ -1507,7 +1551,7 @@
                 if (!avb_handle) {
                     LERROR << "Failed to open AvbHandle";
                     set_type_property(encryptable);
-                    return {FS_MGR_MNTALL_FAIL, userdata_mounted};
+                    return FS_MGR_MNTALL_FAIL;
                 }
             }
             if (avb_handle->SetUpAvbHashtree(&current_entry, true /* wait_for_verity_dev */) ==
@@ -1526,11 +1570,13 @@
             }
         }
 
-        int last_idx_inspected;
-        int top_idx = i;
+        int last_idx_inspected = -1;
+        const int top_idx = i;
         int attempted_idx = -1;
 
-        bool mret = mount_with_alternatives(*fstab, i, &last_idx_inspected, &attempted_idx);
+        bool encryption_interrupted = WasMetadataEncryptionInterrupted(current_entry);
+        bool mret = mount_with_alternatives(*fstab, i, encryption_interrupted, &last_idx_inspected,
+                                            &attempted_idx);
         auto& attempted_entry = (*fstab)[attempted_idx];
         i = last_idx_inspected;
         int mount_errno = errno;
@@ -1541,7 +1587,7 @@
 
             if (status == FS_MGR_MNTALL_FAIL) {
                 // Fatal error - no point continuing.
-                return {status, userdata_mounted};
+                return status;
             }
 
             if (status != FS_MGR_MNTALL_DEV_NOT_ENCRYPTABLE) {
@@ -1557,11 +1603,12 @@
                                    attempted_entry.fs_type,
                                    attempted_entry.fs_mgr_flags.is_zoned ? "true" : "false",
                                    std::to_string(attempted_entry.length),
-                                   android::base::Join(attempted_entry.user_devices, ' ')},
+                                   android::base::Join(attempted_entry.user_devices, ' '),
+                                   android::base::Join(attempted_entry.device_aliased, ' ')},
                                   nullptr)) {
                         LERROR << "Encryption failed";
                         set_type_property(encryptable);
-                        return {FS_MGR_MNTALL_FAIL, userdata_mounted};
+                        return FS_MGR_MNTALL_FAIL;
                     }
                 }
             }
@@ -1575,17 +1622,23 @@
             // Success!  Go get the next one.
             continue;
         }
-
+        auto formattable_entry =
+                LocateFormattableEntry(fstab->data() + top_idx, fstab->data() + fstab->size());
         // Mounting failed, understand why and retry.
         wiped = partition_wiped(current_entry.blk_device.c_str());
         if (mount_errno != EBUSY && mount_errno != EACCES &&
-            current_entry.fs_mgr_flags.formattable && wiped) {
+            current_entry.fs_mgr_flags.formattable && (wiped || encryption_interrupted)) {
             // current_entry and attempted_entry point at the same partition, but sometimes
             // at two different lines in the fstab.  Use current_entry for formatting
             // as that is the preferred one.
-            LERROR << __FUNCTION__ << "(): " << realpath(current_entry.blk_device)
-                   << " is wiped and " << current_entry.mount_point << " " << current_entry.fs_type
-                   << " is formattable. Format it.";
+            if (wiped)
+                LERROR << __FUNCTION__ << "(): " << realpath(current_entry.blk_device)
+                       << " is wiped and " << current_entry.mount_point << " "
+                       << current_entry.fs_type << " is formattable. Format it.";
+            if (encryption_interrupted)
+                LERROR << __FUNCTION__ << "(): " << realpath(current_entry.blk_device)
+                       << " was interrupted during encryption and " << current_entry.mount_point
+                       << " " << current_entry.fs_type << " is formattable. Format it.";
 
             checkpoint_manager.Revert(&current_entry);
 
@@ -1598,12 +1651,13 @@
                 encryptable = FS_MGR_MNTALL_DEV_IS_METADATA_ENCRYPTED;
                 set_type_property(encryptable);
 
-                if (!call_vdc({"cryptfs", "encryptFstab", current_entry.blk_device,
-                               current_entry.mount_point, "true" /* shouldFormat */,
-                               current_entry.fs_type,
-                               current_entry.fs_mgr_flags.is_zoned ? "true" : "false",
-                               std::to_string(current_entry.length),
-                               android::base::Join(current_entry.user_devices, ' ')},
+                if (!call_vdc({"cryptfs", "encryptFstab", formattable_entry->blk_device,
+                               formattable_entry->mount_point, "true" /* shouldFormat */,
+                               formattable_entry->fs_type,
+                               formattable_entry->fs_mgr_flags.is_zoned ? "true" : "false",
+                               std::to_string(formattable_entry->length),
+                               android::base::Join(formattable_entry->user_devices, ' '),
+                               android::base::Join(formattable_entry->device_aliased, ' ')},
                               nullptr)) {
                     LERROR << "Encryption failed";
                 } else {
@@ -1612,7 +1666,7 @@
                 }
             }
 
-            if (fs_mgr_do_format(current_entry) == 0) {
+            if (fs_mgr_do_format(*formattable_entry) == 0) {
                 // Let's replay the mount actions.
                 i = top_idx - 1;
                 continue;
@@ -1625,7 +1679,7 @@
         }
 
         // mount(2) returned an error, handle the encryptable/formattable case.
-        if (mount_errno != EBUSY && mount_errno != EACCES &&
+        if (mount_errno != EBUSY && mount_errno != EACCES && !encryption_interrupted &&
             should_use_metadata_encryption(attempted_entry)) {
             if (!call_vdc({"cryptfs", "mountFstab", attempted_entry.blk_device,
                            attempted_entry.mount_point,
@@ -1643,13 +1697,13 @@
             // Use StringPrintf to output "(null)" instead.
             if (attempted_entry.fs_mgr_flags.no_fail) {
                 PERROR << android::base::StringPrintf(
-                        "Ignoring failure to mount an un-encryptable or wiped "
+                        "Ignoring failure to mount an un-encryptable, interrupted, or wiped "
                         "partition on %s at %s options: %s",
                         attempted_entry.blk_device.c_str(), attempted_entry.mount_point.c_str(),
                         attempted_entry.fs_options.c_str());
             } else {
                 PERROR << android::base::StringPrintf(
-                        "Failed to mount an un-encryptable or wiped partition "
+                        "Failed to mount an un-encryptable, interrupted, or wiped partition "
                         "on %s at %s options: %s",
                         attempted_entry.blk_device.c_str(), attempted_entry.mount_point.c_str(),
                         attempted_entry.fs_options.c_str());
@@ -1675,9 +1729,9 @@
     set_type_property(encryptable);
 
     if (error_count) {
-        return {FS_MGR_MNTALL_FAIL, userdata_mounted};
+        return FS_MGR_MNTALL_FAIL;
     } else {
-        return {encryptable, userdata_mounted};
+        return encryptable;
     }
 }
 
@@ -1714,190 +1768,6 @@
     return ret;
 }
 
-static std::chrono::milliseconds GetMillisProperty(const std::string& name,
-                                                   std::chrono::milliseconds default_value) {
-    auto value = GetUintProperty(name, static_cast<uint64_t>(default_value.count()));
-    return std::chrono::milliseconds(std::move(value));
-}
-
-static bool fs_mgr_unmount_all_data_mounts(const std::string& data_block_device) {
-    LINFO << __FUNCTION__ << "(): about to umount everything on top of " << data_block_device;
-    Timer t;
-    auto timeout = GetMillisProperty("init.userspace_reboot.userdata_remount.timeoutmillis", 5s);
-    while (true) {
-        bool umount_done = true;
-        Fstab proc_mounts;
-        if (!ReadFstabFromFile("/proc/mounts", &proc_mounts)) {
-            LERROR << __FUNCTION__ << "(): Can't read /proc/mounts";
-            return false;
-        }
-        // Now proceed with other bind mounts on top of /data.
-        for (const auto& entry : proc_mounts) {
-            std::string block_device;
-            if (StartsWith(entry.blk_device, "/dev/block") &&
-                !Realpath(entry.blk_device, &block_device)) {
-                PWARNING << __FUNCTION__ << "(): failed to realpath " << entry.blk_device;
-                block_device = entry.blk_device;
-            }
-            if (data_block_device == block_device) {
-                if (umount2(entry.mount_point.c_str(), 0) != 0) {
-                    PERROR << __FUNCTION__ << "(): Failed to umount " << entry.mount_point;
-                    umount_done = false;
-                }
-            }
-        }
-        if (umount_done) {
-            LINFO << __FUNCTION__ << "(): Unmounting /data took " << t;
-            return true;
-        }
-        if (t.duration() > timeout) {
-            LERROR << __FUNCTION__ << "(): Timed out unmounting all mounts on "
-                   << data_block_device;
-            Fstab remaining_mounts;
-            if (!ReadFstabFromFile("/proc/mounts", &remaining_mounts)) {
-                LERROR << __FUNCTION__ << "(): Can't read /proc/mounts";
-            } else {
-                LERROR << __FUNCTION__ << "(): Following mounts remaining";
-                for (const auto& e : remaining_mounts) {
-                    LERROR << __FUNCTION__ << "(): mount point: " << e.mount_point
-                           << " block device: " << e.blk_device;
-                }
-            }
-            return false;
-        }
-        std::this_thread::sleep_for(50ms);
-    }
-}
-
-static bool UnwindDmDeviceStack(const std::string& block_device,
-                                std::vector<std::string>* dm_stack) {
-    if (!StartsWith(block_device, "/dev/block/")) {
-        LWARNING << block_device << " is not a block device";
-        return false;
-    }
-    std::string current = block_device;
-    DeviceMapper& dm = DeviceMapper::Instance();
-    while (true) {
-        dm_stack->push_back(current);
-        if (!dm.IsDmBlockDevice(current)) {
-            break;
-        }
-        auto parent = dm.GetParentBlockDeviceByPath(current);
-        if (!parent) {
-            return false;
-        }
-        current = *parent;
-    }
-    return true;
-}
-
-FstabEntry* fs_mgr_get_mounted_entry_for_userdata(Fstab* fstab,
-                                                  const std::string& data_block_device) {
-    std::vector<std::string> dm_stack;
-    if (!UnwindDmDeviceStack(data_block_device, &dm_stack)) {
-        LERROR << "Failed to unwind dm-device stack for " << data_block_device;
-        return nullptr;
-    }
-    for (auto& entry : *fstab) {
-        if (entry.mount_point != "/data") {
-            continue;
-        }
-        std::string block_device;
-        if (entry.fs_mgr_flags.logical) {
-            if (!fs_mgr_update_logical_partition(&entry)) {
-                LERROR << "Failed to update logic partition " << entry.blk_device;
-                continue;
-            }
-            block_device = entry.blk_device;
-        } else if (!Realpath(entry.blk_device, &block_device)) {
-            PWARNING << "Failed to realpath " << entry.blk_device;
-            block_device = entry.blk_device;
-        }
-        if (std::find(dm_stack.begin(), dm_stack.end(), block_device) != dm_stack.end()) {
-            return &entry;
-        }
-    }
-    LERROR << "Didn't find entry that was used to mount /data onto " << data_block_device;
-    return nullptr;
-}
-
-// TODO(b/143970043): return different error codes based on which step failed.
-int fs_mgr_remount_userdata_into_checkpointing(Fstab* fstab) {
-    Fstab proc_mounts;
-    if (!ReadFstabFromFile("/proc/mounts", &proc_mounts)) {
-        LERROR << "Can't read /proc/mounts";
-        return -1;
-    }
-    auto mounted_entry = GetEntryForMountPoint(&proc_mounts, "/data");
-    if (mounted_entry == nullptr) {
-        LERROR << "/data is not mounted";
-        return -1;
-    }
-    std::string block_device;
-    if (!Realpath(mounted_entry->blk_device, &block_device)) {
-        PERROR << "Failed to realpath " << mounted_entry->blk_device;
-        return -1;
-    }
-    auto fstab_entry = fs_mgr_get_mounted_entry_for_userdata(fstab, block_device);
-    if (fstab_entry == nullptr) {
-        LERROR << "Can't find /data in fstab";
-        return -1;
-    }
-    bool force_umount = GetBoolProperty("sys.init.userdata_remount.force_umount", false);
-    if (force_umount) {
-        LINFO << "Will force an umount of userdata even if it's not required";
-    }
-    if (!force_umount && !SupportsCheckpoint(fstab_entry)) {
-        LINFO << "Userdata doesn't support checkpointing. Nothing to do";
-        return 0;
-    }
-    CheckpointManager checkpoint_manager;
-    if (!force_umount && !checkpoint_manager.NeedsCheckpoint()) {
-        LINFO << "Checkpointing not needed. Don't remount";
-        return 0;
-    }
-    if (!force_umount && fstab_entry->fs_mgr_flags.checkpoint_fs) {
-        // Userdata is f2fs, simply remount it.
-        if (!checkpoint_manager.Update(fstab_entry)) {
-            LERROR << "Failed to remount userdata in checkpointing mode";
-            return -1;
-        }
-        if (mount(block_device.c_str(), fstab_entry->mount_point.c_str(), "none",
-                  MS_REMOUNT | fstab_entry->flags, fstab_entry->fs_options.c_str()) != 0) {
-            PERROR << "Failed to remount userdata in checkpointing mode";
-            return -1;
-        }
-    } else {
-        LINFO << "Unmounting /data before remounting into checkpointing mode";
-        if (!fs_mgr_unmount_all_data_mounts(block_device)) {
-            LERROR << "Failed to umount /data";
-            return -1;
-        }
-        DeviceMapper& dm = DeviceMapper::Instance();
-        while (dm.IsDmBlockDevice(block_device)) {
-            auto next_device = dm.GetParentBlockDeviceByPath(block_device);
-            auto name = dm.GetDmDeviceNameByPath(block_device);
-            if (!name) {
-                LERROR << "Failed to get dm-name for " << block_device;
-                return -1;
-            }
-            LINFO << "Deleting " << block_device << " named " << *name;
-            if (!dm.DeleteDevice(*name, 3s)) {
-                return -1;
-            }
-            if (!next_device) {
-                LERROR << "Failed to find parent device for " << block_device;
-            }
-            block_device = *next_device;
-        }
-        LINFO << "Remounting /data";
-        // TODO(b/143970043): remove this hack after fs_mgr_mount_all is refactored.
-        auto result = fs_mgr_mount_all(fstab, MOUNT_MODE_ONLY_USERDATA);
-        return result.code == FS_MGR_MNTALL_FAIL ? -1 : 0;
-    }
-    return 0;
-}
-
 // wrapper to __mount() and expects a fully prepared fstab_rec,
 // unlike fs_mgr_do_mount which does more things with avb / verity etc.
 int fs_mgr_do_mount_one(const FstabEntry& entry, const std::string& alt_mount_point) {
@@ -1912,12 +1782,12 @@
     int ret = prepare_fs_for_mount(entry.blk_device, entry, mount_point);
     // Wiped case doesn't require to try __mount below.
     if (ret & FS_STAT_INVALID_MAGIC) {
-      return FS_MGR_DOMNT_FAILED;
+        return FS_MGR_DOMNT_FAILED;
     }
 
     ret = __mount(entry.blk_device, mount_point, entry);
     if (ret) {
-      ret = (errno == EBUSY) ? FS_MGR_DOMNT_BUSY : FS_MGR_DOMNT_FAILED;
+        ret = (errno == EBUSY) ? FS_MGR_DOMNT_BUSY : FS_MGR_DOMNT_FAILED;
     }
 
     return ret;
@@ -2069,11 +1939,45 @@
     return true;
 }
 
+/*
+ * Zram backing device can be created as long as /data has at least `size`
+ * free space, though we may want to leave some extra space for the remaining
+ * boot process and other system activities.
+ */
+static bool ZramBackingDeviceSizeAvailable(off64_t size) {
+    constexpr const char* data_path = "/data";
+    uint64_t min_free_mb =
+            android::base::GetUintProperty<uint64_t>("ro.zram_backing_device_min_free_mb", 0);
+
+    // No min_free property. Skip the available size check.
+    if (min_free_mb == 0) return true;
+
+    struct statvfs vst;
+    if (statvfs(data_path, &vst) < 0) {
+        PERROR << "Cannot check available space: " << data_path;
+        return false;
+    }
+
+    uint64_t size_free = static_cast<uint64_t>(vst.f_bfree) * vst.f_frsize;
+    uint64_t size_required = size + (min_free_mb * 1024 * 1024);
+    if (size_required > size_free) {
+        PERROR << "Free space is not enough for zram backing device: " << size_required << " > "
+               << size_free;
+        return false;
+    }
+    return true;
+}
+
 static bool PrepareZramBackingDevice(off64_t size) {
 
     constexpr const char* file_path = "/data/per_boot/zram_swap";
     if (size == 0) return true;
 
+    // Check available space
+    if (!ZramBackingDeviceSizeAvailable(size)) {
+        PERROR << "No space for target path: " << file_path;
+        return false;
+    }
     // Prepare target path
     unique_fd target_fd(TEMP_FAILURE_RETRY(open(file_path, O_RDWR | O_CREAT | O_CLOEXEC, 0600)));
     if (target_fd.get() == -1) {
@@ -2082,6 +1986,7 @@
     }
     if (fallocate(target_fd.get(), 0, 0, size) < 0) {
         PERROR << "Cannot truncate target path: " << file_path;
+        unlink(file_path);
         return false;
     }
 
@@ -2310,11 +2215,11 @@
 
 #if ALLOW_ADBD_DISABLE_VERITY == 0
     // Allowlist the mount point if user build.
-    static const std::vector<const std::string> kAllowedPaths = {
+    static const std::vector<std::string> kAllowedPaths = {
             "/odm",         "/odm_dlkm",   "/oem",    "/product",
             "/system_dlkm", "/system_ext", "/vendor", "/vendor_dlkm",
     };
-    static const std::vector<const std::string> kAllowedPrefixes = {
+    static const std::vector<std::string> kAllowedPrefixes = {
             "/mnt/product/",
             "/mnt/vendor/",
     };
@@ -2411,6 +2316,14 @@
     return context;
 }
 
+int fs_mgr_f2fs_ideal_block_size() {
+#if defined(__i386__) || defined(__x86_64__)
+    return 4096;
+#else
+    return getpagesize();
+#endif
+}
+
 namespace android {
 namespace fs_mgr {
 
diff --git a/fs_mgr/fs_mgr_format.cpp b/fs_mgr/fs_mgr_format.cpp
index 0dde1d3..57e35a2 100644
--- a/fs_mgr/fs_mgr_format.cpp
+++ b/fs_mgr/fs_mgr_format.cpp
@@ -32,6 +32,7 @@
 #include <selinux/android.h>
 #include <selinux/label.h>
 #include <selinux/selinux.h>
+#include <filesystem>
 #include <string>
 
 #include "fs_mgr_priv.h"
@@ -126,7 +127,8 @@
 
 static int format_f2fs(const std::string& fs_blkdev, uint64_t dev_sz, bool needs_projid,
                        bool needs_casefold, bool fs_compress, bool is_zoned,
-                       const std::vector<std::string>& user_devices) {
+                       const std::vector<std::string>& user_devices,
+                       const std::vector<int>& device_aliased) {
     if (!dev_sz) {
         int rc = get_dev_sz(fs_blkdev, &dev_sz);
         if (rc) {
@@ -164,9 +166,15 @@
     if (is_zoned) {
         args.push_back("-m");
     }
-    for (auto& device : user_devices) {
+    for (size_t i = 0; i < user_devices.size(); i++) {
+        std::string device_name = user_devices[i];
+
         args.push_back("-c");
-        args.push_back(device.c_str());
+        if (device_aliased[i]) {
+            std::filesystem::path path = device_name;
+            device_name += "@" + path.filename().string();
+        }
+        args.push_back(device_name.c_str());
     }
 
     if (user_devices.empty()) {
@@ -191,7 +199,7 @@
     if (entry.fs_type == "f2fs") {
         return format_f2fs(entry.blk_device, entry.length, needs_projid, needs_casefold,
                            entry.fs_mgr_flags.fs_compress, entry.fs_mgr_flags.is_zoned,
-                           entry.user_devices);
+                           entry.user_devices, entry.device_aliased);
     } else if (entry.fs_type == "ext4") {
         return format_ext4(entry.blk_device, entry.mount_point, needs_projid,
                            entry.fs_mgr_flags.ext_meta_csum);
diff --git a/fs_mgr/fs_mgr_overlayfs_control.cpp b/fs_mgr/fs_mgr_overlayfs_control.cpp
index 08ad80c..489b32e 100644
--- a/fs_mgr/fs_mgr_overlayfs_control.cpp
+++ b/fs_mgr/fs_mgr_overlayfs_control.cpp
@@ -387,10 +387,8 @@
     auto command = ""s;
     if (!access(kMkF2fs, X_OK) && fs_mgr_filesystem_available("f2fs")) {
         fs_type = "f2fs";
-        command = kMkF2fs + " -w "s;
-        command += std::to_string(getpagesize());
         command = kMkF2fs + " -b "s;
-        command += std::to_string(getpagesize());
+        command += std::to_string(fs_mgr_f2fs_ideal_block_size());
         command += " -f -d1 -l" + android::base::Basename(kScratchMountPoint);
     } else if (!access(kMkExt4, X_OK) && fs_mgr_filesystem_available("ext4")) {
         fs_type = "ext4";
diff --git a/fs_mgr/fs_mgr_priv.h b/fs_mgr/fs_mgr_priv.h
index 7e4d5e5..84e4924 100644
--- a/fs_mgr/fs_mgr_priv.h
+++ b/fs_mgr/fs_mgr_priv.h
@@ -80,10 +80,8 @@
 
 using namespace std::chrono_literals;
 
-bool fs_mgr_set_blk_ro(const std::string& blockdev, bool readonly = true);
 bool fs_mgr_is_device_unlocked();
 
-bool fs_mgr_is_ext4(const std::string& blk_device);
 bool fs_mgr_is_f2fs(const std::string& blk_device);
 
 bool fs_mgr_filesystem_available(const std::string& filesystem);
diff --git a/fs_mgr/include/fs_mgr.h b/fs_mgr/include/fs_mgr.h
index bc4a7a6..7969087 100644
--- a/fs_mgr/include/fs_mgr.h
+++ b/fs_mgr/include/fs_mgr.h
@@ -58,13 +58,8 @@
 #define FS_MGR_MNTALL_DEV_NEEDS_RECOVERY 4
 #define FS_MGR_MNTALL_DEV_NOT_ENCRYPTABLE 0
 #define FS_MGR_MNTALL_FAIL (-1)
-
-struct MountAllResult {
-    // One of the FS_MGR_MNTALL_* returned code defined above.
-    int code;
-    // Whether userdata was mounted as a result of |fs_mgr_mount_all| call.
-    bool userdata_mounted;
-};
+// fs_mgr_mount_all() updates fstab entries that reference device-mapper.
+int fs_mgr_mount_all(android::fs_mgr::Fstab* fstab, int mount_mode);
 
 struct HashtreeInfo {
     // The hash algorithm used to build the merkle tree.
@@ -75,13 +70,6 @@
     bool check_at_most_once;
 };
 
-// fs_mgr_mount_all() updates fstab entries that reference device-mapper.
-// Returns a |MountAllResult|. The first element is one of the FS_MNG_MNTALL_* return codes
-// defined above, and the second element tells whether this call to fs_mgr_mount_all was responsible
-// for mounting userdata. Later is required for init to correctly enqueue fs-related events as part
-// of userdata remount during userspace reboot.
-MountAllResult fs_mgr_mount_all(android::fs_mgr::Fstab* fstab, int mount_mode);
-
 #define FS_MGR_DOMNT_FAILED (-1)
 #define FS_MGR_DOMNT_BUSY (-2)
 #define FS_MGR_DOMNT_SUCCESS 0
@@ -116,6 +104,12 @@
 // returned. Otherwise, it will use the current slot.
 std::string fs_mgr_get_super_partition_name(int slot = -1);
 
+// Set readonly for the block device
+bool fs_mgr_set_blk_ro(const std::string& blockdev, bool readonly = true);
+
+// Check if the block device has ext4 filesystem
+bool fs_mgr_is_ext4(const std::string& blk_device);
+
 enum FsMgrUmountStatus : int {
     SUCCESS = 0,
     ERROR_UNKNOWN = 1 << 0,
@@ -127,11 +121,6 @@
 // it destroys verity devices from device mapper after the device is unmounted.
 int fs_mgr_umount_all(android::fs_mgr::Fstab* fstab);
 
-// Finds a entry in |fstab| that was used to mount a /data on |data_block_device|.
-android::fs_mgr::FstabEntry* fs_mgr_get_mounted_entry_for_userdata(
-        android::fs_mgr::Fstab* fstab, const std::string& data_block_device);
-int fs_mgr_remount_userdata_into_checkpointing(android::fs_mgr::Fstab* fstab);
-
 // Finds the dm_bow device on which this block device is stacked, or returns
 // empty string
 std::string fs_mgr_find_bow_device(const std::string& block_device);
@@ -144,3 +133,10 @@
 // Unlike fs_mgr_overlayfs, mount overlayfs without upperdir and workdir, so the
 // filesystem cannot be remount read-write.
 bool fs_mgr_mount_overlayfs_fstab_entry(const android::fs_mgr::FstabEntry& entry);
+
+// File name used to track if encryption was interrupted, leading to a known bad fs state
+std::string fs_mgr_metadata_encryption_in_progress_file_name(
+        const android::fs_mgr::FstabEntry& entry);
+
+// Returns the ideal block size for make_f2fs. Returns -1 on failure.
+int fs_mgr_f2fs_ideal_block_size();
diff --git a/fs_mgr/include/fs_mgr/roots.h b/fs_mgr/include/fs_mgr/roots.h
index 65c59cf..e19f9ad 100644
--- a/fs_mgr/include/fs_mgr/roots.h
+++ b/fs_mgr/include/fs_mgr/roots.h
@@ -29,6 +29,8 @@
 // first match or nullptr.
 FstabEntry* GetEntryForPath(Fstab* fstab, const std::string& path);
 
+std::vector<FstabEntry*> GetEntriesForPath(Fstab* fstab, const std::string& path);
+
 // Make sure that the volume 'path' is on is mounted.
 // * If 'mount_point' is nullptr, use mount point in fstab. Caller can call
 //   fs_mgr_ensure_path_unmounted() with the same 'path' argument to unmount.
diff --git a/fs_mgr/libdm/Android.bp b/fs_mgr/libdm/Android.bp
index c3ca758..1efd7de 100644
--- a/fs_mgr/libdm/Android.bp
+++ b/fs_mgr/libdm/Android.bp
@@ -15,6 +15,7 @@
 //
 
 package {
+    default_team: "trendy_team_android_kernel",
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
diff --git a/fs_mgr/libfiemap/Android.bp b/fs_mgr/libfiemap/Android.bp
index c8d5756..a6be585 100644
--- a/fs_mgr/libfiemap/Android.bp
+++ b/fs_mgr/libfiemap/Android.bp
@@ -15,6 +15,7 @@
 //
 
 package {
+    default_team: "trendy_team_android_kernel",
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
diff --git a/fs_mgr/libfiemap/fiemap_writer_test.cpp b/fs_mgr/libfiemap/fiemap_writer_test.cpp
index c37329c..115f53e 100644
--- a/fs_mgr/libfiemap/fiemap_writer_test.cpp
+++ b/fs_mgr/libfiemap/fiemap_writer_test.cpp
@@ -66,7 +66,11 @@
         testfile = gTestDir + "/"s + tinfo->name();
     }
 
-    void TearDown() override { unlink(testfile.c_str()); }
+    void TearDown() override {
+        truncate(testfile.c_str(), 0);
+        unlink(testfile.c_str());
+        sync();
+    }
 
     // name of the file we use for testing
     std::string testfile;
diff --git a/fs_mgr/libfiemap/split_fiemap_writer.cpp b/fs_mgr/libfiemap/split_fiemap_writer.cpp
index 0df6125..1f32d2f 100644
--- a/fs_mgr/libfiemap/split_fiemap_writer.cpp
+++ b/fs_mgr/libfiemap/split_fiemap_writer.cpp
@@ -196,10 +196,13 @@
             if (access(file.c_str(), F_OK) != 0 && (errno == ENOENT || errno == ENAMETOOLONG)) {
                 continue;
             }
+            truncate(file.c_str(), 0);
             ok &= android::base::RemoveFileIfExists(file, message);
         }
     }
+    truncate(file_path.c_str(), 0);
     ok &= android::base::RemoveFileIfExists(file_path, message);
+    sync();
     return ok;
 }
 
diff --git a/fs_mgr/libfs_avb/avb_ops.cpp b/fs_mgr/libfs_avb/avb_ops.cpp
index cc19776..7f00839 100644
--- a/fs_mgr/libfs_avb/avb_ops.cpp
+++ b/fs_mgr/libfs_avb/avb_ops.cpp
@@ -34,6 +34,7 @@
 
 #include <string>
 
+#include <android-base/logging.h>
 #include <android-base/macros.h>
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
diff --git a/fs_mgr/libfs_avb/avb_util.cpp b/fs_mgr/libfs_avb/avb_util.cpp
index 90b65ce..37c9eab 100644
--- a/fs_mgr/libfs_avb/avb_util.cpp
+++ b/fs_mgr/libfs_avb/avb_util.cpp
@@ -21,6 +21,7 @@
 #include <array>
 #include <sstream>
 
+#include <android-base/logging.h>
 #include <android-base/file.h>
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
diff --git a/fs_mgr/libfs_avb/fs_avb.cpp b/fs_mgr/libfs_avb/fs_avb.cpp
index be48de6..4e6aaf5 100644
--- a/fs_mgr/libfs_avb/fs_avb.cpp
+++ b/fs_mgr/libfs_avb/fs_avb.cpp
@@ -28,6 +28,7 @@
 #include <vector>
 
 #include <android-base/file.h>
+#include <android-base/logging.h>
 #include <android-base/parseint.h>
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
diff --git a/fs_mgr/libfs_avb/fs_avb_util.cpp b/fs_mgr/libfs_avb/fs_avb_util.cpp
index 5326226..a74aa25 100644
--- a/fs_mgr/libfs_avb/fs_avb_util.cpp
+++ b/fs_mgr/libfs_avb/fs_avb_util.cpp
@@ -20,6 +20,7 @@
 #include <string>
 #include <vector>
 
+#include <android-base/logging.h>
 #include <android-base/strings.h>
 #include <fstab/fstab.h>
 #include <libavb/libavb.h>
diff --git a/fs_mgr/libfs_avb/tests/avb_util_test.cpp b/fs_mgr/libfs_avb/tests/avb_util_test.cpp
index ee83cda..85eeeb0 100644
--- a/fs_mgr/libfs_avb/tests/avb_util_test.cpp
+++ b/fs_mgr/libfs_avb/tests/avb_util_test.cpp
@@ -16,10 +16,11 @@
 
 #include <endian.h>
 
+#include <random>
+
+#include <android-base/strings.h>
 #include <android-base/unique_fd.h>
 #include <base/files/file_util.h>
-#include <base/rand_util.h>
-#include <base/strings/string_util.h>
 #include <libavb/libavb.h>
 
 #include "avb_util.h"
@@ -70,7 +71,7 @@
 
     std::string image_file_name = image_path.RemoveExtension().BaseName().value();
     bool is_vbmeta_partition =
-        base::StartsWith(image_file_name, "vbmeta", base::CompareCase::INSENSITIVE_ASCII);
+        android::base::StartsWithIgnoreCase(image_file_name, "vbmeta");
 
     android::base::unique_fd fd(open(image_path.value().c_str(), O_RDWR | O_CLOEXEC));
     EXPECT_TRUE(fd > 0);
@@ -603,7 +604,7 @@
     std::string image_file_name = avb_image_path.RemoveExtension().BaseName().value();
 
     base::FilePath extracted_vbmeta_path;
-    if (base::StartsWith(image_file_name, "vbmeta", base::CompareCase::INSENSITIVE_ASCII)) {
+    if (android::base::StartsWithIgnoreCase(image_file_name, "vbmeta")) {
         extracted_vbmeta_path = avb_image_path;  // no need to extract if it's a vbmeta image.
     } else {
         extracted_vbmeta_path = ExtractVBMetaImage(avb_image_path, image_file_name + "-vbmeta.img");
@@ -727,7 +728,10 @@
 
     // Introduces a new modification.
     if (length > 0) {
-        int modify_location = base::RandInt(offset, offset + length - 1);
+        // mersenne_twister_engine seeded with the default seed source.
+        static std::mt19937 gen(std::random_device{}());
+        std::uniform_int_distribution<> rand_distribution(offset, offset + length - 1);
+        int modify_location = rand_distribution(gen);
         file_content[modify_location] ^= 0x80;
         last_file_path = file_path.value();
         last_modified_location = modify_location;
diff --git a/fs_mgr/libfs_avb/tests/basic_test.cpp b/fs_mgr/libfs_avb/tests/basic_test.cpp
index d49affb..e0d465e 100644
--- a/fs_mgr/libfs_avb/tests/basic_test.cpp
+++ b/fs_mgr/libfs_avb/tests/basic_test.cpp
@@ -20,7 +20,6 @@
 
 #include <android-base/file.h>
 #include <base/files/file_util.h>
-#include <base/strings/string_util.h>
 
 namespace fs_avb_host_test {
 
diff --git a/fs_mgr/libfs_avb/tests/fs_avb_test.cpp b/fs_mgr/libfs_avb/tests/fs_avb_test.cpp
index 2c819a9..5f153f5 100644
--- a/fs_mgr/libfs_avb/tests/fs_avb_test.cpp
+++ b/fs_mgr/libfs_avb/tests/fs_avb_test.cpp
@@ -18,8 +18,8 @@
 #include <stdlib.h>
 
 #include <android-base/file.h>
+#include <android-base/strings.h>
 #include <base/files/file_util.h>
-#include <base/strings/string_util.h>
 #include <fs_avb/fs_avb.h>
 #include <libavb/libavb.h>
 
@@ -49,7 +49,7 @@
 
     // Only support modifying the flags in vbmeta*.img.
     std::string image_file_name = vbmeta_image_path.RemoveExtension().BaseName().value();
-    ASSERT_TRUE(base::StartsWith(image_file_name, "vbmeta", base::CompareCase::INSENSITIVE_ASCII));
+    ASSERT_TRUE(android::base::StartsWithIgnoreCase(image_file_name, "vbmeta"));
 
     android::base::unique_fd fd(open(vbmeta_image_path.value().c_str(), O_RDWR | O_CLOEXEC));
     EXPECT_TRUE(fd > 0);
diff --git a/fs_mgr/libfs_avb/tests/fs_avb_test_util.cpp b/fs_mgr/libfs_avb/tests/fs_avb_test_util.cpp
index 1c95cf0..28fdbc2 100644
--- a/fs_mgr/libfs_avb/tests/fs_avb_test_util.cpp
+++ b/fs_mgr/libfs_avb/tests/fs_avb_test_util.cpp
@@ -19,8 +19,9 @@
 #include <stdlib.h>
 
 #include <android-base/file.h>
+#include <android-base/strings.h>
+#include <android-base/stringprintf.h>
 #include <base/files/file_util.h>
-#include <base/strings/string_util.h>
 
 namespace fs_avb_host_test {
 
@@ -64,9 +65,7 @@
     std::string vbmeta_digest_data;
     EXPECT_TRUE(base::ReadFileToString(vbmeta_digest_path, &vbmeta_digest_data));
     // Returns the trimmed digest.
-    std::string trimmed_digest_data;
-    base::TrimString(vbmeta_digest_data, " \t\n", &trimmed_digest_data);
-    return trimmed_digest_data;
+    return android::base::Trim(vbmeta_digest_data);
 }
 
 base::FilePath BaseFsAvbTest::GenerateVBMetaImage(
@@ -91,7 +90,7 @@
     // --chain_partitions
     std::string chain_partition_options;
     for (const auto& partition : chain_partitions) {
-        chain_partition_options += base::StringPrintf(
+        chain_partition_options += android::base::StringPrintf(
                 " --chain_partition %s:%u:%s", partition.partition_name.c_str(),
                 partition.rollback_index_location, partition.key_blob_path.value().c_str());
     }
diff --git a/fs_mgr/libfs_avb/tests/fs_avb_test_util.h b/fs_mgr/libfs_avb/tests/fs_avb_test_util.h
index ab1980b..fbda0e1 100644
--- a/fs_mgr/libfs_avb/tests/fs_avb_test_util.h
+++ b/fs_mgr/libfs_avb/tests/fs_avb_test_util.h
@@ -26,9 +26,9 @@
 #include <string>
 #include <vector>
 
+#include <android-base/stringprintf.h>
 #include <android-base/unique_fd.h>
 #include <base/files/file_path.h>
-#include <base/strings/stringprintf.h>
 #include <fs_avb/types.h>
 #include <gtest/gtest.h>
 
@@ -37,7 +37,7 @@
 // the command exits normally with exit status |expected_exit_status|.
 #define EXPECT_COMMAND(expected_exit_status, command_format, ...)                   \
     do {                                                                            \
-        int rc = system(base::StringPrintf(command_format, ##__VA_ARGS__).c_str()); \
+        int rc = system(android::base::StringPrintf(command_format, ##__VA_ARGS__).c_str()); \
         EXPECT_TRUE(WIFEXITED(rc));                                                 \
         EXPECT_EQ(WEXITSTATUS(rc), expected_exit_status);                           \
     } while (0);
diff --git a/fs_mgr/libfs_avb/util.cpp b/fs_mgr/libfs_avb/util.cpp
index 7783d04..79c7b94 100644
--- a/fs_mgr/libfs_avb/util.cpp
+++ b/fs_mgr/libfs_avb/util.cpp
@@ -22,6 +22,7 @@
 
 #include <thread>
 
+#include <android-base/logging.h>
 #include <android-base/stringprintf.h>
 #include <android-base/unique_fd.h>
 #include <linux/fs.h>
diff --git a/fs_mgr/libfs_avb/util.h b/fs_mgr/libfs_avb/util.h
index 29d1e9c..5704560 100644
--- a/fs_mgr/libfs_avb/util.h
+++ b/fs_mgr/libfs_avb/util.h
@@ -20,12 +20,6 @@
 #include <string>
 #include <vector>
 
-#ifdef HOST_TEST
-#include <base/logging.h>
-#else
-#include <android-base/logging.h>
-#endif
-
 #include <android-base/result.h>
 
 using android::base::ErrnoError;
diff --git a/fs_mgr/libfstab/fstab.cpp b/fs_mgr/libfstab/fstab.cpp
index f00e0dc..01e0e3d 100644
--- a/fs_mgr/libfstab/fstab.cpp
+++ b/fs_mgr/libfstab/fstab.cpp
@@ -74,6 +74,7 @@
         {"private", MS_PRIVATE},
         {"slave", MS_SLAVE},
         {"shared", MS_SHARED},
+        {"lazytime", MS_LAZYTIME},
         {"defaults", 0},
 };
 
@@ -168,6 +169,7 @@
         entry->fs_mgr_flags.is_zoned = true;
     }
     entry->user_devices.push_back(param[1]);
+    entry->device_aliased.push_back(param[0] == "exp_alias" ? 1 : 0);
 }
 
 bool ParseFsMgrFlags(const std::string& flags, FstabEntry* entry) {
@@ -256,7 +258,7 @@
             if (!arg.empty() && arg.back() == '%') {
                 arg.pop_back();
                 int val;
-                if (ParseInt(arg, &val, 0, 100)) {
+                if (ParseInt(arg, &val, 0, 200)) {
                     entry->zram_size = CalculateZramSize(val);
                 } else {
                     LWARNING << "Warning: zramsize= flag malformed: " << arg;
@@ -520,6 +522,24 @@
 
 }  // namespace
 
+// Return the path to the recovery fstab file.  There may be multiple fstab files;
+// the one that is returned will be the first that exists of recovery.fstab.<fstab_suffix>,
+// recovery.fstab.<hardware>, and recovery.fstab.<hardware.platform>.
+std::string GetRecoveryFstabPath() {
+    for (const char* prop : {"fstab_suffix", "hardware", "hardware.platform"}) {
+        std::string suffix;
+
+        if (!fs_mgr_get_boot_config(prop, &suffix)) continue;
+
+        std::string fstab_path = "/etc/recovery.fstab." + suffix;
+        if (access(fstab_path.c_str(), F_OK) == 0) {
+            return fstab_path;
+        }
+    }
+
+    return "/etc/recovery.fstab";
+}
+
 // Return the path to the fstab file.  There may be multiple fstab files; the
 // one that is returned will be the first that exists of fstab.<fstab_suffix>,
 // fstab.<hardware>, and fstab.<hardware.platform>.  The fstab is searched for
@@ -529,7 +549,7 @@
 // the system/etc directory is supported too and is the preferred location.
 std::string GetFstabPath() {
     if (InRecovery()) {
-        return "/etc/recovery.fstab";
+        return GetRecoveryFstabPath();
     }
     for (const char* prop : {"fstab_suffix", "hardware", "hardware.platform"}) {
         std::string suffix;
@@ -926,6 +946,22 @@
     return ExtraBootDevices(fstab);
 }
 
+std::string GetBootPartUuid() {
+    std::string boot_part_uuid;
+
+    if (GetBootconfig("androidboot.boot_part_uuid", &boot_part_uuid)) {
+        return boot_part_uuid;
+    }
+
+    ImportKernelCmdline([&](std::string key, std::string value) {
+        if (key == "androidboot.boot_part_uuid") {
+            boot_part_uuid = value;
+        }
+    });
+
+    return boot_part_uuid;
+}
+
 std::string GetVerityDeviceName(const FstabEntry& entry) {
     std::string base_device;
     if (entry.mount_point == "/") {
diff --git a/fs_mgr/libfstab/fstab_priv.h b/fs_mgr/libfstab/fstab_priv.h
index 5105da0..73cb175 100644
--- a/fs_mgr/libfstab/fstab_priv.h
+++ b/fs_mgr/libfstab/fstab_priv.h
@@ -39,9 +39,6 @@
 void ImportBootconfigFromString(const std::string& bootconfig,
                                 const std::function<void(std::string, std::string)>& fn);
 
-bool GetBootconfigFromString(const std::string& bootconfig, const std::string& key,
-                             std::string* out);
-
 void ImportKernelCmdlineFromString(const std::string& cmdline,
                                    const std::function<void(std::string, std::string)>& fn);
 
diff --git a/fs_mgr/libfstab/include/fstab/fstab.h b/fs_mgr/libfstab/include/fstab/fstab.h
index 1696daf..0ff3188 100644
--- a/fs_mgr/libfstab/include/fstab/fstab.h
+++ b/fs_mgr/libfstab/include/fstab/fstab.h
@@ -33,6 +33,7 @@
 struct FstabEntry {
     std::string blk_device;
     std::vector<std::string> user_devices;
+    std::vector<int> device_aliased;
     std::string logical_partition_name;
     std::string mount_point;
     std::string fs_type;
@@ -125,6 +126,16 @@
 
 std::set<std::string> GetBootDevices();
 
+// Get the Partition UUID the kernel loaded from if the bootloader passed it.
+//
+// If the kernel's Partition UUID is provided then we can use this to help
+// identify which block device contains the filesystems we care about.
+//
+// NOTE: Nothing secures a UUID other than the convention that two disks
+// aren't supposed to both have the same UUID. We still need other mechanisms
+// to ensure we've got the right disk.
+std::string GetBootPartUuid();
+
 // Return the name of the dm-verity device for the given fstab entry. This does
 // not check whether the device is valid or exists; it merely returns the
 // expected name.
@@ -153,5 +164,8 @@
 // Return the "other" slot for the given slot suffix.
 std::string OtherSlotSuffix(const std::string& suffix);
 
+bool GetBootconfigFromString(const std::string& bootconfig, const std::string& key,
+                             std::string* out);
+
 }  // namespace fs_mgr
 }  // namespace android
diff --git a/fs_mgr/liblp/Android.bp b/fs_mgr/liblp/Android.bp
index 24eebdf..b211e83 100644
--- a/fs_mgr/liblp/Android.bp
+++ b/fs_mgr/liblp/Android.bp
@@ -15,6 +15,7 @@
 //
 
 package {
+    default_team: "trendy_team_android_kernel",
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
diff --git a/fs_mgr/liblp/super_layout_builder.cpp b/fs_mgr/liblp/super_layout_builder.cpp
index fd7416b..bff26ea 100644
--- a/fs_mgr/liblp/super_layout_builder.cpp
+++ b/fs_mgr/liblp/super_layout_builder.cpp
@@ -184,7 +184,7 @@
                 return {};
             }
 
-            size_t size = e.num_sectors * LP_SECTOR_SIZE;
+            uint64_t size = e.num_sectors * LP_SECTOR_SIZE;
             uint64_t super_offset = e.target_data * LP_SECTOR_SIZE;
             extents.emplace_back(super_offset, size, image_name, image_offset);
 
diff --git a/fs_mgr/libsnapshot/Android.bp b/fs_mgr/libsnapshot/Android.bp
index cc6db35..966696b 100644
--- a/fs_mgr/libsnapshot/Android.bp
+++ b/fs_mgr/libsnapshot/Android.bp
@@ -15,6 +15,7 @@
 //
 
 package {
+    default_team: "trendy_team_android_kernel",
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
@@ -91,6 +92,7 @@
         "partition_cow_creator.cpp",
         "return.cpp",
         "utility.cpp",
+        "scratch_super.cpp",
     ],
 }
 
@@ -110,6 +112,9 @@
     static_libs: [
         "libfs_mgr_binder",
     ],
+    whole_static_libs: [
+        "libselinux",
+    ],
 }
 
 cc_library {
@@ -128,6 +133,9 @@
     static_libs: [
         "libsnapshot_cow",
     ],
+    whole_static_libs: [
+        "libselinux",
+    ],
 }
 
 cc_library_static {
@@ -142,6 +150,7 @@
     ],
     static_libs: [
         "libfs_mgr",
+        "libselinux",
     ],
 }
 
@@ -159,6 +168,9 @@
     static_libs: [
         "libfs_mgr",
     ],
+    whole_static_libs: [
+        "libselinux",
+    ],
 }
 
 cc_defaults {
@@ -241,6 +253,7 @@
         "libfs_mgr",
         "libgmock",
         "libgtest",
+        "libselinux",
     ],
 }
 
@@ -283,7 +296,6 @@
     ],
     auto_gen_config: true,
     require_root: true,
-    compile_multilib: "first",
 }
 
 cc_test {
@@ -294,8 +306,17 @@
     ],
     test_suites: [
         "vts",
-        "device-tests",
+        "general-tests",
     ],
+    compile_multilib: "both",
+    multilib: {
+        lib32: {
+            suffix: "32",
+        },
+        lib64: {
+            suffix: "64",
+        },
+    },
     test_options: {
         min_shipping_api_level: 30,
     },
@@ -311,8 +332,9 @@
         "-DLIBSNAPSHOT_TEST_VAB_LEGACY",
     ],
     test_suites: [
-        "device-tests",
+        "general-tests",
     ],
+    compile_multilib: "64",
     test_options: {
         // Legacy VAB launched in Android R.
         min_shipping_api_level: 30,
@@ -351,6 +373,7 @@
     ],
     srcs: [
         "snapshotctl.cpp",
+        "scratch_super.cpp",
     ],
     static_libs: [
         "libbrotli",
@@ -420,7 +443,7 @@
         "libstorage_literals_headers",
     ],
     test_suites: [
-        "device-tests",
+        "general-tests",
     ],
     test_options: {
         min_shipping_api_level: 30,
diff --git a/fs_mgr/libsnapshot/android/snapshot/snapshot.proto b/fs_mgr/libsnapshot/android/snapshot/snapshot.proto
index 2e948dd..5fb71a3 100644
--- a/fs_mgr/libsnapshot/android/snapshot/snapshot.proto
+++ b/fs_mgr/libsnapshot/android/snapshot/snapshot.proto
@@ -229,6 +229,12 @@
 
     // Enable direct reads from source device
     bool o_direct = 12;
+
+    // Number of cow operations to be merged at once
+    uint32 cow_op_merge_size = 13;
+
+    // Number of worker threads to serve I/O from dm-user
+    uint32 num_worker_threads = 14;
 }
 
 // Next: 10
diff --git a/fs_mgr/libsnapshot/device_info.cpp b/fs_mgr/libsnapshot/device_info.cpp
index 0ab6103..19f3e02 100644
--- a/fs_mgr/libsnapshot/device_info.cpp
+++ b/fs_mgr/libsnapshot/device_info.cpp
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 #include "device_info.h"
+#include "scratch_super.h"
 
 #include <android-base/logging.h>
 #include <fs_mgr.h>
@@ -37,8 +38,24 @@
 constexpr bool kIsRecovery = false;
 #endif
 
+DeviceInfo::DeviceInfo() {
+    std::string scratch_device = android::snapshot::GetScratchOtaMetadataPartition();
+    if (!scratch_device.empty()) {
+        std::string scratch_metadata =
+                android::snapshot::MapScratchOtaMetadataPartition(scratch_device);
+        if (!scratch_metadata.empty()) {
+            SetMetadataDir(scratch_metadata);
+            SetTempMetadata();
+        }
+    }
+}
+
 std::string DeviceInfo::GetMetadataDir() const {
-    return "/metadata/ota"s;
+    return metadata_dir_;
+}
+
+void DeviceInfo::SetMetadataDir(const std::string& value) {
+    metadata_dir_ = value;
 }
 
 std::string DeviceInfo::GetSlotSuffix() const {
@@ -104,6 +121,24 @@
     return first_stage_init_;
 }
 
+bool DeviceInfo::SetActiveBootSlot([[maybe_unused]] unsigned int slot) {
+#ifdef LIBSNAPSHOT_USE_HAL
+    if (!EnsureBootHal()) {
+        return false;
+    }
+
+    CommandResult result = boot_control_->SetActiveBootSlot(slot);
+    if (!result.success) {
+        LOG(ERROR) << "Error setting slot " << slot << " active: " << result.errMsg;
+        return false;
+    }
+    return true;
+#else
+    LOG(ERROR) << "HAL support not enabled.";
+    return false;
+#endif
+}
+
 bool DeviceInfo::SetSlotAsUnbootable([[maybe_unused]] unsigned int slot) {
 #ifdef LIBSNAPSHOT_USE_HAL
     if (!EnsureBootHal()) {
diff --git a/fs_mgr/libsnapshot/device_info.h b/fs_mgr/libsnapshot/device_info.h
index d06f1be..e93ec49 100644
--- a/fs_mgr/libsnapshot/device_info.h
+++ b/fs_mgr/libsnapshot/device_info.h
@@ -29,6 +29,7 @@
     using MergeStatus = ::aidl::android::hardware::boot::MergeStatus;
 
   public:
+    DeviceInfo();
     std::string GetMetadataDir() const override;
     std::string GetSlotSuffix() const override;
     std::string GetOtherSlotSuffix() const override;
@@ -36,19 +37,25 @@
     std::string GetSuperDevice(uint32_t slot) const override;
     bool IsOverlayfsSetup() const override;
     bool SetBootControlMergeStatus(MergeStatus status) override;
+    bool SetActiveBootSlot(unsigned int slot) override;
     bool SetSlotAsUnbootable(unsigned int slot) override;
     bool IsRecovery() const override;
     std::unique_ptr<IImageManager> OpenImageManager() const override;
     bool IsFirstStageInit() const override;
     android::dm::IDeviceMapper& GetDeviceMapper() override;
-
+    void SetMetadataDir(const std::string& value);
     void set_first_stage_init(bool value) { first_stage_init_ = value; }
+    bool IsTempMetadata() const override { return temp_metadata_; }
+    void SetTempMetadata() { temp_metadata_ = true; }
 
   private:
     bool EnsureBootHal();
 
     android::fs_mgr::PartitionOpener opener_;
     bool first_stage_init_ = false;
+    // Default value
+    std::string metadata_dir_ = "/metadata/ota";
+    bool temp_metadata_ = false;
 #ifdef LIBSNAPSHOT_USE_HAL
     std::unique_ptr<::android::hal::BootControlClient> boot_control_;
 #endif
diff --git a/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h b/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h
index 573a85b..ca1ac1e 100644
--- a/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h
+++ b/fs_mgr/libsnapshot/include/libsnapshot/mock_device_info.h
@@ -29,6 +29,7 @@
     MOCK_METHOD(const android::fs_mgr::IPartitionOpener&, GetPartitionOpener, (), (const));
     MOCK_METHOD(bool, IsOverlayfsSetup, (), (const, override));
     MOCK_METHOD(bool, SetBootControlMergeStatus, (MergeStatus status), (override));
+    MOCK_METHOD(bool, SetActiveBootSlot, (unsigned int slot), (override));
     MOCK_METHOD(bool, SetSlotAsUnbootable, (unsigned int slot), (override));
     MOCK_METHOD(bool, IsRecovery, (), (const, override));
     MOCK_METHOD(bool, IsFirstStageInit, (), (const, override));
diff --git a/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h b/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h
index 1ec8634..de20526 100644
--- a/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h
+++ b/fs_mgr/libsnapshot/include/libsnapshot/snapshot.h
@@ -104,12 +104,14 @@
         virtual const android::fs_mgr::IPartitionOpener& GetPartitionOpener() const = 0;
         virtual bool IsOverlayfsSetup() const = 0;
         virtual bool SetBootControlMergeStatus(MergeStatus status) = 0;
+        virtual bool SetActiveBootSlot(unsigned int slot) = 0;
         virtual bool SetSlotAsUnbootable(unsigned int slot) = 0;
         virtual bool IsRecovery() const = 0;
         virtual bool IsTestDevice() const { return false; }
         virtual bool IsFirstStageInit() const = 0;
         virtual std::unique_ptr<IImageManager> OpenImageManager() const = 0;
         virtual android::dm::IDeviceMapper& GetDeviceMapper() = 0;
+        virtual bool IsTempMetadata() const = 0;
 
         // Helper method for implementing OpenImageManager.
         std::unique_ptr<IImageManager> OpenImageManager(const std::string& gsid_dir) const;
@@ -328,6 +330,10 @@
     // might be needed to perform first-stage mounts.
     static bool IsSnapshotManagerNeeded();
 
+    // Map the temp OTA metadata partition from super
+    static bool MapTempOtaMetadataPartitionIfNeeded(
+            const std::function<bool(const std::string&)>& init);
+
     // Helper function for second stage init to restorecon on the rollback indicator.
     static std::string GetGlobalRollbackIndicatorPath();
 
@@ -436,6 +442,7 @@
     FRIEND_TEST(SnapshotUpdateTest, QueryStatusError);
     FRIEND_TEST(SnapshotUpdateTest, SnapshotStatusFileWithoutCow);
     FRIEND_TEST(SnapshotUpdateTest, SpaceSwapUpdate);
+    FRIEND_TEST(SnapshotUpdateTest, InterruptMergeDuringPhaseUpdate);
     FRIEND_TEST(SnapshotUpdateTest, MapAllSnapshotsWithoutSlotSwitch);
     friend class SnapshotTest;
     friend class SnapshotUpdateTest;
@@ -675,6 +682,8 @@
     std::string GetBootSnapshotsWithoutSlotSwitchPath();
     std::string GetSnapuserdFromSystemPath();
 
+    bool HasForwardMergeIndicator();
+
     const LpMetadata* ReadOldPartitionMetadata(LockedFile* lock);
 
     bool MapAllPartitions(LockedFile* lock, const std::string& super_device, uint32_t slot,
@@ -785,11 +794,8 @@
     bool UpdateForwardMergeIndicator(bool wipe);
 
     // Helper for HandleImminentDataWipe.
-    // Call ProcessUpdateState and handle states with special rules before data wipe. Specifically,
-    // if |allow_forward_merge| and allow-forward-merge indicator exists, initiate merge if
-    // necessary.
-    UpdateState ProcessUpdateStateOnDataWipe(bool allow_forward_merge,
-                                             const std::function<bool()>& callback);
+    // Call ProcessUpdateState and handle states with special rules before data wipe.
+    UpdateState ProcessUpdateStateOnDataWipe(const std::function<bool()>& callback);
 
     // Return device string of a mapped image, or if it is not available, the mapped image path.
     bool GetMappedImageDeviceStringOrPath(const std::string& device_name,
@@ -831,6 +837,12 @@
     // Check if direct reads are enabled for the source image
     bool UpdateUsesODirect(LockedFile* lock);
 
+    // Get value of maximum cow op merge size
+    uint32_t GetUpdateCowOpMergeSize(LockedFile* lock);
+
+    // Get number of threads to perform post OTA boot verification
+    uint32_t GetUpdateWorkerCount(LockedFile* lock);
+
     // Wrapper around libdm, with diagnostics.
     bool DeleteDeviceIfExists(const std::string& name,
                               const std::chrono::milliseconds& timeout_ms = {});
@@ -846,7 +858,6 @@
     std::string metadata_dir_;
     std::unique_ptr<IImageManager> images_;
     bool use_first_stage_snapuserd_ = false;
-    bool in_factory_data_reset_ = false;
     std::function<bool(const std::string&)> uevent_regen_callback_;
     std::unique_ptr<SnapuserdClient> snapuserd_client_;
     std::unique_ptr<LpMetadata> old_partition_metadata_;
diff --git a/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h b/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h
index 0afd8bd..1cd6651 100644
--- a/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h
+++ b/fs_mgr/libsnapshot/include_test/libsnapshot/test_helpers.h
@@ -79,7 +79,7 @@
         : TestDeviceInfo(fake_super) {
         set_slot_suffix(slot_suffix);
     }
-    std::string GetMetadataDir() const override { return "/metadata/ota/test"s; }
+    std::string GetMetadataDir() const override { return metadata_dir_; }
     std::string GetSlotSuffix() const override { return slot_suffix_; }
     std::string GetOtherSlotSuffix() const override { return slot_suffix_ == "_a" ? "_b" : "_a"; }
     std::string GetSuperDevice([[maybe_unused]] uint32_t slot) const override { return "super"; }
@@ -92,6 +92,7 @@
     }
     bool IsOverlayfsSetup() const override { return false; }
     bool IsRecovery() const override { return recovery_; }
+    bool SetActiveBootSlot([[maybe_unused]] unsigned int slot) override { return true; }
     bool SetSlotAsUnbootable(unsigned int slot) override {
         unbootable_slots_.insert(slot);
         return true;
@@ -119,6 +120,7 @@
     void set_dm(android::dm::IDeviceMapper* dm) { dm_ = dm; }
 
     MergeStatus merge_status() const { return merge_status_; }
+    bool IsTempMetadata() const override { return temp_metadata_; }
 
   private:
     std::string slot_suffix_ = "_a";
@@ -128,6 +130,8 @@
     bool first_stage_init_ = false;
     std::unordered_set<uint32_t> unbootable_slots_;
     android::dm::IDeviceMapper* dm_ = nullptr;
+    std::string metadata_dir_ = "/metadata/ota/test";
+    bool temp_metadata_ = false;
 };
 
 class DeviceMapperWrapper : public android::dm::IDeviceMapper {
diff --git a/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp b/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp
index ce80cd7..b7bc2c8 100644
--- a/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp
+++ b/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp
@@ -1487,7 +1487,7 @@
     writer = std::make_unique<CowWriterV2>(options, GetCowFd());
     ASSERT_TRUE(writer->Initialize());
     ASSERT_TRUE(writer->AddCopy(2, 1));
-    ASSERT_TRUE(writer->AddXorBlocks(3, &data, data.size(), 1, 1));
+    ASSERT_TRUE(writer->AddXorBlocks(3, data.data(), data.size(), 1, 1));
     ASSERT_TRUE(writer->Finalize());
     ASSERT_TRUE(reader.Parse(cow_->fd));
     ASSERT_FALSE(reader.VerifyMergeOps());
diff --git a/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.h b/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.h
index 871ed27..9e7cf7a2 100644
--- a/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.h
+++ b/fs_mgr/libsnapshot/libsnapshot_cow/writer_v3.h
@@ -82,7 +82,7 @@
                                                  CowOperationType type);
     size_t GetCompressionFactor(const size_t blocks_to_compress, CowOperationType type) const;
 
-    constexpr bool IsBlockAligned(const size_t size) {
+    constexpr bool IsBlockAligned(const uint64_t size) {
         // These are the only block size supported. Block size beyond 256k
         // may impact random read performance post OTA boot.
         const size_t values[] = {4_KiB, 8_KiB, 16_KiB, 32_KiB, 64_KiB, 128_KiB, 256_KiB};
diff --git a/fs_mgr/libsnapshot/partition_cow_creator_test.cpp b/fs_mgr/libsnapshot/partition_cow_creator_test.cpp
index a4a2c1a..8356c0c 100644
--- a/fs_mgr/libsnapshot/partition_cow_creator_test.cpp
+++ b/fs_mgr/libsnapshot/partition_cow_creator_test.cpp
@@ -250,8 +250,8 @@
                                 .target_partition = system_b,
                                 .current_metadata = builder_a.get(),
                                 .current_suffix = "_a",
-                                .using_snapuserd = true,
-                                .update = &update};
+                                .update = &update,
+                                .using_snapuserd = true};
 
     auto ret = creator.Run();
     ASSERT_TRUE(ret.has_value());
@@ -276,8 +276,8 @@
                                 .target_partition = system_b,
                                 .current_metadata = builder_a.get(),
                                 .current_suffix = "_a",
-                                .using_snapuserd = true,
-                                .update = nullptr};
+                                .update = nullptr,
+                                .using_snapuserd = true};
 
     auto ret = creator.Run();
     ASSERT_FALSE(ret.has_value());
diff --git a/fs_mgr/libsnapshot/scratch_super.cpp b/fs_mgr/libsnapshot/scratch_super.cpp
new file mode 100644
index 0000000..93c4bbd
--- /dev/null
+++ b/fs_mgr/libsnapshot/scratch_super.cpp
@@ -0,0 +1,416 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/fs.h>
+#include <selinux/selinux.h>
+#include <stdlib.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <sys/types.h>
+#include <sys/vfs.h>
+#include <unistd.h>
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/macros.h>
+#include <android-base/properties.h>
+#include <android-base/scopeguard.h>
+#include <android-base/strings.h>
+#include <android-base/unique_fd.h>
+#include <ext4_utils/ext4_utils.h>
+
+#include <libsnapshot/snapshot.h>
+
+#include <fs_mgr.h>
+#include <fs_mgr_dm_linear.h>
+#include <fstab/fstab.h>
+#include <liblp/builder.h>
+#include <storage_literals/storage_literals.h>
+#include <algorithm>
+#include <filesystem>
+#include <memory>
+#include <optional>
+#include <string>
+#include <vector>
+
+#include "device_info.h"
+#include "scratch_super.h"
+
+using namespace std::literals;
+using namespace android::dm;
+using namespace android::fs_mgr;
+using namespace android::storage_literals;
+
+namespace android {
+namespace snapshot {
+
+static bool UmountScratch() {
+    auto ota_dir = std::string(kOtaMetadataMount) + "/" + "ota";
+    std::error_code ec;
+
+    if (std::filesystem::remove_all(ota_dir, ec) == static_cast<std::uintmax_t>(-1)) {
+        LOG(ERROR) << "Failed to remove OTA directory: " << ec.message();
+        return false;
+    }
+
+    if (umount(kOtaMetadataMount) != 0) {
+        PLOG(ERROR) << "UmountScratch failed";
+        return false;
+    }
+
+    LOG(INFO) << "umount scratch_super success";
+    return true;
+}
+
+bool CleanupScratchOtaMetadataIfPresent(const ISnapshotManager::IDeviceInfo* info) {
+    if (!UmountScratch()) {
+        return false;
+    }
+
+    std::unique_ptr<MetadataBuilder> builder;
+    const auto partition_name = android::base::Basename(kOtaMetadataMount);
+    const std::vector<int> slots = {0, 1};
+
+    if (info == nullptr) {
+        info = new android::snapshot::DeviceInfo();
+    }
+
+    std::string super_device;
+    if (info->IsTestDevice()) {
+        super_device = "super";
+    } else {
+        super_device = kPhysicalDevice + fs_mgr_get_super_partition_name();
+    }
+    const auto& opener = info->GetPartitionOpener();
+    std::string slot_suffix = info->GetSlotSuffix();
+    // Walk both the slots and clean up metadata related to scratch space from
+    // both the slots.
+    for (auto slot : slots) {
+        std::unique_ptr<MetadataBuilder> builder = MetadataBuilder::New(opener, super_device, slot);
+        if (!builder) {
+            return false;
+        }
+
+        if (builder->FindPartition(partition_name) != nullptr) {
+            builder->RemovePartition(partition_name);
+            auto metadata = builder->Export();
+            if (!metadata) {
+                return false;
+            }
+            if (!UpdatePartitionTable(info->GetPartitionOpener(), super_device, *metadata.get(),
+                                      slot)) {
+                LOG(ERROR) << "UpdatePartitionTable failed for slot: " << slot;
+                return false;
+            }
+            if (DestroyLogicalPartition(partition_name)) {
+                LOG(INFO) << "CleanupScratchOtaMetadata success for slot: " << slot;
+            }
+        }
+    }
+
+    return true;
+}
+
+static bool SetupOTADirs() {
+    if (setfscreatecon(android::snapshot::kOtaMetadataFileContext)) {
+        PLOG(ERROR) << "setfscreatecon failed: " << android::snapshot::kOtaMetadataFileContext;
+        return false;
+    }
+    const auto ota_dir = std::string(kOtaMetadataMount) + "/" + "ota";
+    if (mkdir(ota_dir.c_str(), 0755) != 0 && errno != EEXIST) {
+        PLOG(ERROR) << "mkdir " << ota_dir;
+        return false;
+    }
+
+    const auto snapshot_dir = ota_dir + "/" + "snapshots";
+    if (mkdir(snapshot_dir.c_str(), 0755) != 0 && errno != EEXIST) {
+        PLOG(ERROR) << "mkdir " << snapshot_dir;
+        return false;
+    }
+    if (setfscreatecon(nullptr)) {
+        PLOG(ERROR) << "setfscreatecon null";
+        return false;
+    }
+    return true;
+}
+
+static bool MountScratch(const std::string& device_path) {
+    if (access(device_path.c_str(), R_OK | W_OK)) {
+        LOG(ERROR) << "Path does not exist or is not readwrite: " << device_path;
+        return false;
+    }
+
+    std::string filesystem_candidate;
+    if (fs_mgr_is_ext4(device_path)) {
+        filesystem_candidate = "ext4";
+    } else {
+        LOG(ERROR) << "Scratch partition is not ext4";
+        return false;
+    }
+    if (setfscreatecon(android::snapshot::kOtaMetadataFileContext)) {
+        PLOG(ERROR) << "setfscreatecon failed: " << android::snapshot::kOtaMetadataFileContext;
+        return false;
+    }
+    if (mkdir(kOtaMetadataMount, 0755) && (errno != EEXIST)) {
+        PLOG(ERROR) << "create " << kOtaMetadataMount;
+        return false;
+    }
+
+    android::fs_mgr::FstabEntry entry;
+    entry.blk_device = device_path;
+    entry.mount_point = kOtaMetadataMount;
+    entry.flags = MS_NOATIME;
+    entry.flags |= MS_SYNCHRONOUS;
+    entry.fs_options = "nodiscard";
+    fs_mgr_set_blk_ro(device_path, false);
+    entry.fs_mgr_flags.check = true;
+
+    bool mounted = false;
+    entry.fs_type = filesystem_candidate.c_str();
+    if (fs_mgr_do_mount_one(entry) == 0) {
+        mounted = true;
+    }
+
+    if (setfscreatecon(nullptr)) {
+        PLOG(ERROR) << "setfscreatecon null";
+        return false;
+    }
+    if (!mounted) {
+        rmdir(kOtaMetadataMount);
+        return false;
+    }
+
+    return true;
+}
+
+static bool MakeScratchFilesystem(const std::string& scratch_device) {
+    std::string fs_type;
+    std::string command;
+    if (!access(kMkExt4, X_OK)) {
+        fs_type = "ext4";
+        command = kMkExt4 + " -F -b 4096 -t ext4 -m 0 -O has_journal -M "s + kOtaMetadataMount;
+    } else {
+        LOG(ERROR) << "No supported mkfs command or filesystem driver available, supported "
+                      "filesystems "
+                      "are: f2fs, ext4";
+        return false;
+    }
+    command += " " + scratch_device + " >/dev/null 2>/dev/null </dev/null";
+    fs_mgr_set_blk_ro(scratch_device, false);
+    auto ret = system(command.c_str());
+    if (ret) {
+        LOG(ERROR) << "make " << fs_type << " filesystem on " << scratch_device
+                   << " return=" << ret;
+        return false;
+    }
+    return true;
+}
+
+static bool CreateDynamicScratch(const ISnapshotManager::IDeviceInfo* info,
+                                 std::string* scratch_device) {
+    const auto partition_name = android::base::Basename(kOtaMetadataMount);
+    auto& dm = DeviceMapper::Instance();
+    if (info == nullptr) {
+        info = new android::snapshot::DeviceInfo();
+    }
+
+    std::string super_device;
+    if (info->IsTestDevice()) {
+        super_device = "super";
+    } else {
+        super_device = kPhysicalDevice + fs_mgr_get_super_partition_name();
+    }
+
+    bool partition_exists = dm.GetState(partition_name) != DmDeviceState::INVALID;
+    if (partition_exists) {
+        LOG(ERROR) << "Partition already exists: " << partition_name;
+        return false;
+    }
+
+    const auto& opener = info->GetPartitionOpener();
+    std::string slot_suffix = info->GetSlotSuffix();
+    int slot = SlotNumberForSlotSuffix(slot_suffix);
+    std::unique_ptr<MetadataBuilder> builder = MetadataBuilder::New(opener, super_device, slot);
+
+    if (!builder) {
+        LOG(ERROR) << "open " << super_device << " failed";
+        return false;
+    }
+
+    auto partition = builder->FindPartition(partition_name);
+    partition_exists = partition != nullptr;
+    if (partition_exists) {
+        LOG(ERROR) << "Partition exists in super metadata";
+        return false;
+    }
+
+    partition = builder->AddPartition(partition_name, LP_PARTITION_ATTR_NONE);
+    if (!partition) {
+        LOG(ERROR) << "AddPartition failed " << partition_name;
+        return false;
+    }
+
+    auto free_space = builder->AllocatableSpace() - builder->UsedSpace();
+    if (free_space < kOtaMetadataPartitionSize) {
+        LOG(ERROR) << "No space in super partition. Free space: " << free_space
+                   << " Requested space: " << kOtaMetadataPartitionSize;
+        return false;
+    }
+
+    LOG(INFO) << "CreateDynamicScratch: free_space: " << free_space
+              << " scratch_size: " << kOtaMetadataPartitionSize << " slot_number: " << slot;
+
+    if (!builder->ResizePartition(partition, kOtaMetadataPartitionSize)) {
+        LOG(ERROR) << "ResizePartition failed: " << partition_name << " free_space: " << free_space
+                   << " scratch_size: " << kOtaMetadataPartitionSize;
+        return false;
+    }
+
+    auto metadata = builder->Export();
+    CreateLogicalPartitionParams params;
+
+    if (!metadata ||
+        !UpdatePartitionTable(info->GetPartitionOpener(), super_device, *metadata.get(), slot)) {
+        LOG(ERROR) << "UpdatePartitionTable failed: " << partition_name;
+        return false;
+    }
+    params = {
+            .block_device = super_device,
+            .metadata_slot = slot,
+            .partition_name = partition_name,
+            .force_writable = true,
+            .timeout_ms = 10s,
+            .partition_opener = &info->GetPartitionOpener(),
+    };
+
+    if (!CreateLogicalPartition(params, scratch_device)) {
+        LOG(ERROR) << "CreateLogicalPartition failed";
+        return false;
+    }
+
+    LOG(INFO) << "Scratch device created successfully: " << *scratch_device << " slot: " << slot;
+    return true;
+}
+
+bool IsScratchOtaMetadataOnSuper() {
+    auto partition_name = android::base::Basename(kOtaMetadataMount);
+    auto source_slot = fs_mgr_get_slot_suffix();
+    auto source_slot_number = SlotNumberForSlotSuffix(source_slot);
+
+    const auto super_device =
+            kPhysicalDevice + fs_mgr_get_super_partition_name(!source_slot_number);
+
+    auto metadata = android::fs_mgr::ReadMetadata(super_device, !source_slot_number);
+    if (!metadata) {
+        return false;
+    }
+    auto partition = android::fs_mgr::FindPartition(*metadata.get(), partition_name);
+    if (!partition) {
+        return false;
+    }
+
+    auto& dm = DeviceMapper::Instance();
+    if (dm.GetState(partition_name) == DmDeviceState::ACTIVE) {
+        LOG(INFO) << "Partition: " << partition_name << " is active";
+        return true;
+    }
+
+    CreateLogicalPartitionParams params = {
+            .block_device = super_device,
+            .metadata = metadata.get(),
+            .partition = partition,
+    };
+
+    std::string scratch_path;
+    if (!CreateLogicalPartition(params, &scratch_path)) {
+        LOG(ERROR) << "Could not create logical partition: " << partition_name;
+        return false;
+    }
+    LOG(INFO) << "Scratch device: " << scratch_path << " created successfully";
+
+    return true;
+}
+
+std::string GetScratchOtaMetadataPartition() {
+    std::string device;
+    auto& dm = DeviceMapper::Instance();
+    auto partition_name = android::base::Basename(kOtaMetadataMount);
+
+    bool invalid_partition = (dm.GetState(partition_name) == DmDeviceState::INVALID);
+    if (!invalid_partition && dm.GetDmDevicePathByName(partition_name, &device)) {
+        return device;
+    }
+    return "";
+}
+
+static bool ScratchAlreadyMounted(const std::string& mount_point) {
+    android::fs_mgr::Fstab fstab;
+    if (!ReadFstabFromProcMounts(&fstab)) {
+        return false;
+    }
+    for (const auto& entry : GetEntriesForMountPoint(&fstab, mount_point)) {
+        if (entry->fs_type == "ext4") {
+            return true;
+        }
+    }
+    return false;
+}
+
+std::string MapScratchOtaMetadataPartition(const std::string& scratch_device) {
+    if (!ScratchAlreadyMounted(kOtaMetadataMount)) {
+        if (!MountScratch(scratch_device)) {
+            return "";
+        }
+    }
+
+    auto ota_dir = std::string(kOtaMetadataMount) + "/" + "ota";
+    if (access(ota_dir.c_str(), F_OK) != 0) {
+        return "";
+    }
+    return ota_dir;
+}
+
+// Entry point to create a scratch device on super partition
+// This will create a 1MB space in super. The space will be
+// from the current active slot. Ext4 filesystem will be created
+// on this scratch device and all the OTA related directories
+// will be created.
+bool CreateScratchOtaMetadataOnSuper(const ISnapshotManager::IDeviceInfo* info) {
+    std::string scratch_device;
+
+    if (!CreateDynamicScratch(info, &scratch_device)) {
+        LOG(ERROR) << "CreateDynamicScratch failed";
+        return false;
+    }
+    if (!MakeScratchFilesystem(scratch_device)) {
+        LOG(ERROR) << "MakeScratchFilesystem failed";
+        return false;
+    }
+    if (!MountScratch(scratch_device)) {
+        LOG(ERROR) << "MountScratch failed";
+        return false;
+    }
+    if (!SetupOTADirs()) {
+        LOG(ERROR) << "SetupOTADirs failed";
+        return false;
+    }
+    return true;
+}
+
+}  // namespace snapshot
+}  // namespace android
diff --git a/fs_mgr/libsnapshot/scratch_super.h b/fs_mgr/libsnapshot/scratch_super.h
new file mode 100644
index 0000000..3e6fe70
--- /dev/null
+++ b/fs_mgr/libsnapshot/scratch_super.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+namespace android {
+namespace snapshot {
+
+constexpr char kMkExt4[] = "/system/bin/mke2fs";
+constexpr char kOtaMetadataFileContext[] = "u:object_r:ota_metadata_file:s0";
+constexpr char kOtaMetadataMount[] = "/mnt/scratch_ota_metadata_super";
+const size_t kOtaMetadataPartitionSize = uint64_t(1 * 1024 * 1024);
+constexpr char kPhysicalDevice[] = "/dev/block/by-name/";
+
+bool IsScratchOtaMetadataOnSuper();
+std::string GetScratchOtaMetadataPartition();
+std::string MapScratchOtaMetadataPartition(const std::string& device);
+bool CreateScratchOtaMetadataOnSuper(const ISnapshotManager::IDeviceInfo* info = nullptr);
+bool CleanupScratchOtaMetadataIfPresent(const ISnapshotManager::IDeviceInfo* info = nullptr);
+
+}  // namespace snapshot
+}  // namespace android
diff --git a/fs_mgr/libsnapshot/scripts/apply-update.sh b/fs_mgr/libsnapshot/scripts/apply-update.sh
new file mode 100755
index 0000000..90b0119
--- /dev/null
+++ b/fs_mgr/libsnapshot/scripts/apply-update.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+# This is a debug script to quicky test end-to-end flow
+# of snapshot updates without going through update-engine.
+#
+# Usage:
+#
+#  To update both dynamic and static partitions:
+#
+# ./system/core/fs_mgr/libsnapshot/apply_update.sh [--update-static-partitions] [--wipe]
+#
+# --update-static-partitions: This will update bootloader and static A/B
+# partitions
+# --wipe: Allows data wipe as part of update flow
+#
+#  To update dynamic partitions only (this should be used when static
+#  partitions are present in both the slots):
+#
+#  ./system/core/fs_mgr/libsnapshot/apply_update.sh
+#
+#
+
+rm -f $OUT/*.patch
+
+# Compare images and create snapshot patches. Currently, this
+# just compares two identical images in $OUT. In general, any source
+# and target images could be passed to create snapshot patches. However,
+# care must be taken to ensure source images are already present on the device.
+#
+# create_snapshot is a host side binary. Build it with `m create_snapshot`
+create_snapshot --source=$OUT/system.img --target=$OUT/system.img &
+create_snapshot --source=$OUT/product.img --target=$OUT/product.img &
+create_snapshot --source=$OUT/vendor.img --target=$OUT/vendor.img &
+create_snapshot --source=$OUT/system_ext.img --target=$OUT/system_ext.img &
+create_snapshot --source=$OUT/vendor_dlkm.img --target=$OUT/vendor_dlkm.img &
+create_snapshot --source=$OUT/system_dlkm.img --target=$OUT/system_dlkm.img &
+
+echo "Waiting for snapshot patch creation"
+wait $(jobs -p)
+echo "Snapshot patch creation completed"
+
+mv *.patch $OUT/
+
+adb root
+adb wait-for-device
+adb shell mkdir -p /data/update/
+adb push $OUT/*.patch /data/update/
+
+if [[ "$2" == "--wipe" ]]; then
+  adb shell snapshotctl apply-update /data/update/ -w
+else
+  adb shell snapshotctl apply-update /data/update/
+fi
+
+# Check if the --update-static-partitions option is provided.
+# For quick developer workflow, there is no need to repeatedly
+# apply static partitions.
+if [[ "$1" == "--update-static-partitions" ]]; then
+  adb reboot bootloader
+  sleep 5
+  if [[ "$2" == "--wipe" ]]; then
+      fastboot -w
+  fi
+  fastboot flash bootloader $OUT/bootloader.img
+  sleep 1
+  fastboot reboot bootloader
+  sleep 1
+  fastboot flash radio $OUT/radio.img
+  sleep 1
+  fastboot reboot bootloader
+  sleep 1
+  fastboot flashall --exclude-dynamic-partitions --disable-super-optimization
+else
+  adb reboot
+fi
+
+echo "Update completed"
diff --git a/fs_mgr/libsnapshot/snapshot.cpp b/fs_mgr/libsnapshot/snapshot.cpp
index 4d55315..acabd67 100644
--- a/fs_mgr/libsnapshot/snapshot.cpp
+++ b/fs_mgr/libsnapshot/snapshot.cpp
@@ -20,7 +20,9 @@
 #include <sys/file.h>
 #include <sys/types.h>
 #include <sys/unistd.h>
+#include <sys/xattr.h>
 
+#include <chrono>
 #include <filesystem>
 #include <optional>
 #include <thread>
@@ -46,6 +48,7 @@
 #include <libsnapshot/snapshot_stats.h>
 #include "device_info.h"
 #include "partition_cow_creator.h"
+#include "scratch_super.h"
 #include "snapshot_metadata_updater.h"
 #include "utility.h"
 
@@ -90,6 +93,8 @@
 static constexpr char kRollbackIndicatorPath[] = "/metadata/ota/rollback-indicator";
 static constexpr char kSnapuserdFromSystem[] = "/metadata/ota/snapuserd-from-system";
 static constexpr auto kUpdateStateCheckInterval = 2s;
+static constexpr char kOtaFileContext[] = "u:object_r:ota_metadata_file:s0";
+
 /*
  * The readahead size is set to 32kb so that
  * there is no significant memory pressure (/proc/pressure/memory) during boot.
@@ -113,7 +118,11 @@
         info = new DeviceInfo();
     }
 
-    return std::unique_ptr<SnapshotManager>(new SnapshotManager(info));
+    auto sm = std::unique_ptr<SnapshotManager>(new SnapshotManager(info));
+    if (info->IsTempMetadata()) {
+        LOG(INFO) << "Using temp metadata from super";
+    }
+    return sm;
 }
 
 std::unique_ptr<SnapshotManager> SnapshotManager::NewForFirstStageMount(IDeviceInfo* info) {
@@ -1106,6 +1115,13 @@
         if (result.state == UpdateState::MergeFailed) {
             AcknowledgeMergeFailure(result.failure_code);
         }
+
+        if (result.state == UpdateState::MergeCompleted) {
+            if (device_->IsTempMetadata()) {
+                CleanupScratchOtaMetadataIfPresent();
+            }
+        }
+
         if (result.state != UpdateState::Merging) {
             // Either there is no merge, or the merge was finished, so no need
             // to keep waiting.
@@ -1219,8 +1235,8 @@
                 wrong_phase = true;
                 break;
             default:
-                LOG(ERROR) << "Unknown merge status for \"" << snapshot << "\": "
-                           << "\"" << result.state << "\"";
+                LOG(ERROR) << "Unknown merge status for \"" << snapshot << "\": " << "\""
+                           << result.state << "\"";
                 if (failure_code == MergeFailureCode::Ok) {
                     failure_code = MergeFailureCode::UnexpectedMergeState;
                 }
@@ -1327,10 +1343,25 @@
         }
 
         if (merge_status == "snapshot" &&
-            DecideMergePhase(snapshot_status) == MergePhase::SECOND_PHASE &&
-            update_status.merge_phase() == MergePhase::FIRST_PHASE) {
-            // The snapshot is not being merged because it's in the wrong phase.
-            return MergeResult(UpdateState::None);
+            DecideMergePhase(snapshot_status) == MergePhase::SECOND_PHASE) {
+            if (update_status.merge_phase() == MergePhase::FIRST_PHASE) {
+                // The snapshot is not being merged because it's in the wrong phase.
+                return MergeResult(UpdateState::None);
+            } else {
+                // update_status is already in second phase but the
+                // snapshot_status is still not set to SnapshotState::MERGING.
+                //
+                // Resume the merge at this point. see b/374225913
+                LOG(INFO) << "SwitchSnapshotToMerge: " << name << " after resuming merge";
+                auto code = SwitchSnapshotToMerge(lock, name);
+                if (code != MergeFailureCode::Ok) {
+                    LOG(ERROR) << "Failed to switch snapshot: " << name
+                               << " to merge during second phase";
+                    return MergeResult(UpdateState::MergeFailed,
+                                       MergeFailureCode::UnknownTargetType);
+                }
+                return MergeResult(UpdateState::Merging);
+            }
         }
 
         if (merge_status == "snapshot-merge") {
@@ -1426,8 +1457,14 @@
         return MergeFailureCode::WriteStatus;
     }
 
+    auto current_slot_suffix = device_->GetSlotSuffix();
     MergeFailureCode result = MergeFailureCode::Ok;
     for (const auto& snapshot : snapshots) {
+        if (!android::base::EndsWith(snapshot, current_slot_suffix)) {
+            LOG(ERROR) << "Skipping invalid snapshot: " << snapshot
+                       << " during MergeSecondPhaseSnapshots";
+            continue;
+        }
         SnapshotStatus snapshot_status;
         if (!ReadSnapshotStatus(lock, snapshot, &snapshot_status)) {
             return MergeFailureCode::ReadStatus;
@@ -1705,6 +1742,14 @@
         if (UpdateUsesODirect(lock.get())) {
             snapuserd_argv->emplace_back("-o_direct");
         }
+        uint cow_op_merge_size = GetUpdateCowOpMergeSize(lock.get());
+        if (cow_op_merge_size != 0) {
+            snapuserd_argv->emplace_back("-cow_op_merge_size=" + std::to_string(cow_op_merge_size));
+        }
+        uint32_t worker_count = GetUpdateWorkerCount(lock.get());
+        if (worker_count != 0) {
+            snapuserd_argv->emplace_back("-worker_count=" + std::to_string(worker_count));
+        }
     }
 
     size_t num_cows = 0;
@@ -2127,6 +2172,16 @@
     return update_status.o_direct();
 }
 
+uint32_t SnapshotManager::GetUpdateCowOpMergeSize(LockedFile* lock) {
+    SnapshotUpdateStatus update_status = ReadSnapshotUpdateStatus(lock);
+    return update_status.cow_op_merge_size();
+}
+
+uint32_t SnapshotManager::GetUpdateWorkerCount(LockedFile* lock) {
+    SnapshotUpdateStatus update_status = ReadSnapshotUpdateStatus(lock);
+    return update_status.num_worker_threads();
+}
+
 bool SnapshotManager::MarkSnapuserdFromSystem() {
     auto path = GetSnapuserdFromSystemPath();
 
@@ -2134,6 +2189,24 @@
         PLOG(ERROR) << "Unable to write to vendor update path: " << path;
         return false;
     }
+
+    unique_fd fd(open(path.c_str(), O_PATH));
+    if (fd < 0) {
+        PLOG(ERROR) << "Failed to open file: " << path;
+        return false;
+    }
+
+    /*
+     * This function is invoked by first stage init and hence we need to
+     * explicitly set the correct selinux label for this file as update_engine
+     * will try to remove this file later on once the snapshot merge is
+     * complete.
+     */
+    if (fsetxattr(fd.get(), XATTR_NAME_SELINUX, kOtaFileContext, strlen(kOtaFileContext) + 1, 0) <
+        0) {
+        PLOG(ERROR) << "fsetxattr for the path: " << path << " failed";
+    }
+
     return true;
 }
 
@@ -2184,18 +2257,24 @@
  *
  */
 bool SnapshotManager::IsLegacySnapuserdPostReboot() {
-    if (is_legacy_snapuserd_.has_value() && is_legacy_snapuserd_.value() == true) {
-        auto slot = GetCurrentSlot();
-        if (slot == Slot::Target) {
-            // If this marker is present, then daemon can handle userspace
-            // snapshots; also, it indicates that the vendor partition was
-            // updated from Android 12.
-            if (access(GetSnapuserdFromSystemPath().c_str(), F_OK) == 0) {
-                return false;
-            }
+    auto slot = GetCurrentSlot();
+    if (slot == Slot::Target) {
+        /*
+            If this marker is present, the daemon can handle userspace snapshots.
+            During post-OTA reboot, this implies that the vendor partition is
+            Android 13 or higher. If the snapshots were created on an
+            Android 12 vendor, this means the vendor partition has been updated.
+        */
+        if (access(GetSnapuserdFromSystemPath().c_str(), F_OK) == 0) {
+            is_snapshot_userspace_ = true;
+            return false;
+        }
+        // If the marker isn't present and if the vendor is still in Android 12
+        if (is_legacy_snapuserd_.has_value() && is_legacy_snapuserd_.value() == true) {
             return true;
         }
     }
+
     return false;
 }
 
@@ -2273,7 +2352,27 @@
 }
 
 bool SnapshotManager::IsSnapshotManagerNeeded() {
-    return access(kBootIndicatorPath, F_OK) == 0;
+    if (access(kBootIndicatorPath, F_OK) == 0) {
+        return true;
+    }
+
+    if (IsScratchOtaMetadataOnSuper()) {
+        return true;
+    }
+
+    return false;
+}
+
+bool SnapshotManager::MapTempOtaMetadataPartitionIfNeeded(
+        const std::function<bool(const std::string&)>& init) {
+    auto device = android::snapshot::GetScratchOtaMetadataPartition();
+    if (!device.empty()) {
+        init(device);
+        if (android::snapshot::MapScratchOtaMetadataPartition(device).empty()) {
+            return false;
+        }
+    }
+    return true;
 }
 
 std::string SnapshotManager::GetGlobalRollbackIndicatorPath() {
@@ -2360,6 +2459,12 @@
             continue;
         }
 
+        if (GetPartitionName(partition) ==
+            android::base::Basename(android::snapshot::kOtaMetadataMount)) {
+            LOG(INFO) << "Partition: " << GetPartitionName(partition) << " skipping";
+            continue;
+        }
+
         CreateLogicalPartitionParams params = {
                 .block_device = super_device,
                 .metadata = metadata.get(),
@@ -2865,10 +2970,12 @@
 }
 
 bool SnapshotManager::UnmapAllSnapshots(LockedFile* lock) {
+    LOG(INFO) << "Lock acquired for " << __FUNCTION__;
     std::vector<std::string> snapshots;
     if (!ListSnapshots(lock, &snapshots)) {
         return false;
     }
+    LOG(INFO) << "Found " << snapshots.size() << " partitions with snapshots";
 
     for (const auto& snapshot : snapshots) {
         if (!UnmapPartitionWithSnapshot(lock, snapshot)) {
@@ -2892,6 +2999,7 @@
 
 auto SnapshotManager::OpenFile(const std::string& file,
                                int lock_flags) -> std::unique_ptr<LockedFile> {
+    const auto start = std::chrono::system_clock::now();
     unique_fd fd(open(file.c_str(), O_RDONLY | O_CLOEXEC | O_NOFOLLOW));
     if (fd < 0) {
         PLOG(ERROR) << "Open failed: " << file;
@@ -2904,6 +3012,11 @@
     // For simplicity, we want to CHECK that lock_mode == LOCK_EX, in some
     // calls, so strip extra flags.
     int lock_mode = lock_flags & (LOCK_EX | LOCK_SH);
+    const auto end = std::chrono::system_clock::now();
+    const auto duration_ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
+    if (duration_ms >= 1000ms) {
+        LOG(INFO) << "Taking lock on " << file << " took " << duration_ms.count() << "ms";
+    }
     return std::make_unique<LockedFile>(file, std::move(fd), lock_mode);
 }
 
@@ -3056,6 +3169,8 @@
         status.set_io_uring_enabled(old_status.io_uring_enabled());
         status.set_legacy_snapuserd(old_status.legacy_snapuserd());
         status.set_o_direct(old_status.o_direct());
+        status.set_cow_op_merge_size(old_status.cow_op_merge_size());
+        status.set_num_worker_threads(old_status.num_worker_threads());
     }
     return WriteSnapshotUpdateStatus(lock, status);
 }
@@ -3438,6 +3553,11 @@
             status.set_legacy_snapuserd(true);
             LOG(INFO) << "Setting legacy_snapuserd to true";
         }
+        status.set_cow_op_merge_size(
+                android::base::GetUintProperty<uint32_t>("ro.virtual_ab.cow_op_merge_size", 0));
+        status.set_num_worker_threads(
+                android::base::GetUintProperty<uint32_t>("ro.virtual_ab.num_worker_threads", 0));
+
     } else if (legacy_compression) {
         LOG(INFO) << "Virtual A/B using legacy snapuserd";
     } else {
@@ -3873,6 +3993,8 @@
     ss << "Using userspace snapshots: " << update_status.userspace_snapshots() << std::endl;
     ss << "Using io_uring: " << update_status.io_uring_enabled() << std::endl;
     ss << "Using o_direct: " << update_status.o_direct() << std::endl;
+    ss << "Cow op merge size (0 for uncapped): " << update_status.cow_op_merge_size() << std::endl;
+    ss << "Worker thread count: " << update_status.num_worker_threads() << std::endl;
     ss << "Using XOR compression: " << GetXorCompressionEnabledProperty() << std::endl;
     ss << "Current slot: " << device_->GetSlotSuffix() << std::endl;
     ss << "Boot indicator: booting from " << GetCurrentSlot() << " slot" << std::endl;
@@ -3956,44 +4078,90 @@
         // We allow the wipe to continue, because if we can't mount /metadata,
         // it is unlikely the device would have booted anyway. If there is no
         // metadata partition, then the device predates Virtual A/B.
+        LOG(INFO) << "/metadata not found; allowing wipe.";
         return true;
     }
 
-    // Check this early, so we don't accidentally start trying to populate
-    // the state file in recovery. Note we don't call GetUpdateState since
-    // we want errors in acquiring the lock to be propagated, instead of
-    // returning UpdateState::None.
-    auto state_file = GetStateFilePath();
-    if (access(state_file.c_str(), F_OK) != 0 && errno == ENOENT) {
-        return true;
-    }
-
-    auto slot_number = SlotNumberForSlotSuffix(device_->GetSlotSuffix());
-    auto super_path = device_->GetSuperDevice(slot_number);
-    if (!CreateLogicalAndSnapshotPartitions(super_path, 20s)) {
-        LOG(ERROR) << "Unable to map partitions to complete merge.";
-        return false;
-    }
-
-    auto process_callback = [&]() -> bool {
-        if (callback) {
-            callback();
+    // This could happen if /metadata mounted but there is no filesystem
+    // structure. Weird, but we have to assume there's no OTA pending, and
+    // thus we let the wipe proceed.
+    UpdateState state;
+    {
+        auto lock = LockExclusive();
+        if (!lock) {
+            LOG(ERROR) << "Unable to determine update state; allowing wipe.";
+            return true;
         }
-        return true;
-    };
 
-    in_factory_data_reset_ = true;
-    UpdateState state =
-            ProcessUpdateStateOnDataWipe(true /* allow_forward_merge */, process_callback);
-    in_factory_data_reset_ = false;
-
-    if (state == UpdateState::MergeFailed) {
-        return false;
+        state = ReadUpdateState(lock.get());
+        LOG(INFO) << "Update state before wipe: " << state << "; slot: " << GetCurrentSlot()
+                  << "; suffix: " << device_->GetSlotSuffix();
     }
 
-    // Nothing should be depending on partitions now, so unmap them all.
-    if (!UnmapAllPartitionsInRecovery()) {
-        LOG(ERROR) << "Unable to unmap all partitions; fastboot may fail to flash.";
+    bool try_merge = false;
+    switch (state) {
+        case UpdateState::None:
+        case UpdateState::Initiated:
+            LOG(INFO) << "Wipe is not impacted by update state; allowing wipe.";
+            break;
+        case UpdateState::Unverified:
+            if (GetCurrentSlot() != Slot::Target) {
+                LOG(INFO) << "Wipe is not impacted by rolled back update; allowing wipe";
+                break;
+            }
+            if (!HasForwardMergeIndicator()) {
+                auto slot_number = SlotNumberForSlotSuffix(device_->GetSlotSuffix());
+                auto other_slot_number = SlotNumberForSlotSuffix(device_->GetOtherSlotSuffix());
+
+                // We're not allowed to forward merge, so forcefully rollback the
+                // slot switch.
+                LOG(INFO) << "Allowing wipe due to lack of forward merge indicator; reverting to "
+                             "old slot since update will be deleted.";
+                device_->SetSlotAsUnbootable(slot_number);
+                device_->SetActiveBootSlot(other_slot_number);
+                break;
+            }
+
+            // Forward merge indicator means we have to mount snapshots and try to merge.
+            LOG(INFO) << "Forward merge indicator is present.";
+            try_merge = true;
+            break;
+        case UpdateState::Merging:
+        case UpdateState::MergeFailed:
+            try_merge = true;
+            break;
+        case UpdateState::MergeNeedsReboot:
+        case UpdateState::Cancelled:
+            LOG(INFO) << "Unexpected update state in recovery; allowing wipe.";
+            break;
+        default:
+            break;
+    }
+
+    if (try_merge) {
+        auto slot_number = SlotNumberForSlotSuffix(device_->GetSlotSuffix());
+        auto super_path = device_->GetSuperDevice(slot_number);
+        if (!CreateLogicalAndSnapshotPartitions(super_path, 20s)) {
+            LOG(ERROR) << "Unable to map partitions to complete merge.";
+            return false;
+        }
+
+        auto process_callback = [&]() -> bool {
+            if (callback) {
+                callback();
+            }
+            return true;
+        };
+
+        state = ProcessUpdateStateOnDataWipe(process_callback);
+        if (state == UpdateState::MergeFailed) {
+            return false;
+        }
+
+        // Nothing should be depending on partitions now, so unmap them all.
+        if (!UnmapAllPartitionsInRecovery()) {
+            LOG(ERROR) << "Unable to unmap all partitions; fastboot may fail to flash.";
+        }
     }
 
     if (state != UpdateState::None) {
@@ -4039,58 +4207,40 @@
     return true;
 }
 
-UpdateState SnapshotManager::ProcessUpdateStateOnDataWipe(bool allow_forward_merge,
-                                                          const std::function<bool()>& callback) {
-    auto slot_number = SlotNumberForSlotSuffix(device_->GetSlotSuffix());
-    UpdateState state = ProcessUpdateState(callback);
-    LOG(INFO) << "Update state in recovery: " << state;
-    switch (state) {
-        case UpdateState::MergeFailed:
-            LOG(ERROR) << "Unrecoverable merge failure detected.";
-            return state;
-        case UpdateState::Unverified: {
-            // If an OTA was just applied but has not yet started merging:
-            //
-            // - if forward merge is allowed, initiate merge and call
-            // ProcessUpdateState again.
-            //
-            // - if forward merge is not allowed, we
-            // have no choice but to revert slots, because the current slot will
-            // immediately become unbootable. Rather than wait for the device
-            // to reboot N times until a rollback, we proactively disable the
-            // new slot instead.
-            //
-            // Since the rollback is inevitable, we don't treat a HAL failure
-            // as an error here.
-            auto slot = GetCurrentSlot();
-            if (slot == Slot::Target) {
-                if (allow_forward_merge &&
-                    access(GetForwardMergeIndicatorPath().c_str(), F_OK) == 0) {
-                    LOG(INFO) << "Forward merge allowed, initiating merge now.";
-
-                    if (!InitiateMerge()) {
-                        LOG(ERROR) << "Failed to initiate merge on data wipe.";
-                        return UpdateState::MergeFailed;
-                    }
-                    return ProcessUpdateStateOnDataWipe(false /* allow_forward_merge */, callback);
+UpdateState SnapshotManager::ProcessUpdateStateOnDataWipe(const std::function<bool()>& callback) {
+    while (true) {
+        UpdateState state = ProcessUpdateState(callback);
+        LOG(INFO) << "Processed updated state in recovery: " << state;
+        switch (state) {
+            case UpdateState::MergeFailed:
+                LOG(ERROR) << "Unrecoverable merge failure detected.";
+                return state;
+            case UpdateState::Unverified: {
+                // Unverified was already handled earlier, in HandleImminentDataWipe,
+                // but it will fall through here if a forward merge is required.
+                //
+                // If InitiateMerge fails, we early return. If it succeeds, then we
+                // are guaranteed that the next call to ProcessUpdateState will not
+                // return Unverified.
+                if (!InitiateMerge()) {
+                    LOG(ERROR) << "Failed to initiate merge on data wipe.";
+                    return UpdateState::MergeFailed;
                 }
-
-                LOG(ERROR) << "Reverting to old slot since update will be deleted.";
-                device_->SetSlotAsUnbootable(slot_number);
-            } else {
-                LOG(INFO) << "Booting from " << slot << " slot, no action is taken.";
+                continue;
             }
-            break;
+            case UpdateState::MergeNeedsReboot:
+                // We shouldn't get here, because nothing is depending on
+                // logical partitions.
+                LOG(ERROR) << "Unexpected merge-needs-reboot state in recovery.";
+                return state;
+            default:
+                return state;
         }
-        case UpdateState::MergeNeedsReboot:
-            // We shouldn't get here, because nothing is depending on
-            // logical partitions.
-            LOG(ERROR) << "Unexpected merge-needs-reboot state in recovery.";
-            break;
-        default:
-            break;
     }
-    return state;
+}
+
+bool SnapshotManager::HasForwardMergeIndicator() {
+    return access(GetForwardMergeIndicatorPath().c_str(), F_OK) == 0;
 }
 
 bool SnapshotManager::EnsureNoOverflowSnapshot(LockedFile* lock) {
@@ -4461,8 +4611,7 @@
         }
     }
 
-    LOG(ERROR) << "Device-mapper device " << name << "(" << full_path << ")"
-               << " still in use."
+    LOG(ERROR) << "Device-mapper device " << name << "(" << full_path << ")" << " still in use."
                << "  Probably a file descriptor was leaked or held open, or a loop device is"
                << " attached.";
     return false;
diff --git a/fs_mgr/libsnapshot/snapshot_stats.cpp b/fs_mgr/libsnapshot/snapshot_stats.cpp
index 9b6eb2c..8e9d9c5 100644
--- a/fs_mgr/libsnapshot/snapshot_stats.cpp
+++ b/fs_mgr/libsnapshot/snapshot_stats.cpp
@@ -25,7 +25,7 @@
 
 SnapshotMergeStats* SnapshotMergeStats::GetInstance(SnapshotManager& parent) {
     static SnapshotMergeStats g_instance(parent.GetMergeStateFilePath());
-    CHECK(g_instance.path_ == parent.GetMergeStateFilePath());
+    CHECK_EQ(g_instance.path_, parent.GetMergeStateFilePath());
     return &g_instance;
 }
 
diff --git a/fs_mgr/libsnapshot/snapshot_test.cpp b/fs_mgr/libsnapshot/snapshot_test.cpp
index ba86a51..1a0d559 100644
--- a/fs_mgr/libsnapshot/snapshot_test.cpp
+++ b/fs_mgr/libsnapshot/snapshot_test.cpp
@@ -47,6 +47,7 @@
 #include <android/snapshot/snapshot.pb.h>
 #include <libsnapshot/test_helpers.h>
 #include "partition_cow_creator.h"
+#include "scratch_super.h"
 #include "utility.h"
 
 // Mock classes are not used. Header included to ensure mocked class definition aligns with the
@@ -1342,6 +1343,15 @@
     DynamicPartitionGroup* group_ = nullptr;
 };
 
+TEST_F(SnapshotUpdateTest, SuperOtaMetadataTest) {
+    auto info = new TestDeviceInfo(fake_super);
+    ASSERT_TRUE(CreateScratchOtaMetadataOnSuper(info));
+    std::string scratch_device = GetScratchOtaMetadataPartition();
+    ASSERT_NE(scratch_device, "");
+    ASSERT_NE(MapScratchOtaMetadataPartition(scratch_device), "");
+    ASSERT_TRUE(CleanupScratchOtaMetadataIfPresent(info));
+}
+
 // Test full update flow executed by update_engine. Some partitions uses super empty space,
 // some uses images, and some uses both.
 // Also test UnmapUpdateSnapshot unmaps everything.
@@ -1597,6 +1607,146 @@
     }
 }
 
+// Test that shrinking and growing partitions at the same time is handled
+// correctly in VABC.
+TEST_F(SnapshotUpdateTest, InterruptMergeDuringPhaseUpdate) {
+    if (!snapuserd_required_) {
+        // b/179111359
+        GTEST_SKIP() << "Skipping snapuserd test";
+    }
+
+    auto old_sys_size = GetSize(sys_);
+    auto old_prd_size = GetSize(prd_);
+
+    // Grow |sys| but shrink |prd|.
+    SetSize(sys_, old_sys_size * 2);
+    sys_->set_estimate_cow_size(8_MiB);
+    SetSize(prd_, old_prd_size / 2);
+    prd_->set_estimate_cow_size(1_MiB);
+
+    AddOperationForPartitions();
+
+    ASSERT_TRUE(sm->BeginUpdate());
+    ASSERT_TRUE(sm->CreateUpdateSnapshots(manifest_));
+
+    // Check that the old partition sizes were saved correctly.
+    {
+        ASSERT_TRUE(AcquireLock());
+        auto local_lock = std::move(lock_);
+
+        SnapshotStatus status;
+        ASSERT_TRUE(sm->ReadSnapshotStatus(local_lock.get(), "prd_b", &status));
+        ASSERT_EQ(status.old_partition_size(), 3145728);
+        ASSERT_TRUE(sm->ReadSnapshotStatus(local_lock.get(), "sys_b", &status));
+        ASSERT_EQ(status.old_partition_size(), 3145728);
+    }
+
+    ASSERT_TRUE(WriteSnapshotAndHash(sys_));
+    ASSERT_TRUE(WriteSnapshotAndHash(vnd_));
+    ASSERT_TRUE(ShiftAllSnapshotBlocks("prd_b", old_prd_size));
+
+    sync();
+
+    // Assert that source partitions aren't affected.
+    for (const auto& name : {"sys_a", "vnd_a", "prd_a"}) {
+        ASSERT_TRUE(IsPartitionUnchanged(name));
+    }
+
+    ASSERT_TRUE(sm->FinishedSnapshotWrites(false));
+
+    // Simulate shutting down the device.
+    ASSERT_TRUE(UnmapAll());
+
+    // After reboot, init does first stage mount.
+    auto init = NewManagerForFirstStageMount("_b");
+    ASSERT_NE(init, nullptr);
+    ASSERT_TRUE(init->NeedSnapshotsInFirstStageMount());
+    ASSERT_TRUE(init->CreateLogicalAndSnapshotPartitions("super", snapshot_timeout_));
+
+    // Check that the target partitions have the same content.
+    for (const auto& name : {"sys_b", "vnd_b", "prd_b"}) {
+        ASSERT_TRUE(IsPartitionUnchanged(name));
+    }
+
+    // Initiate the merge and wait for it to be completed.
+    if (ShouldSkipLegacyMerging()) {
+        LOG(INFO) << "Skipping legacy merge in test";
+        return;
+    }
+    ASSERT_TRUE(init->InitiateMerge());
+    ASSERT_EQ(init->IsSnapuserdRequired(), snapuserd_required_);
+    {
+        // Check that the merge phase is FIRST_PHASE until at least one call
+        // to ProcessUpdateState() occurs.
+        ASSERT_TRUE(AcquireLock());
+        auto local_lock = std::move(lock_);
+        auto status = init->ReadSnapshotUpdateStatus(local_lock.get());
+        ASSERT_EQ(status.merge_phase(), MergePhase::FIRST_PHASE);
+    }
+
+    // Wait until prd_b merge is completed which is part of first phase
+    std::chrono::milliseconds timeout(6000);
+    auto start = std::chrono::steady_clock::now();
+    // Keep polling until the merge is complete or timeout is reached
+    while (true) {
+        // Query the merge status
+        const auto merge_status = init->snapuserd_client()->QuerySnapshotStatus("prd_b");
+        if (merge_status == "snapshot-merge-complete") {
+            break;
+        }
+
+        auto now = std::chrono::steady_clock::now();
+        auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - start);
+
+        ASSERT_TRUE(elapsed < timeout);
+        // sleep for a second and allow merge to complete
+        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
+    }
+
+    // Now, forcefully update the snapshot-update status to SECOND PHASE
+    // This will not update the snapshot status of sys_b to MERGING
+    if (init->UpdateUsesUserSnapshots()) {
+        ASSERT_TRUE(AcquireLock());
+        auto local_lock = std::move(lock_);
+        auto status = init->ReadSnapshotUpdateStatus(local_lock.get());
+        status.set_merge_phase(MergePhase::SECOND_PHASE);
+        ASSERT_TRUE(init->WriteSnapshotUpdateStatus(local_lock.get(), status));
+    }
+
+    // Simulate shutting down the device and creating partitions again.
+    ASSERT_TRUE(UnmapAll());
+    ASSERT_TRUE(init->CreateLogicalAndSnapshotPartitions("super", snapshot_timeout_));
+
+    DeviceMapper::TargetInfo target;
+    ASSERT_TRUE(init->IsSnapshotDevice("prd_b", &target));
+
+    ASSERT_EQ(DeviceMapper::GetTargetType(target.spec), "user");
+    ASSERT_TRUE(init->IsSnapshotDevice("sys_b", &target));
+    ASSERT_EQ(DeviceMapper::GetTargetType(target.spec), "user");
+    ASSERT_TRUE(init->IsSnapshotDevice("vnd_b", &target));
+    ASSERT_EQ(DeviceMapper::GetTargetType(target.spec), "user");
+
+    // Complete the merge; "sys" and "vnd" should resume the merge
+    // even though merge was interrupted after update_status was updated to
+    // SECOND_PHASE
+    ASSERT_EQ(UpdateState::MergeCompleted, init->ProcessUpdateState());
+
+    // Make sure the second phase ran and deleted snapshots.
+    {
+        ASSERT_TRUE(AcquireLock());
+        auto local_lock = std::move(lock_);
+        std::vector<std::string> snapshots;
+        ASSERT_TRUE(init->ListSnapshots(local_lock.get(), &snapshots));
+        ASSERT_TRUE(snapshots.empty());
+    }
+
+    // Check that the target partitions have the same content after the merge.
+    for (const auto& name : {"sys_b", "vnd_b", "prd_b"}) {
+        ASSERT_TRUE(IsPartitionUnchanged(name))
+                << "Content of " << name << " changes after the merge";
+    }
+}
+
 // Test that if new system partitions uses empty space in super, that region is not snapshotted.
 TEST_F(SnapshotUpdateTest, DirectWriteEmptySpace) {
     GTEST_SKIP() << "b/141889746";
@@ -2102,10 +2252,10 @@
     test_device->set_recovery(true);
     auto new_sm = NewManagerForFirstStageMount(test_device);
 
+    EXPECT_EQ(new_sm->GetUpdateState(), UpdateState::Unverified);
     ASSERT_TRUE(new_sm->HandleImminentDataWipe());
     // Manually mount metadata so that we can call GetUpdateState() below.
     MountMetadata();
-    EXPECT_EQ(new_sm->GetUpdateState(), UpdateState::None);
     EXPECT_TRUE(test_device->IsSlotUnbootable(1));
     EXPECT_FALSE(test_device->IsSlotUnbootable(0));
 }
@@ -2127,6 +2277,7 @@
     test_device->set_recovery(true);
     auto new_sm = NewManagerForFirstStageMount(test_device);
 
+    EXPECT_EQ(new_sm->GetUpdateState(), UpdateState::Unverified);
     ASSERT_TRUE(new_sm->HandleImminentDataWipe());
     EXPECT_EQ(new_sm->GetUpdateState(), UpdateState::None);
     EXPECT_FALSE(test_device->IsSlotUnbootable(0));
@@ -2135,10 +2286,6 @@
 
 // Test update package that requests data wipe.
 TEST_F(SnapshotUpdateTest, DataWipeRequiredInPackage) {
-    if (ShouldSkipLegacyMerging()) {
-        GTEST_SKIP() << "Skipping legacy merge in test";
-    }
-
     AddOperationForPartitions();
     // Execute the update.
     ASSERT_TRUE(sm->BeginUpdate());
@@ -2157,6 +2304,7 @@
     test_device->set_recovery(true);
     auto new_sm = NewManagerForFirstStageMount(test_device);
 
+    EXPECT_EQ(new_sm->GetUpdateState(), UpdateState::Unverified);
     ASSERT_TRUE(new_sm->HandleImminentDataWipe());
     // Manually mount metadata so that we can call GetUpdateState() below.
     MountMetadata();
@@ -2178,10 +2326,6 @@
 
 // Test update package that requests data wipe.
 TEST_F(SnapshotUpdateTest, DataWipeWithStaleSnapshots) {
-    if (ShouldSkipLegacyMerging()) {
-        GTEST_SKIP() << "Skipping legacy merge in test";
-    }
-
     AddOperationForPartitions();
 
     // Execute the update.
@@ -2222,6 +2366,7 @@
     test_device->set_recovery(true);
     auto new_sm = NewManagerForFirstStageMount(test_device);
 
+    EXPECT_EQ(new_sm->GetUpdateState(), UpdateState::Unverified);
     ASSERT_TRUE(new_sm->HandleImminentDataWipe());
     // Manually mount metadata so that we can call GetUpdateState() below.
     MountMetadata();
@@ -2662,6 +2807,7 @@
     status.set_o_direct(true);
     status.set_io_uring_enabled(true);
     status.set_userspace_snapshots(true);
+    status.set_cow_op_merge_size(16);
 
     sm->WriteSnapshotUpdateStatus(lock_.get(), status);
     // Ensure a connection to the second-stage daemon, but use the first-stage
@@ -2683,6 +2829,8 @@
                 snapuserd_argv.end());
     ASSERT_TRUE(std::find(snapuserd_argv.begin(), snapuserd_argv.end(), "-user_snapshot") !=
                 snapuserd_argv.end());
+    ASSERT_TRUE(std::find(snapuserd_argv.begin(), snapuserd_argv.end(), "-cow_op_merge_size=16") !=
+                snapuserd_argv.end());
 }
 
 class FlashAfterUpdateTest : public SnapshotUpdateTest,
diff --git a/fs_mgr/libsnapshot/snapshotctl.cpp b/fs_mgr/libsnapshot/snapshotctl.cpp
index 0158d4d..46de991 100644
--- a/fs_mgr/libsnapshot/snapshotctl.cpp
+++ b/fs_mgr/libsnapshot/snapshotctl.cpp
@@ -16,7 +16,6 @@
 
 #include <sysexits.h>
 #include <unistd.h>
-
 #include <chrono>
 #include <filesystem>
 #include <fstream>
@@ -46,6 +45,7 @@
 #include <storage_literals/storage_literals.h>
 
 #include "partition_cow_creator.h"
+#include "scratch_super.h"
 
 #ifdef SNAPSHOTCTL_USERDEBUG_OR_ENG
 #include <BootControlClient.h>
@@ -57,6 +57,8 @@
 using android::base::LogdLogger;
 using android::base::StderrLogger;
 using android::base::TeeLogger;
+using namespace android::dm;
+using namespace android::fs_mgr;
 using android::fs_mgr::CreateLogicalPartitionParams;
 using android::fs_mgr::FindPartition;
 using android::fs_mgr::GetPartitionSize;
@@ -97,13 +99,13 @@
 #ifdef SNAPSHOTCTL_USERDEBUG_OR_ENG
 class MapSnapshots {
   public:
-    MapSnapshots(std::string path = "");
+    MapSnapshots(std::string path = "", bool metadata_super = false);
     bool CreateSnapshotDevice(std::string& partition_name, std::string& patch);
     bool InitiateThreadedSnapshotWrite(std::string& pname, std::string& snapshot_patch);
     bool FinishSnapshotWrites();
     bool UnmapCowImagePath(std::string& name);
     bool DeleteSnapshots();
-    bool CleanupSnapshot() { return sm_->PrepareDeviceToBootWithoutSnapshot(); }
+    bool CleanupSnapshot();
     bool BeginUpdate();
     bool ApplyUpdate();
 
@@ -122,15 +124,12 @@
 
     std::vector<std::string> patchfiles_;
     chromeos_update_engine::DeltaArchiveManifest manifest_;
+    bool metadata_super_ = false;
 };
 
-MapSnapshots::MapSnapshots(std::string path) {
-    sm_ = SnapshotManager::New();
-    if (!sm_) {
-        std::cout << "Failed to create snapshotmanager";
-        exit(1);
-    }
+MapSnapshots::MapSnapshots(std::string path, bool metadata_super) {
     snapshot_dir_path_ = path + "/";
+    metadata_super_ = metadata_super;
 }
 
 std::string MapSnapshots::GetGroupName(const android::fs_mgr::LpMetadata& pt,
@@ -150,6 +149,12 @@
 }
 
 bool MapSnapshots::PrepareUpdate() {
+    if (metadata_super_ && !CreateScratchOtaMetadataOnSuper()) {
+        LOG(ERROR) << "Failed to create OTA metadata on super";
+        return false;
+    }
+    sm_ = SnapshotManager::New();
+
     auto source_slot = fs_mgr_get_slot_suffix();
     auto source_slot_number = SlotNumberForSlotSuffix(source_slot);
     auto super_source = fs_mgr_get_super_partition_name(source_slot_number);
@@ -234,7 +239,17 @@
 
 bool MapSnapshots::GetCowDevicePath(std::string partition_name, std::string* cow_path) {
     auto& dm = android::dm::DeviceMapper::Instance();
-    std::string cow_device = partition_name + "-cow";
+
+    std::string cow_device = partition_name + "-cow-img";
+    if (metadata_super_) {
+        // If COW device exists on /data, then data wipe cannot be done.
+        if (dm.GetDmDevicePathByName(cow_device, cow_path)) {
+            LOG(ERROR) << "COW device exists on /data: " << *cow_path;
+            return false;
+        }
+    }
+
+    cow_device = partition_name + "-cow";
     if (dm.GetDmDevicePathByName(cow_device, cow_path)) {
         return true;
     }
@@ -321,6 +336,12 @@
 }
 
 bool MapSnapshots::BeginUpdate() {
+    if (metadata_super_ && !CreateScratchOtaMetadataOnSuper()) {
+        LOG(ERROR) << "Failed to create OTA metadata on super";
+        return false;
+    }
+    sm_ = SnapshotManager::New();
+
     lock_ = sm_->LockExclusive();
     std::vector<std::string> snapshots;
     sm_->ListSnapshots(lock_.get(), &snapshots);
@@ -470,10 +491,17 @@
 }
 
 bool MapSnapshots::UnmapCowImagePath(std::string& name) {
+    sm_ = SnapshotManager::New();
     return sm_->UnmapCowImage(name);
 }
 
+bool MapSnapshots::CleanupSnapshot() {
+    sm_ = SnapshotManager::New();
+    return sm_->PrepareDeviceToBootWithoutSnapshot();
+}
+
 bool MapSnapshots::DeleteSnapshots() {
+    sm_ = SnapshotManager::New();
     lock_ = sm_->LockExclusive();
     if (!sm_->RemoveAllUpdateState(lock_.get())) {
         LOG(ERROR) << "Remove All Update State failed";
@@ -583,13 +611,19 @@
     }
 
     if (argc < 3) {
-        std::cerr << " apply-update <directory location where snapshot patches are present>"
+        std::cerr << " apply-update <directory location where snapshot patches are present> {-w}"
                      "    Apply the snapshots to the COW block device\n";
         return false;
     }
 
     std::string path = std::string(argv[2]);
-    MapSnapshots cow(path);
+    bool metadata_on_super = false;
+    if (argc == 4) {
+        if (std::string(argv[3]) == "-w") {
+            metadata_on_super = true;
+        }
+    }
+    MapSnapshots cow(path, metadata_on_super);
     if (!cow.ApplyUpdate()) {
         return false;
     }
@@ -607,7 +641,7 @@
     }
 
     if (argc < 3) {
-        std::cerr << " map-snapshots <directory location where snapshot patches are present>"
+        std::cerr << " map-snapshots <directory location where snapshot patches are present> {-w}"
                      "    Map all snapshots based on patches present in the directory\n";
         return false;
     }
@@ -638,7 +672,14 @@
         }
     }
 
-    MapSnapshots cow(path);
+    bool metadata_on_super = false;
+    if (argc == 4) {
+        if (std::string(argv[3]) == "-w") {
+            metadata_on_super = true;
+        }
+    }
+
+    MapSnapshots cow(path, metadata_on_super);
     if (!cow.BeginUpdate()) {
         LOG(ERROR) << "BeginUpdate failed";
         return false;
diff --git a/fs_mgr/libsnapshot/snapuserd/Android.bp b/fs_mgr/libsnapshot/snapuserd/Android.bp
index efbcb5a..639116e 100644
--- a/fs_mgr/libsnapshot/snapuserd/Android.bp
+++ b/fs_mgr/libsnapshot/snapuserd/Android.bp
@@ -15,6 +15,7 @@
 //
 
 package {
+    default_team: "trendy_team_android_kernel",
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
@@ -42,6 +43,7 @@
     static_libs: [
         "libcutils_sockets",
         "libfs_mgr_file_wait",
+        "libdm",
     ],
     shared_libs: [
         "libbase",
@@ -84,11 +86,9 @@
         "libsnapshot_cow",
         "liburing",
         "libprocessgroup",
+        "libprocessgroup_util",
         "libjsoncpp",
-        "libcgrouprc",
-        "libcgrouprc_format",
     ],
-    include_dirs: ["bionic/libc/kernel"],
     export_include_dirs: ["include"],
     header_libs: [
         "libcutils_headers",
@@ -128,9 +128,8 @@
         "libsnapshot_cow",
         "libsnapuserd",
         "libprocessgroup",
+        "libprocessgroup_util",
         "libjsoncpp",
-        "libcgrouprc",
-        "libcgrouprc_format",
         "libsnapuserd_client",
         "libz",
         "liblz4",
@@ -144,7 +143,6 @@
         "libstorage_literals_headers",
     ],
 
-    include_dirs: ["bionic/libc/kernel"],
     system_shared_libs: [],
 
     // snapuserd is started during early boot by first-stage init. At that
@@ -220,14 +218,12 @@
         "libsnapshot_cow",
         "libsnapuserd",
         "libprocessgroup",
+        "libprocessgroup_util",
         "libjsoncpp",
-        "libcgrouprc",
-        "libcgrouprc_format",
         "liburing",
         "libz",
     ],
     include_dirs: [
-        "bionic/libc/kernel",
         ".",
     ],
     header_libs: [
@@ -238,9 +234,19 @@
     test_options: {
         min_shipping_api_level: 30,
     },
+
+    compile_multilib: "both",
+    multilib: {
+        lib32: {
+            suffix: "32",
+        },
+        lib64: {
+            suffix: "64",
+        },
+    },
+
     auto_gen_config: true,
     require_root: true,
-    compile_multilib: "first",
 }
 
 cc_test {
@@ -248,7 +254,7 @@
     defaults: ["snapuserd_test_defaults"],
     host_supported: true,
     test_suites: [
-        "device-tests",
+        "general-tests",
     ],
     test_options: {
         test_runner_options: [
@@ -256,6 +262,10 @@
                 name: "force-no-test-error",
                 value: "false",
             },
+            {
+                name: "native-test-timeout",
+                value: "15m",
+            },
         ],
     },
 }
@@ -307,13 +317,10 @@
         "libsnapuserd",
         "libprocessgroup",
         "libjsoncpp",
-        "libcgrouprc",
-        "libcgrouprc_format",
         "liburing",
         "libz",
     ],
     include_dirs: [
-        "bionic/libc/kernel",
         ".",
     ],
     header_libs: [
diff --git a/fs_mgr/libsnapshot/snapuserd/dm_user_block_server.cpp b/fs_mgr/libsnapshot/snapuserd/dm_user_block_server.cpp
index e988335..4599ad3 100644
--- a/fs_mgr/libsnapshot/snapuserd/dm_user_block_server.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/dm_user_block_server.cpp
@@ -27,11 +27,12 @@
 DmUserBlockServer::DmUserBlockServer(const std::string& misc_name, unique_fd&& ctrl_fd,
                                      Delegate* delegate, size_t buffer_size)
     : misc_name_(misc_name), ctrl_fd_(std::move(ctrl_fd)), delegate_(delegate) {
-    buffer_.Initialize(buffer_size);
+    buffer_.Initialize(sizeof(struct dm_user_header), buffer_size);
 }
 
 bool DmUserBlockServer::ProcessRequests() {
-    struct dm_user_header* header = buffer_.GetHeaderPtr();
+    struct dm_user_header* header =
+            reinterpret_cast<struct dm_user_header*>(buffer_.GetHeaderPtr());
     if (!android::base::ReadFully(ctrl_fd_, header, sizeof(*header))) {
         if (errno != ENOTBLK) {
             SNAP_PLOG(ERROR) << "Control-read failed";
@@ -90,7 +91,8 @@
 }
 
 void DmUserBlockServer::SendError() {
-    struct dm_user_header* header = buffer_.GetHeaderPtr();
+    struct dm_user_header* header =
+            reinterpret_cast<struct dm_user_header*>(buffer_.GetHeaderPtr());
     header->type = DM_USER_RESP_ERROR;
     // This is an issue with the dm-user interface. There
     // is no way to propagate the I/O error back to dm-user
diff --git a/fs_mgr/libsnapshot/snapuserd/include/snapuserd/dm_user_block_server.h b/fs_mgr/libsnapshot/snapuserd/include/snapuserd/dm_user_block_server.h
index f1f8da1..35c6bfb 100644
--- a/fs_mgr/libsnapshot/snapuserd/include/snapuserd/dm_user_block_server.h
+++ b/fs_mgr/libsnapshot/snapuserd/include/snapuserd/dm_user_block_server.h
@@ -20,6 +20,7 @@
 
 #include <snapuserd/block_server.h>
 #include <snapuserd/snapuserd_buffer.h>
+#include <snapuserd/snapuserd_kernel.h>
 
 namespace android {
 namespace snapshot {
diff --git a/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_buffer.h b/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_buffer.h
index c5ca2b1..cc7c48c 100644
--- a/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_buffer.h
+++ b/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_buffer.h
@@ -27,13 +27,17 @@
 
 class BufferSink final {
   public:
-    void Initialize(size_t size);
+    // Do not reserve any space of header by default
+    void Initialize(size_t size) { return Initialize(0, size); };
+    // This allows to set const header_size_ to be used if caller needs it
+    // for example, while working with dm_user
+    void Initialize(size_t header_size, size_t size);
     void* GetBufPtr() { return buffer_.get(); }
     void Clear() { memset(GetBufPtr(), 0, buffer_size_); }
     void* GetPayloadBuffer(size_t size);
     void* GetBuffer(size_t requested, size_t* actual);
     void UpdateBufferOffset(size_t size) { buffer_offset_ += size; }
-    struct dm_user_header* GetHeaderPtr();
+    void* GetHeaderPtr();
     void ResetBufferOffset() { buffer_offset_ = 0; }
     void* GetPayloadBufPtr();
     loff_t GetPayloadBytesWritten() { return buffer_offset_; }
@@ -56,6 +60,7 @@
     std::unique_ptr<uint8_t[]> buffer_;
     loff_t buffer_offset_;
     size_t buffer_size_;
+    size_t header_size_;
 };
 
 }  // namespace snapshot
diff --git a/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_kernel.h b/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_kernel.h
index 7ab75dc..14291b2 100644
--- a/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_kernel.h
+++ b/fs_mgr/libsnapshot/snapuserd/include/snapuserd/snapuserd_kernel.h
@@ -92,15 +92,5 @@
     __u64 len;
 } __attribute__((packed));
 
-struct dm_user_payload {
-    __u8 buf[];
-};
-
-// Message comprising both header and payload
-struct dm_user_message {
-    struct dm_user_header header;
-    struct dm_user_payload payload;
-};
-
 }  // namespace snapshot
 }  // namespace android
diff --git a/fs_mgr/libsnapshot/snapuserd/snapuserd_buffer.cpp b/fs_mgr/libsnapshot/snapuserd/snapuserd_buffer.cpp
index 490c0e6..51b2490 100644
--- a/fs_mgr/libsnapshot/snapuserd/snapuserd_buffer.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/snapuserd_buffer.cpp
@@ -22,8 +22,9 @@
 namespace android {
 namespace snapshot {
 
-void BufferSink::Initialize(size_t size) {
-    buffer_size_ = size + sizeof(struct dm_user_header);
+void BufferSink::Initialize(size_t header_size, size_t size) {
+    header_size_ = header_size;
+    buffer_size_ = size + header_size;
     buffer_offset_ = 0;
     buffer_ = std::make_unique<uint8_t[]>(buffer_size_);
 }
@@ -41,11 +42,11 @@
 
 void* BufferSink::GetPayloadBuffer(size_t size) {
     char* buffer = reinterpret_cast<char*>(GetBufPtr());
-    struct dm_user_message* msg = (struct dm_user_message*)(&(buffer[0]));
-    if ((buffer_size_ - buffer_offset_ - sizeof(msg->header)) < size) {
+
+    if ((buffer_size_ - buffer_offset_ - header_size_) < size) {
         return nullptr;
     }
-    return (char*)msg->payload.buf + buffer_offset_;
+    return (char*)(&buffer[0] + header_size_ + buffer_offset_);
 }
 
 void* BufferSink::GetBuffer(size_t requested, size_t* actual) {
@@ -58,19 +59,18 @@
     return buf;
 }
 
-struct dm_user_header* BufferSink::GetHeaderPtr() {
-    if (!(sizeof(struct dm_user_header) <= buffer_size_)) {
+void* BufferSink::GetHeaderPtr() {
+    // If no sufficient space or header not reserved
+    if (!(header_size_ <= buffer_size_) || !header_size_) {
         return nullptr;
     }
     char* buf = reinterpret_cast<char*>(GetBufPtr());
-    struct dm_user_header* header = (struct dm_user_header*)(&(buf[0]));
-    return header;
+    return (void*)(&(buf[0]));
 }
 
 void* BufferSink::GetPayloadBufPtr() {
     char* buffer = reinterpret_cast<char*>(GetBufPtr());
-    struct dm_user_message* msg = reinterpret_cast<struct dm_user_message*>(&(buffer[0]));
-    return msg->payload.buf;
+    return &buffer[header_size_];
 }
 
 }  // namespace snapshot
diff --git a/fs_mgr/libsnapshot/snapuserd/snapuserd_client.cpp b/fs_mgr/libsnapshot/snapuserd/snapuserd_client.cpp
index 789c980..7c820f3 100644
--- a/fs_mgr/libsnapshot/snapuserd/snapuserd_client.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/snapuserd_client.cpp
@@ -35,6 +35,7 @@
 #include <android-base/properties.h>
 #include <android-base/strings.h>
 #include <fs_mgr/file_wait.h>
+#include <libdm/dm.h>
 #include <snapuserd/snapuserd_client.h>
 
 namespace android {
@@ -310,6 +311,11 @@
     }
     std::string response = Receivemsg();
 
+    // If server socket disconnects most likely because of device reboot,
+    // then we just return 0.
+    if (response.empty()) {
+        return 0.0;
+    }
     return std::stod(response);
 }
 
@@ -333,7 +339,21 @@
 }
 
 std::string SnapuserdClient::GetDaemonAliveIndicatorPath() {
-    return "/metadata/ota/" + std::string(kDaemonAliveIndicator);
+    std::string metadata_dir;
+    std::string temp_metadata_mnt = "/mnt/scratch_ota_metadata_super";
+
+    auto& dm = ::android::dm::DeviceMapper::Instance();
+    auto partition_name = android::base::Basename(temp_metadata_mnt);
+
+    bool invalid_partition = (dm.GetState(partition_name) == dm::DmDeviceState::INVALID);
+    std::string temp_device;
+    if (!invalid_partition && dm.GetDmDevicePathByName(partition_name, &temp_device)) {
+        metadata_dir = temp_metadata_mnt + "/" + "ota/";
+    } else {
+        metadata_dir = "/metadata/ota/";
+    }
+
+    return metadata_dir + std::string(kDaemonAliveIndicator);
 }
 
 bool SnapuserdClient::IsTransitionedDaemonReady() {
diff --git a/fs_mgr/libsnapshot/snapuserd/snapuserd_daemon.cpp b/fs_mgr/libsnapshot/snapuserd/snapuserd_daemon.cpp
index 67e9e52..32e16cc 100644
--- a/fs_mgr/libsnapshot/snapuserd/snapuserd_daemon.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/snapuserd_daemon.cpp
@@ -30,6 +30,8 @@
 DEFINE_bool(user_snapshot, false, "If true, user-space snapshots are used");
 DEFINE_bool(io_uring, false, "If true, io_uring feature is enabled");
 DEFINE_bool(o_direct, false, "If true, enable direct reads on source device");
+DEFINE_int32(cow_op_merge_size, 0, "number of operations to be processed at once");
+DEFINE_int32(worker_count, 4, "number of worker threads used to serve I/O requests to dm-user");
 
 namespace android {
 namespace snapshot {
@@ -106,7 +108,6 @@
         }
         return user_server_.Run();
     }
-
     for (int i = arg_start; i < argc; i++) {
         auto parts = android::base::Split(argv[i], ",");
 
@@ -115,7 +116,8 @@
             return false;
         }
         auto handler =
-                user_server_.AddHandler(parts[0], parts[1], parts[2], parts[3], FLAGS_o_direct);
+                user_server_.AddHandler(parts[0], parts[1], parts[2], parts[3], FLAGS_worker_count,
+                                        FLAGS_o_direct, FLAGS_cow_op_merge_size);
         if (!handler || !user_server_.StartHandler(parts[0])) {
             return false;
         }
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/extractor.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/extractor.cpp
index c85331b..ef4ba93 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/extractor.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/extractor.cpp
@@ -41,7 +41,7 @@
 bool Extractor::Init() {
     auto opener = factory_.CreateTestOpener(control_name_);
     handler_ = std::make_shared<SnapshotHandler>(control_name_, cow_path_, base_path_, base_path_,
-                                                 opener, 1, false, false, false);
+                                                 opener, 1, false, false, false, 0);
     if (!handler_->InitCowDevice()) {
         return false;
     }
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp
index ea11f0e..fdd9cce 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.cpp
@@ -53,10 +53,10 @@
         const std::string& misc_name, const std::string& cow_device_path,
         const std::string& backing_device, const std::string& base_path_merge,
         std::shared_ptr<IBlockServerOpener> opener, int num_worker_threads, bool use_iouring,
-        bool o_direct) {
+        bool o_direct, uint32_t cow_op_merge_size) {
     auto snapuserd = std::make_shared<SnapshotHandler>(
             misc_name, cow_device_path, backing_device, base_path_merge, opener, num_worker_threads,
-            use_iouring, perform_verification_, o_direct);
+            use_iouring, perform_verification_, o_direct, cow_op_merge_size);
     if (!snapuserd->InitCowDevice()) {
         LOG(ERROR) << "Failed to initialize Snapuserd";
         return nullptr;
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.h
index f23f07e..ecf5d5c 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/handler_manager.h
@@ -52,13 +52,11 @@
     virtual ~ISnapshotHandlerManager() {}
 
     // Add a new snapshot handler but do not start serving requests yet.
-    virtual std::shared_ptr<HandlerThread> AddHandler(const std::string& misc_name,
-                                                      const std::string& cow_device_path,
-                                                      const std::string& backing_device,
-                                                      const std::string& base_path_merge,
-                                                      std::shared_ptr<IBlockServerOpener> opener,
-                                                      int num_worker_threads, bool use_iouring,
-                                                      bool o_direct) = 0;
+    virtual std::shared_ptr<HandlerThread> AddHandler(
+            const std::string& misc_name, const std::string& cow_device_path,
+            const std::string& backing_device, const std::string& base_path_merge,
+            std::shared_ptr<IBlockServerOpener> opener, int num_worker_threads, bool use_iouring,
+            bool o_direct, uint32_t cow_op_merge_size) = 0;
 
     // Start serving requests on a snapshot handler.
     virtual bool StartHandler(const std::string& misc_name) = 0;
@@ -98,7 +96,7 @@
                                               const std::string& base_path_merge,
                                               std::shared_ptr<IBlockServerOpener> opener,
                                               int num_worker_threads, bool use_iouring,
-                                              bool o_direct) override;
+                                              bool o_direct, uint32_t cow_op_merge_size) override;
     bool StartHandler(const std::string& misc_name) override;
     bool DeleteHandler(const std::string& misc_name) override;
     bool InitiateMerge(const std::string& misc_name) override;
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp
index e6a9a29..febb484 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp
@@ -32,12 +32,18 @@
 
 MergeWorker::MergeWorker(const std::string& cow_device, const std::string& misc_name,
                          const std::string& base_path_merge,
-                         std::shared_ptr<SnapshotHandler> snapuserd)
-    : Worker(cow_device, misc_name, base_path_merge, snapuserd) {}
+                         std::shared_ptr<SnapshotHandler> snapuserd, uint32_t cow_op_merge_size)
+    : Worker(cow_device, misc_name, base_path_merge, snapuserd),
+      cow_op_merge_size_(cow_op_merge_size) {}
 
 int MergeWorker::PrepareMerge(uint64_t* source_offset, int* pending_ops,
                               std::vector<const CowOperation*>* replace_zero_vec) {
     int num_ops = *pending_ops;
+    // 0 indicates ro.virtual_ab.cow_op_merge_size was not set in the build
+    if (cow_op_merge_size_ != 0) {
+        num_ops = std::min(cow_op_merge_size_, static_cast<uint32_t>(*pending_ops));
+    }
+
     int nr_consecutive = 0;
     bool checkOrderedOp = (replace_zero_vec == nullptr);
     size_t num_blocks = 1;
@@ -49,7 +55,7 @@
                 break;
             }
 
-            *source_offset = cow_op->new_block * BLOCK_SZ;
+            *source_offset = static_cast<uint64_t>(cow_op->new_block) * BLOCK_SZ;
             if (!checkOrderedOp) {
                 replace_zero_vec->push_back(cow_op);
                 if (cow_op->type() == kCowReplaceOp) {
@@ -68,7 +74,7 @@
                     break;
                 }
 
-                uint64_t next_offset = op->new_block * BLOCK_SZ;
+                uint64_t next_offset = static_cast<uint64_t>(op->new_block) * BLOCK_SZ;
                 if (next_offset != (*source_offset + nr_consecutive * BLOCK_SZ)) {
                     break;
                 }
@@ -227,6 +233,11 @@
             return false;
         }
 
+        std::optional<std::lock_guard<std::mutex>> buffer_lock;
+        // Acquire the buffer lock at this point so that RA thread
+        // doesn't step into this buffer. See b/377819507
+        buffer_lock.emplace(snapuserd_->GetBufferLock());
+
         snapuserd_->SetMergeInProgress(ra_block_index_);
 
         loff_t offset = 0;
@@ -377,6 +388,9 @@
         // Mark the block as merge complete
         snapuserd_->SetMergeCompleted(ra_block_index_);
 
+        // Release the buffer lock
+        buffer_lock.reset();
+
         // Notify RA thread that the merge thread is ready to merge the next
         // window
         snapuserd_->NotifyRAForMergeReady();
@@ -409,6 +423,11 @@
             return false;
         }
 
+        std::optional<std::lock_guard<std::mutex>> buffer_lock;
+        // Acquire the buffer lock at this point so that RA thread
+        // doesn't step into this buffer. See b/377819507
+        buffer_lock.emplace(snapuserd_->GetBufferLock());
+
         snapuserd_->SetMergeInProgress(ra_block_index_);
 
         loff_t offset = 0;
@@ -462,6 +481,9 @@
         // Mark the block as merge complete
         snapuserd_->SetMergeCompleted(ra_block_index_);
 
+        // Release the buffer lock
+        buffer_lock.reset();
+
         // Notify RA thread that the merge thread is ready to merge the next
         // window
         snapuserd_->NotifyRAForMergeReady();
@@ -576,7 +598,6 @@
     pthread_setname_np(pthread_self(), "MergeWorker");
 
     if (!snapuserd_->WaitForMergeBegin()) {
-        SNAP_LOG(ERROR) << "Merge terminated early...";
         return true;
     }
     auto merge_thread_priority = android::base::GetUintProperty<uint32_t>(
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.h
index 478d4c8..a19352d 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.h
@@ -23,7 +23,8 @@
 class MergeWorker : public Worker {
   public:
     MergeWorker(const std::string& cow_device, const std::string& misc_name,
-                const std::string& base_path_merge, std::shared_ptr<SnapshotHandler> snapuserd);
+                const std::string& base_path_merge, std::shared_ptr<SnapshotHandler> snapuserd,
+                uint32_t cow_op_merge_size);
     bool Run();
 
   private:
@@ -53,6 +54,7 @@
     // syscalls and fallback to synchronous I/O, we
     // don't want huge queue depth
     int queue_depth_ = 8;
+    uint32_t cow_op_merge_size_ = 0;
 };
 
 }  // namespace snapshot
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp
index ef311d4..33767d6 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp
@@ -104,6 +104,8 @@
 }
 
 bool ReadWorker::ProcessXorOp(const CowOperation* cow_op, void* buffer) {
+    using WordType = std::conditional_t<sizeof(void*) == sizeof(uint64_t), uint64_t, uint32_t>;
+
     if (!ReadFromSourceDevice(cow_op, buffer)) {
         return false;
     }
@@ -120,9 +122,12 @@
         return false;
     }
 
-    auto xor_out = reinterpret_cast<uint8_t*>(buffer);
-    for (size_t i = 0; i < BLOCK_SZ; i++) {
-        xor_out[i] ^= xor_buffer_[i];
+    auto xor_in = reinterpret_cast<const WordType*>(xor_buffer_.data());
+    auto xor_out = reinterpret_cast<WordType*>(buffer);
+    auto num_words = BLOCK_SZ / sizeof(WordType);
+
+    for (auto i = 0; i < num_words; i++) {
+        xor_out[i] ^= xor_in[i];
     }
     return true;
 }
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h
index 04b2736..378d809 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h
@@ -57,7 +57,7 @@
     bool ReadFromSourceDevice(const CowOperation* cow_op, void* buffer);
     bool ReadDataFromBaseDevice(sector_t sector, void* buffer, size_t read_size);
 
-    constexpr bool IsBlockAligned(size_t size) { return ((size & (BLOCK_SZ - 1)) == 0); }
+    constexpr bool IsBlockAligned(uint64_t size) { return ((size & (BLOCK_SZ - 1)) == 0); }
     constexpr sector_t ChunkToSector(chunk_t chunk) { return chunk << CHUNK_SHIFT; }
     constexpr chunk_t SectorToChunk(sector_t sector) { return sector >> CHUNK_SHIFT; }
 
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp
index 05ba047..7c9a64e 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp
@@ -36,7 +36,8 @@
 SnapshotHandler::SnapshotHandler(std::string misc_name, std::string cow_device,
                                  std::string backing_device, std::string base_path_merge,
                                  std::shared_ptr<IBlockServerOpener> opener, int num_worker_threads,
-                                 bool use_iouring, bool perform_verification, bool o_direct) {
+                                 bool use_iouring, bool perform_verification, bool o_direct,
+                                 uint32_t cow_op_merge_size) {
     misc_name_ = std::move(misc_name);
     cow_device_ = std::move(cow_device);
     backing_store_device_ = std::move(backing_device);
@@ -46,6 +47,7 @@
     is_io_uring_enabled_ = use_iouring;
     perform_verification_ = perform_verification;
     o_direct_ = o_direct;
+    cow_op_merge_size_ = cow_op_merge_size;
 }
 
 bool SnapshotHandler::InitializeWorkers() {
@@ -60,12 +62,11 @@
 
         worker_threads_.push_back(std::move(wt));
     }
-
     merge_thread_ = std::make_unique<MergeWorker>(cow_device_, misc_name_, base_path_merge_,
-                                                  GetSharedPtr());
+                                                  GetSharedPtr(), cow_op_merge_size_);
 
     read_ahead_thread_ = std::make_unique<ReadAhead>(cow_device_, backing_store_device_, misc_name_,
-                                                     GetSharedPtr());
+                                                     GetSharedPtr(), cow_op_merge_size_);
 
     update_verify_ = std::make_unique<UpdateVerify>(misc_name_);
 
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.h
index 9b7238a..2340b0b 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.h
@@ -104,7 +104,8 @@
   public:
     SnapshotHandler(std::string misc_name, std::string cow_device, std::string backing_device,
                     std::string base_path_merge, std::shared_ptr<IBlockServerOpener> opener,
-                    int num_workers, bool use_iouring, bool perform_verification, bool o_direct);
+                    int num_workers, bool use_iouring, bool perform_verification, bool o_direct,
+                    uint32_t cow_op_merge_size);
     bool InitCowDevice();
     bool Start();
 
@@ -185,6 +186,7 @@
 
     bool IsIouringSupported();
     bool CheckPartitionVerification();
+    std::mutex& GetBufferLock() { return buffer_lock_; }
 
   private:
     bool ReadMetadata();
@@ -215,6 +217,9 @@
     std::mutex lock_;
     std::condition_variable cv;
 
+    // Lock the buffer used for snapshot-merge
+    std::mutex buffer_lock_;
+
     void* mapped_addr_;
     size_t total_mapped_addr_length_;
 
@@ -247,7 +252,7 @@
     bool resume_merge_ = false;
     bool merge_complete_ = false;
     bool o_direct_ = false;
-
+    uint32_t cow_op_merge_size_ = 0;
     std::unique_ptr<UpdateVerify> update_verify_;
     std::shared_ptr<IBlockServerOpener> block_server_opener_;
 };
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp
index 2baf20d..c7ae519 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp
@@ -18,6 +18,7 @@
 
 #include <pthread.h>
 
+#include "android-base/properties.h"
 #include "snapuserd_core.h"
 #include "utility.h"
 
@@ -29,11 +30,13 @@
 using android::base::unique_fd;
 
 ReadAhead::ReadAhead(const std::string& cow_device, const std::string& backing_device,
-                     const std::string& misc_name, std::shared_ptr<SnapshotHandler> snapuserd) {
+                     const std::string& misc_name, std::shared_ptr<SnapshotHandler> snapuserd,
+                     uint32_t cow_op_merge_size) {
     cow_device_ = cow_device;
     backing_store_device_ = backing_device;
     misc_name_ = misc_name;
     snapuserd_ = snapuserd;
+    cow_op_merge_size_ = cow_op_merge_size;
 }
 
 void ReadAhead::CheckOverlap(const CowOperation* cow_op) {
@@ -62,8 +65,11 @@
                                     std::vector<uint64_t>& blocks,
                                     std::vector<const CowOperation*>& xor_op_vec) {
     int num_ops = *pending_ops;
-    int nr_consecutive = 0;
+    if (cow_op_merge_size_ != 0) {
+        num_ops = std::min(static_cast<int>(cow_op_merge_size_), *pending_ops);
+    }
 
+    int nr_consecutive = 0;
     bool is_ops_present = (!RAIterDone() && num_ops);
 
     if (!is_ops_present) {
@@ -452,6 +458,7 @@
 void ReadAhead::ProcessXorData(size_t& block_xor_index, size_t& xor_index,
                                std::vector<const CowOperation*>& xor_op_vec, void* buffer,
                                loff_t& buffer_offset) {
+    using WordType = std::conditional_t<sizeof(void*) == sizeof(uint64_t), uint64_t, uint32_t>;
     loff_t xor_buf_offset = 0;
 
     while (block_xor_index < blocks_.size()) {
@@ -464,13 +471,14 @@
             // Check if this block is an XOR op
             if (xor_op->new_block == new_block) {
                 // Pointer to the data read from base device
-                uint8_t* buffer = reinterpret_cast<uint8_t*>(bufptr);
+                auto buffer_words = reinterpret_cast<WordType*>(bufptr);
                 // Get the xor'ed data read from COW device
-                uint8_t* xor_data = reinterpret_cast<uint8_t*>((char*)bufsink_.GetPayloadBufPtr() +
-                                                               xor_buf_offset);
+                auto xor_data_words = reinterpret_cast<WordType*>(
+                        (char*)bufsink_.GetPayloadBufPtr() + xor_buf_offset);
+                auto num_words = BLOCK_SZ / sizeof(WordType);
 
-                for (size_t byte_offset = 0; byte_offset < BLOCK_SZ; byte_offset++) {
-                    buffer[byte_offset] ^= xor_data[byte_offset];
+                for (auto i = 0; i < num_words; i++) {
+                    buffer_words[i] ^= xor_data_words[i];
                 }
 
                 // Move to next XOR op
@@ -694,29 +702,36 @@
     // window. If there is a crash during this time frame, merge should resume
     // based on the contents of the scratch space.
     if (!snapuserd_->WaitForMergeReady()) {
-        SNAP_LOG(ERROR) << "ReadAhead failed to wait for merge ready";
+        SNAP_LOG(VERBOSE) << "ReadAhead failed to wait for merge ready";
         return false;
     }
 
-    // Copy the data to scratch space
-    memcpy(metadata_buffer_, ra_temp_meta_buffer_.get(), snapuserd_->GetBufferMetadataSize());
-    memcpy(read_ahead_buffer_, ra_temp_buffer_.get(), total_blocks_merged_ * BLOCK_SZ);
+    // Acquire buffer lock before doing memcpy to the scratch buffer. Although,
+    // by now snapshot-merge thread shouldn't be working on this scratch space
+    // but we take additional measure to ensure that the buffer is not being
+    // used by the merge thread at this point. see b/377819507
+    {
+        std::lock_guard<std::mutex> buffer_lock(snapuserd_->GetBufferLock());
+        // Copy the data to scratch space
+        memcpy(metadata_buffer_, ra_temp_meta_buffer_.get(), snapuserd_->GetBufferMetadataSize());
+        memcpy(read_ahead_buffer_, ra_temp_buffer_.get(), total_blocks_merged_ * BLOCK_SZ);
 
-    loff_t offset = 0;
-    std::unordered_map<uint64_t, void*>& read_ahead_buffer_map = snapuserd_->GetReadAheadMap();
-    read_ahead_buffer_map.clear();
+        loff_t offset = 0;
+        std::unordered_map<uint64_t, void*>& read_ahead_buffer_map = snapuserd_->GetReadAheadMap();
+        read_ahead_buffer_map.clear();
 
-    for (size_t block_index = 0; block_index < blocks_.size(); block_index++) {
-        void* bufptr = static_cast<void*>((char*)read_ahead_buffer_ + offset);
-        uint64_t new_block = blocks_[block_index];
+        for (size_t block_index = 0; block_index < blocks_.size(); block_index++) {
+            void* bufptr = static_cast<void*>((char*)read_ahead_buffer_ + offset);
+            uint64_t new_block = blocks_[block_index];
 
-        read_ahead_buffer_map[new_block] = bufptr;
-        offset += BLOCK_SZ;
+            read_ahead_buffer_map[new_block] = bufptr;
+            offset += BLOCK_SZ;
+        }
+
+        total_ra_blocks_completed_ += total_blocks_merged_;
+        snapuserd_->SetMergedBlockCountForNextCommit(total_blocks_merged_);
     }
 
-    total_ra_blocks_completed_ += total_blocks_merged_;
-    snapuserd_->SetMergedBlockCountForNextCommit(total_blocks_merged_);
-
     // Flush the scratch data - Technically, we should flush only for overlapping
     // blocks; However, since this region is mmap'ed, the dirty pages can still
     // get flushed to disk at any random point in time. Instead, make sure
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.h
index d3ba126..4885c96 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.h
@@ -35,7 +35,8 @@
 class ReadAhead {
   public:
     ReadAhead(const std::string& cow_device, const std::string& backing_device,
-              const std::string& misc_name, std::shared_ptr<SnapshotHandler> snapuserd);
+              const std::string& misc_name, std::shared_ptr<SnapshotHandler> snapuserd,
+              uint32_t cow_op_merge_size);
     bool RunThread();
 
   private:
@@ -106,6 +107,7 @@
     // syscalls and fallback to synchronous I/O, we
     // don't want huge queue depth
     int queue_depth_ = 8;
+    uint32_t cow_op_merge_size_;
     std::unique_ptr<struct io_uring> ring_;
 };
 
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp
index 0b881b6..3bb8a30 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.cpp
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/socket.h>
+#include <sys/system_properties.h>
 #include <sys/types.h>
 #include <unistd.h>
 
@@ -34,9 +35,7 @@
 #include <snapuserd/dm_user_block_server.h>
 #include <snapuserd/snapuserd_client.h>
 #include "snapuserd_server.h"
-
-#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
-#include <sys/_system_properties.h>
+#include "user-space-merge/snapuserd_core.h"
 
 namespace android {
 namespace snapshot {
@@ -127,7 +126,7 @@
             return Sendmsg(fd, "fail");
         }
 
-        auto handler = AddHandler(out[1], out[2], out[3], out[4]);
+        auto handler = AddHandler(out[1], out[2], out[3], out[4], std::nullopt);
         if (!handler) {
             return Sendmsg(fd, "fail");
         }
@@ -343,11 +342,11 @@
     SetTerminating();
 }
 
-std::shared_ptr<HandlerThread> UserSnapshotServer::AddHandler(const std::string& misc_name,
-                                                              const std::string& cow_device_path,
-                                                              const std::string& backing_device,
-                                                              const std::string& base_path_merge,
-                                                              const bool o_direct) {
+std::shared_ptr<HandlerThread> UserSnapshotServer::AddHandler(
+        const std::string& misc_name, const std::string& cow_device_path,
+        const std::string& backing_device, const std::string& base_path_merge,
+        std::optional<uint32_t> num_worker_threads, const bool o_direct,
+        uint32_t cow_op_merge_size) {
     // We will need multiple worker threads only during
     // device boot after OTA. For all other purposes,
     // one thread is sufficient. We don't want to consume
@@ -356,7 +355,9 @@
     //
     // During boot up, we need multiple threads primarily for
     // update-verification.
-    int num_worker_threads = kNumWorkerThreads;
+    if (!num_worker_threads.has_value()) {
+        num_worker_threads = kNumWorkerThreads;
+    }
     if (is_socket_present_) {
         num_worker_threads = 1;
     }
@@ -369,7 +370,8 @@
     auto opener = block_server_factory_->CreateOpener(misc_name);
 
     return handlers_->AddHandler(misc_name, cow_device_path, backing_device, base_path_merge,
-                                 opener, num_worker_threads, io_uring_enabled_, o_direct);
+                                 opener, num_worker_threads.value(), io_uring_enabled_, o_direct,
+                                 cow_op_merge_size);
 }
 
 bool UserSnapshotServer::WaitForSocket() {
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.h
index d9cf97f..f002e8d 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_server.h
@@ -87,7 +87,9 @@
                                               const std::string& cow_device_path,
                                               const std::string& backing_device,
                                               const std::string& base_path_merge,
-                                              bool o_direct = false);
+                                              std::optional<uint32_t> num_worker_threads,
+                                              bool o_direct = false,
+                                              uint32_t cow_op_merge_size = 0);
     bool StartHandler(const std::string& misc_name);
 
     void SetTerminating() { terminating_ = true; }
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp
index bd835e2..469fd09 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_test.cpp
@@ -67,6 +67,7 @@
     std::string compression;
     int block_size;
     int num_threads;
+    uint32_t cow_op_merge_size;
 };
 
 class SnapuserdTestBase : public ::testing::TestWithParam<TestParam> {
@@ -730,9 +731,9 @@
     auto opener = factory->CreateOpener(system_device_ctrl_name_);
     handlers_->DisableVerification();
     const TestParam params = GetParam();
-    auto handler = handlers_->AddHandler(system_device_ctrl_name_, cow_system_->path,
-                                         base_dev_->GetPath(), base_dev_->GetPath(), opener, 1,
-                                         params.io_uring, params.o_direct);
+    auto handler = handlers_->AddHandler(
+            system_device_ctrl_name_, cow_system_->path, base_dev_->GetPath(), base_dev_->GetPath(),
+            opener, 1, params.io_uring, params.o_direct, params.cow_op_merge_size);
     ASSERT_NE(handler, nullptr);
     ASSERT_NE(handler->snapuserd(), nullptr);
 #ifdef __ANDROID__
@@ -1252,9 +1253,9 @@
     ASSERT_NE(opener_, nullptr);
 
     const TestParam params = GetParam();
-    handler_ = std::make_shared<SnapshotHandler>(system_device_ctrl_name_, cow_system_->path,
-                                                 base_dev_->GetPath(), base_dev_->GetPath(),
-                                                 opener_, 1, false, false, params.o_direct);
+    handler_ = std::make_shared<SnapshotHandler>(
+            system_device_ctrl_name_, cow_system_->path, base_dev_->GetPath(), base_dev_->GetPath(),
+            opener_, 1, false, false, params.o_direct, params.cow_op_merge_size);
     ASSERT_TRUE(handler_->InitCowDevice());
     ASSERT_TRUE(handler_->InitializeWorkers());
 
@@ -1541,6 +1542,7 @@
                     param.num_threads = thread;
                     param.io_uring = io_uring;
                     param.o_direct = false;
+                    param.cow_op_merge_size = 0;
                     testParams.push_back(std::move(param));
                 }
             }
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_transitions.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_transitions.cpp
index 2ad4ea1..714c641 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_transitions.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_transitions.cpp
@@ -202,7 +202,7 @@
     cv.wait(lock, [this]() -> bool { return MergeInitiated() || IsMergeBeginError(io_state_); });
 
     if (IsMergeBeginError(io_state_)) {
-        SNAP_LOG(ERROR) << "WaitForMergeBegin failed with state: " << io_state_;
+        SNAP_LOG(VERBOSE) << "WaitForMergeBegin failed with state: " << io_state_;
         return false;
     }
 
@@ -276,7 +276,9 @@
         if (io_state_ == MERGE_IO_TRANSITION::MERGE_FAILED ||
             io_state_ == MERGE_IO_TRANSITION::MERGE_COMPLETE ||
             io_state_ == MERGE_IO_TRANSITION::IO_TERMINATED) {
-            SNAP_LOG(ERROR) << "Wait for merge ready failed: " << io_state_;
+            if (io_state_ == MERGE_IO_TRANSITION::MERGE_FAILED) {
+                SNAP_LOG(ERROR) << "Wait for merge ready failed: " << io_state_;
+            }
             return false;
         }
         return true;
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_verify.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_verify.h
index 7c99085..b300a70 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_verify.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_verify.h
@@ -62,8 +62,8 @@
      * (/proc/pressure/{cpu,memory}; and monitoring the Inactive(file) and
      * Active(file) pages from /proc/meminfo.
      *
-     * Additionally, for low memory devices, it is advisible to use O_DIRECT
-     * fucntionality for source block device.
+     * Additionally, for low memory devices, it is advisable to use O_DIRECT
+     * functionality for source block device.
      */
     int kMinThreadsToVerify = 1;
     int kMaxThreadsToVerify = 3;
diff --git a/fs_mgr/tests/AndroidTest.xml b/fs_mgr/tests/AndroidTest.xml
index de835b3..1c06ebd 100644
--- a/fs_mgr/tests/AndroidTest.xml
+++ b/fs_mgr/tests/AndroidTest.xml
@@ -16,6 +16,7 @@
     <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
     <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
+    <option name="config-descriptor:metadata" key="parameter" value="secondary_user_on_secondary_display" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
         <option name="cleanup" value="true" />
         <option name="push" value="CtsFsMgrTestCases->/data/local/tmp/CtsFsMgrTestCases" />
diff --git a/fs_mgr/tests/fs_mgr_test.cpp b/fs_mgr/tests/fs_mgr_test.cpp
index 322bf1b..8004977 100644
--- a/fs_mgr/tests/fs_mgr_test.cpp
+++ b/fs_mgr/tests/fs_mgr_test.cpp
@@ -329,6 +329,7 @@
                 {"private", MS_PRIVATE},
                 {"slave", MS_SLAVE},
                 {"shared", MS_SHARED},
+                {"lazytime", MS_LAZYTIME},
                 {"defaults", 0},
                 {0, 0},
         };
@@ -705,6 +706,7 @@
 source none3       swap   defaults      zramsize=5%
 source none4       swap   defaults      zramsize=105%
 source none5       swap   defaults      zramsize=%
+source none6       swap   defaults      zramsize=210%
 )fs";
     ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
 
@@ -737,12 +739,17 @@
 
     EXPECT_EQ("none4", entry->mount_point);
     EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
-    EXPECT_EQ(0, entry->zram_size);
+    EXPECT_NE(0, entry->zram_size);
     entry++;
 
     EXPECT_EQ("none5", entry->mount_point);
     EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
     EXPECT_EQ(0, entry->zram_size);
+    entry++;
+
+    EXPECT_EQ("none6", entry->mount_point);
+    EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
+    EXPECT_EQ(0, entry->zram_size);
 }
 
 TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_FileEncryption) {
@@ -1062,23 +1069,6 @@
             << "Default fstab doesn't contain /data entry";
 }
 
-TEST(fs_mgr, UserdataMountedFromDefaultFstab) {
-    if (getuid() != 0) {
-        GTEST_SKIP() << "Must be run as root.";
-        return;
-    }
-    Fstab fstab;
-    ASSERT_TRUE(ReadDefaultFstab(&fstab)) << "Failed to read default fstab";
-    Fstab proc_mounts;
-    ASSERT_TRUE(ReadFstabFromFile("/proc/mounts", &proc_mounts)) << "Failed to read /proc/mounts";
-    auto mounted_entry = GetEntryForMountPoint(&proc_mounts, "/data");
-    ASSERT_NE(mounted_entry, nullptr) << "/data is not mounted";
-    std::string block_device;
-    ASSERT_TRUE(android::base::Realpath(mounted_entry->blk_device, &block_device));
-    ASSERT_NE(nullptr, fs_mgr_get_mounted_entry_for_userdata(&fstab, block_device))
-            << "/data wasn't mounted from default fstab";
-}
-
 TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Readahead_Size_KB) {
     TemporaryFile tf;
     ASSERT_TRUE(tf.fd != -1);
diff --git a/healthd/healthd_mode_charger.cpp b/healthd/healthd_mode_charger.cpp
index 26af13b..54b469b 100644
--- a/healthd/healthd_mode_charger.cpp
+++ b/healthd/healthd_mode_charger.cpp
@@ -306,8 +306,8 @@
 
     if (!batt_anim_.run || now < next_screen_transition_) return;
 
-    // If battery level is not ready, keep checking in the defined time
-    if (health_info_.battery_level == 0 && health_info_.battery_status == BatteryStatus::UNKNOWN) {
+    // If battery status is not ready, keep checking in the defined time
+    if (health_info_.battery_status == BatteryStatus::UNKNOWN) {
         if (wait_batt_level_timestamp_ == 0) {
             // Set max delay time and skip drawing screen
             wait_batt_level_timestamp_ = now + MAX_BATT_LEVEL_WAIT_TIME;
@@ -317,7 +317,7 @@
             // Do nothing, keep waiting
             return;
         }
-        // If timeout and battery level is still not ready, draw unknown battery
+        // If timeout and battery status is still not ready, draw unknown battery
     }
 
     if (healthd_draw_ == nullptr) return;
diff --git a/init/Android.bp b/init/Android.bp
index c70a5de..4ee3be2 100644
--- a/init/Android.bp
+++ b/init/Android.bp
@@ -38,7 +38,6 @@
     "capabilities.cpp",
     "epoll.cpp",
     "import_parser.cpp",
-    "interface_utils.cpp",
     "interprocess_fifo.cpp",
     "keychords.cpp",
     "parser.cpp",
@@ -85,10 +84,6 @@
     "ueventd.cpp",
     "ueventd_parser.cpp",
 ]
-init_host_sources = [
-    "check_builtins.cpp",
-    "host_import_parser.cpp",
-]
 
 soong_config_module_type {
     name: "libinit_cc_defaults",
@@ -168,7 +163,6 @@
         "libavb",
         "libavf_cc_flags",
         "libbootloader_message",
-        "libcgrouprc_format",
         "liblmkd_utils",
         "liblz4",
         "libzstd",
@@ -182,6 +176,7 @@
         "libxml2",
         "lib_apex_manifest_proto_lite",
         "update_metadata-protos",
+        "libgenfslabelsversion.ffi",
     ],
     shared_libs: [
         "libbase",
@@ -190,7 +185,6 @@
         "libext4_utils",
         "libfs_mgr",
         "libgsi",
-        "libhidl-gen-utils",
         "liblog",
         "liblogwrap",
         "liblp",
@@ -226,7 +220,6 @@
     ],
     whole_static_libs: [
         "libcap",
-        "libcom.android.sysprop.init",
     ],
     header_libs: ["bootimg_headers"],
     proto: {
@@ -330,7 +323,7 @@
     static_libs: ["libinit.microdroid"],
     cflags: ["-DMICRODROID=1"],
     no_full_install: true,
-    visibility: ["//packages/modules/Virtualization/microdroid"],
+    visibility: ["//packages/modules/Virtualization/build/microdroid"],
 }
 
 soong_config_module_type {
@@ -397,6 +390,7 @@
         "libsnapshot_init",
         "update_metadata-protos",
         "libprocinfo",
+        "libbootloader_message",
     ],
 
     static_executable: true,
@@ -608,8 +602,6 @@
     whole_static_libs: ["libcap"],
     shared_libs: [
         "libcutils",
-        "libhidl-gen-utils",
-        "libhidlmetadata",
         "liblog",
         "libprocessgroup",
         "libprotobuf-cpp-lite",
@@ -617,9 +609,6 @@
     proto: {
         type: "lite",
     },
-    generated_headers: [
-        "generated_stub_builtin_function_map",
-    ],
     target: {
         android: {
             enabled: false,
@@ -638,17 +627,43 @@
 cc_binary {
     name: "host_init_verifier",
     defaults: ["init_host_defaults"],
-    srcs: ["host_init_verifier.cpp"] + init_common_sources + init_host_sources,
+    srcs: [
+        "check_builtins.cpp",
+        "host_import_parser.cpp",
+        "host_init_verifier.cpp",
+        "interface_utils.cpp",
+    ] + init_common_sources,
     generated_headers: [
         "generated_android_ids",
+        "generated_stub_builtin_function_map",
     ],
+    shared_libs: [
+        "libhidl-gen-utils",
+        "libhidlmetadata",
+    ],
+}
+
+genrule {
+    name: "noop_builtin_function_map",
+    tool_files: ["host_builtin_map.py"],
+    out: ["noop_builtin_function_map.h"],
+    srcs: [
+        "builtins.cpp",
+        "noop_builtins.cpp",
+    ],
+    cmd: "$(location host_builtin_map.py) --builtins $(location builtins.cpp) --check_builtins $(location noop_builtins.cpp) > $(out)",
 }
 
 cc_library_host_static {
     name: "libinit_host",
     defaults: ["init_host_defaults"],
-    srcs: init_common_sources + init_host_sources,
+    srcs: [
+        "noop_builtins.cpp",
+    ] + init_common_sources,
     export_include_dirs: ["."],
+    generated_headers: [
+        "noop_builtin_function_map",
+    ],
     proto: {
         export_proto_headers: true,
     },
diff --git a/init/README.md b/init/README.md
index 11c4e1c..560c528 100644
--- a/init/README.md
+++ b/init/README.md
@@ -499,9 +499,12 @@
    4. `late-fs` - Mount partitions marked as latemounted.
    5. `post-fs-data` - Mount and configure `/data`; set up encryption. `/metadata` is
       reformatted here if it couldn't mount in first-stage init.
-   6. `zygote-start` - Start the zygote.
-   7. `early-boot` - After zygote has started.
-   8. `boot` - After `early-boot` actions have completed.
+   6. `post-fs-data-checkpointed` - Triggered when vold has completed committing a checkpoint
+      after an OTA update. Not triggered if checkpointing is not needed or supported.
+   7. `bpf-progs-loaded` - Starts things that want to start ASAP but need eBPF (incl. netd)
+   8. `zygote-start` - Start the zygote.
+   9. `early-boot` - After zygote has started.
+  10. `boot` - After `early-boot` actions have completed.
 
 Commands
 --------
@@ -634,7 +637,7 @@
   Properties are expanded within _level_.
 
 `mark_post_data`
-> Used to mark the point right after /data is mounted.
+> (This action is deprecated and no-op.)
 
 `mkdir <path> [<mode>] [<owner>] [<group>] [encryption=<action>] [key=<key>]`
 > Create a directory at _path_, optionally with the given mode, owner, and
@@ -743,6 +746,9 @@
   fstab.${ro.hardware} or fstab.${ro.hardware.platform} will be scanned for
   under /odm/etc, /vendor/etc, or / at runtime, in that order.
 
+`swapoff <path>`
+> Stops swapping to the file or block device specified by path.
+
 `symlink <target> <path>`
 > Create a symbolic link at _path_ with the value _target_
 
@@ -786,7 +792,6 @@
   If the file does not exist, it will be created. If it does exist,
   it will be truncated. Properties are expanded within _content_.
 
-
 Imports
 -------
 `import <path>`
diff --git a/init/README.ueventd.md b/init/README.ueventd.md
index 7d00195..0e84c6f 100644
--- a/init/README.ueventd.md
+++ b/init/README.ueventd.md
@@ -39,6 +39,33 @@
      `device_id` is `uevent MINOR % 128 + 1`.
   3. All other devices are created as `/dev/<basename uevent DEVPATH>`
 
+Whether a device is considered a "boot device" is a bit complicated.
+
+ - The recommended way to specify the boot device is to provide the "partition UUID" containing the
+   kernel (or, really, any parition on the boot device) and then boot device is the block device
+   containing that partition. This is passed via `androidboot.boot_part_uuid` which can be provided
+   either via the kernel bootconfig or via the kernel commandline. As an example, you could set
+   `androidboot.boot_part_uuid=12345678-abcd-ef01-0234-6789abcdef01`.
+ - Though using `boot_part_uuid` is preferred, you can also specify the boot device via
+   `androidboot.boot_device` or `androidboot.boot_devices`. These can be passed via the kernel
+   bootconfig or the kernel command line. It is also possible to pass this via device tree by
+   creating a `boot_devices` property in the Android firmware node. In most cases the `boot_device`
+   is the sysfs path (without the `/sys/devices` or `/sys/devices/platform` prefix) to the closest
+   parent of the block device that's on the "platform" bus. As an example, if the block device is
+   `/sys/devices/platform/soc@0/7c4000.mmc/mmc_host/mmc1/mmc1:0001/block/mmcblk1` then the
+   `boot_device` is `soc@0/7c4000.mmc` since we strip off the `/sys/devices/platform` and nothing
+   past the `7c4000.mmc` directory represents a device on the "platform" bus. In the case that none
+   of the parents are on the "platform" bus there are special rules for block devices under PCI
+   and VBD (Virtual Block Device). NOTE: sysfs paths for block devices are not guaranteed to be
+   stable between kernel versions, which is one of the reasons why it is suggested to use
+   `boot_part_uuid` instead of `boot_devices`. ALSO NOTE: If more than one device matches (either
+   because multiple `boot_devices` were listed or because there was more than one block device
+   under the found sysfs directory) and these multiple matching devices provide some of the same
+   named partitions then the behavior is unspecified.
+ - There is a further fallback to determine "boot devices" via the vstab, but providing at least
+   `boot_devices` has been required since Android 12 so this further fallback will not be described
+   here.
+
 The permissions can be modified using a ueventd.rc script and a line that beings with `/dev`. These
 lines take the format of
 
@@ -49,17 +76,17 @@
 When `/dev/null` is created, its mode will be set to `0666`, its user to `root` and its group to
 `root`.
 
-The path can be modified using a ueventd.rc script and a `subsystem` section. There are three to set
-for a subsystem: the subsystem name, which device name to use, and which directory to place the
-device in. The section takes the below format of
+The path can be modified using a ueventd.rc script and a `subsystem` and/or `driver` section.
+There are three options to set for a subsystem or driver: the name, which device name to use,
+and which directory to place the device in. The section takes the below format of
 
     subsystem <subsystem_name>
       devname uevent_devname|uevent_devpath
       [dirname <directory>]
 
-`subsystem_name` is used to match uevent `SUBSYSTEM` value
+`subsystem_name` is used to match the uevent `SUBSYSTEM` value.
 
-`devname` takes one of three options
+`devname` takes one of three options:
   1. `uevent_devname` specifies that the name of the node will be the uevent `DEVNAME`
   2. `uevent_devpath` specifies that the name of the node will be basename uevent `DEVPATH`
   3. `sys_name` specifies that the name of the node will be the contents of `/sys/DEVPATH/name`
@@ -72,9 +99,13 @@
     subsystem sound
       devname uevent_devpath
       dirname /dev/snd
-Indicates that all uevents with `SUBSYSTEM=sound` will create nodes as `/dev/snd/<basename uevent
+indicates that all uevents with `SUBSYSTEM=sound` will create nodes as `/dev/snd/<basename uevent
 DEVPATH>`.
 
+The `driver` section has the exact same structure as a `subsystem` section, but
+will instead match the `DRIVER` value in a `bind`/`unbind` uevent. However, the
+`driver` section will be ignored for block devices.
+
 ## /sys
 ----
 Ueventd by default takes no action for `/sys`, however it can be instructed to set permissions for
diff --git a/init/apex_init_util.cpp b/init/apex_init_util.cpp
index e5a7fbc..809c805 100644
--- a/init/apex_init_util.cpp
+++ b/init/apex_init_util.cpp
@@ -101,14 +101,21 @@
     return apex_list;
 }
 
+static int GetCurrentSdk() {
+    bool is_preview = base::GetProperty("ro.build.version.codename", "") != "REL";
+    if (is_preview) {
+        return __ANDROID_API_FUTURE__;
+    }
+    return android::base::GetIntProperty("ro.build.version.sdk", __ANDROID_API_FUTURE__);
+}
+
 static Result<void> ParseRcScripts(const std::vector<std::string>& files) {
     if (files.empty()) {
         return {};
     }
     // APEXes can have versioned RC files. These should be filtered based on
     // SDK version.
-    int sdk = android::base::GetIntProperty("ro.build.version.sdk", INT_MAX);
-    if (sdk < 35) sdk = 35;  // aosp/main merges only into sdk=35+ (ie. __ANDROID_API_V__+)
+    static int sdk = GetCurrentSdk();
     auto filtered = FilterVersionedConfigs(files, sdk);
     if (filtered.empty()) {
         return {};
diff --git a/init/block_dev_initializer.cpp b/init/block_dev_initializer.cpp
index 8f52158..deb68e9 100644
--- a/init/block_dev_initializer.cpp
+++ b/init/block_dev_initializer.cpp
@@ -33,7 +33,50 @@
     auto boot_devices = android::fs_mgr::GetBootDevices();
     device_handler_ = std::make_unique<DeviceHandler>(
             std::vector<Permissions>{}, std::vector<SysfsPermissions>{}, std::vector<Subsystem>{},
-            std::move(boot_devices), false);
+            std::vector<Subsystem>{}, std::move(boot_devices), android::fs_mgr::GetBootPartUuid(),
+            false);
+}
+
+// If boot_part_uuid is specified, use it to set boot_devices
+//
+// When `androidboot.boot_part_uuid` is specified then that's the partition UUID
+// of the kernel. Look for that partition and then set `boot_devices` to be
+// exactly one item: the block device containing that partition.
+//
+// NOTE that `boot_part_uuid` is only specified on newer devices. Older devices
+// specified `boot_devices` directly.
+bool BlockDevInitializer::InitBootDevicesFromPartUuid() {
+    bool uuid_check_done = false;
+
+    auto boot_part_callback = [&, this](const Uevent& uevent) -> ListenerAction {
+        uuid_check_done = device_handler_->CheckUeventForBootPartUuid(uevent);
+        return uuid_check_done ? ListenerAction::kStop : ListenerAction::kContinue;
+    };
+
+    // Re-run already arrived uevents looking for the boot partition UUID.
+    //
+    // NOTE: If we're not using the boot partition UUID to find the boot
+    // device then the first uevent we analyze will cause us to stop looking
+    // and set `uuid_check_done`. This will shortcut all of the UUID logic.
+    // Replaying one uevent is not expected to be slow.
+    uevent_listener_.RegenerateUevents(boot_part_callback);
+
+    // If we're not done looking, poll for uevents for longer
+    if (!uuid_check_done) {
+        Timer t;
+        uevent_listener_.Poll(boot_part_callback, 10s);
+        LOG(INFO) << "Wait for boot partition returned after " << t;
+    }
+
+    // Give a nicer error message if we were expecting to find the kernel boot
+    // partition but didn't. Later code would fail too but the message there
+    // is a bit further from the root cause of the problem.
+    if (!uuid_check_done) {
+        LOG(ERROR) << __PRETTY_FUNCTION__ << ": boot partition not found after polling timeout.";
+        return false;
+    }
+
+    return true;
 }
 
 bool BlockDevInitializer::InitDeviceMapper() {
@@ -98,11 +141,43 @@
 
     LOG(VERBOSE) << __PRETTY_FUNCTION__ << ": found partition: " << name;
 
-    devices->erase(iter);
+    // Remove the partition from the list of partitions we're waiting for.
+    //
+    // Partitions that we're waiting for here are expected to be on the boot
+    // device, so only remove from the list if they're on the boot device.
+    // This prevents us from being confused if there are multiple disks (some
+    // perhaps connected via USB) that have matching partition names.
+    //
+    // ...but...
+    //
+    // Some products (especialy emulators) don't seem to set up boot_devices
+    // or possibly not all the partitions that we need to wait for are on the
+    // specified boot device. Thus, only require partitions to be on the boot
+    // device in "strict" mode, which should be used on newer systems.
+    if (device_handler_->IsBootDevice(uevent) || !device_handler_->IsBootDeviceStrict()) {
+        devices->erase(iter);
+    }
+
     device_handler_->HandleUevent(uevent);
     return devices->empty() ? ListenerAction::kStop : ListenerAction::kContinue;
 }
 
+// Wait for partitions that are expected to be on the "boot device" to initialize.
+//
+// Wait (for up to 10 seconds) for partitions passed in `devices` to show up.
+// All block devices found while waiting will be initialized, which includes
+// creating symlinks for them in /dev/block. Once all `devices` are found we'll
+// return success (true). If any devices aren't found we'll return failure
+// (false). As devices are found they will be removed from `devices`.
+//
+// The contents of `devices` is the names of the partitions. This can be:
+// - The `partition_name` reported by a uevent, or the final component in the
+//   `path` reported by a uevent if the `partition_name` is blank.
+// - The result of DeviceHandler::GetPartitionNameForDevice() on the
+//   `device_name` reported by a uevent.
+//
+// NOTE: on newer systems partitions _must_ be on the "boot device". See
+// comments inside HandleUevent().
 bool BlockDevInitializer::InitDevices(std::set<std::string> devices) {
     auto uevent_callback = [&, this](const Uevent& uevent) -> ListenerAction {
         return HandleUevent(uevent, &devices);
diff --git a/init/block_dev_initializer.h b/init/block_dev_initializer.h
index cb1d365..25107c9 100644
--- a/init/block_dev_initializer.h
+++ b/init/block_dev_initializer.h
@@ -29,6 +29,7 @@
   public:
     BlockDevInitializer();
 
+    bool InitBootDevicesFromPartUuid();
     bool InitDeviceMapper();
     bool InitDmUser(const std::string& name);
     bool InitDevices(std::set<std::string> devices);
diff --git a/init/builtins.cpp b/init/builtins.cpp
index 606ea8c..c4af5b5 100644
--- a/init/builtins.cpp
+++ b/init/builtins.cpp
@@ -36,6 +36,7 @@
 #include <sys/resource.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
+#include <sys/swap.h>
 #include <sys/syscall.h>
 #include <sys/system_properties.h>
 #include <sys/time.h>
@@ -46,7 +47,6 @@
 #include <map>
 #include <memory>
 
-#include <InitProperties.sysprop.h>
 #include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
@@ -606,8 +606,6 @@
     return Error() << "Invalid code: " << code;
 }
 
-static int initial_mount_fstab_return_code = -1;
-
 /* <= Q: mount_all <fstab> [ <path> ]* [--<options>]*
  * >= R: mount_all [ <fstab> ] [--<options>]*
  *
@@ -648,19 +646,10 @@
         import_late(mount_all->rc_paths);
     }
 
-    if (mount_fstab_result.userdata_mounted) {
-        // This call to fs_mgr_mount_all mounted userdata. Keep the result in
-        // order for userspace reboot to correctly remount userdata.
-        LOG(INFO) << "Userdata mounted using "
-                  << (mount_all->fstab_path.empty() ? "(default fstab)" : mount_all->fstab_path)
-                  << " result : " << mount_fstab_result.code;
-        initial_mount_fstab_return_code = mount_fstab_result.code;
-    }
-
     if (queue_event) {
         /* queue_fs_event will queue event based on mount_fstab return code
          * and return processed return code*/
-        auto queue_fs_result = queue_fs_event(mount_fstab_result.code);
+        auto queue_fs_result = queue_fs_event(mount_fstab_result);
         if (!queue_fs_result.ok()) {
             return Error() << "queue_fs_event() failed: " << queue_fs_result.error();
         }
@@ -1148,29 +1137,19 @@
 }
 
 static Result<void> ExecVdcRebootOnFailure(const std::string& vdc_arg) {
-    bool should_reboot_into_recovery = true;
     auto reboot_reason = vdc_arg + "_failed";
-    if (android::sysprop::InitProperties::userspace_reboot_in_progress().value_or(false)) {
-        should_reboot_into_recovery = false;
-        reboot_reason = "userspace_failed," + vdc_arg;
-    }
 
-    auto reboot = [reboot_reason, should_reboot_into_recovery](const std::string& message) {
+    auto reboot = [reboot_reason](const std::string& message) {
         // TODO (b/122850122): support this in gsi
-        if (should_reboot_into_recovery) {
-            if (IsFbeEnabled() && !android::gsi::IsGsiRunning()) {
-                LOG(ERROR) << message << ": Rebooting into recovery, reason: " << reboot_reason;
-                if (auto result = reboot_into_recovery(
-                            {"--prompt_and_wipe_data", "--reason="s + reboot_reason});
-                    !result.ok()) {
-                    LOG(FATAL) << "Could not reboot into recovery: " << result.error();
-                }
-            } else {
-                LOG(ERROR) << "Failure (reboot suppressed): " << reboot_reason;
+        if (IsFbeEnabled() && !android::gsi::IsGsiRunning()) {
+            LOG(ERROR) << message << ": Rebooting into recovery, reason: " << reboot_reason;
+            if (auto result = reboot_into_recovery(
+                        {"--prompt_and_wipe_data", "--reason="s + reboot_reason});
+                !result.ok()) {
+                LOG(FATAL) << "Could not reboot into recovery: " << result.error();
             }
         } else {
-            LOG(ERROR) << message << ": rebooting, reason: " << reboot_reason;
-            trigger_shutdown("reboot," + reboot_reason);
+            LOG(ERROR) << "Failure (reboot suppressed): " << reboot_reason;
         }
     };
 
@@ -1178,29 +1157,6 @@
     return ExecWithFunctionOnFailure(args, reboot);
 }
 
-static Result<void> do_remount_userdata(const BuiltinArguments& args) {
-    if (initial_mount_fstab_return_code == -1) {
-        return Error() << "Calling remount_userdata too early";
-    }
-    Fstab fstab;
-    if (!ReadDefaultFstab(&fstab)) {
-        // TODO(b/135984674): should we reboot here?
-        return Error() << "Failed to read fstab";
-    }
-    // TODO(b/135984674): check that fstab contains /data.
-    if (auto rc = fs_mgr_remount_userdata_into_checkpointing(&fstab); rc < 0) {
-        std::string proc_mounts_output;
-        android::base::ReadFileToString("/proc/mounts", &proc_mounts_output, true);
-        android::base::WriteStringToFile(proc_mounts_output,
-                                         "/metadata/userspacereboot/mount_info.txt");
-        trigger_shutdown("reboot,mount_userdata_failed");
-    }
-    if (auto result = queue_fs_event(initial_mount_fstab_return_code); !result.ok()) {
-        return Error() << "queue_fs_event() failed: " << result.error();
-    }
-    return {};
-}
-
 static Result<void> do_installkey(const BuiltinArguments& args) {
     if (!is_file_crypto()) return {};
 
@@ -1216,8 +1172,7 @@
 }
 
 static Result<void> do_mark_post_data(const BuiltinArguments& args) {
-    ServiceList::GetInstance().MarkPostData();
-
+    LOG(INFO) << "deprecated action `mark_post_data` called.";
     return {};
 }
 
@@ -1316,6 +1271,13 @@
     return {};
 }
 
+static Result<void> do_swapoff(const BuiltinArguments& args) {
+    if (!swapoff(args[1].c_str())) {
+        return ErrnoError() << "swapoff() failed";
+    }
+    return {};
+}
+
 // Builtin-function-map start
 const BuiltinFunctionMap& GetBuiltinFunctionMap() {
     constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
@@ -1361,7 +1323,6 @@
         {"umount_all",              {0,     1,    {false,  do_umount_all}}},
         {"update_linker_config",    {0,     0,    {false,  do_update_linker_config}}},
         {"readahead",               {1,     2,    {true,   do_readahead}}},
-        {"remount_userdata",        {0,     0,    {false,  do_remount_userdata}}},
         {"restart",                 {1,     2,    {false,  do_restart}}},
         {"restorecon",              {1,     kMax, {true,   do_restorecon}}},
         {"restorecon_recursive",    {1,     kMax, {true,   do_restorecon_recursive}}},
@@ -1372,6 +1333,7 @@
         {"start",                   {1,     1,    {false,  do_start}}},
         {"stop",                    {1,     1,    {false,  do_stop}}},
         {"swapon_all",              {0,     1,    {false,  do_swapon_all}}},
+        {"swapoff",                 {1,     1,    {false,  do_swapoff}}},
         {"enter_default_mount_ns",  {0,     0,    {false,  do_enter_default_mount_ns}}},
         {"symlink",                 {2,     2,    {true,   do_symlink}}},
         {"sysclktz",                {1,     1,    {false,  do_sysclktz}}},
diff --git a/init/devices.cpp b/init/devices.cpp
index 5560c20..aeaa431 100644
--- a/init/devices.cpp
+++ b/init/devices.cpp
@@ -45,6 +45,7 @@
 using namespace std::chrono_literals;
 
 using android::base::Basename;
+using android::base::ConsumePrefix;
 using android::base::Dirname;
 using android::base::ReadFileToString;
 using android::base::Readlink;
@@ -188,6 +189,56 @@
     }
 }
 
+BlockDeviceInfo DeviceHandler::GetBlockDeviceInfo(const std::string& uevent_path) const {
+    BlockDeviceInfo info;
+
+    if (!boot_part_uuid_.empty()) {
+        // Only use the more specific "MMC" / "NVME" / "SCSI" match if a
+        // partition UUID was passed.
+        //
+        // Old bootloaders that aren't passing the partition UUID instead
+        // pass the path to the closest "platform" device. It would
+        // break them if we chose this deeper (more specific) path.
+        //
+        // When we have a UUID we _want_ the more specific path since it can
+        // handle, for instance, differentiating two USB disks that are on
+        // the same USB controller. Using the closest platform device would
+        // classify them both the same by using the path to the USB controller.
+        if (FindMmcDevice(uevent_path, &info.str)) {
+            info.type = "mmc";
+        } else if (FindNvmeDevice(uevent_path, &info.str)) {
+            info.type = "nvme";
+        } else if (FindScsiDevice(uevent_path, &info.str)) {
+            info.type = "scsi";
+        }
+    } else if (FindPlatformDevice(uevent_path, &info.str)) {
+        info.type = "platform";
+    } else if (FindPciDevicePrefix(uevent_path, &info.str)) {
+        info.type = "pci";
+    } else if (FindVbdDevicePrefix(uevent_path, &info.str)) {
+        info.type = "vbd";
+    } else {
+        // Re-clear device to be extra certain in case one of the FindXXX()
+        // functions returned false but still modified it.
+        info.str = "";
+    }
+
+    info.is_boot_device = boot_devices_.find(info.str) != boot_devices_.end();
+
+    return info;
+}
+
+bool DeviceHandler::IsBootDeviceStrict() const {
+    // When using the newer "boot_part_uuid" to specify the boot device then
+    // we require all core system partitions to be on the boot device.
+    return !boot_part_uuid_.empty();
+}
+
+bool DeviceHandler::IsBootDevice(const Uevent& uevent) const {
+    auto device = GetBlockDeviceInfo(uevent.path);
+    return device.is_boot_device;
+}
+
 std::string DeviceHandler::GetPartitionNameForDevice(const std::string& query_device) {
     static const auto partition_map = [] {
         std::vector<std::pair<std::string, std::string>> partition_map;
@@ -218,11 +269,12 @@
     return {};
 }
 
-// Given a path that may start with a platform device, find the parent platform device by finding a
-// parent directory with a 'subsystem' symlink that points to the platform bus.
-// If it doesn't start with a platform device, return false
-bool DeviceHandler::FindPlatformDevice(std::string path, std::string* platform_device_path) const {
-    platform_device_path->clear();
+// Given a path to a device that may have a parent in the passed set of
+// subsystems, find the parent device that's in the passed set of subsystems.
+// If we don't find a parent in the passed set of subsystems, return false.
+bool DeviceHandler::FindSubsystemDevice(std::string path, std::string* device_path,
+                                        const std::set<std::string>& subsystem_paths) const {
+    device_path->clear();
 
     // Uevents don't contain the mount point, so we need to add it here.
     path.insert(0, sysfs_mount_point_);
@@ -232,11 +284,20 @@
     while (directory != "/" && directory != ".") {
         std::string subsystem_link_path;
         if (Realpath(directory + "/subsystem", &subsystem_link_path) &&
-            (subsystem_link_path == sysfs_mount_point_ + "/bus/platform" ||
-             subsystem_link_path == sysfs_mount_point_ + "/bus/amba")) {
+            subsystem_paths.find(subsystem_link_path) != subsystem_paths.end()) {
             // We need to remove the mount point that we added above before returning.
             directory.erase(0, sysfs_mount_point_.size());
-            *platform_device_path = directory;
+
+            // Skip /devices/platform or /devices/ if present
+            static constexpr std::string_view devices_platform_prefix = "/devices/platform/";
+            static constexpr std::string_view devices_prefix = "/devices/";
+            std::string_view sv = directory;
+
+            if (!ConsumePrefix(&sv, devices_platform_prefix)) {
+                ConsumePrefix(&sv, devices_prefix);
+            }
+            *device_path = sv;
+
             return true;
         }
 
@@ -250,6 +311,60 @@
     return false;
 }
 
+bool DeviceHandler::FindPlatformDevice(const std::string& path,
+                                       std::string* platform_device_path) const {
+    const std::set<std::string> subsystem_paths = {
+            sysfs_mount_point_ + "/bus/platform",
+            sysfs_mount_point_ + "/bus/amba",
+    };
+
+    return FindSubsystemDevice(path, platform_device_path, subsystem_paths);
+}
+
+bool DeviceHandler::FindMmcDevice(const std::string& path, std::string* mmc_device_path) const {
+    const std::set<std::string> subsystem_paths = {
+            sysfs_mount_point_ + "/bus/mmc",
+    };
+
+    return FindSubsystemDevice(path, mmc_device_path, subsystem_paths);
+}
+
+bool DeviceHandler::FindNvmeDevice(const std::string& path, std::string* nvme_device_path) const {
+    const std::set<std::string> subsystem_paths = {
+            sysfs_mount_point_ + "/class/nvme",
+    };
+
+    return FindSubsystemDevice(path, nvme_device_path, subsystem_paths);
+}
+
+bool DeviceHandler::FindScsiDevice(const std::string& path, std::string* scsi_device_path) const {
+    const std::set<std::string> subsystem_paths = {
+            sysfs_mount_point_ + "/bus/scsi",
+    };
+
+    return FindSubsystemDevice(path, scsi_device_path, subsystem_paths);
+}
+
+void DeviceHandler::TrackDeviceUevent(const Uevent& uevent) {
+    // No need to track any events if we won't bother handling any bind events
+    // later.
+    if (drivers_.size() == 0) return;
+
+    // Only track add, and not for block devices. We don't track remove because
+    // unbind events may arrive after remove events, so unbind will be the
+    // trigger to untrack those events.
+    if ((uevent.action != "add") || uevent.subsystem == "block" ||
+        (uevent.major < 0 || uevent.minor < 0)) {
+        return;
+    }
+
+    std::string path = sysfs_mount_point_ + uevent.path + "/device";
+    std::string device;
+    if (!Realpath(path, &device)) return;
+
+    tracked_uevents_.emplace_back(uevent, device);
+}
+
 void DeviceHandler::FixupSysPermissions(const std::string& upath,
                                         const std::string& subsystem) const {
     // upaths omit the "/sys" that paths in this list
@@ -283,7 +398,7 @@
 
 void DeviceHandler::MakeDevice(const std::string& path, bool block, int major, int minor,
                                const std::vector<std::string>& links) const {
-    auto[mode, uid, gid] = GetDevicePermissions(path, links);
+    auto [mode, uid, gid] = GetDevicePermissions(path, links);
     mode |= (block ? S_IFBLK : S_IFCHR);
 
     std::string secontext;
@@ -330,11 +445,11 @@
             if (gid != s.st_gid) {
                 new_group = gid;
             }
-        if (mode != s.st_mode) {
-            if (chmod(path.c_str(), mode) != 0) {
-                PLOG(ERROR) << "Cannot chmod " << path << " to " << mode;
+            if (mode != s.st_mode) {
+                if (chmod(path.c_str(), mode) != 0) {
+                    PLOG(ERROR) << "Cannot chmod " << path << " to " << mode;
+                }
             }
-        }
         } else {
             PLOG(ERROR) << "Cannot stat " << path;
         }
@@ -371,44 +486,30 @@
 }
 
 std::vector<std::string> DeviceHandler::GetBlockDeviceSymlinks(const Uevent& uevent) const {
-    std::string device;
-    std::string type;
+    BlockDeviceInfo info;
     std::string partition;
     std::string uuid;
 
-    if (FindPlatformDevice(uevent.path, &device)) {
-        // Skip /devices/platform or /devices/ if present
-        static constexpr std::string_view devices_platform_prefix = "/devices/platform/";
-        static constexpr std::string_view devices_prefix = "/devices/";
-
-        if (StartsWith(device, devices_platform_prefix)) {
-            device = device.substr(devices_platform_prefix.length());
-        } else if (StartsWith(device, devices_prefix)) {
-            device = device.substr(devices_prefix.length());
-        }
-
-        type = "platform";
-    } else if (FindPciDevicePrefix(uevent.path, &device)) {
-        type = "pci";
-    } else if (FindVbdDevicePrefix(uevent.path, &device)) {
-        type = "vbd";
-    } else if (FindDmDevice(uevent, &partition, &uuid)) {
+    if (FindDmDevice(uevent, &partition, &uuid)) {
         std::vector<std::string> symlinks = {"/dev/block/mapper/" + partition};
         if (!uuid.empty()) {
             symlinks.emplace_back("/dev/block/mapper/by-uuid/" + uuid);
         }
         return symlinks;
-    } else {
+    }
+
+    info = GetBlockDeviceInfo(uevent.path);
+
+    if (info.type.empty()) {
         return {};
     }
 
     std::vector<std::string> links;
 
-    LOG(VERBOSE) << "found " << type << " device " << device;
+    LOG(VERBOSE) << "found " << info.type << " device " << info.str;
 
-    auto link_path = "/dev/block/" + type + "/" + device;
+    auto link_path = "/dev/block/" + info.type + "/" + info.str;
 
-    bool is_boot_device = boot_devices_.find(device) != boot_devices_.end();
     if (!uevent.partition_name.empty()) {
         std::string partition_name_sanitized(uevent.partition_name);
         SanitizePartitionName(&partition_name_sanitized);
@@ -418,10 +519,10 @@
         }
         links.emplace_back(link_path + "/by-name/" + partition_name_sanitized);
         // Adds symlink: /dev/block/by-name/<partition_name>.
-        if (is_boot_device) {
+        if (info.is_boot_device) {
             links.emplace_back("/dev/block/by-name/" + partition_name_sanitized);
         }
-    } else if (is_boot_device) {
+    } else if (info.is_boot_device) {
         // If we don't have a partition name but we are a partition on a boot device, create a
         // symlink of /dev/block/by-name/<device_name> for symmetry.
         links.emplace_back("/dev/block/by-name/" + uevent.device_name);
@@ -531,7 +632,7 @@
         if (!ReadFileToString(boot_id_path, &boot_id)) {
             PLOG(ERROR) << "Cannot duplicate ashmem device node. Failed to read " << boot_id_path;
             return;
-        };
+        }
         boot_id = Trim(boot_id);
 
         Uevent dup_ashmem_uevent = uevent;
@@ -541,11 +642,94 @@
     }
 }
 
+// Check Uevents looking for the kernel's boot partition UUID
+//
+// When we can stop checking uevents (either because we're done or because
+// we weren't looking for the kernel's boot partition UUID) then return
+// true. Return false if we're not done yet.
+bool DeviceHandler::CheckUeventForBootPartUuid(const Uevent& uevent) {
+    // If we aren't using boot_part_uuid then we're done.
+    if (boot_part_uuid_.empty()) {
+        return true;
+    }
+
+    // Finding the boot partition is a one-time thing that we do at init
+    // time, not steady state. This is because the boot partition isn't
+    // allowed to go away or change. Once we found the boot partition we don't
+    // expect to run again.
+    if (found_boot_part_uuid_) {
+        LOG(WARNING) << __PRETTY_FUNCTION__
+                     << " shouldn't run after kernel boot partition is found";
+        return true;
+    }
+
+    // We only need to look at newly-added block devices. Note that if someone
+    // is replaying events all existing devices will get "add"ed.
+    if (uevent.subsystem != "block" || uevent.action != "add") {
+        return false;
+    }
+
+    // If it's not the partition we care about then move on.
+    if (uevent.partition_uuid != boot_part_uuid_) {
+        return false;
+    }
+
+    auto device = GetBlockDeviceInfo(uevent.path);
+
+    LOG(INFO) << "Boot device " << device.str << " found via partition UUID";
+    found_boot_part_uuid_ = true;
+    boot_devices_.clear();
+    boot_devices_.insert(device.str);
+
+    return true;
+}
+
+void DeviceHandler::HandleBindInternal(std::string driver_name, std::string action,
+                                       const Uevent& uevent) {
+    if (uevent.subsystem == "block") {
+        LOG(FATAL) << "Tried to handle bind event for block device";
+    }
+
+    // Get tracked uevents for all devices that have this uevent's path as
+    // their canonical device path. Then handle those again if their driver
+    // is one of the ones we're interested in.
+    const auto driver = std::find(drivers_.cbegin(), drivers_.cend(), driver_name);
+    if (driver == drivers_.cend()) return;
+
+    std::string bind_path = sysfs_mount_point_ + uevent.path;
+    for (const TrackedUevent& tracked : tracked_uevents_) {
+        if (tracked.canonical_device_path != bind_path) continue;
+
+        LOG(VERBOSE) << "Propagating " << uevent.action << " as " << action << " for "
+                     << uevent.path;
+
+        std::string devpath = driver->ParseDevPath(tracked.uevent);
+        mkdir_recursive(Dirname(devpath), 0755);
+        HandleDevice(action, devpath, false, tracked.uevent.major, tracked.uevent.minor,
+                     std::vector<std::string>{});
+    }
+}
+
 void DeviceHandler::HandleUevent(const Uevent& uevent) {
-  if (uevent.action == "add" || uevent.action == "change" ||
-      uevent.action == "bind" || uevent.action == "online") {
-    FixupSysPermissions(uevent.path, uevent.subsystem);
-  }
+    if (uevent.action == "add" || uevent.action == "change" || uevent.action == "bind" ||
+        uevent.action == "online") {
+        FixupSysPermissions(uevent.path, uevent.subsystem);
+    }
+
+    if (uevent.action == "bind") {
+        bound_drivers_[uevent.path] = uevent.driver;
+        HandleBindInternal(uevent.driver, "add", uevent);
+        return;
+    } else if (uevent.action == "unbind") {
+        if (bound_drivers_.count(uevent.path) == 0) return;
+        HandleBindInternal(bound_drivers_[uevent.path], "remove", uevent);
+
+        std::string sys_path = sysfs_mount_point_ + uevent.path;
+        std::erase_if(tracked_uevents_, [&sys_path](const TrackedUevent& tracked) {
+            return sys_path == tracked.canonical_device_path;
+        });
+        return;
+    }
 
     // if it's not a /dev device, nothing to do
     if (uevent.major < 0 || uevent.minor < 0) return;
@@ -554,6 +738,8 @@
     std::vector<std::string> links;
     bool block = false;
 
+    TrackDeviceUevent(uevent);
+
     if (uevent.subsystem == "block") {
         block = true;
         devpath = "/dev/block/" + Basename(uevent.path);
@@ -602,18 +788,29 @@
 
 DeviceHandler::DeviceHandler(std::vector<Permissions> dev_permissions,
                              std::vector<SysfsPermissions> sysfs_permissions,
-                             std::vector<Subsystem> subsystems, std::set<std::string> boot_devices,
+                             std::vector<Subsystem> drivers, std::vector<Subsystem> subsystems,
+                             std::set<std::string> boot_devices, std::string boot_part_uuid,
                              bool skip_restorecon)
     : dev_permissions_(std::move(dev_permissions)),
       sysfs_permissions_(std::move(sysfs_permissions)),
+      drivers_(std::move(drivers)),
       subsystems_(std::move(subsystems)),
       boot_devices_(std::move(boot_devices)),
+      boot_part_uuid_(boot_part_uuid),
       skip_restorecon_(skip_restorecon),
-      sysfs_mount_point_("/sys") {}
+      sysfs_mount_point_("/sys") {
+    // If both a boot partition UUID and a list of boot devices are
+    // specified then we ignore the boot_devices in favor of boot_part_uuid.
+    if (boot_devices_.size() && !boot_part_uuid.empty()) {
+        LOG(WARNING) << "Both boot_devices and boot_part_uuid provided; ignoring bootdevices";
+        boot_devices_.clear();
+    }
+}
 
 DeviceHandler::DeviceHandler()
     : DeviceHandler(std::vector<Permissions>{}, std::vector<SysfsPermissions>{},
-                    std::vector<Subsystem>{}, std::set<std::string>{}, false) {}
+                    std::vector<Subsystem>{}, std::vector<Subsystem>{}, std::set<std::string>{}, "",
+                    false) {}
 
 }  // namespace init
 }  // namespace android
diff --git a/init/devices.h b/init/devices.h
index 6da1232..69a2449 100644
--- a/init/devices.h
+++ b/init/devices.h
@@ -21,6 +21,7 @@
 #include <sys/types.h>
 
 #include <algorithm>
+#include <map>
 #include <set>
 #include <string>
 #include <vector>
@@ -116,16 +117,24 @@
     std::string dir_name_ = "/dev";
 };
 
+struct BlockDeviceInfo {
+    std::string str;
+    std::string type;
+    bool is_boot_device;
+};
+
 class DeviceHandler : public UeventHandler {
   public:
     friend class DeviceHandlerTester;
 
     DeviceHandler();
     DeviceHandler(std::vector<Permissions> dev_permissions,
-                  std::vector<SysfsPermissions> sysfs_permissions, std::vector<Subsystem> subsystems,
-                  std::set<std::string> boot_devices, bool skip_restorecon);
+                  std::vector<SysfsPermissions> sysfs_permissions, std::vector<Subsystem> drivers,
+                  std::vector<Subsystem> subsystems, std::set<std::string> boot_devices,
+                  std::string boot_part_uuid, bool skip_restorecon);
     virtual ~DeviceHandler() = default;
 
+    bool CheckUeventForBootPartUuid(const Uevent& uevent);
     void HandleUevent(const Uevent& uevent) override;
 
     // `androidboot.partition_map` allows associating a partition name for a raw block device
@@ -133,10 +142,23 @@
     // `androidboot.partition_map=vdb,metadata;vdc,userdata` maps `vdb` to `metadata` and `vdc` to
     // `userdata`.
     static std::string GetPartitionNameForDevice(const std::string& device);
+    bool IsBootDeviceStrict() const;
+    bool IsBootDevice(const Uevent& uevent) const;
 
   private:
+    struct TrackedUevent {
+        Uevent uevent;
+        std::string canonical_device_path;
+    };
+
     void ColdbootDone() override;
-    bool FindPlatformDevice(std::string path, std::string* platform_device_path) const;
+    BlockDeviceInfo GetBlockDeviceInfo(const std::string& uevent_path) const;
+    bool FindSubsystemDevice(std::string path, std::string* device_path,
+                             const std::set<std::string>& subsystem_paths) const;
+    bool FindPlatformDevice(const std::string& path, std::string* platform_device_path) const;
+    bool FindMmcDevice(const std::string& path, std::string* mmc_device_path) const;
+    bool FindNvmeDevice(const std::string& path, std::string* nvme_device_path) const;
+    bool FindScsiDevice(const std::string& path, std::string* scsi_device_path) const;
     std::tuple<mode_t, uid_t, gid_t> GetDevicePermissions(
         const std::string& path, const std::vector<std::string>& links) const;
     void MakeDevice(const std::string& path, bool block, int major, int minor,
@@ -147,12 +169,21 @@
     void FixupSysPermissions(const std::string& upath, const std::string& subsystem) const;
     void HandleAshmemUevent(const Uevent& uevent);
 
+    void TrackDeviceUevent(const Uevent& uevent);
+    void HandleBindInternal(std::string driver_name, std::string action, const Uevent& uevent);
+
     std::vector<Permissions> dev_permissions_;
     std::vector<SysfsPermissions> sysfs_permissions_;
+    std::vector<Subsystem> drivers_;
     std::vector<Subsystem> subsystems_;
     std::set<std::string> boot_devices_;
+    std::string boot_part_uuid_;
+    bool found_boot_part_uuid_;
     bool skip_restorecon_;
     std::string sysfs_mount_point_;
+
+    std::vector<TrackedUevent> tracked_uevents_;
+    std::map<std::string, std::string> bound_drivers_;
 };
 
 // Exposed for testing
diff --git a/init/epoll.cpp b/init/epoll.cpp
index cd73a0c..719a532 100644
--- a/init/epoll.cpp
+++ b/init/epoll.cpp
@@ -47,8 +47,8 @@
 
     auto [it, inserted] = epoll_handlers_.emplace(
             fd, Info{
-                        .events = events,
                         .handler = std::move(handler),
+                        .events = events,
                 });
     if (!inserted) {
         return Error() << "Cannot specify two epoll handlers for a given FD";
diff --git a/init/firmware_handler.cpp b/init/firmware_handler.cpp
index 01957ef..dcfda52 100644
--- a/init/firmware_handler.cpp
+++ b/init/firmware_handler.cpp
@@ -38,6 +38,8 @@
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
 
+#include "exthandler/exthandler.h"
+
 using android::base::ReadFdToString;
 using android::base::Socketpair;
 using android::base::Split;
@@ -136,100 +138,6 @@
     : firmware_directories_(std::move(firmware_directories)),
       external_firmware_handlers_(std::move(external_firmware_handlers)) {}
 
-Result<std::string> FirmwareHandler::RunExternalHandler(const std::string& handler, uid_t uid,
-                                                        gid_t gid, const Uevent& uevent) const {
-    unique_fd child_stdout;
-    unique_fd parent_stdout;
-    if (!Socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, &child_stdout, &parent_stdout)) {
-        return ErrnoError() << "Socketpair() for stdout failed";
-    }
-
-    unique_fd child_stderr;
-    unique_fd parent_stderr;
-    if (!Socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, &child_stderr, &parent_stderr)) {
-        return ErrnoError() << "Socketpair() for stderr failed";
-    }
-
-    signal(SIGCHLD, SIG_DFL);
-
-    auto pid = fork();
-    if (pid < 0) {
-        return ErrnoError() << "fork() failed";
-    }
-
-    if (pid == 0) {
-        setenv("FIRMWARE", uevent.firmware.c_str(), 1);
-        setenv("DEVPATH", uevent.path.c_str(), 1);
-        parent_stdout.reset();
-        parent_stderr.reset();
-        close(STDOUT_FILENO);
-        close(STDERR_FILENO);
-        dup2(child_stdout.get(), STDOUT_FILENO);
-        dup2(child_stderr.get(), STDERR_FILENO);
-
-        auto args = Split(handler, " ");
-        std::vector<char*> c_args;
-        for (auto& arg : args) {
-            c_args.emplace_back(arg.data());
-        }
-        c_args.emplace_back(nullptr);
-
-        if (gid != 0) {
-            if (setgid(gid) != 0) {
-                fprintf(stderr, "setgid() failed: %s", strerror(errno));
-                _exit(EXIT_FAILURE);
-            }
-        }
-
-        if (setuid(uid) != 0) {
-            fprintf(stderr, "setuid() failed: %s", strerror(errno));
-            _exit(EXIT_FAILURE);
-        }
-
-        execv(c_args[0], c_args.data());
-        fprintf(stderr, "exec() failed: %s", strerror(errno));
-        _exit(EXIT_FAILURE);
-    }
-
-    child_stdout.reset();
-    child_stderr.reset();
-
-    int status;
-    pid_t waited_pid = TEMP_FAILURE_RETRY(waitpid(pid, &status, 0));
-    if (waited_pid == -1) {
-        return ErrnoError() << "waitpid() failed";
-    }
-
-    std::string stdout_content;
-    if (!ReadFdToString(parent_stdout.get(), &stdout_content)) {
-        return ErrnoError() << "ReadFdToString() for stdout failed";
-    }
-
-    std::string stderr_content;
-    if (ReadFdToString(parent_stderr.get(), &stderr_content)) {
-        auto messages = Split(stderr_content, "\n");
-        for (const auto& message : messages) {
-            if (!message.empty()) {
-                LOG(ERROR) << "External Firmware Handler: " << message;
-            }
-        }
-    } else {
-        LOG(ERROR) << "ReadFdToString() for stderr failed";
-    }
-
-    if (WIFEXITED(status)) {
-        if (WEXITSTATUS(status) == EXIT_SUCCESS) {
-            return Trim(stdout_content);
-        } else {
-            return Error() << "exited with status " << WEXITSTATUS(status);
-        }
-    } else if (WIFSIGNALED(status)) {
-        return Error() << "killed by signal " << WTERMSIG(status);
-    }
-
-    return Error() << "unexpected exit status " << status;
-}
-
 std::string FirmwareHandler::GetFirmwarePath(const Uevent& uevent) const {
     for (const auto& external_handler : external_firmware_handlers_) {
         if (external_handler.match(uevent.path)) {
@@ -237,11 +145,15 @@
                       << "' for devpath: '" << uevent.path << "' firmware: '" << uevent.firmware
                       << "'";
 
+            std::unordered_map<std::string, std::string> envs_map;
+            envs_map["FIRMWARE"] = uevent.firmware;
+            envs_map["DEVPATH"] = uevent.path;
+
             auto result = RunExternalHandler(external_handler.handler_path, external_handler.uid,
-                                             external_handler.gid, uevent);
+                                             external_handler.gid, envs_map);
             if (!result.ok() && NeedsRerunExternalHandler()) {
                 auto res = RunExternalHandler(external_handler.handler_path, external_handler.uid,
-                                              external_handler.gid, uevent);
+                                              external_handler.gid, envs_map);
                 result = std::move(res);
             }
             if (!result.ok()) {
diff --git a/init/firmware_handler.h b/init/firmware_handler.h
index fceb392..e5d3538 100644
--- a/init/firmware_handler.h
+++ b/init/firmware_handler.h
@@ -54,8 +54,6 @@
     friend void FirmwareTestWithExternalHandler(const std::string& test_name,
                                                 bool expect_new_firmware);
 
-    Result<std::string> RunExternalHandler(const std::string& handler, uid_t uid, gid_t gid,
-                                           const Uevent& uevent) const;
     std::string GetFirmwarePath(const Uevent& uevent) const;
     void ProcessFirmwareEvent(const std::string& path, const std::string& firmware) const;
     bool ForEachFirmwareDirectory(std::function<bool(const std::string&)> handler) const;
diff --git a/init/first_stage_init.cpp b/init/first_stage_init.cpp
index bfe636b..e06a645 100644
--- a/init/first_stage_init.cpp
+++ b/init/first_stage_init.cpp
@@ -38,6 +38,7 @@
 #include <android-base/logging.h>
 #include <android-base/stringprintf.h>
 #include <android/avf_cc_flags.h>
+#include <fs_mgr.h>
 #include <modprobe/modprobe.h>
 #include <private/android_filesystem_config.h>
 
@@ -303,6 +304,22 @@
     return BootMode::NORMAL_MODE;
 }
 
+static void MaybeResumeFromHibernation(const std::string& bootconfig) {
+    std::string hibernationResumeDevice;
+    android::fs_mgr::GetBootconfigFromString(bootconfig, "androidboot.hibernation_resume_device",
+                                             &hibernationResumeDevice);
+    if (!hibernationResumeDevice.empty()) {
+        android::base::unique_fd fd(open("/sys/power/resume", O_RDWR | O_CLOEXEC));
+        if (fd >= 0) {
+            if (!android::base::WriteStringToFd(hibernationResumeDevice, fd)) {
+                PLOG(ERROR) << "Failed to write to /sys/power/resume";
+            }
+        } else {
+            PLOG(ERROR) << "Failed to open /sys/power/resume";
+        }
+    }
+}
+
 static std::unique_ptr<FirstStageMount> CreateFirstStageMount(const std::string& cmdline) {
     auto ret = FirstStageMount::Create(cmdline);
     if (ret.ok()) {
@@ -442,6 +459,8 @@
                   << module_elapse_time.count() << " ms";
     }
 
+    MaybeResumeFromHibernation(bootconfig);
+
     std::unique_ptr<FirstStageMount> fsm;
 
     bool created_devices = false;
diff --git a/init/first_stage_mount.cpp b/init/first_stage_mount.cpp
index 55cce6e..aa6b551 100644
--- a/init/first_stage_mount.cpp
+++ b/init/first_stage_mount.cpp
@@ -32,9 +32,12 @@
 #include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
+#include <android-base/parseint.h>
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
 #include <android/avf_cc_flags.h>
+#include <bootloader_message/bootloader_message.h>
+#include <cutils/android_reboot.h>
 #include <fs_avb/fs_avb.h>
 #include <fs_mgr.h>
 #include <fs_mgr_dm_linear.h>
@@ -46,6 +49,7 @@
 
 #include "block_dev_initializer.h"
 #include "devices.h"
+#include "reboot_utils.h"
 #include "result.h"
 #include "snapuserd_transition.h"
 #include "switch_root.h"
@@ -111,6 +115,8 @@
     bool GetDmVerityDevices(std::set<std::string>* devices);
     bool SetUpDmVerity(FstabEntry* fstab_entry);
 
+    void RequestTradeInModeWipeIfNeeded();
+
     bool InitAvbHandle();
 
     bool need_dm_verity_;
@@ -263,6 +269,8 @@
 }
 
 bool FirstStageMountVBootV2::DoFirstStageMount() {
+    RequestTradeInModeWipeIfNeeded();
+
     if (!IsDmLinearEnabled() && fstab_.empty()) {
         // Nothing to mount.
         LOG(INFO) << "First stage mount skipped (missing/incompatible/empty fstab in device tree)";
@@ -280,6 +288,10 @@
 }
 
 bool FirstStageMountVBootV2::InitDevices() {
+    if (!block_dev_init_.InitBootDevicesFromPartUuid()) {
+        return false;
+    }
+
     std::set<std::string> devices;
     GetSuperDeviceName(&devices);
 
@@ -366,6 +378,14 @@
     }
 
     if (SnapshotManager::IsSnapshotManagerNeeded()) {
+        auto init_devices = [this](const std::string& device) -> bool {
+            if (android::base::StartsWith(device, "/dev/block/dm-")) {
+                return block_dev_init_.InitDmDevice(device);
+            }
+            return block_dev_init_.InitDevices({device});
+        };
+
+        SnapshotManager::MapTempOtaMetadataPartitionIfNeeded(init_devices);
         auto sm = SnapshotManager::NewForFirstStageMount();
         if (!sm) {
             return false;
@@ -870,6 +890,55 @@
     return true;
 }
 
+void FirstStageMountVBootV2::RequestTradeInModeWipeIfNeeded() {
+    static constexpr const char* kWipeIndicator = "/metadata/tradeinmode/wipe";
+    static constexpr size_t kWipeAttempts = 3;
+
+    if (access(kWipeIndicator, R_OK) == -1) {
+        return;
+    }
+
+    // Write a counter to the wipe indicator, to try and prevent boot loops if
+    // recovery fails to wipe data.
+    uint32_t counter = 0;
+    std::string contents;
+    if (ReadFileToString(kWipeIndicator, &contents)) {
+        android::base::ParseUint(contents, &counter);
+        contents = std::to_string(++counter);
+        if (android::base::WriteStringToFile(contents, kWipeIndicator)) {
+            sync();
+        } else {
+            PLOG(ERROR) << "Failed to update " << kWipeIndicator;
+        }
+    } else {
+        PLOG(ERROR) << "Failed to read " << kWipeIndicator;
+    }
+
+    std::string err;
+    auto misc_device = get_misc_blk_device(&err);
+    if (misc_device.empty()) {
+        LOG(FATAL) << "Could not find misc device: " << err;
+    }
+
+    auto misc_name = android::base::Basename(misc_device);
+    if (!block_dev_init_.InitDevices({misc_name})) {
+        LOG(FATAL) << "Could not find misc device: " << misc_device;
+    }
+
+    // If we've failed to wipe three times, don't include the wipe command. This
+    // will force us to boot into the recovery menu instead where a manual wipe
+    // can be attempted.
+    std::vector<std::string> options;
+    if (counter <= kWipeAttempts) {
+        options.emplace_back("--wipe_data");
+        options.emplace_back("--reason=tradeinmode");
+    }
+    if (!write_bootloader_message(options, &err)) {
+        LOG(FATAL) << "Could not issue wipe: " << err;
+    }
+    RebootSystem(ANDROID_RB_RESTART2, "recovery", "reboot,tradeinmode,wipe");
+}
+
 void SetInitAvbVersionInRecovery() {
     if (!IsRecoveryMode()) {
         LOG(INFO) << "Skipped setting INIT_AVB_VERSION (not in recovery mode)";
diff --git a/init/fuzzer/Android.bp b/init/fuzzer/Android.bp
index 5823932..8cfd597 100644
--- a/init/fuzzer/Android.bp
+++ b/init/fuzzer/Android.bp
@@ -30,7 +30,6 @@
     shared_libs: [
         "libbase",
         "libfs_mgr",
-        "libhidl-gen-utils",
         "liblog",
         "libprocessgroup",
         "libselinux",
@@ -49,7 +48,6 @@
     srcs: [
         "init_parser_fuzzer.cpp",
     ],
-    shared_libs: ["libhidlmetadata",],
     defaults: [
         "libinit_fuzzer_defaults",
     ],
diff --git a/init/fuzzer/init_parser_fuzzer.cpp b/init/fuzzer/init_parser_fuzzer.cpp
index dc76465..21b04f4 100644
--- a/init/fuzzer/init_parser_fuzzer.cpp
+++ b/init/fuzzer/init_parser_fuzzer.cpp
@@ -15,9 +15,7 @@
  */
 
 #include <fuzzer/FuzzedDataProvider.h>
-#include <hidl/metadata.h>
 #include <import_parser.h>
-#include <interface_utils.h>
 #include <rlimit_parser.h>
 
 using namespace android;
@@ -34,7 +32,6 @@
 };
 
 const int32_t kMaxBytes = 256;
-const std::string kValidInterfaces = "android.frameworks.vr.composer@2.0::IVrComposerClient";
 
 class InitParserFuzzer {
   public:
@@ -44,9 +41,6 @@
   private:
     void InvokeParser();
     void InvokeLimitParser();
-    void InvokeInterfaceUtils();
-    InterfaceInheritanceHierarchyMap GenerateHierarchyMap();
-    std::vector<HidlInterfaceMetadata> GenerateInterfaceMetadata();
 
     FuzzedDataProvider fdp_;
 };
@@ -64,60 +58,6 @@
     }
 }
 
-std::vector<HidlInterfaceMetadata> InitParserFuzzer::GenerateInterfaceMetadata() {
-    std::vector<HidlInterfaceMetadata> random_interface;
-    for (size_t idx = 0; idx < fdp_.ConsumeIntegral<size_t>(); ++idx) {
-        HidlInterfaceMetadata metadata;
-        metadata.name = fdp_.ConsumeRandomLengthString(kMaxBytes);
-        for (size_t idx1 = 0; idx1 < fdp_.ConsumeIntegral<size_t>(); ++idx1) {
-            metadata.inherited.push_back(fdp_.ConsumeRandomLengthString(kMaxBytes));
-        }
-        random_interface.push_back(metadata);
-    }
-    return random_interface;
-}
-
-InterfaceInheritanceHierarchyMap InitParserFuzzer::GenerateHierarchyMap() {
-    InterfaceInheritanceHierarchyMap result;
-    std::vector<HidlInterfaceMetadata> random_interface;
-    if (fdp_.ConsumeBool()) {
-        random_interface = GenerateInterfaceMetadata();
-    } else {
-        random_interface = HidlInterfaceMetadata::all();
-    }
-
-    for (const HidlInterfaceMetadata& iface : random_interface) {
-        std::set<FQName> inherited_interfaces;
-        for (const std::string& intf : iface.inherited) {
-            FQName fqname;
-            (void)fqname.setTo(intf);
-            inherited_interfaces.insert(fqname);
-        }
-        FQName fqname;
-        (void)fqname.setTo(iface.name);
-        result[fqname] = inherited_interfaces;
-    }
-    return result;
-}
-
-void InitParserFuzzer::InvokeInterfaceUtils() {
-    InterfaceInheritanceHierarchyMap hierarchy_map = GenerateHierarchyMap();
-    SetKnownInterfaces(hierarchy_map);
-    IsKnownInterface(fdp_.ConsumeRandomLengthString(kMaxBytes));
-    std::set<std::string> interface_set;
-    for (size_t idx = 0; idx < fdp_.ConsumeIntegral<size_t>(); ++idx) {
-        auto set_interface_values = fdp_.PickValueInArray<const std::function<void()>>({
-                [&]() {
-                    interface_set.insert(("aidl/" + fdp_.ConsumeRandomLengthString(kMaxBytes)));
-                },
-                [&]() { interface_set.insert(fdp_.ConsumeRandomLengthString(kMaxBytes)); },
-                [&]() { interface_set.insert(kValidInterfaces); },
-        });
-        set_interface_values();
-    }
-    CheckInterfaceInheritanceHierarchy(interface_set, hierarchy_map);
-}
-
 void InitParserFuzzer::InvokeParser() {
     Parser parser;
     std::string name = fdp_.ConsumeBool() ? fdp_.ConsumeRandomLengthString(kMaxBytes) : "import";
@@ -132,7 +72,6 @@
     while (fdp_.remaining_bytes()) {
         auto invoke_parser_fuzzer = fdp_.PickValueInArray<const std::function<void()>>({
                 [&]() { InvokeParser(); },
-                [&]() { InvokeInterfaceUtils(); },
                 [&]() { InvokeLimitParser(); },
         });
         invoke_parser_fuzzer();
diff --git a/init/host_init_verifier.cpp b/init/host_init_verifier.cpp
index f746ab9..287857a 100644
--- a/init/host_init_verifier.cpp
+++ b/init/host_init_verifier.cpp
@@ -297,9 +297,7 @@
     ActionManager& am = ActionManager::GetInstance();
     ServiceList& sl = ServiceList::GetInstance();
     Parser parser;
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(&sl, GetSubcontext(),
-                                                            *interface_inheritance_hierarchy_map));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(&sl, GetSubcontext()));
     parser.AddSectionParser("on", std::make_unique<ActionParser>(&am, GetSubcontext()));
     parser.AddSectionParser("import", std::make_unique<HostImportParser>());
 
@@ -317,11 +315,23 @@
             return EXIT_FAILURE;
         }
     }
+
     size_t failures = parser.parse_error_count() + am.CheckAllCommands() + sl.CheckAllCommands();
     if (failures > 0) {
         LOG(ERROR) << "Failed to parse init scripts with " << failures << " error(s).";
         return EXIT_FAILURE;
     }
+
+    for (const auto& service : sl) {
+        if (const auto& result = CheckInterfaceInheritanceHierarchy(
+                    service->interfaces(), *interface_inheritance_hierarchy_map);
+            !result.ok()) {
+            LOG(ERROR) << service->filename() << ": invalid interface in service '"
+                       << service->name() << "': " << result.error();
+            return EXIT_FAILURE;
+        }
+    }
+
     return EXIT_SUCCESS;
 }
 
diff --git a/init/init.cpp b/init/init.cpp
index 19e909f..5b0b0dd 100644
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -26,13 +26,11 @@
 #include <sys/eventfd.h>
 #include <sys/mount.h>
 #include <sys/signalfd.h>
+#include <sys/system_properties.h>
 #include <sys/types.h>
 #include <sys/utsname.h>
 #include <unistd.h>
 
-#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
-#include <sys/_system_properties.h>
-
 #include <filesystem>
 #include <fstream>
 #include <functional>
@@ -270,8 +268,8 @@
 Parser CreateParser(ActionManager& action_manager, ServiceList& service_list) {
     Parser parser;
 
-    parser.AddSectionParser("service", std::make_unique<ServiceParser>(
-                                               &service_list, GetSubcontext(), std::nullopt));
+    parser.AddSectionParser("service",
+                            std::make_unique<ServiceParser>(&service_list, GetSubcontext()));
     parser.AddSectionParser("on", std::make_unique<ActionParser>(&action_manager, GetSubcontext()));
     parser.AddSectionParser("import", std::make_unique<ImportParser>(&parser));
 
@@ -317,8 +315,7 @@
         if (apex_info_list.has_value()) {
             std::vector<std::string> subcontext_apexes;
             for (const auto& info : apex_info_list->getApexInfo()) {
-                if (info.hasPreinstalledModulePath() &&
-                    subcontext->PathMatchesSubcontext(info.getPreinstalledModulePath())) {
+                if (subcontext->PartitionMatchesSubcontext(info.getPartition())) {
                     subcontext_apexes.push_back(info.getModuleName());
                 }
             }
@@ -326,9 +323,7 @@
         }
     }
 #endif  // RECOVERY
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(&service_list, subcontext,
-                            std::nullopt));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(&service_list, subcontext));
     parser.AddSectionParser("on", std::make_unique<ActionParser>(&action_manager, subcontext));
 
     return parser;
@@ -640,9 +635,6 @@
         LOG(INFO) << "Cgroups support in kernel is not enabled";
         return {};
     }
-    // Have to create <CGROUPS_RC_DIR> using make_dir function
-    // for appropriate sepolicy to be set for it
-    make_dir(android::base::Dirname(CGROUPS_RC_PATH), 0711);
     if (!CgroupSetup()) {
         return ErrnoError() << "Failed to setup cgroups";
     }
diff --git a/init/init_test.cpp b/init/init_test.cpp
index 5088273..f280de9 100644
--- a/init/init_test.cpp
+++ b/init/init_test.cpp
@@ -62,8 +62,7 @@
     Action::set_function_map(&test_function_map);
 
     Parser parser;
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(service_list, nullptr, std::nullopt));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(service_list, nullptr));
     parser.AddSectionParser("on", std::make_unique<ActionParser>(action_manager, nullptr));
     parser.AddSectionParser("import", std::make_unique<ImportParser>(&parser));
 
@@ -625,8 +624,7 @@
 
     ServiceList service_list;
     Parser parser;
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(&service_list, nullptr, std::nullopt));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(&service_list, nullptr));
 
     ASSERT_TRUE(parser.ParseConfig(tf.path));
 
@@ -657,8 +655,7 @@
 
     ServiceList service_list;
     Parser parser;
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(&service_list, nullptr, std::nullopt));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(&service_list, nullptr));
 
     ASSERT_TRUE(parser.ParseConfig(tf.path));
     ASSERT_EQ(1u, parser.parse_error_count());
diff --git a/init/interface_utils.cpp b/init/interface_utils.cpp
index 1b76bba..84407aa 100644
--- a/init/interface_utils.cpp
+++ b/init/interface_utils.cpp
@@ -39,27 +39,6 @@
     return android::base::Join(fqname_strings, " ");
 }
 
-}  // namespace
-
-Result<void> CheckInterfaceInheritanceHierarchy(const std::set<std::string>& instances,
-                                                const InterfaceInheritanceHierarchyMap& hierarchy) {
-    std::set<FQName> interface_fqnames;
-    for (const std::string& instance : instances) {
-        // There is insufficient build-time information on AIDL interfaces to check them here
-        // TODO(b/139307527): Rework how services store interfaces to avoid excess string parsing
-        if (base::Split(instance, "/")[0] == "aidl") {
-            continue;
-        }
-
-        FqInstance fqinstance;
-        if (!fqinstance.setTo(instance)) {
-            return Error() << "Unable to parse interface instance '" << instance << "'";
-        }
-        interface_fqnames.insert(fqinstance.getFqName());
-    }
-    return CheckInterfaceInheritanceHierarchy(interface_fqnames, hierarchy);
-}
-
 Result<void> CheckInterfaceInheritanceHierarchy(const std::set<FQName>& interfaces,
                                                 const InterfaceInheritanceHierarchyMap& hierarchy) {
     std::ostringstream error_stream;
@@ -90,6 +69,27 @@
     return {};
 }
 
+}  // namespace
+
+Result<void> CheckInterfaceInheritanceHierarchy(const std::set<std::string>& instances,
+                                                const InterfaceInheritanceHierarchyMap& hierarchy) {
+    std::set<FQName> interface_fqnames;
+    for (const std::string& instance : instances) {
+        // There is insufficient build-time information on AIDL interfaces to check them here
+        // TODO(b/139307527): Rework how services store interfaces to avoid excess string parsing
+        if (base::Split(instance, "/")[0] == "aidl") {
+            continue;
+        }
+
+        FqInstance fqinstance;
+        if (!fqinstance.setTo(instance)) {
+            return Error() << "Unable to parse interface instance '" << instance << "'";
+        }
+        interface_fqnames.insert(fqinstance.getFqName());
+    }
+    return CheckInterfaceInheritanceHierarchy(interface_fqnames, hierarchy);
+}
+
 std::optional<std::set<FQName>> known_interfaces;
 
 void SetKnownInterfaces(const InterfaceInheritanceHierarchyMap& hierarchy) {
diff --git a/init/interface_utils.h b/init/interface_utils.h
index 4ca377f..214feda 100644
--- a/init/interface_utils.h
+++ b/init/interface_utils.h
@@ -34,8 +34,6 @@
 // interface set. Uses the provided hierarchy data.
 Result<void> CheckInterfaceInheritanceHierarchy(const std::set<std::string>& instances,
                                                 const InterfaceInheritanceHierarchyMap& hierarchy);
-Result<void> CheckInterfaceInheritanceHierarchy(const std::set<android::FQName>& interfaces,
-                                                const InterfaceInheritanceHierarchyMap& hierarchy);
 
 // Saves the set of known interfaces using the provided HIDL interface
 // inheritance hierarchy.
diff --git a/init/keychords_test.cpp b/init/keychords_test.cpp
index 5789bf5..2b1d428 100644
--- a/init/keychords_test.cpp
+++ b/init/keychords_test.cpp
@@ -168,16 +168,16 @@
 const std::vector<int> triple1_chord = {KEY_BACKSPACE, KEY_VOLUMEDOWN, KEY_VOLUMEUP};
 const std::vector<int> triple2_chord = {KEY_VOLUMEDOWN, KEY_VOLUMEUP, KEY_BACK};
 
-const std::vector<const std::vector<int>> empty_chords;
-const std::vector<const std::vector<int>> chords = {
-    escape_chord,
-    triple1_chord,
-    triple2_chord,
+const std::vector<std::vector<int>> empty_chords;
+const std::vector<std::vector<int>> chords = {
+        escape_chord,
+        triple1_chord,
+        triple2_chord,
 };
 
 class TestFrame {
   public:
-    TestFrame(const std::vector<const std::vector<int>>& chords, EventHandler* ev = nullptr);
+    TestFrame(const std::vector<std::vector<int>>& chords, EventHandler* ev = nullptr);
 
     void RelaxForMs(std::chrono::milliseconds wait = 1ms);
 
@@ -194,16 +194,15 @@
     std::string Format() const;
 
   private:
-    static std::string Format(const std::vector<const std::vector<int>>& chords);
+    static std::string Format(const std::vector<std::vector<int>>& chords);
 
     Epoll epoll_;
     Keychords keychords_;
-    std::vector<const std::vector<int>> keycodes_;
+    std::vector<std::vector<int>> keycodes_;
     EventHandler* ev_;
 };
 
-TestFrame::TestFrame(const std::vector<const std::vector<int>>& chords, EventHandler* ev)
-    : ev_(ev) {
+TestFrame::TestFrame(const std::vector<std::vector<int>>& chords, EventHandler* ev) : ev_(ev) {
     if (!epoll_.Open().ok()) return;
     for (const auto& keycodes : chords) keychords_.Register(keycodes);
     keychords_.Start(&epoll_, [this](const std::vector<int>& keycodes) {
@@ -262,7 +261,7 @@
     for (int retry = 1000; retry && !IsChord(chord); --retry) RelaxForMs();
 }
 
-std::string TestFrame::Format(const std::vector<const std::vector<int>>& chords) {
+std::string TestFrame::Format(const std::vector<std::vector<int>>& chords) {
     std::string ret("{");
     if (!chords.empty()) {
         ret += android::base::Join(chords.front(), ' ');
diff --git a/init/libprefetch/prefetch/Android.bp b/init/libprefetch/prefetch/Android.bp
new file mode 100644
index 0000000..778ea8a
--- /dev/null
+++ b/init/libprefetch/prefetch/Android.bp
@@ -0,0 +1,80 @@
+//
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+    default_team: "trendy_team_android_kernel",
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+rust_library_rlib {
+    name: "libprefetch_rs",
+    crate_name: "prefetch_rs",
+    srcs: ["src/lib.rs"],
+    rustlibs: [
+        "libandroid_logger",
+        "libargh",
+        "libchrono",
+        "libcrc32fast",
+        "libcsv",
+        "liblibc",
+        "liblog_rust",
+        "liblru_cache",
+        "libnix",
+        "librand",
+        "librayon",
+        "libregex",
+        "libserde_cbor",
+        "libserde_json",
+        "libserde",
+        "libthiserror",
+        "libwalkdir",
+        "librustutils",
+    ],
+    prefer_rlib: true,
+    features: [
+        "derive",
+        "error-context",
+        "help",
+        "std",
+        "usage",
+        "use_argh",
+    ],
+}
+
+rust_binary {
+    name: "prefetch",
+    crate_name: "prefetch",
+    srcs: ["src/main.rs"],
+    rustlibs: [
+        "libprefetch_rs",
+        "liblog_rust",
+        "libandroid_logger",
+    ],
+    prefer_rlib: true,
+    features: [
+        "default",
+        "derive",
+        "error-context",
+        "help",
+        "std",
+        "usage",
+        "use_argh",
+    ],
+    init_rc: [
+        "prefetch.rc",
+    ],
+}
+
+// TODO: Add rust_test to enable unit testing - b/378554334
diff --git a/init/libprefetch/prefetch/Cargo.lock b/init/libprefetch/prefetch/Cargo.lock
new file mode 100644
index 0000000..d6b214d
--- /dev/null
+++ b/init/libprefetch/prefetch/Cargo.lock
@@ -0,0 +1,743 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_log-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
+
+[[package]]
+name = "android_logger"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9ed09b18365ed295d722d0b5ed59c01b79a826ff2d2a8f73d5ecca8e6fb2f66"
+dependencies = [
+ "android_log-sys",
+ "env_logger",
+ "lazy_static",
+ "log",
+]
+
+[[package]]
+name = "argh"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab257697eb9496bf75526f0217b5ed64636a9cfafa78b8365c71bd283fcef93e"
+dependencies = [
+ "argh_derive",
+ "argh_shared",
+]
+
+[[package]]
+name = "argh_derive"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b382dbd3288e053331f03399e1db106c9fb0d8562ad62cb04859ae926f324fa6"
+dependencies = [
+ "argh_shared",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "argh_shared"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5693f39141bda5760ecc4111ab08da40565d1771038c4a0250f03457ec707531"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bincode"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b92615d57e4048e480bd7e3c2d7f6ec252819fffec95efbc30ec7c68744aa66c"
+dependencies = [
+ "byteorder",
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+
+[[package]]
+name = "bstr"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "csv"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+dependencies = [
+ "bstr",
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.162"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "nix"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "cfg_aliases",
+ "libc",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.4",
+ "libc",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "prefetch"
+version = "0.1.0"
+dependencies = [
+ "android_logger",
+ "argh",
+ "bincode",
+ "chrono",
+ "crc32fast",
+ "csv",
+ "env_logger",
+ "libc",
+ "log",
+ "lru-cache",
+ "memchr",
+ "nix",
+ "proc-macro2",
+ "quote",
+ "rand 0.8.5",
+ "rayon",
+ "rayon-core",
+ "regex",
+ "serde",
+ "serde_cbor",
+ "serde_derive",
+ "serde_json",
+ "tempfile",
+ "thiserror",
+ "thiserror-impl",
+ "walkdir",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.3.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
+dependencies = [
+ "libc",
+ "rand 0.4.6",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "lazy_static",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "regex"
+version = "1.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.123"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.123"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tempfile"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11ce2fe9db64b842314052e2421ac61a73ce41b898dc8e3750398b219c5fc1e0"
+dependencies = [
+ "kernel32-sys",
+ "libc",
+ "rand 0.3.23",
+ "redox_syscall",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/init/libprefetch/prefetch/Cargo.toml b/init/libprefetch/prefetch/Cargo.toml
new file mode 100644
index 0000000..7da4fc6
--- /dev/null
+++ b/init/libprefetch/prefetch/Cargo.toml
@@ -0,0 +1,51 @@
+[package]
+name = "prefetch"
+version = "0.1.0"
+edition = "2018"
+default-run = "prefetch"
+
+[lib]
+name = "prefetch_rs"
+path = "src/lib.rs"
+
+[[bin]]
+name = "prefetch"
+path = "src/main.rs"
+
+[features]
+default = ["use_argh"]
+use_argh = ["argh"]
+
+[dependencies]
+argh = { version = "0.1.10", optional = true }
+chrono = { version = "=0.4.19", features = ["serde"] }
+crc32fast = "1.2.1"
+csv = "=1.1.6"
+libc = "0.2.82"
+log = "=0.4.14"
+lru-cache = "0.1.2"
+memchr = "=2.3.4"
+nix = {version = "0.28", features = ["fs", "time", "feature", "mman", "uio"]}
+proc-macro2 = "=1.0.26"
+quote = "=1.0.9"
+rand = "0.8.3"
+rayon = "=1.5.0"
+rayon-core = "=1.9.0"
+regex = "1.4.5"
+serde = { version = "*", features = ["derive"] }
+serde_cbor = "0.11.2"
+serde_derive = "=1.0.123"
+serde_json = "=1.0.62"
+thiserror = "=1.0.24"
+thiserror-impl = "1.0.24"
+walkdir = "2.3.2"
+
+# crates required for android builds
+[target.'cfg(target_os = "android")'.dependencies]
+android_logger = "0.10.1"
+
+# crates not present in android builds
+[target.'cfg(not(target_os = "android"))'.dependencies]
+bincode = "=0.9.0"
+env_logger = "=0.8.4"
+tempfile = "2.2.0"
diff --git a/init/libprefetch/prefetch/OWNERS b/init/libprefetch/prefetch/OWNERS
new file mode 100644
index 0000000..a1b54bf
--- /dev/null
+++ b/init/libprefetch/prefetch/OWNERS
@@ -0,0 +1,3 @@
+akailash@google.com
+auradkar@google.com
+takayas@google.com
diff --git a/init/libprefetch/prefetch/prefetch.rc b/init/libprefetch/prefetch/prefetch.rc
new file mode 100644
index 0000000..fb3fb3b
--- /dev/null
+++ b/init/libprefetch/prefetch/prefetch.rc
@@ -0,0 +1,29 @@
+on init && property:ro.prefetch_boot.enabled=true
+    start prefetch
+
+service prefetch /system/bin/prefetch start
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
+
+on property:ro.prefetch_boot.record=true
+    start prefetch_record
+
+service prefetch_record /system/bin/prefetch record --duration ${ro.prefetch_boot.duration_s:-0}
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
+
+on property:ro.prefetch_boot.replay=true
+    start prefetch_replay
+
+service prefetch_replay /system/bin/prefetch replay --io-depth ${ro.prefetch_boot.io_depth:-2} --max-fds ${ro.prefetch_boot.max_fds:-128}
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
diff --git a/init/libprefetch/prefetch/src/arch/android.rs b/init/libprefetch/prefetch/src/arch/android.rs
new file mode 100644
index 0000000..c765e38
--- /dev/null
+++ b/init/libprefetch/prefetch/src/arch/android.rs
@@ -0,0 +1,118 @@
+use crate::Error;
+use crate::RecordArgs;
+use crate::StartArgs;
+use log::info;
+use log::warn;
+use std::fs::File;
+use std::fs::OpenOptions;
+use std::io::Write;
+use std::time::Duration;
+
+use rustutils::system_properties::error::PropertyWatcherError;
+use rustutils::system_properties::PropertyWatcher;
+
+const PREFETCH_RECORD_PROPERTY: &str = "ro.prefetch_boot.record";
+const PREFETCH_REPLAY_PROPERTY: &str = "ro.prefetch_boot.replay";
+const PREFETCH_RECORD_PROPERTY_STOP: &str = "ro.prefetch_boot.record_stop";
+
+fn wait_for_property_true(
+    property_name: &str,
+    timeout: Option<Duration>,
+) -> Result<(), PropertyWatcherError> {
+    let mut prop = PropertyWatcher::new(property_name)?;
+    prop.wait_for_value("1", timeout)?;
+    Ok(())
+}
+
+/// Wait for record to stop
+pub fn wait_for_record_stop() {
+    wait_for_property_true(PREFETCH_RECORD_PROPERTY_STOP, None).unwrap_or_else(|e| {
+        warn!("failed to wait for {} with error: {}", PREFETCH_RECORD_PROPERTY_STOP, e)
+    });
+}
+
+fn start_prefetch_service(property_name: &str) -> Result<(), Error> {
+    match rustutils::system_properties::write(property_name, "true") {
+        Ok(_) => {}
+        Err(_) => {
+            return Err(Error::Custom { error: "Failed to start prefetch service".to_string() });
+        }
+    }
+    Ok(())
+}
+
+/// Start prefetch service
+///
+/// 1: Check the presence of the file 'prefetch_ready'. If it doesn't
+/// exist then the device is booting for the first time after wipe.
+/// Thus, we would just create the file and exit as we do not want
+/// to initiate the record after data wipe primiarly because boot
+/// after data wipe is long and the I/O pattern during first boot may not actually match
+/// with subsequent boot.
+///
+/// 2: If the file 'prefetch_ready' is present:
+///
+///   a: Compare the build-finger-print of the device with the one record format
+///   is associated with by reading the file 'build_finger_print'. If they match,
+///   start the prefetch_replay.
+///
+///   b: If they don't match, then the device was updated through OTA. Hence, start
+///   a fresh record and delete the build-finger-print file. This should also cover
+///   the case of device rollback.
+///
+///   c: If the build-finger-print file doesn't exist, then just restart the record
+///   from scratch.
+pub fn start_prefetch(args: &StartArgs) -> Result<(), Error> {
+    if !args.path.exists() {
+        match File::create(args.path.clone()) {
+            Ok(_) => {}
+            Err(_) => {
+                return Err(Error::Custom { error: "File Creation failed".to_string() });
+            }
+        }
+        return Ok(());
+    }
+
+    if args.build_fingerprint_path.exists() {
+        let device_build_fingerprint = rustutils::system_properties::read("ro.build.fingerprint")
+            .map_err(|e| Error::Custom {
+            error: format!("Failed to read ro.build.fingerprint: {}", e),
+        })?;
+        let pack_build_fingerprint = std::fs::read_to_string(&args.build_fingerprint_path)?;
+        if pack_build_fingerprint.trim() == device_build_fingerprint.as_deref().unwrap_or_default()
+        {
+            info!("Start replay");
+            start_prefetch_service(PREFETCH_REPLAY_PROPERTY)?;
+        } else {
+            info!("Start record");
+            std::fs::remove_file(&args.build_fingerprint_path)?;
+            start_prefetch_service(PREFETCH_RECORD_PROPERTY)?;
+        }
+    } else {
+        info!("Start record");
+        start_prefetch_service(PREFETCH_RECORD_PROPERTY)?;
+    }
+    Ok(())
+}
+
+/// Write build finger print to associate prefetch pack file
+pub fn write_build_fingerprint(args: &RecordArgs) -> Result<(), Error> {
+    let mut build_fingerprint_file = OpenOptions::new()
+        .write(true)
+        .create(true)
+        .truncate(true)
+        .open(&args.build_fingerprint_path)
+        .map_err(|source| Error::Create {
+            source,
+            path: args.build_fingerprint_path.to_str().unwrap().to_owned(),
+        })?;
+
+    let device_build_fingerprint =
+        rustutils::system_properties::read("ro.build.fingerprint").unwrap_or_default();
+    let device_build_fingerprint = device_build_fingerprint.unwrap_or_default();
+
+    build_fingerprint_file.write_all(device_build_fingerprint.as_bytes())?;
+    build_fingerprint_file.sync_all()?;
+
+    Ok(())
+}
diff --git a/init/libprefetch/prefetch/src/args.rs b/init/libprefetch/prefetch/src/args.rs
new file mode 100644
index 0000000..e534210
--- /dev/null
+++ b/init/libprefetch/prefetch/src/args.rs
@@ -0,0 +1,112 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+pub(crate) static DEFAULT_IO_DEPTH: u16 = 2;
+pub(crate) static DEFAULT_MAX_FDS: u16 = 128;
+pub(crate) static DEFAULT_EXIT_ON_ERROR: bool = false;
+
+mod args_argh;
+use args_argh as args_internal;
+
+use std::path::Path;
+use std::path::PathBuf;
+use std::process::exit;
+
+pub use args_internal::OutputFormat;
+pub use args_internal::ReplayArgs;
+#[cfg(target_os = "android")]
+pub use args_internal::StartArgs;
+pub use args_internal::TracerType;
+pub use args_internal::{DumpArgs, MainArgs, RecordArgs, SubCommands};
+use serde::Deserialize;
+use serde::Serialize;
+
+use crate::Error;
+use log::error;
+
+// Deserialized form of the config file
+#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
+pub struct ConfigFile {
+    // Files to be excluded in prefetch. These files might have been
+    // added in the record file while recording,but we do not want to
+    // replay these files. These can be two types of files:
+    // 1) installation-specific files (e.g. files in /data) and
+    // 2) large files which we do not want to load in replay (e.g. APK files).
+    pub files_to_exclude_regex: Vec<String>,
+    // Files that are not in the record file, but need to be loaded during replay
+    pub additional_replay_files: Vec<String>,
+}
+
+fn verify_and_fix(args: &mut MainArgs) -> Result<(), Error> {
+    match &mut args.nested {
+        SubCommands::Record(arg) => {
+            if arg.debug && arg.int_path.is_none() {
+                arg.int_path = Some(PathBuf::from(format!("{}.int", arg.path.to_str().unwrap())));
+            }
+
+            if let Some(p) = &arg.int_path {
+                ensure_path_doesnt_exist(p)?;
+            }
+        }
+        SubCommands::Replay(arg) => {
+            ensure_path_exists(&arg.path)?;
+            if !arg.config_path.as_os_str().is_empty() {
+                ensure_path_exists(&arg.config_path)?;
+            }
+        }
+        SubCommands::Dump(arg) => {
+            ensure_path_exists(&arg.path)?;
+        }
+        #[cfg(target_os = "android")]
+        SubCommands::Start(_arg) => return Ok(()),
+    }
+    Ok(())
+}
+
+/// Returns error if the given path at `p` exist.
+pub(crate) fn ensure_path_doesnt_exist(p: &Path) -> Result<(), Error> {
+    if p.exists() {
+        Err(Error::InvalidArgs {
+            arg_name: "path".to_string(),
+            arg_value: p.display().to_string(),
+            error: "Path already exists".to_string(),
+        })
+    } else {
+        Ok(())
+    }
+}
+
+/// Returns error if the given path at `p` doesn't exist.
+pub(crate) fn ensure_path_exists(p: &Path) -> Result<(), Error> {
+    if p.is_file() {
+        Ok(())
+    } else {
+        Err(Error::InvalidArgs {
+            arg_name: "path".to_string(),
+            arg_value: p.display().to_string(),
+            error: "Path does not exist".to_string(),
+        })
+    }
+}
+
+/// Builds `MainArgs` from command line arguments. On error prints error/help message
+/// and exits.
+pub fn args_from_env() -> MainArgs {
+    let mut args = args_internal::args_from_env();
+    if let Err(e) = verify_and_fix(&mut args) {
+        error!("failed to verify args: {}", e);
+        exit(1);
+    }
+    args
+}
diff --git a/init/libprefetch/prefetch/src/args/args_argh.rs b/init/libprefetch/prefetch/src/args/args_argh.rs
new file mode 100644
index 0000000..65084ee
--- /dev/null
+++ b/init/libprefetch/prefetch/src/args/args_argh.rs
@@ -0,0 +1,254 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::{option::Option, path::PathBuf, result::Result::Ok, str::FromStr};
+
+use argh::FromArgs;
+use serde::Deserialize;
+
+use crate::args::DEFAULT_EXIT_ON_ERROR;
+use crate::args::DEFAULT_IO_DEPTH;
+use crate::args::DEFAULT_MAX_FDS;
+use crate::Error;
+
+/// prefetch-rs
+#[derive(Eq, PartialEq, Debug, Default, FromArgs)]
+pub struct MainArgs {
+    /// subcommands
+    #[argh(subcommand)]
+    pub nested: SubCommands,
+}
+
+/// Sub commands for prefetch functions
+#[derive(Eq, PartialEq, Debug, FromArgs)]
+#[argh(subcommand)]
+pub enum SubCommands {
+    /// Records prefetch data.
+    Record(RecordArgs),
+    /// Replays from prefetch data
+    Replay(ReplayArgs),
+    /// Dump prefetch data in human readable format
+    Dump(DumpArgs),
+    /// Start prefetch service if possible
+    /// If the pack file is present, then prefetch replay is started
+    /// If the pack file is absent or if the build fingerprint
+    /// of the current pack file is different, then prefetch record is started.
+    #[cfg(target_os = "android")]
+    Start(StartArgs),
+}
+
+#[cfg(target_os = "android")]
+fn default_ready_path() -> PathBuf {
+    PathBuf::from("/metadata/prefetch/prefetch_ready")
+}
+
+#[cfg(target_os = "android")]
+fn default_build_finger_print_path() -> PathBuf {
+    PathBuf::from("/metadata/prefetch/build_finger_print")
+}
+
+#[cfg(target_os = "android")]
+#[derive(Eq, PartialEq, Debug, Default, FromArgs)]
+/// Start prefetch service based on if pack file is present.
+#[argh(subcommand, name = "start")]
+pub struct StartArgs {
+    /// file path to check if prefetch_ready is present.
+    ///
+    /// A new file is created at the given path if it's not present.
+    #[argh(option, default = "default_ready_path()")]
+    pub path: PathBuf,
+
+    /// file path where build fingerprint is stored
+    #[argh(option, default = "default_build_finger_print_path()")]
+    pub build_fingerprint_path: PathBuf,
+}
+
+impl Default for SubCommands {
+    fn default() -> Self {
+        Self::Dump(DumpArgs::default())
+    }
+}
+
+fn default_path() -> PathBuf {
+    PathBuf::from("/metadata/prefetch/prefetch.pack")
+}
+
+fn parse_tracing_instance(value: &str) -> Result<Option<String>, String> {
+    Ok(Some(value.to_string()))
+}
+
+#[derive(Eq, PartialEq, Debug, Default, FromArgs)]
+/// Records prefect data.
+#[argh(subcommand, name = "record")]
+pub struct RecordArgs {
+    /// duration in seconds to record the data
+    ///
+    /// On Android, if duration count is set to zero, recording
+    /// will continue until the property sys.boot_completed = 1.
+    #[argh(option)]
+    pub duration: u16,
+
+    /// file path where the records will be written to
+    ///
+    /// A new file is created at the given path. If the path exists, it
+    /// will be overwritten
+    #[argh(option, default = "default_path()")]
+    pub path: PathBuf,
+
+    /// when set an intermediate file will be created that provides more information
+    /// about collected data.
+    #[argh(option, default = "false")]
+    pub debug: bool,
+
+    /// file path where the intermediate file will be written to
+    ///
+    /// A new file is created at the given path. Errors out if the file
+    /// already exists.
+    #[argh(option)]
+    pub int_path: Option<PathBuf>,
+
+    /// size of the trace buffer which holds trace events. We need larger
+    /// buffer on a system that has faster disks or has large number of events
+    /// enabled. Defaults to TRACE_BUFFER_SIZE_KIB KiB.
+    #[argh(option, long = "trace-buffer-size")]
+    pub trace_buffer_size_kib: Option<u64>,
+
+    /// trace subsystem to use. "mem" subsystem is set by default.
+    #[argh(option, default = "Default::default()")]
+    pub tracing_subsystem: TracerType,
+
+    /// if true enables all the needed trace events. And at the end it restores
+    /// the values of those events.
+    /// If false, assumes that user has setup the needed trace events.
+    #[argh(option, default = "true")]
+    pub setup_tracing: bool,
+
+    /// if specified, works on a tracing instance (like /sys/kernel/tracing/instance/my_instance)
+    /// rather than using on shared global instance (i.e. /sys/kernel/tracing)."
+    #[argh(
+        option,
+        default = "Some(\"prefetch\".to_string())",
+        from_str_fn(parse_tracing_instance)
+    )]
+    pub tracing_instance: Option<String>,
+
+    #[cfg(target_os = "android")]
+    /// store build_finger_print to tie the pack format
+    #[argh(option, default = "default_build_finger_print_path()")]
+    pub build_fingerprint_path: PathBuf,
+}
+
+/// Type of tracing subsystem to use.
+#[derive(Deserialize, Clone, Eq, PartialEq, Debug)]
+pub enum TracerType {
+    /// mem tracing subsystem relies on when a file's in-memory page gets added to the fs cache.
+    Mem,
+}
+
+impl FromStr for TracerType {
+    type Err = Error;
+    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
+        Ok(match s.to_lowercase().as_str() {
+            "mem" => Self::Mem,
+            _ => {
+                return Err(Error::InvalidArgs {
+                    arg_name: "tracing_subsystem".to_owned(),
+                    arg_value: s.to_owned(),
+                    error: "unknown value".to_owned(),
+                })
+            }
+        })
+    }
+}
+
+impl Default for TracerType {
+    fn default() -> Self {
+        Self::Mem
+    }
+}
+
+#[derive(Eq, PartialEq, Debug, Default, FromArgs)]
+/// Prefetch data from the recorded file.
+#[argh(subcommand, name = "replay")]
+pub struct ReplayArgs {
+    /// file path from where the records will be read
+    #[argh(option, default = "default_path()")]
+    pub path: PathBuf,
+
+    /// IO depth. Number of IO that can go in parallel.
+    #[argh(option, long = "io-depth", default = "DEFAULT_IO_DEPTH")]
+    pub io_depth: u16,
+
+    /// max number of open fds to cache
+    #[argh(option, arg_name = "max-fds", default = "DEFAULT_MAX_FDS")]
+    pub max_fds: u16,
+
+    /// if true, command exits on encountering any error.
+    ///
+    /// This defaults to false as there is not harm prefetching if we encounter
+    /// non-fatal errors.
+    #[argh(option, default = "DEFAULT_EXIT_ON_ERROR")]
+    pub exit_on_error: bool,
+
+    /// file path from where the prefetch config file will be read
+    #[argh(option, default = "PathBuf::new()")]
+    pub config_path: PathBuf,
+}
+
+/// dump records file in given format
+#[derive(Eq, PartialEq, Debug, Default, FromArgs)]
+#[argh(subcommand, name = "dump")]
+pub struct DumpArgs {
+    /// file path from where the records will be read
+    #[argh(option)]
+    pub path: PathBuf,
+    /// output format. One of json or csv.
+    /// Note: In csv format, few fields are excluded from the output.
+    #[argh(option)]
+    pub format: OutputFormat,
+}
+
+#[derive(Deserialize, Eq, PartialEq, Debug)]
+pub enum OutputFormat {
+    Json,
+    Csv,
+}
+
+impl FromStr for OutputFormat {
+    type Err = Error;
+    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
+        Ok(match s.to_lowercase().as_str() {
+            "csv" => Self::Csv,
+            "json" => Self::Json,
+            _ => {
+                return Err(Error::InvalidArgs {
+                    arg_name: "format".to_owned(),
+                    arg_value: s.to_owned(),
+                    error: "unknown value".to_owned(),
+                })
+            }
+        })
+    }
+}
+
+impl Default for OutputFormat {
+    fn default() -> Self {
+        Self::Json
+    }
+}
+
+/// Build args struct from command line arguments
+pub fn args_from_env() -> MainArgs {
+    argh::from_env()
+}
diff --git a/init/libprefetch/prefetch/src/error.rs b/init/libprefetch/prefetch/src/error.rs
new file mode 100644
index 0000000..8dd938a
--- /dev/null
+++ b/init/libprefetch/prefetch/src/error.rs
@@ -0,0 +1,187 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use thiserror::Error;
+
+use crate::{format::FileId, InodeInfo};
+
+/// Enumerates all possible errors returned by this library.
+#[derive(Debug, Error)]
+pub enum Error {
+    /// Represents a failure to open a file.
+    #[error("Open error: {path}: {source}")]
+    Open {
+        /// The IO error
+        source: std::io::Error,
+        /// Path on which the operation failed.
+        path: String,
+    },
+
+    /// Represents a failure to create a file.
+    #[error("Create error. {path} {source}")]
+    Create {
+        /// The IO error
+        source: std::io::Error,
+        /// Path on which the operation failed.
+        path: String,
+    },
+
+    /// Represents a failure to read trace file.
+    #[error("Read error. {error}")]
+    Read {
+        /// Detailed error message.
+        error: String,
+    },
+
+    /// Represents a failure to write to a file.
+    #[error("Write error. {source}")]
+    Write {
+        /// The IO error
+        source: std::io::Error,
+
+        /// file path
+        path: String,
+    },
+
+    /// Represents a failure to delete a file.
+    #[error("Delete error. {path} {source}")]
+    Delete {
+        /// The IO error
+        source: std::io::Error,
+        /// Path on which the operation failed.
+        path: String,
+    },
+
+    /// Represents a failure to stat a file.
+    #[error("Stat error. {path} {source}")]
+    Stat {
+        /// The IO error
+        source: std::io::Error,
+        /// Path on which the operation failed.
+        path: String,
+    },
+
+    /// Represents a failure to stat a file.
+    #[error("clone failed. {id} {source}")]
+    FileClone {
+        /// The IO error
+        source: std::io::Error,
+        /// File id for which we could not clone the file.
+        id: FileId,
+    },
+
+    /// Represents a failure to mmap a file.
+    #[error("mmap failed. {path} {error}")]
+    Mmap {
+        /// Detailed error message.
+        error: String,
+        /// Path on which the operation failed.
+        path: String,
+    },
+
+    /// Represents a failure to munmap a file.
+    #[error("munmap failed. {length} {error}")]
+    Munmap {
+        /// Detailed error message.
+        error: String,
+        /// Size of file which this munmap failed
+        length: usize,
+    },
+
+    /// Represents all other cases of `std::io::Error`.
+    ///
+    #[error(transparent)]
+    IoError(
+        /// The IO error
+        #[from]
+        std::io::Error,
+    ),
+
+    /// Represents a failure to map FileId to path
+    ///
+    #[error("Failed to map id to path: {id}")]
+    IdNoFound {
+        /// File id for which path lookup failed.
+        id: FileId,
+    },
+
+    /// Indicates that the file is skipped for prefetching
+    /// because it is in the exclude files list.
+    ///
+    #[error("Skipped prefetching file from path: {path}")]
+    SkipPrefetch {
+        /// Path to file for which prefetching is skipped.
+        path: String,
+    },
+
+    /// Represents spurious InodeInfo or missing Record.
+    ///
+    #[error(
+        "Stale inode(s) info found.\n\
+            missing_file_ids: {missing_file_ids:#?}\n\
+            stale_inodes: {stale_inodes:#?} \n\
+            missing_paths:{missing_paths:#?}"
+    )]
+    StaleInode {
+        /// FileIds for which InodeInfo is missing.
+        missing_file_ids: Vec<FileId>,
+
+        /// InodeInfos for which no records exist.
+        stale_inodes: Vec<InodeInfo>,
+
+        /// InodeInfos in which no paths were found.
+        missing_paths: Vec<InodeInfo>,
+    },
+
+    /// Represents a failure to serialize records file.
+    #[error("Serialize error: {error}")]
+    Serialize {
+        /// Detailed error message.
+        error: String,
+    },
+
+    /// Represents a failure to deserialize records file.
+    #[error("Deserialize error: {error}")]
+    Deserialize {
+        /// Detailed error message.
+        error: String,
+    },
+
+    /// Represents a failure from thread pool.
+    #[error("Thread pool error: {error}")]
+    ThreadPool {
+        /// Detailed error message.
+        error: String,
+    },
+
+    /// Represents a failure to setup file.
+    #[error("Failed to setup prefetch: {error}")]
+    Custom {
+        /// Detailed error message.
+        error: String,
+    },
+
+    /// Represents a failure to parse args.
+    #[error("Failed to parse arg:{arg_name} value:{arg_value} error:{error}")]
+    InvalidArgs {
+        /// Arg name.
+        arg_name: String,
+
+        /// Arg value.
+        arg_value: String,
+
+        /// Detailed error message.
+        error: String,
+    },
+}
diff --git a/init/libprefetch/prefetch/src/format.rs b/init/libprefetch/prefetch/src/format.rs
new file mode 100644
index 0000000..ac89a74
--- /dev/null
+++ b/init/libprefetch/prefetch/src/format.rs
@@ -0,0 +1,823 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::cmp::{max, min};
+use std::collections::{BTreeMap, HashMap, HashSet};
+use std::fmt;
+use std::fmt::Display;
+use std::fs::{File, Metadata, OpenOptions};
+use std::hash::Hash;
+use std::io::Write;
+use std::ops::{Deref, DerefMut};
+use std::os::unix::fs::MetadataExt;
+use std::time::SystemTime;
+
+use crc32fast::Hasher;
+use log::debug;
+use regex::Regex;
+use serde::Deserializer;
+use serde::Serialize;
+use serde::{Deserialize, Serializer};
+
+use crate::error::Error;
+
+static MAGIC_UUID: [u8; 16] = [
+    0x10, 0x54, 0x3c, 0xb8, 0x60, 0xdb, 0x49, 0x45, 0xa1, 0xd5, 0xde, 0xa7, 0xd2, 0x3b, 0x05, 0x49,
+];
+static MAJOR_VERSION: u16 = 0;
+static MINOR_VERSION: u16 = 1;
+
+/// Represents inode number which is unique within a filesystem.
+pub(crate) type InodeNumber = u64;
+
+/// Represents device number which is unique for given block device.
+pub(crate) type DeviceNumber = u64;
+
+/// Convenience name for string that represents a path.
+pub(crate) type PathString = String;
+
+/// Represents unique file id across filesystems.
+#[derive(Clone, Debug, Deserialize, Eq, Hash, Default, PartialEq, PartialOrd, Ord, Serialize)]
+pub struct FileId(pub u64);
+
+impl Display for FileId {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        self.0.fmt(f)
+    }
+}
+
+fn serialize_hashmap<S, K: Ord + Serialize + Clone, V: Serialize + Clone>(
+    value: &HashMap<K, V>,
+    serializer: S,
+) -> Result<S::Ok, S::Error>
+where
+    S: Serializer,
+{
+    let mut btree = BTreeMap::new();
+    for (k, v) in value {
+        btree.insert(k.clone(), v.clone());
+    }
+    btree.serialize(serializer)
+}
+
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
+pub(crate) struct SerializableHashMap<
+    K: Ord + Serialize + Clone + Hash + PartialEq,
+    V: Serialize + Clone,
+> {
+    #[serde(serialize_with = "serialize_hashmap")]
+    pub map: HashMap<K, V>,
+}
+
+impl<K, V> Deref for SerializableHashMap<K, V>
+where
+    K: Ord + Serialize + Clone + Hash + PartialEq,
+    V: Serialize + Clone,
+{
+    type Target = HashMap<K, V>;
+    fn deref(&self) -> &Self::Target {
+        &self.map
+    }
+}
+
+impl<K, V> DerefMut for SerializableHashMap<K, V>
+where
+    K: Ord + Serialize + Clone + Hash + PartialEq,
+    V: Serialize + Clone,
+{
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.map
+    }
+}
+
+/// The InodeInfo is unique per (device, inode) combination. It is
+/// used to verify that we are prefetching a file for which we generated
+/// the records for.
+/// `Record` refers to this information with a unique `FileId`.
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
+pub struct InodeInfo {
+    // Inode number of the file.
+    pub(crate) inode_number: InodeNumber,
+
+    // File size in bytes.
+    pub(crate) file_size: u64,
+
+    // Helps to get to a file from a Record. The field is used to get to the file
+    // that needs to be prefetched.
+    //
+    // This struct is built by getting data from trace lines and querying filesystem
+    // for other fields about the file/inode.
+    //
+    // One instance per file to be prefetched. A file/inode can have multiple paths.
+    // We store multiple paths so that we can still get to it if some of the
+    // paths get deleted.
+    //
+    // See comments for `Record`.
+    #[serde(deserialize_with = "check_inode_info_paths")]
+    pub(crate) paths: Vec<PathString>,
+
+    // Block device number on which the file is located.
+    pub(crate) device_number: DeviceNumber,
+}
+
+impl InodeInfo {
+    /// Returns InodeInfo.
+    pub fn new(
+        inode_number: InodeNumber,
+        file_size: u64,
+        paths: Vec<String>,
+        device_number: DeviceNumber,
+    ) -> Self {
+        Self { inode_number, file_size, paths, device_number }
+    }
+}
+
+// Helps us check block alignment.
+//
+// A records file can have multiple FsInfos.
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
+pub struct FsInfo {
+    // This is filesystem block size and is not underlying device's block size
+    pub(crate) block_size: u64,
+}
+
+/// Prefetch record.
+/// Each record translates to one filesystem `read()` request.
+///
+/// Tracer builds `Record` by parsing trace lines or by querying filesystem.
+///
+/// Multiple `Record`s can belong to a single InodeInfo. For example if there were two
+/// reads for file `/data/my.apk` which is assigned FileId 10 at offsets 0 and 8k of length
+/// 1 byte each then we will have two `Records` in `RecordsFile` that look like
+/// `Record {file_id: 10, offset: 0, length: 1, timestamp: t1}`
+/// `Record {file_id: 10, offset: 8192, length: 1, timestamp: t2}`
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
+pub struct Record {
+    /// Points to the file that should be fetched./ file_id is unique per `InodeInfo`
+    /// in a `RecordsFile`
+    pub file_id: FileId,
+
+    /// start offset to fetch data from. This is FsInfo.block_size aligned.
+    pub offset: u64,
+
+    /// length of the read. This is generally rounded up to Fs.Info.block_size
+    /// except when the rounding up crosses `InodeInfo.file_size`
+    pub length: u64,
+
+    /// Timestamp in nanoseconds since the start when the data was loaded.
+    pub timestamp: u64,
+}
+
+impl Record {
+    /// Returns a new record if two records belong to same file and overlap.
+    fn overlaps(&self, other: &Self) -> Option<Self> {
+        if self.file_id == other.file_id {
+            let self_start = self.offset;
+            let self_end = self.offset + self.length;
+            let other_start = other.offset;
+            let other_end = other.offset + other.length;
+
+            if (self_start <= other_end) && (self_end >= other_start) {
+                let offset = min(self_start, other_start);
+                let length = max(self_end, other_end) - offset;
+                return Some(Self {
+                    file_id: self.file_id.clone(),
+                    offset,
+                    length,
+                    timestamp: min(self.timestamp, other.timestamp),
+                });
+            }
+        }
+        None
+    }
+}
+
+fn group_record_by_file_id(records: Vec<Record>) -> Vec<Record> {
+    let mut map: HashMap<FileId, BTreeMap<u64, Record>> = HashMap::new();
+
+    for record in &records {
+        let recs = map.entry(record.file_id.clone()).or_default();
+        recs.entry(record.offset).or_insert_with(|| record.clone());
+    }
+
+    let mut grouped = vec![];
+    for record in &records {
+        if let Some(inode) = map.get(&record.file_id) {
+            for rec in inode.values() {
+                grouped.push(rec.clone());
+            }
+        }
+        let _ = map.remove(&record.file_id);
+    }
+
+    grouped
+}
+
+/// When records are coalesced, because their file ids match and IO offsets overlap, the least
+/// timestamp of the coalesced records is retained.
+pub(crate) fn coalesce_records(records: Vec<Record>, group_by_file_id: bool) -> Vec<Record> {
+    let records = if group_by_file_id { group_record_by_file_id(records) } else { records };
+
+    let mut coalesced = vec![];
+    let mut current: Option<Record> = None;
+    for r in records {
+        current = match current {
+            None => Some(r),
+            Some(c) => {
+                let merged = c.overlaps(&r);
+                match merged {
+                    None => {
+                        coalesced.push(c);
+                        Some(r)
+                    }
+                    Some(m) => Some(m),
+                }
+            }
+        }
+    }
+    if let Some(r) = current {
+        coalesced.push(r);
+    }
+    coalesced
+}
+
+// Records file header.
+#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
+pub struct Header {
+    /// magic number as uuid to identify the header/format.
+    #[serde(deserialize_with = "check_magic")]
+    magic: [u8; 16],
+
+    // major version number.
+    #[serde(deserialize_with = "check_major_number")]
+    major_number: u16,
+
+    // minor version number.
+    #[serde(deserialize_with = "check_minor_number")]
+    minor_number: u16,
+
+    /// timestamp when the records file was generated.
+    date: SystemTime,
+
+    /// Checksum of the `RecordsFile` with `digest` being empty vector.
+    digest: u32,
+}
+
+fn check_version_number<'de, D>(
+    deserializer: D,
+    expected: u16,
+    version_type: &str,
+) -> Result<u16, D::Error>
+where
+    D: Deserializer<'de>,
+{
+    let found = u16::deserialize(deserializer)?;
+    if expected != found {
+        return Err(serde::de::Error::custom(format!(
+            "Failed to parse {} version. Expected: {} Found: {}",
+            version_type, expected, found
+        )));
+    }
+    Ok(found)
+}
+
+fn check_major_number<'de, D>(deserializer: D) -> Result<u16, D::Error>
+where
+    D: Deserializer<'de>,
+{
+    check_version_number(deserializer, MAJOR_VERSION, "major")
+}
+
+fn check_minor_number<'de, D>(deserializer: D) -> Result<u16, D::Error>
+where
+    D: Deserializer<'de>,
+{
+    check_version_number(deserializer, MINOR_VERSION, "minor")
+}
+
+fn check_magic<'de, D>(deserializer: D) -> Result<[u8; 16], D::Error>
+where
+    D: Deserializer<'de>,
+{
+    let found: [u8; 16] = <[u8; 16]>::deserialize(deserializer)?;
+    if found != MAGIC_UUID {
+        return Err(serde::de::Error::custom(format!(
+            "Failed to parse magic number. Expected: {:?} Found: {:?}",
+            MAGIC_UUID, found
+        )));
+    }
+    Ok(found)
+}
+
+fn check_inode_info_paths<'de, D>(deserializer: D) -> Result<Vec<PathString>, D::Error>
+where
+    D: Deserializer<'de>,
+{
+    let parsed: Vec<PathString> = Vec::deserialize(deserializer)?;
+    if parsed.is_empty() {
+        return Err(serde::de::Error::custom("No paths found for in InodeInfo"));
+    }
+    Ok(parsed)
+}
+
+// Helper inner struct of RecordsFile meant to verify checksum.
+#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
+pub(crate) struct RecordsFileInner {
+    // One instance per mounted block device.
+    pub(crate) filesystems: SerializableHashMap<DeviceNumber, FsInfo>,
+
+    /// Helps to get to a file path from a given `FileId`.
+    /// One instance per file to be prefetched.
+    pub(crate) inode_map: SerializableHashMap<FileId, InodeInfo>,
+
+    /// Helps to get to a file and offset to be replayed..
+    ///
+    // The records are chronologically arranged meaning the data that
+    // needs first is at the beginning of the vector and the data that
+    // needs last is at the end.
+    //
+    // One instance per part of the file that needs to be prefetched.
+    pub records: Vec<Record>,
+}
+
+/// Deserialized form of records file.
+#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
+#[serde(remote = "Self")]
+pub struct RecordsFile {
+    /// Helps the prefetch tool to parse rest of the file
+    pub header: Header,
+
+    /// Helps the prefetch tool to verify checksum.
+    pub(crate) inner: RecordsFileInner,
+}
+
+impl RecordsFile {
+    /// Given file id, looks up path of the file and returns open File handle.
+    pub fn open_file(&self, id: FileId, exclude_files_regex: &[Regex]) -> Result<File, Error> {
+        if let Some(inode) = self.inner.inode_map.get(&id) {
+            let path = inode.paths.first().unwrap();
+
+            for regex in exclude_files_regex {
+                if regex.is_match(path) {
+                    return Err(Error::SkipPrefetch { path: path.to_owned() });
+                }
+            }
+            debug!("Opening {} file {}", id.0, path);
+            OpenOptions::new()
+                .read(true)
+                .write(false)
+                .open(path)
+                .map_err(|source| Error::Open { source, path: path.to_owned() })
+        } else {
+            Err(Error::IdNoFound { id })
+        }
+    }
+
+    /// Inserts given record in RecordsFile
+    pub fn insert_record(&mut self, records: Record) {
+        self.inner.records.push(records);
+    }
+
+    /// Inserts given InodeInfo into in RecordsFile.
+    pub fn insert_or_update_inode_info(&mut self, id: FileId, info: InodeInfo) {
+        if let Some(inode) = self.inner.inode_map.get_mut(&id) {
+            if let Some(first_path) = info.paths.first() {
+                inode.paths.push(first_path.clone());
+            }
+        } else {
+            self.inner.inode_map.insert(id, info);
+        }
+    }
+
+    /// Verifies the integrity of records file.
+    ///
+    /// check saves us from serializing a improperly built record file or replaying an inconsistent
+    /// `RecordFile`.
+    ///
+    /// Note: check only works on the `RecordsFile` and doesn't access filesystem. We limit the
+    /// scope so that we avoid issuing filesystem operations(directory lookup, stats) twice - once
+    /// during check and once during replaying.
+    pub fn check(&self) -> Result<(), Error> {
+        let mut unique_files = HashSet::new();
+        let mut missing_file_ids = vec![];
+
+        for record in &self.inner.records {
+            if !self.inner.inode_map.contains_key(&record.file_id) {
+                missing_file_ids.push(record.file_id.clone());
+            }
+            unique_files.insert(record.file_id.clone());
+        }
+
+        let mut stale_inodes = vec![];
+        let mut missing_paths = vec![];
+        for (file_id, inode_info) in &self.inner.inode_map.map {
+            if inode_info.paths.is_empty() {
+                missing_paths.push(inode_info.clone());
+            }
+            if !unique_files.contains(file_id) {
+                stale_inodes.push(inode_info.clone());
+            }
+        }
+
+        if !stale_inodes.is_empty() || !missing_paths.is_empty() || !missing_file_ids.is_empty() {
+            return Err(Error::StaleInode { stale_inodes, missing_paths, missing_file_ids });
+        }
+
+        Ok(())
+    }
+
+    /// Builds InodeInfo from args and inserts inode info in RecordsFile.
+    pub fn insert_or_update_inode(&mut self, id: FileId, stat: &Metadata, path: PathString) {
+        self.insert_or_update_inode_info(
+            id,
+            InodeInfo {
+                inode_number: stat.ino(),
+                file_size: stat.len(),
+                paths: vec![path],
+                device_number: stat.dev(),
+            },
+        )
+    }
+
+    /// Serialize records in the form of csv.
+    pub fn serialize_records_to_csv(&self, writer: &mut dyn Write) -> Result<(), Error> {
+        let mut wtr = csv::Writer::from_writer(writer);
+
+        #[derive(Serialize)]
+        struct TempRecord<'a> {
+            timestamp: u64,
+            file: &'a PathString,
+            offset: u64,
+            length: u64,
+            file_size: u64,
+        }
+
+        for record in &self.inner.records {
+            if let Some(inode_info) = self.inner.inode_map.get(&record.file_id) {
+                let mut inode_info = inode_info.clone();
+                inode_info.paths.sort();
+
+                if let Some(first_path) = inode_info.paths.first().cloned() {
+                    // Clone the &String inside Option
+                    let record = TempRecord {
+                        timestamp: record.timestamp,
+                        file: &first_path, // Now you have &String
+                        offset: record.offset,
+                        length: record.length,
+                        file_size: inode_info.file_size,
+                    };
+                    wtr.serialize(&record)
+                        .map_err(|e| Error::Serialize { error: e.to_string() })?;
+                }
+            }
+        }
+        wtr.flush()?;
+        Ok(())
+    }
+
+    fn compute_digest(&mut self) -> Result<u32, Error> {
+        self.header.digest = Default::default();
+        let serialized = serde_cbor::to_vec(self)
+            .map_err(|source| Error::Serialize { error: source.to_string() })?;
+
+        let mut hasher = Hasher::new();
+        hasher.update(&serialized);
+
+        Ok(hasher.finalize())
+    }
+
+    /// Convenience wrapper around serialize that adds checksum/digest to the file
+    /// to verify file consistency during replay/deserialize.
+    pub fn add_checksum_and_serialize(&mut self) -> Result<Vec<u8>, Error> {
+        self.header.digest = self.compute_digest()?;
+
+        serde_cbor::to_vec(self).map_err(|source| Error::Serialize { error: source.to_string() })
+    }
+}
+
+impl Default for Header {
+    fn default() -> Self {
+        Self {
+            major_number: MAJOR_VERSION,
+            minor_number: MINOR_VERSION,
+            date: SystemTime::now(),
+            digest: 0,
+            magic: MAGIC_UUID,
+        }
+    }
+}
+
+// Wrapper around deserialize to check any inconsistencies in the file format.
+impl<'de> Deserialize<'de> for RecordsFile {
+    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
+    where
+        D: Deserializer<'de>,
+    {
+        let rf = Self::deserialize(deserializer)?;
+
+        rf.check().map_err(|e| {
+            serde::de::Error::custom(format!("failed to validate records file: {}", e))
+        })?;
+
+        let mut zero_digest = rf.clone();
+        zero_digest.header.digest = 0;
+        let digest =
+            zero_digest.compute_digest().map_err(|e| serde::de::Error::custom(format!("{}", e)))?;
+
+        if digest != rf.header.digest {
+            return Err(serde::de::Error::custom(format!(
+                "file consistency check failed. Expected: {}. Found: {}",
+                digest, rf.header.digest
+            )));
+        }
+
+        Ok(rf)
+    }
+}
+
+// Wrapper around serialize to check any inconsistencies in the file format before serializing
+impl Serialize for RecordsFile {
+    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
+    where
+        S: Serializer,
+    {
+        self.check().map(|_| self).map_err(|e| {
+            serde::ser::Error::custom(format!("failed to validate records file: {}", e))
+        })?;
+        Self::serialize(self, serializer)
+    }
+}
+
+#[cfg(test)]
+pub mod tests {
+
+    use std::assert_eq;
+
+    use super::*;
+
+    #[test]
+    fn test_major_version_mismatch() {
+        let mut rf = RecordsFile::default();
+
+        rf.header.major_number += 1;
+
+        let serialized: Result<RecordsFile, serde_cbor::Error> =
+            serde_cbor::from_slice(&serde_cbor::to_vec(&rf).unwrap());
+
+        assert_eq!(
+            serialized.unwrap_err().to_string(),
+            format!(
+                "Failed to parse major version. Expected: {} Found: {}",
+                MAJOR_VERSION,
+                MAJOR_VERSION + 1
+            )
+        );
+    }
+
+    #[test]
+    fn test_minor_version_mismatch() {
+        let mut rf = RecordsFile::default();
+
+        rf.header.minor_number += 1;
+
+        let serialized: Result<RecordsFile, serde_cbor::Error> =
+            serde_cbor::from_slice(&serde_cbor::to_vec(&rf).unwrap());
+
+        assert_eq!(
+            serialized.unwrap_err().to_string(),
+            format!(
+                "Failed to parse minor version. Expected: {} Found: {}",
+                MINOR_VERSION,
+                MINOR_VERSION + 1
+            )
+        );
+    }
+
+    #[test]
+    fn deserialize_inode_info_without_path() {
+        let inode = InodeInfo { inode_number: 1, file_size: 10, paths: vec![], device_number: 1 };
+        let serialized = serde_cbor::to_vec(&inode).unwrap();
+        let deserialized: Result<InodeInfo, serde_cbor::Error> =
+            serde_cbor::from_slice(&serialized);
+        assert_eq!(
+            deserialized.unwrap_err().to_string(),
+            "No paths found for in InodeInfo".to_owned()
+        );
+    }
+    #[test]
+    fn test_serialize_records_to_csv() {
+        let mut rf = RecordsFile::default();
+        let file_count = 4;
+        for i in 0..file_count {
+            rf.insert_or_update_inode_info(
+                FileId(i),
+                InodeInfo {
+                    inode_number: i,
+                    file_size: i * 10,
+                    paths: vec![format!("/hello/{}", i)],
+                    device_number: i + 10,
+                },
+            )
+        }
+        for i in 0..10 {
+            rf.insert_record(Record {
+                file_id: FileId(i % file_count),
+                offset: i * 3,
+                length: i + 4,
+                timestamp: i * file_count,
+            });
+        }
+
+        let mut buf = vec![];
+        rf.serialize_records_to_csv(&mut buf).unwrap();
+
+        let data = String::from_utf8(buf).unwrap();
+        assert_eq!(
+            data,
+            "timestamp,file,offset,length,file_size\n\
+            0,/hello/0,0,4,0\n\
+            4,/hello/1,3,5,10\n\
+            8,/hello/2,6,6,20\n\
+            12,/hello/3,9,7,30\n\
+            16,/hello/0,12,8,0\n\
+            20,/hello/1,15,9,10\n\
+            24,/hello/2,18,10,20\n\
+            28,/hello/3,21,11,30\n\
+            32,/hello/0,24,12,0\n\
+            36,/hello/1,27,13,10\n"
+        );
+    }
+
+    fn new_record(file: u64, offset: u64, length: u64, timestamp: u64) -> Record {
+        Record { file_id: FileId(file), offset, length, timestamp }
+    }
+
+    #[test]
+    fn test_coalesced_without_group() {
+        let non_coalescable_same_inode =
+            vec![new_record(1, 2, 3, 4), new_record(1, 6, 3, 5), new_record(1, 10, 3, 6)];
+        assert_eq!(
+            coalesce_records(non_coalescable_same_inode.clone(), false),
+            non_coalescable_same_inode
+        );
+
+        let non_coalescable_different_inode =
+            vec![new_record(1, 2, 3, 4), new_record(2, 5, 3, 5), new_record(3, 8, 3, 6)];
+        assert_eq!(
+            coalesce_records(non_coalescable_different_inode.clone(), false),
+            non_coalescable_different_inode
+        );
+
+        let some_coalesced =
+            vec![new_record(1, 2, 3, 4), new_record(1, 5, 3, 5), new_record(3, 8, 3, 6)];
+        assert_eq!(
+            coalesce_records(some_coalesced, false),
+            vec![new_record(1, 2, 6, 4), new_record(3, 8, 3, 6),]
+        );
+
+        let coalesced_into_one =
+            vec![new_record(1, 2, 3, 4), new_record(1, 5, 3, 5), new_record(1, 8, 3, 6)];
+        assert_eq!(coalesce_records(coalesced_into_one, false), vec![new_record(1, 2, 9, 4)]);
+
+        let no_grouping_or_coalescing =
+            vec![new_record(1, 2, 3, 4), new_record(3, 8, 3, 5), new_record(1, 5, 3, 6)];
+        assert_eq!(
+            coalesce_records(no_grouping_or_coalescing, false),
+            vec![new_record(1, 2, 3, 4), new_record(3, 8, 3, 5), new_record(1, 5, 3, 6),]
+        );
+    }
+
+    #[test]
+    fn test_coalesced_with_grouping() {
+        let non_coalescable_same_inode =
+            vec![new_record(1, 2, 3, 4), new_record(1, 6, 3, 5), new_record(1, 10, 3, 6)];
+        assert_eq!(
+            coalesce_records(non_coalescable_same_inode.clone(), true),
+            non_coalescable_same_inode
+        );
+
+        let non_coalescable_different_inode =
+            vec![new_record(1, 2, 3, 4), new_record(2, 5, 3, 5), new_record(3, 8, 3, 6)];
+        assert_eq!(
+            coalesce_records(non_coalescable_different_inode.clone(), true),
+            non_coalescable_different_inode
+        );
+
+        let some_coalesced =
+            vec![new_record(1, 2, 3, 4), new_record(1, 5, 3, 5), new_record(3, 8, 3, 6)];
+        assert_eq!(
+            coalesce_records(some_coalesced, true),
+            vec![new_record(1, 2, 6, 4), new_record(3, 8, 3, 6),]
+        );
+
+        let coalesced_into_one =
+            vec![new_record(1, 2, 3, 4), new_record(1, 5, 3, 5), new_record(1, 8, 3, 6)];
+        assert_eq!(coalesce_records(coalesced_into_one, true), vec![new_record(1, 2, 9, 4)]);
+
+        let some_grouped_coalesced =
+            vec![new_record(1, 2, 3, 4), new_record(3, 8, 3, 5), new_record(1, 5, 3, 6)];
+        assert_eq!(
+            coalesce_records(some_grouped_coalesced, true),
+            vec![new_record(1, 2, 6, 4), new_record(3, 8, 3, 5),]
+        );
+    }
+
+    #[test]
+    fn check_missing_records() {
+        let mut rf = RecordsFile::default();
+        rf.inner.inode_map.insert(
+            FileId(0),
+            InodeInfo {
+                inode_number: 0,
+                file_size: 1,
+                paths: vec!["hello".to_owned()],
+                device_number: 2,
+            },
+        );
+        rf.insert_record(Record { file_id: FileId(0), offset: 10, length: 20, timestamp: 30 });
+
+        rf.inner.inode_map.insert(
+            FileId(1),
+            InodeInfo {
+                inode_number: 1,
+                file_size: 2,
+                paths: vec!["world".to_owned()],
+                device_number: 3,
+            },
+        );
+        let e = rf.check().unwrap_err();
+        assert_eq!(
+            e.to_string(),
+            "Stale inode(s) info found.\n\
+                missing_file_ids: []\n\
+                stale_inodes: [\n    \
+                    InodeInfo {\n        \
+                        inode_number: 1,\n        \
+                        file_size: 2,\n        \
+                        paths: [\n            \"world\",\n        ],\n        \
+                        device_number: 3,\n    },\n] \n\
+                missing_paths:[]"
+        );
+    }
+
+    #[test]
+    fn check_missing_file() {
+        let mut rf = RecordsFile::default();
+        rf.inner.inode_map.insert(
+            FileId(0),
+            InodeInfo {
+                inode_number: 0,
+                file_size: 1,
+                paths: vec!["hello".to_owned()],
+                device_number: 2,
+            },
+        );
+        rf.insert_record(Record { file_id: FileId(0), offset: 10, length: 20, timestamp: 30 });
+        rf.insert_record(Record { file_id: FileId(1), offset: 10, length: 20, timestamp: 30 });
+
+        let e = rf.check().unwrap_err();
+        assert_eq!(
+            e.to_string(),
+            "Stale inode(s) info found.\n\
+                missing_file_ids: [\n    \
+                    FileId(\n        1,\n    ),\n]\n\
+                stale_inodes: [] \n\
+                missing_paths:[]"
+        );
+    }
+
+    #[test]
+    fn check_missing_paths() {
+        let mut rf = RecordsFile::default();
+        rf.inner.inode_map.insert(
+            FileId(0),
+            InodeInfo { inode_number: 0, file_size: 1, paths: vec![], device_number: 2 },
+        );
+        rf.insert_record(Record { file_id: FileId(0), offset: 10, length: 20, timestamp: 30 });
+
+        let e = rf.check().unwrap_err();
+        assert_eq!(
+            e.to_string(),
+            "Stale inode(s) info found.\n\
+                missing_file_ids: []\n\
+                stale_inodes: [] \n\
+                missing_paths:[\n    \
+                    InodeInfo {\n        \
+                        inode_number: 0,\n        \
+                        file_size: 1,\n        \
+                        paths: [],\n        \
+                        device_number: 2,\n    },\n]"
+        );
+    }
+}
diff --git a/init/libprefetch/prefetch/src/lib.rs b/init/libprefetch/prefetch/src/lib.rs
new file mode 100644
index 0000000..6564c4b
--- /dev/null
+++ b/init/libprefetch/prefetch/src/lib.rs
@@ -0,0 +1,180 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! A library to prefetch files on the file system to optimize startup times
+//!
+
+mod args;
+mod error;
+mod format;
+mod replay;
+mod tracer;
+#[cfg(target_os = "android")]
+mod arch {
+    pub mod android;
+}
+
+use std::fs::File;
+use std::fs::OpenOptions;
+use std::io;
+use std::io::Write;
+use std::os::unix::fs::PermissionsExt;
+use std::string::ToString;
+use std::thread;
+use std::time::Duration;
+
+#[cfg(target_os = "android")]
+use log::Level;
+#[cfg(target_os = "linux")]
+use log::LevelFilter;
+
+pub use args::args_from_env;
+use args::OutputFormat;
+pub use args::ReplayArgs;
+#[cfg(target_os = "android")]
+pub use args::StartArgs;
+pub use args::{DumpArgs, MainArgs, RecordArgs, SubCommands};
+pub use error::Error;
+pub use format::FileId;
+pub use format::InodeInfo;
+pub use format::Record;
+pub use format::RecordsFile;
+use log::info;
+pub use replay::Replay;
+pub use tracer::nanoseconds_since_boot;
+
+#[cfg(target_os = "android")]
+pub use arch::android::*;
+
+/// Records prefetch data for the given configuration
+pub fn record(args: &RecordArgs) -> Result<(), Error> {
+    let (mut tracer, exit_tx) = tracer::Tracer::create(
+        args.trace_buffer_size_kib,
+        args.tracing_subsystem.clone(),
+        args.tracing_instance.clone(),
+        args.setup_tracing,
+    )?;
+    let duration = Duration::from_secs(args.duration as u64);
+
+    let thd = thread::spawn(move || {
+        if !duration.is_zero() {
+            info!("Record start - waiting for duration: {:?}", duration);
+            thread::sleep(duration);
+        } else {
+            #[cfg(target_os = "android")]
+            wait_for_record_stop();
+        }
+
+        info!("Prefetch record exiting");
+        // We want to unwrap here on failure to send this signal. Otherwise
+        // tracer will continue generating huge records data.
+        exit_tx.send(()).unwrap();
+    });
+
+    let mut rf = tracer.trace(args.int_path.as_ref())?;
+    thd.join()
+        .map_err(|_| Error::ThreadPool { error: "Failed to join timeout thread".to_string() })?;
+
+    let mut out_file =
+        OpenOptions::new().write(true).create(true).truncate(true).open(&args.path).map_err(
+            |source| Error::Create { source, path: args.path.to_str().unwrap().to_owned() },
+        )?;
+
+    std::fs::set_permissions(&args.path, std::fs::Permissions::from_mode(0o644))
+        .map_err(|source| Error::Create { source, path: args.path.to_str().unwrap().to_owned() })?;
+
+    // Write the record file
+    out_file
+        .write_all(&rf.add_checksum_and_serialize()?)
+        .map_err(|source| Error::Write { path: args.path.to_str().unwrap().to_owned(), source })?;
+    out_file.sync_all()?;
+
+    // Write build-finger-print file
+    #[cfg(target_os = "android")]
+    write_build_fingerprint(args)?;
+
+    Ok(())
+}
+
+/// Replays prefetch data for the given configuration
+pub fn replay(args: &ReplayArgs) -> Result<(), Error> {
+    let replay = Replay::new(args)?;
+    replay.replay()
+}
+
+/// Dumps prefetch data in the human readable form
+pub fn dump(args: &DumpArgs) -> Result<(), Error> {
+    let reader = File::open(&args.path)
+        .map_err(|source| Error::Open { source, path: args.path.to_str().unwrap().to_string() })?;
+    let rf: RecordsFile =
+        serde_cbor::from_reader(reader).map_err(|e| Error::Deserialize { error: e.to_string() })?;
+    match args.format {
+        OutputFormat::Json => println!(
+            "{:#}",
+            serde_json::to_string_pretty(&rf)
+                .map_err(|e| Error::Serialize { error: e.to_string() })?
+        ),
+        OutputFormat::Csv => rf.serialize_records_to_csv(&mut io::stdout())?,
+    }
+    Ok(())
+}
+
+/// An alias of android_logger::Level to use log level across android and linux.
+#[cfg(target_os = "android")]
+pub type LogLevel = Level;
+
+/// An alias of log::LevelFilter to use log level across android and linux.
+#[cfg(not(target_os = "android"))]
+pub type LogLevel = LevelFilter;
+
+/// Convenience logging initializer that is shared between the prefetch tool and c wrapper library
+#[cfg(target_os = "android")]
+pub fn init_logging(_level: LogLevel) {
+    android_logger::init_once(
+        android_logger::Config::default().with_max_level(log::LevelFilter::Info).format(
+            |f, record| {
+                write!(
+                    f,
+                    "{} prefetch_rs: {}:{} {}: {}",
+                    nanoseconds_since_boot(),
+                    record.file().unwrap_or("unknown_file"),
+                    record.line().unwrap_or(0),
+                    record.level(),
+                    record.args()
+                )
+            },
+        ),
+    )
+}
+
+/// Convenience logging initializer that is shared between the prefetch tool and c wrapper library
+#[cfg(target_os = "linux")]
+pub fn init_logging(level: LogLevel) {
+    let mut builder = env_logger::Builder::from_default_env();
+
+    builder
+        .filter(None, level)
+        .format(|buf, record| {
+            writeln!(
+                buf,
+                "{} prefetch_rs: {}:{} {}: {}",
+                nanoseconds_since_boot(),
+                record.file().unwrap_or("unknown_file"),
+                record.line().unwrap_or(0),
+                record.level(),
+                record.args()
+            )
+        })
+        .init();
+}
diff --git a/init/libprefetch/prefetch/src/main.rs b/init/libprefetch/prefetch/src/main.rs
new file mode 100644
index 0000000..eab826f
--- /dev/null
+++ b/init/libprefetch/prefetch/src/main.rs
@@ -0,0 +1,45 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! A utility wrapper around libprefetch that allows to record, replay and dump
+//! prefetch data.
+
+use log::error;
+
+use prefetch_rs::args_from_env;
+use prefetch_rs::dump;
+use prefetch_rs::init_logging;
+use prefetch_rs::record;
+use prefetch_rs::replay;
+#[cfg(target_os = "android")]
+use prefetch_rs::start_prefetch;
+use prefetch_rs::LogLevel;
+use prefetch_rs::MainArgs;
+use prefetch_rs::SubCommands;
+
+fn main() {
+    init_logging(LogLevel::Debug);
+    let args: MainArgs = args_from_env();
+    let ret = match &args.nested {
+        SubCommands::Record(args) => record(args),
+        SubCommands::Replay(args) => replay(args),
+        SubCommands::Dump(args) => dump(args),
+        #[cfg(target_os = "android")]
+        SubCommands::Start(args) => start_prefetch(args),
+    };
+
+    if let Err(err) = ret {
+        error!("{:?} command failed: {:?}", args, err);
+    }
+}
diff --git a/init/libprefetch/prefetch/src/replay.rs b/init/libprefetch/prefetch/src/replay.rs
new file mode 100644
index 0000000..b68d747
--- /dev/null
+++ b/init/libprefetch/prefetch/src/replay.rs
@@ -0,0 +1,762 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::clone::Clone;
+use std::convert::TryInto;
+use std::fmt::Display;
+use std::mem::replace;
+use std::os::unix::io::AsRawFd;
+use std::sync::Arc;
+use std::sync::Mutex;
+use std::sync::RwLock;
+use std::thread;
+
+use log::debug;
+use log::error;
+use log::warn;
+use lru_cache::LruCache;
+use nix::errno::Errno;
+use nix::fcntl::posix_fadvise;
+use regex::Regex;
+
+use crate::args::ConfigFile;
+use crate::format::Record;
+use crate::format::{FileId, RecordsFile};
+use crate::Error;
+use crate::ReplayArgs;
+use libc::{c_void, off64_t, pread64};
+use std::fs::File;
+
+const READ_SZ: usize = 1024 * 1024;
+
+struct ScopedLog<T: Display + Sized> {
+    msg: T,
+    thd_id: usize,
+}
+
+fn scoped_log<T: Display + Sized>(ctx: usize, msg: T) -> ScopedLog<T> {
+    let thd_id = ctx;
+    debug!("{} {} start", thd_id, msg);
+    ScopedLog { msg, thd_id }
+}
+
+impl<T: Display> Drop for ScopedLog<T> {
+    fn drop(&mut self) {
+        debug!("{} {} end", self.thd_id, self.msg);
+    }
+}
+
+fn readahead(
+    id: usize,
+    file: Arc<File>,
+    record: &Record,
+    buffer: &mut [u8; READ_SZ],
+) -> Result<(), Error> {
+    debug!("readahead {:?}", record);
+    let _dbg = scoped_log(id, "readahead");
+
+    let mut current_offset: off64_t = record
+        .offset
+        .try_into()
+        .map_err(|_| Error::Read { error: "Failed to convert offset".to_string() })?;
+    let mut remaining_data: usize = record
+        .length
+        .try_into()
+        .map_err(|_| Error::Read { error: "Failed to convert length".to_string() })?;
+
+    while remaining_data > 0 {
+        let read_size = std::cmp::min(READ_SZ, remaining_data);
+
+        // SAFETY: This is safe because
+        // - the file is known to exist and opened
+        // - buffer is allocated upfront and is guaranteed by the fact it comes from a mutable slice reference.
+        // - read_size is guaranteed not to exceed length of the buffer.
+        let bytes_read = unsafe {
+            pread64(file.as_raw_fd(), buffer.as_mut_ptr() as *mut c_void, read_size, current_offset)
+        };
+
+        if bytes_read == -1 {
+            return Err(Error::Read { error: format!("readahead failed: {}", Errno::last_raw()) });
+        }
+
+        if bytes_read == 0 {
+            break; // End of file reached
+        }
+
+        current_offset += bytes_read as off64_t;
+        remaining_data -= bytes_read as usize;
+    }
+
+    // TODO: Try readahead() syscall or async I/O
+    Ok(())
+}
+
+fn worker_internal(
+    id: usize,
+    state: Arc<Mutex<SharedState>>,
+    records_file: Arc<RwLock<RecordsFile>>,
+    exit_on_error: bool,
+    exclude_files_regex: Vec<Regex>,
+    buffer: &mut [u8],
+) -> Result<(), Error> {
+    loop {
+        let index = {
+            let mut state = state.lock().unwrap();
+            if state.result.is_err() {
+                return Ok(());
+            }
+            state.next_record()
+        };
+
+        let record = {
+            let rf = records_file.read().unwrap();
+            if index >= rf.inner.records.len() {
+                return Ok(());
+            }
+            rf.inner.records.get(index).unwrap().clone()
+        };
+
+        let _dbg = scoped_log(id, "record_replay");
+
+        let file = state.lock().unwrap().fds.get_mut(&record.file_id).map(|f| f.clone());
+
+        let file = match file {
+            Some(file) => file,
+            None => {
+                let file = Arc::new({
+                    let file = records_file
+                        .read()
+                        .unwrap()
+                        .open_file(record.file_id.clone(), &exclude_files_regex);
+                    if let Err(e) = file {
+                        if exit_on_error {
+                            return Err(e);
+                        } else {
+                            match e {
+                                Error::SkipPrefetch { path } => {
+                                    debug!("Skipping file during replay: {}", path);
+                                }
+                                _ => error!(
+                                    "Failed to open file id: {} with {}",
+                                    record.file_id.clone(),
+                                    e.to_string()
+                                ),
+                            }
+                            continue;
+                        }
+                    }
+
+                    let file = file.unwrap();
+                    // We do not want the filesystem be intelligent and prefetch more than what this
+                    // code is reading. So turn off prefetch.
+
+                    if let Err(e) = posix_fadvise(
+                        file.as_raw_fd(),
+                        0,
+                        0,
+                        nix::fcntl::PosixFadviseAdvice::POSIX_FADV_RANDOM,
+                    ) {
+                        warn!(
+                            "Failed to turn off filesystem read ahead for file id: {} with {}",
+                            record.file_id.clone(),
+                            e.to_string()
+                        );
+                    }
+                    file
+                });
+                let cache_file = file.clone();
+                state.lock().unwrap().fds.insert(record.file_id.clone(), cache_file);
+                file
+            }
+        };
+        if let Err(e) = readahead(id, file, &record, buffer.try_into().unwrap()) {
+            if exit_on_error {
+                return Err(e);
+            } else {
+                error!(
+                    "readahead failed on file id: {} with: {}",
+                    record.file_id.clone(),
+                    e.to_string()
+                );
+                continue;
+            }
+        }
+    }
+}
+
+fn worker(
+    id: usize,
+    state: Arc<Mutex<SharedState>>,
+    records_file: Arc<RwLock<RecordsFile>>,
+    exit_on_error: bool,
+    exclude_files_regex: Vec<Regex>,
+    buffer: &mut [u8],
+) {
+    let _dbg = scoped_log(id, "read_loop");
+    let result = worker_internal(
+        id,
+        state.clone(),
+        records_file,
+        exit_on_error,
+        exclude_files_regex,
+        buffer,
+    );
+    if result.is_err() {
+        error!("worker failed with {:?}", result);
+        let mut state = state.lock().unwrap();
+        if state.result.is_ok() {
+            state.result = result;
+        }
+    }
+}
+
+#[derive(Debug)]
+pub struct SharedState {
+    fds: LruCache<FileId, Arc<File>>,
+    records_index: usize,
+    result: Result<(), Error>,
+}
+
+impl SharedState {
+    fn next_record(&mut self) -> usize {
+        let ret = self.records_index;
+        self.records_index += 1;
+        ret
+    }
+}
+
+/// Runtime, in-memory, representation of records file structure.
+#[derive(Debug)]
+pub struct Replay {
+    records_file: Arc<RwLock<RecordsFile>>,
+    io_depth: u16,
+    exit_on_error: bool,
+    state: Arc<Mutex<SharedState>>,
+    exclude_files_regex: Vec<Regex>,
+}
+
+impl Replay {
+    /// Creates Replay from input `args`.
+    pub fn new(args: &ReplayArgs) -> Result<Self, Error> {
+        let _dbg = scoped_log(1, "new");
+        let reader: File = File::open(&args.path).map_err(|source| Error::Open {
+            source,
+            path: args.path.to_str().unwrap().to_owned(),
+        })?;
+        let rf: RecordsFile = serde_cbor::from_reader(reader)
+            .map_err(|error| Error::Deserialize { error: error.to_string() })?;
+
+        let mut exclude_files_regex: Vec<Regex> = Vec::new();
+        // The path to the configuration file is optional in the command.
+        // If the path is provided, the configuration file will be read.
+        if !&args.config_path.as_os_str().is_empty() {
+            let config_reader = File::open(&args.config_path).map_err(|source| Error::Open {
+                source,
+                path: args.path.to_str().unwrap().to_owned(),
+            })?;
+            let cf: ConfigFile = serde_json::from_reader(config_reader)
+                .map_err(|error| Error::Deserialize { error: error.to_string() })?;
+
+            for file_to_exclude in &cf.files_to_exclude_regex {
+                exclude_files_regex.push(Regex::new(file_to_exclude).unwrap());
+            }
+        }
+
+        Ok(Self {
+            records_file: Arc::new(RwLock::new(rf)),
+            io_depth: args.io_depth,
+            exit_on_error: args.exit_on_error,
+            state: Arc::new(Mutex::new(SharedState {
+                fds: LruCache::new(args.max_fds.into()),
+                records_index: 0,
+                result: Ok(()),
+            })),
+            exclude_files_regex,
+        })
+    }
+
+    /// Replay records.
+    pub fn replay(self) -> Result<(), Error> {
+        let _dbg = scoped_log(1, "replay");
+        let mut threads = vec![];
+        for i in 0..self.io_depth {
+            let i_clone = i as usize;
+            let state = self.state.clone();
+            let records_file = self.records_file.clone();
+            let exit_on_error = self.exit_on_error;
+            let exclude_files_regex = self.exclude_files_regex.clone();
+
+            let mut buffer = Box::new([0u8; READ_SZ]);
+
+            threads.push(thread::Builder::new().spawn(move || {
+                worker(
+                    i_clone,
+                    state,
+                    records_file,
+                    exit_on_error,
+                    exclude_files_regex,
+                    buffer.as_mut_slice(),
+                )
+            }));
+        }
+        for thread in threads {
+            thread.unwrap().join().unwrap();
+        }
+        replace(&mut self.state.lock().unwrap().result, Ok(()))
+    }
+}
+
+// WARNING: flaky tests.
+// In these tests we create files, invalidate their caches and then replay.
+// Verify that after reply the same portions of data is in memory.
+//
+// Since these tests to rely on presence or absence of data in cache, the
+// files used by the tests should not be in tmp filesystem. So we use relative
+// path as target directory. There is no guarantee that this target directory
+// is not on temp filesystem but chances are better than using target directory
+// in tempfs.
+//
+// Tests can be flaky if the system under tests is running low on memory. The
+// tests create file using O_DIRECT so that no data is left in file cache.
+// Though this is sufficient to avoid caching, but other processes reading these
+// files(like anti-virus) or some other system processes might change the state
+// of the cache. Or it may happen that the filesystem evicts the file before
+// we verify that read ahead worked as intended.
+#[cfg(test)]
+pub mod tests {
+    use std::{
+        assert,
+        io::Write,
+        ops::Range,
+        path::{Path, PathBuf},
+        time::Duration,
+    };
+
+    use crate::format::DeviceNumber;
+    use crate::format::FsInfo;
+    use crate::format::InodeNumber;
+    use crate::nanoseconds_since_boot;
+    use nix::sys::mman::MapFlags;
+    use nix::sys::mman::ProtFlags;
+    use serde::Deserialize;
+    use serde::Serialize;
+    use std::collections::HashMap;
+    use std::fs::OpenOptions;
+    use std::num::NonZeroUsize;
+    use std::os::fd::AsFd;
+    use std::os::unix::fs::symlink;
+    use std::os::unix::fs::MetadataExt;
+    use std::ptr::NonNull;
+    use tempfile::NamedTempFile;
+
+    use super::*;
+    use crate::tracer::{
+        page_size,
+        tests::{copy_uncached_files_and_record_from, setup_test_dir},
+    };
+
+    static MB: u64 = 1024 * 1024;
+    static KB: u64 = 1024;
+
+    fn random_write(file: &mut NamedTempFile, base: u64) -> Range<u64> {
+        let start: u64 = base + (rand::random::<u64>() % (base / 2)) as u64;
+        let len: u64 = rand::random::<u64>() % (32 * KB);
+        let buf = vec![5; len as usize];
+        nix::sys::uio::pwrite(file.as_fd(), &buf, start as i64).unwrap();
+        start..(start + len)
+    }
+
+    pub(crate) fn create_file(
+        path: Option<&Path>,
+        align: Option<u64>,
+    ) -> (NamedTempFile, Vec<Range<u64>>) {
+        let mut file = if let Some(path) = path {
+            NamedTempFile::new_in(path).unwrap()
+        } else {
+            NamedTempFile::new().unwrap()
+        };
+        let range1 = random_write(&mut file, 32 * KB);
+        let range2 = random_write(&mut file, 128 * KB);
+        let range3 = random_write(&mut file, 4 * MB);
+        if let Some(align) = align {
+            let orig_size = file.metadata().unwrap().len();
+            let aligned_size = orig_size + (align - (orig_size % align));
+            file.set_len(aligned_size).unwrap();
+        }
+        (file, vec![range1, range2, range3])
+    }
+
+    pub(crate) fn generate_cached_files_and_record(
+        path: Option<&Path>,
+        create_symlink: bool,
+        align: Option<u64>,
+    ) -> (RecordsFile, Vec<(NamedTempFile, Vec<Range<u64>>)>) {
+        let file1 = create_file(path, align);
+        let file2 = create_file(path, align);
+        let file3 = create_file(path, align);
+
+        let mut f: RecordsFileBuilder = Default::default();
+        f.add_file(file1.0.path().to_str().unwrap());
+        f.add_file(file2.0.path().to_str().unwrap());
+        f.add_file(file3.0.path().to_str().unwrap());
+        if create_symlink {
+            let symlink_path = format!("{}-symlink", file1.0.path().to_str().unwrap());
+            symlink(file1.0.path().file_name().unwrap(), &symlink_path).unwrap();
+
+            f.add_file(&symlink_path);
+        }
+        let rf = f.build().unwrap();
+        (rf, vec![file1, file2, file3])
+    }
+
+    /// RecordsFileBuilder is primarily used for testing purpose. This
+    /// is a thin wrapper around "Record". This gives the ability
+    /// to test Records functionality. The flow of this test is as follows:
+    ///
+    /// 1: generate_cached_files_and_record -> This will create temporary files of different length
+    /// and builds the "RecordFile" format.
+    /// 2: For each of the file path create, a "RecordsFile" is generated.
+    ///    a: mmap the file based on the length.
+    ///    b: call mincore() to get the residency of pages in memory for the given
+    ///    length.
+    ///    c: Iterate over the buffer of pages returned by mincore(). If a page
+    ///    is not resident in RAM, construct the "Record" structure.
+    /// 3: build() function will finally return a constructed Prefetch Record which
+    /// contains all the "Record" structure required for "Replay".
+    #[derive(Debug, Default, Deserialize, Serialize)]
+    pub struct RecordsFileBuilder {
+        // Temporarily holds paths of all files opened by other processes.
+        pub(crate) paths: HashMap<String, FileId>,
+
+        // Read inode numbers
+        inode_numbers: HashMap<(DeviceNumber, InodeNumber), FileId>,
+    }
+
+    impl RecordsFileBuilder {
+        pub fn add_file(&mut self, path: &str) {
+            if self.paths.contains_key(path) {
+                return;
+            }
+
+            self.paths.insert(path.to_owned(), FileId(self.paths.len() as u64));
+        }
+
+        pub fn build(&mut self) -> Result<RecordsFile, Error> {
+            let mut rf = RecordsFile::default();
+            for (path, mut id) in self.paths.drain() {
+                let stat = Path::new(&path)
+                    .metadata()
+                    .map_err(|source| Error::Stat { source, path: path.clone() })?;
+
+                rf.inner
+                    .filesystems
+                    .entry(stat.dev())
+                    .or_insert(FsInfo { block_size: stat.blksize() });
+
+                if let Some(orig_id) = self.inode_numbers.get(&(stat.dev(), stat.ino())) {
+                    let inode = rf.inner.inode_map.get_mut(orig_id).unwrap();
+                    inode.paths.push(path.clone());
+
+                    // There may be multiple paths for the file so from those path we may have multiple
+                    // ids. Override the id.
+                    id = orig_id.clone();
+                } else {
+                    self.inode_numbers.insert((stat.dev(), stat.ino()), id.clone());
+                    rf.insert_or_update_inode(id.clone(), &stat, path.clone());
+                }
+                if let Some(mmap) = Mmap::create(&path, id)? {
+                    mmap.get_records(&mut rf.inner.records)?;
+                }
+            }
+            Ok(rf)
+        }
+    }
+
+    #[derive(Debug)]
+    pub(crate) struct Mmap {
+        map_addr: *mut c_void,
+        length: usize,
+        #[allow(dead_code)]
+        file: File,
+        file_id: FileId,
+    }
+
+    impl Mmap {
+        pub fn create(path: &str, file_id: FileId) -> Result<Option<Self>, Error> {
+            let file = OpenOptions::new()
+                .read(true)
+                .write(false)
+                .open(path)
+                .map_err(|source| Error::Open { source, path: path.to_owned() })?;
+
+            let length = file
+                .metadata()
+                .map_err(|source| Error::Stat { source, path: path.to_owned() })?
+                .len() as usize;
+
+            if length == 0 {
+                return Ok(None);
+            }
+
+            // SAFETY: This is safe because
+            // - the length is checked for zero
+            // - offset is set to 0
+            let map_addr = unsafe {
+                nix::sys::mman::mmap(
+                    None,
+                    NonZeroUsize::new(length).unwrap(),
+                    ProtFlags::PROT_READ,
+                    MapFlags::MAP_SHARED,
+                    file.as_fd(),
+                    0,
+                )
+                .map_err(|source| Error::Mmap {
+                    error: source.to_string(),
+                    path: path.to_owned(),
+                })?
+            };
+
+            Ok(Some(Self { map_addr: map_addr.as_ptr(), length, file, file_id }))
+        }
+
+        /// Construct the "Record" file based on pages resident in RAM.
+        pub(crate) fn get_records(&self, records: &mut Vec<Record>) -> Result<(), Error> {
+            let page_size = page_size()?;
+            let page_count = (self.length + page_size - 1) / page_size;
+            let mut buf: Vec<u8> = vec![0_u8; page_count];
+            // SAFETY: This is safe because
+            // - the file is mapped
+            // - buf points to a valid and sufficiently large memory region with the
+            //   requirement of (length+PAGE_SIZE-1) / PAGE_SIZE bytes
+            let ret = unsafe { libc::mincore(self.map_addr, self.length, buf.as_mut_ptr()) };
+            if ret < 0 {
+                return Err(Error::Custom {
+                    error: format!("failed to query resident pages: {}", Errno::last_raw()),
+                });
+            }
+            let mut i = 0;
+
+            let mut offset_length: Option<(u64, u64)> = None;
+            for (index, resident) in buf.iter().enumerate() {
+                if *resident != 0 {
+                    if let Some((_, length)) = &mut offset_length {
+                        *length += page_size as u64;
+                    } else {
+                        offset_length = Some((index as u64 * page_size as u64, page_size as u64));
+                    }
+                } else if let Some((offset, length)) = offset_length {
+                    i += 1;
+                    records.push(Record {
+                        file_id: self.file_id.clone(),
+                        offset,
+                        length,
+                        timestamp: nanoseconds_since_boot(),
+                    });
+
+                    offset_length = None;
+                }
+            }
+
+            if let Some((offset, length)) = offset_length {
+                i += 1;
+                records.push(Record {
+                    file_id: self.file_id.clone(),
+                    offset,
+                    length,
+                    timestamp: nanoseconds_since_boot(),
+                });
+            }
+            debug!("records found: {} for {:?}", i, self);
+
+            Ok(())
+        }
+    }
+
+    impl Drop for Mmap {
+        fn drop(&mut self) {
+            // SAFETY: This is safe because
+            // - addr is mapped and is multiple of page_size
+            let ret = unsafe {
+                nix::sys::mman::munmap(NonNull::new(self.map_addr).unwrap(), self.length)
+            };
+            if let Err(e) = ret {
+                error!(
+                    "failed to munmap {:p} {} with {}",
+                    self.map_addr,
+                    self.length,
+                    e.to_string()
+                );
+            }
+        }
+    }
+
+    // Please see comment above RecordsFileBuilder.
+    fn rebuild_records_file(files: &[(PathBuf, Vec<Range<u64>>)]) -> RecordsFile {
+        // Validate that caches are dropped
+        let mut f: RecordsFileBuilder = Default::default();
+        for (path, _) in files {
+            f.add_file(path.to_str().unwrap());
+        }
+        f.build().unwrap()
+    }
+
+    fn ensure_files_not_cached(files: &mut [(PathBuf, Vec<Range<u64>>)]) {
+        assert!(rebuild_records_file(files).inner.records.is_empty());
+    }
+
+    fn has_record(records: &[Record], key: &Record) -> bool {
+        for r in records {
+            if r.offset == key.offset && r.length == key.length {
+                return true;
+            }
+        }
+        false
+    }
+
+    fn compare_records(old: &[Record], new: &[Record]) {
+        for key in new {
+            if !has_record(old, key) {
+                panic!("Failed to file {:?} in {:?}", key, old);
+            }
+        }
+    }
+
+    fn create_test_config_file(files_to_exclude_regex: Vec<String>) -> String {
+        let cfg = ConfigFile { files_to_exclude_regex, ..Default::default() };
+        serde_json::to_string(&cfg).unwrap()
+    }
+
+    // TODO: Split this into individual tests for better readability.
+    // b/378554334
+    fn test_replay_internal(
+        create_symlink: bool,
+        exit_on_error: bool,
+        inject_error: bool,
+        exclude_all_files: bool,
+        empty_exclude_file_list: bool,
+    ) {
+        let page_size = page_size().unwrap() as u64;
+        let test_base_dir = setup_test_dir();
+        let (rf, mut files) =
+            generate_cached_files_and_record(None, create_symlink, Some(page_size));
+
+        // Here "uncached_files" emulate the files after reboot when none of those files data is in cache.
+        let (mut uncached_rf, mut uncached_files) =
+            copy_uncached_files_and_record_from(Path::new(&test_base_dir), &mut files, &rf);
+
+        // Injects error(s) in the form of invalid filename
+        if inject_error {
+            if let Some(v) = uncached_rf.inner.inode_map.values_mut().next() {
+                for path in &mut v.paths {
+                    path.push('-');
+                }
+            }
+        }
+
+        let mut file = NamedTempFile::new().unwrap();
+        file.write_all(&uncached_rf.add_checksum_and_serialize().unwrap()).unwrap();
+        let mut config_file = NamedTempFile::new().unwrap();
+
+        let mut files_to_exclude: Vec<String> = Vec::new();
+        if exclude_all_files {
+            // Exclude files from replay by adding them in config
+            for v in uncached_rf.inner.inode_map.values_mut() {
+                for path in &mut v.paths {
+                    files_to_exclude.push(path.to_string())
+                }
+            }
+        } else if empty_exclude_file_list {
+            files_to_exclude.extend(vec![]);
+        } else {
+            // Exclude file1 and file2 during replay
+            files_to_exclude.extend(vec!["file1".to_owned(), "file2".to_owned()]);
+        }
+
+        // Create a config json to exclude files during replay
+        let config_file_contents = create_test_config_file(files_to_exclude);
+        config_file.write_all(config_file_contents.as_bytes()).unwrap();
+
+        ensure_files_not_cached(&mut uncached_files);
+
+        let replay = Replay::new(&ReplayArgs {
+            path: file.path().to_owned(),
+            io_depth: 32,
+            max_fds: 128,
+            exit_on_error,
+            config_path: config_file.path().to_owned(),
+        })
+        .unwrap();
+
+        let result = replay.replay();
+        // Sleep a bit so that readaheads are complete.
+        thread::sleep(Duration::from_secs(1));
+
+        if exit_on_error && inject_error {
+            result.expect_err("Failure was expected");
+        } else if exclude_all_files {
+            let new_rf = rebuild_records_file(&uncached_files);
+            assert!(new_rf.inner.records.is_empty());
+        } else {
+            result.unwrap();
+
+            // At this point, we have prefetched data for uncached file bringing same set of
+            // data in memory as the original cached files.
+            // If we record prefetch data for new files, we should get same records files
+            // (offset and lengths) except that the file names should be different.
+            // This block verifies it.
+            // Note: `new_rf` is for uncached_files. But, [un]fortunately, those "uncached_files"
+            // are now cached after we replayed the records.
+            let new_rf = rebuild_records_file(&uncached_files);
+            assert!(!new_rf.inner.records.is_empty());
+            assert_eq!(rf.inner.inode_map.len(), new_rf.inner.inode_map.len());
+            assert_eq!(rf.inner.records.len(), new_rf.inner.records.len());
+            compare_records(&rf.inner.records, &new_rf.inner.records);
+        }
+    }
+
+    #[test]
+    fn test_replay() {
+        test_replay_internal(true, false, false, false, false);
+    }
+
+    #[test]
+    fn test_replay_strict() {
+        test_replay_internal(true, true, false, false, false);
+    }
+
+    #[test]
+    fn test_replay_no_symlink() {
+        test_replay_internal(false, false, false, false, false);
+    }
+
+    #[test]
+    fn test_replay_no_symlink_strict() {
+        test_replay_internal(false, true, false, false, false);
+    }
+
+    #[test]
+    fn test_replay_fails_on_error() {
+        test_replay_internal(true, true, true, false, false);
+    }
+
+    #[test]
+    fn test_replay_exclude_all_files() {
+        test_replay_internal(true, false, false, true, false);
+    }
+
+    #[test]
+    fn test_replay_empty_exclude_files_list() {
+        test_replay_internal(true, false, false, false, true);
+    }
+}
diff --git a/init/libprefetch/prefetch/src/tracer/mem.rs b/init/libprefetch/prefetch/src/tracer/mem.rs
new file mode 100644
index 0000000..f69ae80
--- /dev/null
+++ b/init/libprefetch/prefetch/src/tracer/mem.rs
@@ -0,0 +1,897 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! See top level documentation for `crate::tracer`.
+
+use std::collections::hash_map::Iter;
+use std::fs::symlink_metadata;
+use std::io::{ErrorKind, Write};
+use std::iter::Iterator;
+use std::mem::take;
+use std::os::unix::fs::MetadataExt;
+use std::{
+    collections::{HashMap, HashSet},
+    fs::read_to_string,
+    option::Option,
+    path::{Path, PathBuf},
+};
+
+use log::{debug, error, info, warn};
+use regex::Regex;
+use serde::Deserialize;
+use serde::Serialize;
+use walkdir::{DirEntry, WalkDir};
+
+use crate::format::{coalesce_records, FsInfo};
+use crate::tracer::{page_size, TracerConfigs};
+use crate::{
+    format::{DeviceNumber, InodeNumber},
+    tracer::{TraceSubsystem, EXCLUDE_PATHS},
+    Error, FileId, Record, RecordsFile,
+};
+
+static MOUNTINFO_PATH: &str = "/proc/self/mountinfo";
+
+// Trace events to enable
+// Paths are relative to trace mount point
+static TRACE_EVENTS: &[&str] =
+    &["events/filemap/mm_filemap_add_to_page_cache/enable", "tracing_on"];
+
+// Filesystem types to ignore
+static EXCLUDED_FILESYSTEM_TYPES: &[&str] = &[
+    "binder",
+    "bpf",
+    "cgroup",
+    "cgroup2",
+    "configfs",
+    "devpts",
+    "fuse", // No emulated storage
+    "fusectl",
+    "proc",
+    "pstore",
+    "selinuxfs",
+    "sysfs",
+    "tmpfs", // Check for apex mount points
+    "tracefs",
+    "functionfs", // adb, fastboot
+    "f2fs",       // Skip /data mounts
+];
+
+#[cfg(target_os = "linux")]
+type MajorMinorType = u32;
+#[cfg(target_os = "android")]
+type MajorMinorType = i32;
+
+// TODO(b/302056482): Once we uprev nix crate, we can use the function exported by the crate.
+fn major(dev: DeviceNumber) -> MajorMinorType {
+    (((dev >> 32) & 0xffff_f000) | ((dev >> 8) & 0x0000_0fff)) as MajorMinorType
+}
+
+// TODO(b/302056482): Once we uprev nix crate, we can use the function exported by the crate.
+fn minor(dev: DeviceNumber) -> MajorMinorType {
+    (((dev >> 12) & 0xffff_ff00) | ((dev) & 0x0000_00ff)) as MajorMinorType
+}
+
+// TODO(b/302056482): Once we uprev nix crate, we can use the function exported by the crate.
+fn makedev(major: MajorMinorType, minor: MajorMinorType) -> DeviceNumber {
+    let major = major as DeviceNumber;
+    let minor = minor as DeviceNumber;
+    ((major & 0xffff_f000) << 32)
+        | ((major & 0x0000_0fff) << 8)
+        | ((minor & 0xffff_ff00) << 12)
+        | (minor & 0x0000_00ff)
+}
+
+fn build_device_number(major: &str, minor: &str) -> Result<DeviceNumber, Error> {
+    Ok(makedev(
+        major.parse::<MajorMinorType>().map_err(|e| Error::Custom {
+            error: format!("Failed to parse major number from {} with {}", major, e),
+        })?,
+        minor.parse::<MajorMinorType>().map_err(|e| Error::Custom {
+            error: format!("Failed to parse major number from {} with {}", major, e),
+        })?,
+    ))
+}
+
+// Returns timestamp in nanoseconds
+fn build_timestamp(seconds: &str, microseconds: &str) -> Result<u64, Error> {
+    let seconds = seconds.parse::<u64>().map_err(|e| Error::Custom {
+        error: format!("Failed to parse seconds from {} with {}", seconds, e),
+    })?;
+    let microseconds = microseconds.parse::<u64>().map_err(|e| Error::Custom {
+        error: format!("Failed to parse microseconds from {} with {}", seconds, e),
+    })?;
+    Ok((seconds * 1_000_000_000) + (microseconds * 1_000))
+}
+
+#[cfg(not(target_os = "android"))]
+fn is_highly_privileged_path(_path: &Path) -> bool {
+    false
+}
+
+#[cfg(target_os = "android")]
+fn is_highly_privileged_path(path: &Path) -> bool {
+    // Following directories contain a mix of files with and without access to stat/read.
+    // We do not completely exclude these directories as there is still a lot of
+    // file we can issue readahead on. Some of the files on which readahead fails include
+    // - /system/bin/run-as
+    // - /data/data/com.android.storagemanager
+    // - /system/apex/com.android.art/bin/dex2oat32
+    // - /data/user/0/com.android.systemui
+    //
+    // - TODO: /system/apex: Apex files in read-only partition may be read during boot.
+    // However, some files may not have access. Double check the record files
+    // to filter out the exact path.
+    let privileged_paths = [
+        "/data/data",
+        "/data/user/0",
+        "/data/user_de/0",
+        "/system/bin/",
+        "/system/etc/selinux/",
+        "/system/system_ext/etc/selinux/",
+        "/system/product/etc/selinux/",
+        "/system/vendor/etc/selinux/",
+        "/system_ext/etc/selinux/",
+        "/product/etc/selinux/",
+        "/vendor/etc/selinux/",
+        "/system/xbin",
+        "/system/etc/",
+        "/data/",
+        "/postinstall/",
+        "/mnt/",
+        "/metadata/",
+    ];
+    for privileged in privileged_paths {
+        if path.to_str().unwrap().starts_with(privileged) {
+            return true;
+        }
+    }
+    false
+}
+
+enum DeviceState {
+    Include((DeviceNumber, PathBuf)),
+    Exclude(DeviceNumber),
+}
+
+/// Utility struct that helps to include and exclude devices and mount points that need and don't
+/// need prefetching.
+#[derive(Debug, Deserialize, Serialize)]
+struct MountInfo {
+    // Map of device number to mount points
+    included_devices: HashMap<DeviceNumber, PathBuf>,
+
+    // Devices that we don't want to prefetch - like devices backing tempfs and sysfs
+    excluded_devices: HashSet<DeviceNumber>,
+}
+
+impl MountInfo {
+    // Parses file at `path` to build `Self`.`
+    fn create(path: &str) -> Result<Self, Error> {
+        let buf = read_to_string(path)
+            .map_err(|e| Error::Read { error: format!("Reading {} failed with: {}", path, e) })?;
+        Self::with_buf(&buf)
+    }
+
+    // Parses string in `buf` to build `Self`.
+    fn with_buf(buf: &str) -> Result<Self, Error> {
+        let regex = Self::get_regex()?;
+        let mut included_devices: HashMap<DeviceNumber, PathBuf> = HashMap::new();
+        let mut excluded_devices = HashSet::new();
+        let excluded_filesystem_types: HashSet<String> =
+            EXCLUDED_FILESYSTEM_TYPES.iter().map(|s| String::from(*s)).collect();
+        for line in buf.lines() {
+            if let Some(state) = Self::parse_line(&regex, &excluded_filesystem_types, line)? {
+                match state {
+                    DeviceState::Include((device, path)) => {
+                        included_devices.insert(device, path);
+                    }
+                    DeviceState::Exclude(device) => {
+                        excluded_devices.insert(device);
+                    }
+                }
+            }
+        }
+
+        Ok(Self { included_devices, excluded_devices })
+    }
+
+    fn parse_line(
+        re: &Regex,
+        excluded_filesystem_types: &HashSet<String>,
+        line: &str,
+    ) -> Result<Option<DeviceState>, Error> {
+        let caps = match re.captures(line) {
+            Some(caps) => caps,
+            None => {
+                return Ok(None);
+            }
+        };
+        if &caps["relative_path"] != "/" {
+            return Ok(None);
+        }
+
+        let mount_point = &caps["mount_point"];
+        let mnt_pnt_with_slash = format!("{}/", mount_point);
+        let device_number = build_device_number(&caps["major"], &caps["minor"])?;
+        let fs_type = &caps["fs_type"];
+
+        if excluded_filesystem_types.contains(fs_type) {
+            info!(
+                "excluding fs type: {} for {} mount-point {} slash {}",
+                fs_type, line, mount_point, mnt_pnt_with_slash
+            );
+            return Ok(Some(DeviceState::Exclude(device_number)));
+        }
+
+        for excluded in EXCLUDE_PATHS {
+            if mnt_pnt_with_slash.starts_with(excluded) {
+                info!(
+                    "exclude-paths fs type: {} for {} mount-point {} slash {}",
+                    fs_type, line, mount_point, mnt_pnt_with_slash
+                );
+                return Ok(Some(DeviceState::Exclude(device_number)));
+            }
+        }
+
+        Ok(Some(DeviceState::Include((device_number, PathBuf::from(mount_point)))))
+    }
+
+    fn get_regex() -> Result<Regex, Error> {
+        Regex::new(concat!(
+            r"^\s*(?P<id_unknown1>\S+)",
+            r"\s+(?P<id_unknown2>\S+)",
+            r"\s+(?P<major>[0-9]+):(?P<minor>[0-9]+)",
+            r"\s+(?P<relative_path>\S+)",
+            r"\s+(?P<mount_point>\S+)",
+            r"\s+(?P<mount_opt>\S+)",
+            r"\s+(?P<shared>\S+)",
+            r"\s+\S+",
+            r"\s+(?P<fs_type>\S+)",
+            r"\s+(?P<device_path>\S+)"
+        ))
+        .map_err(|e| Error::Custom {
+            error: format!("create regex for parsing mountinfo failed with: {}", e),
+        })
+    }
+
+    fn is_excluded(&self, device: &DeviceNumber) -> bool {
+        self.excluded_devices.contains(device)
+    }
+
+    fn get_included(&self) -> Iter<DeviceNumber, PathBuf> {
+        self.included_devices.iter()
+    }
+}
+
+#[derive(Default, PartialEq, Debug, Eq, Hash)]
+struct TraceLineInfo {
+    device: DeviceNumber,
+    inode: InodeNumber,
+    offset: u64,
+    timestamp: u64,
+}
+
+impl TraceLineInfo {
+    pub fn from_trace_line(re: &Regex, line: &str) -> Result<Option<Self>, Error> {
+        let caps = match re.captures(line) {
+            Some(caps) => caps,
+            None => return Ok(None),
+        };
+        let major = &caps["major"];
+        let minor = &caps["minor"];
+        let ino = &caps["ino"];
+        let offset = &caps["offset"];
+        let timestamp = build_timestamp(&caps["seconds"], &caps["microseconds"])?;
+        Ok(Some(TraceLineInfo {
+            device: build_device_number(major, minor)?,
+            inode: u64::from_str_radix(ino, 16).map_err(|e| Error::Custom {
+                error: format!("failed parsing inode: {} : {}", ino, e),
+            })?,
+            offset: offset.parse::<u64>().map_err(|e| Error::Custom {
+                error: format!("failed parsing offset: {} : {}", offset, e),
+            })?,
+            timestamp,
+        }))
+    }
+
+    #[cfg(test)]
+    pub fn from_fields(
+        major: MajorMinorType,
+        minor: MajorMinorType,
+        inode: u64,
+        offset: u64,
+        timestamp: u64,
+    ) -> Self {
+        Self { device: makedev(major, minor), inode, offset, timestamp }
+    }
+
+    // Convenience function to create regex. Used once per life of `record` but multiple times in
+    // case of tests.
+    pub fn get_trace_line_regex() -> Result<Regex, Error> {
+        // TODO: Fix this Regex expression for 5.15 kernels. This expression
+        // works only on 6.1+. Prior to 6.1, "<page>" was present in the output.
+        Regex::new(concat!(
+            r"^\s+(?P<cmd_pid>\S+)",
+            r"\s+(?P<cpu>\S+)",
+            r"\s+(?P<irq_stuff>\S+)",
+            r"\s+(?P<seconds>[0-9]+)\.(?P<microseconds>[0-9]+):",
+            r"\s+mm_filemap_add_to_page_cache:",
+            r"\s+dev\s+(?P<major>[0-9]+):(?P<minor>[0-9]+)",
+            r"\s+ino\s+(?P<ino>\S+)",
+            //r"\s+(?P<page>\S+)",
+            r"\s+(?P<pfn>\S+)",
+            r"\s+ofs=(?P<offset>[0-9]+)"
+        ))
+        .map_err(|e| Error::Custom {
+            error: format!("create regex for tracing failed with: {}", e),
+        })
+    }
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+struct MissingFile {
+    major_no: MajorMinorType,
+    minor_no: MajorMinorType,
+    inode: InodeNumber,
+    records: Vec<Record>,
+}
+
+#[derive(Debug, Default, Deserialize, Serialize)]
+struct DebugInfo {
+    // Check all inodes for which paths don't exists. These are the files which
+    // * got deleted before we got to them
+    // * are filesystem internal files that fs access only via inode numbers.
+    missing_files: HashMap<FileId, MissingFile>,
+
+    // Number of bytes read that belongs to directory type inodes.
+    directory_read_bytes: u64,
+
+    // Number of bytes read from files for which we could not find a path in
+    // the filesystems.
+    missing_path_bytes: u64,
+
+    // Paths for which the current process doesn't have read permission.
+    privileged_paths: Vec<PathBuf>,
+}
+
+#[derive(Debug, Serialize)]
+pub(crate) struct MemTraceSubsystem {
+    device_inode_map: HashMap<DeviceNumber, HashMap<InodeNumber, FileId>>,
+    // Count of all InodeNumber held by `device_inode_map`. This is handy to assign unique
+    // FileId.
+    inode_count: u64,
+
+    // `Record`s built from parsing read trace lines.
+    records: Vec<Record>,
+
+    // Regex to parse lines from trace_pipe.
+    #[serde(skip_serializing)]
+    regex: Regex,
+
+    // Mounted devices/filesystems either at the time of parsing trace file or at the time
+    // of building RecordsFile from parsed lines.
+    mount_info: MountInfo,
+
+    // A copy of TracerConfigs
+    tracer_configs: Option<TracerConfigs>,
+
+    // system page size stored to avoid frequent syscall to get the page size.
+    page_size: u64,
+
+    // The fields of the debug_info are populated when build_records_file is called (after lines
+    // are parsed from the trace file/pipe).
+    debug_info: DebugInfo,
+}
+
+impl MemTraceSubsystem {
+    pub fn update_configs(configs: &mut TracerConfigs) {
+        for path in EXCLUDE_PATHS {
+            configs.excluded_paths.push(path.to_owned().to_string());
+        }
+
+        for event in TRACE_EVENTS {
+            configs.trace_events.push(event.to_owned().to_string());
+        }
+        configs.mountinfo_path = Some(MOUNTINFO_PATH.to_string());
+    }
+
+    pub fn create_with_configs(tracer_configs: TracerConfigs) -> Result<Self, Error> {
+        static INITIAL_RECORDS_CAPACITY: usize = 100_000;
+        debug!("TracerConfig: {:#?}", tracer_configs);
+
+        let regex = TraceLineInfo::get_trace_line_regex()?;
+        let mount_info = MountInfo::create(tracer_configs.mountinfo_path.as_ref().unwrap())?;
+        debug!("mountinfo: {:#?}", mount_info);
+
+        Ok(Self {
+            device_inode_map: HashMap::new(),
+            inode_count: 0,
+            // For one product of android, we see around 50k records. To avoid a lot allocations
+            // and copying of records, we create a vec of this size.
+            //
+            // We do this to reduces chances of losing data, however unlikely, coming over
+            // `trace_pipe`.
+            //
+            // Note: Once we are done reading trace lines, we are less pedantic about allocations
+            // and mem copies.
+            records: Vec::with_capacity(INITIAL_RECORDS_CAPACITY),
+            regex,
+            mount_info,
+            tracer_configs: Some(tracer_configs),
+            page_size: page_size()? as u64,
+            debug_info: DebugInfo {
+                missing_files: HashMap::new(),
+                directory_read_bytes: 0,
+                missing_path_bytes: 0,
+                privileged_paths: vec![],
+            },
+        })
+    }
+
+    fn new_file_id(&mut self) -> FileId {
+        let id = self.inode_count;
+        self.inode_count += 1;
+        FileId(id)
+    }
+
+    fn get_trace_info(&self, line: &str) -> Result<Option<TraceLineInfo>, Error> {
+        TraceLineInfo::from_trace_line(&self.regex, line)
+    }
+
+    // Returns true if the file or directory is on a device which is excluded from walking.
+    // If the path was excluded because the current process doesn't have privileged to read it,
+    // the path gets added to `privileged` list.
+    fn is_excluded(&self, entry: &DirEntry, device: u64, privileged: &mut Vec<PathBuf>) -> bool {
+        // We skip paths that are reside on excluded devices here. This is ok because a
+        // non-excluded mount point will have a separate entry in MountInfo. For example
+        // - `/` has ext4
+        // - `/tmp` has tempfs
+        // - `/tmp/mnt` has ext4 that we are interested in.
+        // MountInfo will have three entries - `/`, `/tmp/` and `/tmp/mnt`. Skipping walking
+        // `/tmp` while walking `/` is ok as next `mount_info.get_included()` will return
+        // `/tmp/mnt` path.
+        //
+        //
+        // We skip links here as they can refer to mount points across
+        // filesystems. If that path is valid and access are valid, then
+        // we should have entry by the file's <device, inode> pair.
+        //
+        //
+        // We skip devices that don't match current walking device because we eventually
+        // walk other devices.
+        match symlink_metadata(entry.path()) {
+            Ok(lstat) => {
+                if self.mount_info.is_excluded(&lstat.dev())
+                    || lstat.dev() != device
+                    || lstat.file_type().is_symlink()
+                {
+                    return true;
+                }
+            }
+            Err(e) => {
+                error!("stat on {} failed with {}", entry.path().to_str().unwrap(), e);
+
+                // We treat EACCES special because on some platforms, like android, process needs to
+                // have very special set of permissions to access some inodes.
+                // We ignore errors in such cases *after* making an effort to get to them.
+                if e.kind() == ErrorKind::PermissionDenied
+                    && is_highly_privileged_path(entry.path())
+                {
+                    privileged.push(entry.path().to_owned());
+                    return true;
+                }
+            }
+        }
+
+        // On error, we return false because if lstat has failed, it will fail following operations
+        // including stat.
+        false
+    }
+}
+
+impl TraceSubsystem for MemTraceSubsystem {
+    fn add_line(&mut self, line: &str) -> Result<(), Error> {
+        if let Some(info) = self.get_trace_info(line)? {
+            if self.mount_info.is_excluded(&info.device) {
+                return Ok(());
+            }
+
+            self.device_inode_map.entry(info.device).or_default();
+
+            let file_id = if let Some(id) =
+                self.device_inode_map.get_mut(&info.device).unwrap().get(&info.inode)
+            {
+                id.clone()
+            } else {
+                self.new_file_id()
+            };
+            self.device_inode_map
+                .get_mut(&info.device)
+                .unwrap()
+                .insert(info.inode, file_id.clone());
+
+            self.records.push(Record {
+                file_id,
+                offset: info.offset,
+                length: self.page_size,
+                timestamp: info.timestamp,
+            });
+        }
+
+        Ok(())
+    }
+
+    fn build_records_file(&mut self) -> Result<RecordsFile, Error> {
+        // reset debug_info in case build_records_file was called twice.
+        self.debug_info = DebugInfo::default();
+        let mut rf = RecordsFile::default();
+        let mut directories = HashSet::new();
+
+        // TODO(b/302194377): We are holding all privileged_paths in this variable and then
+        // transferring it to `self.debug_info.privileged_paths` later. We can avoid this step
+        // if we directly update `self.debug_info.privileged_paths`. To do so, we need to refactor
+        // code to make borrow not complain at several places - ex. immutably borrowing
+        // `self.mount_info` in outer loop and then mutably borrowing
+        // `self.debug_info.privileged_paths`.
+        let mut privileged_paths = vec![];
+
+        // Reload mount_info. When we created mount_info for the first time, maybe
+        // the system was in early boot phase. Reload the mount_info so as to get
+        // current/new mount points.
+        if let Some(tracer_config) = &self.tracer_configs {
+            self.mount_info = MountInfo::create(tracer_config.mountinfo_path.as_ref().unwrap())?;
+            debug!("reloaded mountinfo: {:#?}", self.mount_info);
+        }
+
+        for (device, root_path) in self.mount_info.get_included() {
+            let inode_map = if let Some(map) = self.device_inode_map.get(device) {
+                map
+            } else {
+                continue;
+            };
+
+            if inode_map.is_empty() {
+                return Err(Error::Custom {
+                    error: format!("Unexpected empty records for {:?}", root_path),
+                });
+            }
+
+            let mut block_size = 0;
+            let walker = WalkDir::new(root_path).into_iter();
+
+            for entry in
+                walker.filter_entry(|e| !self.is_excluded(e, *device, &mut privileged_paths))
+            {
+                let path = match entry {
+                    Ok(entry) => entry.path().to_owned(),
+                    Err(e) => {
+                        error!("walking directory failed: {} {}", root_path.to_str().unwrap(), e);
+                        continue;
+                    }
+                };
+
+                let stat = match path.metadata() {
+                    Ok(stat) => stat,
+                    Err(e) => {
+                        error!("stat on {} failed with {}", path.to_str().unwrap(), e);
+                        continue;
+                    }
+                };
+
+                block_size = stat.blksize();
+
+                let file_id = if let Some(id) = inode_map.get(&stat.ino()) {
+                    id.clone()
+                } else {
+                    continue;
+                };
+
+                // We cannot issue a normal readahead on directories. So we skip those records that
+                // belong to directories.
+                if stat.file_type().is_dir() {
+                    info!(
+                        "skipping directory readahead record for file_id:{file_id} ino:{} path:{} ",
+                        stat.ino(),
+                        path.to_str().unwrap()
+                    );
+                    directories.insert(file_id.clone());
+                    continue;
+                }
+
+                rf.insert_or_update_inode(file_id, &stat, path.to_str().unwrap().to_owned());
+            }
+
+            rf.inner.filesystems.insert(*device, FsInfo { block_size });
+        }
+
+        self.debug_info.privileged_paths.append(&mut privileged_paths);
+
+        for (device, inode_map) in &self.device_inode_map {
+            for (inode, file_id) in inode_map {
+                if !rf.inner.inode_map.contains_key(file_id) {
+                    let major_no: MajorMinorType = major(*device);
+                    let minor_no: MajorMinorType = minor(*device);
+                    self.debug_info.missing_files.insert(
+                        file_id.clone(),
+                        MissingFile { major_no, minor_no, inode: *inode, records: vec![] },
+                    );
+                }
+            }
+        }
+
+        // Remove all records that belong to directories or for which we did not find paths.
+        let mut records = vec![];
+        for record in take(&mut self.records) {
+            if directories.contains(&record.file_id) {
+                self.debug_info.directory_read_bytes += record.length;
+            } else if let Some(missing_file) =
+                self.debug_info.missing_files.get_mut(&record.file_id)
+            {
+                self.debug_info.missing_path_bytes += record.length;
+                missing_file.records.push(record);
+            } else {
+                records.push(record);
+            }
+        }
+
+        warn!(
+            "Recorded {} bytes worth of data read from directories",
+            self.debug_info.directory_read_bytes
+        );
+        warn!(
+            "Recorded {} bytes worth of data read from files that don't have paths",
+            self.debug_info.missing_path_bytes
+        );
+
+        rf.inner.records = coalesce_records(records, true);
+
+        Ok(rf)
+    }
+
+    fn serialize(&self, write: &mut dyn Write) -> Result<(), Error> {
+        write
+            .write_all(
+                &serde_json::to_vec(&self)
+                    .map_err(|e| Error::Serialize { error: e.to_string() })?,
+            )
+            .map_err(|source| Error::Write { path: "intermediate file".to_owned(), source })
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use nix::sys::stat::{major, minor};
+    use std::assert_eq;
+    use std::path::Path;
+
+    use crate::tracer::tests::{copy_uncached_files_and_record_from, setup_test_dir};
+
+    use crate::replay::tests::generate_cached_files_and_record;
+
+    use super::*;
+
+    static TRACE_BUFFER: &str = r#"
+ Settingide-502  [001] ....   484.360292: mm_filemap_add_to_page_CACHE: dev 254:6 ino cf1 page=68d477 pfn=59833 ofs=32768
+ Settingide-502  [001] ....   484.360311: mm_filemap_add_to_page_cache: dev 254:6 ino cf1 page=759458 pfn=59827 ofs=57344
+ BOX_ENTDED-3071 [001] ....   485.276715: mm_filemap_add_to_pag_ecache: dev 254:6 ino 1 page=00cc1c pfn=81748 ofs=13574144
+ BOX_ENTDED-3071 [001] ....   485.276990: mm_filemap_add_to_page_cache: dev 254:6 ino cf2 page=36540b pfn=60952 ofs=0
+ .gms.peent-843  [001] ....   485.545516: mm_filemap_add_to_page_cache: dev 254:6 ino 1 page=002e8b pfn=58928 ofs=13578240
+ .gms.peent-843  [001] ....   485.545820: mm_filemap_add_to_page_cache: dev 254:6 ino cf3 page=6233ce pfn=58108 ofs=0
+      an.bg-459  [001] ....   494.029396: mm_filemap_add_to_page_cache: dev 254:3 ino 7cf page=c5b5c7 pfn=373933 ofs=1310720
+      an.bg-459  [001] ....   494.029398: mm_filemap_add_to_page_cache: dev 254:3 ino 7cf page=b8b9ec pfn=410074 ofs=1314816
+       "#;
+
+    fn sample_mem_traces() -> (String, Vec<Option<TraceLineInfo>>) {
+        (
+            TRACE_BUFFER.to_owned(),
+            vec![
+                None,
+                None,
+                Some(TraceLineInfo::from_fields(254, 6, 0xcf1, 57344, 484360311000)),
+                None,
+                Some(TraceLineInfo::from_fields(254, 6, 0xcf2, 0, 485276990000)),
+                Some(TraceLineInfo::from_fields(254, 6, 0x1, 13578240, 485545516000)),
+                Some(TraceLineInfo::from_fields(254, 6, 0xcf3, 0, 485545820000)),
+                Some(TraceLineInfo::from_fields(254, 3, 0x7cf, 1310720, 494029396000)),
+                Some(TraceLineInfo::from_fields(254, 3, 0x7cf, 1314816, 494029398000)),
+                None,
+            ],
+        )
+    }
+
+    #[test]
+    fn test_parse_trace_line() {
+        let (buf, res) = sample_mem_traces();
+        let re = TraceLineInfo::get_trace_line_regex().unwrap();
+        for (index, line) in buf.lines().enumerate() {
+            let found = TraceLineInfo::from_trace_line(&re, line).unwrap();
+            let expected = res.get(index).unwrap();
+            assert_eq!(found.is_some(), expected.is_some());
+            if found.is_some() {
+                assert_eq!(found.unwrap(), *expected.as_ref().unwrap());
+            }
+        }
+    }
+
+    #[test]
+    fn test_add_line() {
+        let test_base_dir = setup_test_dir();
+        let (rf, mut files) =
+            generate_cached_files_and_record(None, true, Some(page_size().unwrap() as u64));
+        let (_uncached_rf, uncached_files) =
+            copy_uncached_files_and_record_from(Path::new(&test_base_dir), &mut files, &rf);
+        let mut mount_include = HashMap::new();
+
+        let included_dev = uncached_files.get(0).unwrap().0.metadata().unwrap().dev();
+        let included_inode1 = uncached_files.get(0).unwrap().0.metadata().unwrap().ino();
+        let included_inode2 = uncached_files.get(1).unwrap().0.metadata().unwrap().ino();
+        let included_major = major(included_dev);
+        let included_minor = minor(included_dev);
+        mount_include.insert(included_dev, std::fs::canonicalize(test_base_dir).unwrap());
+        let mut mount_exclude = HashSet::new();
+        mount_exclude.insert(0);
+
+        let mut mem_tracer = MemTraceSubsystem {
+            device_inode_map: HashMap::new(),
+            inode_count: 0,
+            records: vec![],
+            regex: TraceLineInfo::get_trace_line_regex().unwrap(),
+            mount_info: MountInfo {
+                included_devices: mount_include,
+                excluded_devices: mount_exclude,
+            },
+            tracer_configs: None,
+            page_size: page_size().unwrap() as u64,
+            debug_info: DebugInfo {
+                missing_files: HashMap::new(),
+                directory_read_bytes: 0,
+                missing_path_bytes: 0,
+                privileged_paths: vec![],
+            },
+        };
+
+        let pg_size = page_size().unwrap();
+        // Format is major, minor, inode, offset
+        let inputs = vec![
+            (0, 0, 2, 10), // to be excluded. bad device.
+            (included_major, included_minor, included_inode1, 0),
+            (included_major, included_minor, included_inode1, 3 * pg_size),
+            // duplicate read
+            (included_major, included_minor, included_inode1, 3 * pg_size),
+            (0, 0, included_inode1, 10), // to be excluded. bad device.
+            (included_major, included_minor, included_inode1, 2 * pg_size), // contiguous
+            // non-contiguous
+            (included_major, included_minor, included_inode1, 12 * pg_size),
+            // same offset different inode
+            (included_major, included_minor, included_inode2, 3 * pg_size),
+            // Contiguous offset different inode
+            (included_major, included_minor, included_inode2, pg_size),
+        ];
+
+        for (i, (major, minor, inode, offset)) in inputs.iter().enumerate() {
+            // used to timestamp the log line.
+            let seconds = i;
+            // used to timestamp the log line.
+            let microseconds = i;
+            for operation in &["mm_filemap_add_to_page_cache", "some_other_operation"] {
+                let line = format!(
+                    " BOX_ENTRY_ADDED-3071    [001] ....   {}.{}: {}: \
+                    dev {}:{} ino {:x} page=00000000f936540b pfn=60952 ofs={}",
+                    seconds, microseconds, operation, major, minor, inode, offset
+                );
+                mem_tracer.add_line(&line).unwrap();
+            }
+        }
+        assert_eq!(mem_tracer.records.len(), 7);
+        assert_eq!(mem_tracer.device_inode_map.len(), 1);
+        assert_eq!(mem_tracer.device_inode_map.get(&included_dev).unwrap().len(), 2);
+        assert!(mem_tracer
+            .device_inode_map
+            .get(&included_dev)
+            .unwrap()
+            .contains_key(&included_inode1));
+        assert!(mem_tracer
+            .device_inode_map
+            .get(&included_dev)
+            .unwrap()
+            .contains_key(&included_inode2));
+    }
+
+    fn new_record(file: u64, offset: u64, length: u64, timestamp: u64) -> Record {
+        Record { file_id: FileId(file), offset, length, timestamp }
+    }
+
+    #[test]
+    fn test_get_records_file() {
+        let test_base_dir = setup_test_dir();
+        let (rf, mut files) =
+            generate_cached_files_and_record(None, true, Some(page_size().unwrap() as u64));
+        let (_uncached_rf, uncached_files) =
+            copy_uncached_files_and_record_from(Path::new(&test_base_dir), &mut files, &rf);
+        let mut mount_include = HashMap::new();
+
+        let included_dev = uncached_files.get(0).unwrap().0.metadata().unwrap().dev();
+        let included_inode1 = uncached_files.get(0).unwrap().0.metadata().unwrap().ino();
+        let included_inode2 = uncached_files.get(1).unwrap().0.metadata().unwrap().ino();
+        let included_major = major(included_dev);
+        let included_minor = minor(included_dev);
+        mount_include.insert(included_dev, std::fs::canonicalize(test_base_dir).unwrap());
+        let mut mount_exclude = HashSet::new();
+        mount_exclude.insert(0);
+
+        let mut mem_tracer = MemTraceSubsystem {
+            device_inode_map: HashMap::new(),
+            inode_count: 0,
+            records: vec![],
+            regex: TraceLineInfo::get_trace_line_regex().unwrap(),
+            mount_info: MountInfo {
+                included_devices: mount_include,
+                excluded_devices: mount_exclude,
+            },
+            tracer_configs: None,
+            page_size: page_size().unwrap() as u64,
+            debug_info: DebugInfo {
+                missing_files: HashMap::new(),
+                directory_read_bytes: 0,
+                missing_path_bytes: 0,
+                privileged_paths: vec![],
+            },
+        };
+
+        let pg_size = page_size().unwrap() as u64;
+        // Format is major, minor, inode, offset
+        let inputs = vec![
+            (0, 0, 2, 10), // to be excluded. bad device.
+            (included_major, included_minor, included_inode1, 0),
+            (included_major, included_minor, included_inode1, 3 * pg_size),
+            // duplicate read
+            (included_major, included_minor, included_inode1, 3 * pg_size),
+            (0, 0, included_inode1, 10), // to be excluded. bad device.
+            (included_major, included_minor, included_inode1, 2 * pg_size), // contiguous
+            // non-contiguous
+            (included_major, included_minor, included_inode1, 12 * pg_size),
+            // same offset different inode
+            (included_major, included_minor, included_inode2, 3 * pg_size),
+            // Contiguous offset different inode
+            (included_major, included_minor, included_inode2, pg_size),
+        ];
+
+        for (i, (major, minor, inode, offset)) in inputs.iter().enumerate() {
+            // used to timestamp the log line.
+            let seconds = i;
+            // used to timestamp the log line.
+            let microseconds = i;
+            for operation in &["mm_filemap_add_to_page_cache", "some_other_operation"] {
+                let line = format!(
+                    " BOX_ENTRY_ADDED-3071    [001] ....   {}.{}: {}: \
+                    dev {}:{} ino {:x} page=00000000f936540b pfn=60952 ofs={}",
+                    seconds, microseconds, operation, major, minor, inode, offset
+                );
+                mem_tracer.add_line(&line).unwrap();
+            }
+        }
+        let rf = mem_tracer.build_records_file().unwrap();
+        assert_eq!(
+            rf.inner.records,
+            vec![
+                new_record(0, 0, pg_size, 1000001000),
+                new_record(0, 2 * pg_size, 2 * pg_size, 2000002000),
+                new_record(0, 12 * pg_size, pg_size, 6000006000),
+                new_record(1, pg_size, pg_size, 8000008000),
+                new_record(1, 3 * pg_size, pg_size, 7000007000),
+            ]
+        );
+    }
+}
diff --git a/init/libprefetch/prefetch/src/tracer/mod.rs b/init/libprefetch/prefetch/src/tracer/mod.rs
new file mode 100644
index 0000000..0f16116
--- /dev/null
+++ b/init/libprefetch/prefetch/src/tracer/mod.rs
@@ -0,0 +1,965 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tracer supports collecting information based off of two different tracing
+//! subsystems within `/sys/kernel/tracing`.
+//!
+//! ## Mem
+//! Mem is preferred tracer.
+//! ### Phase 1:
+//! This phase relies on a trace event at
+//! "events/filemap/mm_filemap_add_to_page_cache". When enabled, the event logs
+//! a message that contains device id, inode number, offset of the page that is
+//! being read. The tracer makes a note of this.
+//!
+//! ### Phase 2:
+//! When the recording of events is done, tracer all get mount points for which
+//! device id is recorded. Once it knows the mount points, it looks up file
+//! paths for the inode numbers that it records. The paths, offset and lengths
+//! are then stored in records file.
+//!
+//! Phase 2 is very IO intensive as entire filesystem is walked to find paths
+//! for different inodes.
+//!
+pub(crate) mod mem;
+
+use std::{
+    boxed::Box,
+    collections::HashSet,
+    fs::{create_dir, read_to_string, rename, File, OpenOptions},
+    io::{BufRead, BufReader, Read, Write},
+    path::{Path, PathBuf},
+    string::ToString,
+    sync::mpsc::{self, Receiver, Sender},
+};
+
+use log::{error, info};
+use nix::time::ClockId;
+use serde::Deserialize;
+use serde::Serialize;
+
+use crate::error::Error;
+use crate::{args::TracerType, format::RecordsFile};
+use mem::MemTraceSubsystem;
+
+pub(crate) static EXCLUDE_PATHS: &[&str] =
+    &["/dev/", "/proc/", "/sys/", "/tmp/", "/run/", "/config/", "/mnt/", "/storage/"];
+
+/// During record phase, prefetch may modify files under `/sys/kernel/tracing/` to
+/// - change trace buffer size so that we don't lose trace events
+/// - enable a few trace events
+/// - enable tracing
+///
+///  The old values are restored at the end of record.
+#[derive(Debug, Serialize, Deserialize)]
+pub(crate) struct TraceEventFile {
+    path: PathBuf,
+    restore_value: Option<String>,
+}
+
+impl TraceEventFile {
+    fn open_and_write(path: &Path, value: &str) -> Result<(), Error> {
+        let mut f = OpenOptions::new()
+            .write(true)
+            .read(true)
+            .open(path)
+            .map_err(|e| Error::Open { source: e, path: path.to_str().unwrap().to_string() })?;
+        f.write_all(value.as_bytes())
+            .map_err(|e| Error::Write { path: path.to_str().unwrap().to_owned(), source: e })
+    }
+
+    pub fn write(path: PathBuf, value: &str) -> Result<Self, Error> {
+        let restore_value = read_to_string(&path).map_err(|s| Error::Read {
+            error: format!("Reading {} failed:{}", path.to_str().unwrap(), s),
+        })?;
+
+        Self::open_and_write(&path, value)?;
+
+        info!(
+            "Changed contents of {} from {:?} to {}",
+            path.to_str().unwrap(),
+            restore_value,
+            value
+        );
+        Ok(Self { path, restore_value: Some(restore_value) })
+    }
+
+    pub fn enable(path: PathBuf) -> Result<Self, Error> {
+        Self::write(path, "1")
+    }
+
+    pub fn restore(&self) -> Result<(), Error> {
+        if let Some(restore_value) = &self.restore_value {
+            Self::open_and_write(&self.path, restore_value)
+        } else {
+            Ok(())
+        }
+    }
+}
+
+impl Drop for TraceEventFile {
+    fn drop(&mut self) {
+        if let Err(ret) = self.restore() {
+            error!(
+                "Failed to restore state of file {:?} with value: {:?}. Error: {}",
+                self.path,
+                self.restore_value,
+                ret.to_string()
+            );
+        }
+    }
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+pub(crate) struct TracerConfigs {
+    pub excluded_paths: Vec<String>,
+    pub buffer_size_file_path: String,
+    pub trace_base_path: PathBuf,
+    pub trace_events: Vec<String>,
+    pub mountinfo_path: Option<String>,
+    pub trace_operations: HashSet<String>,
+    // We never read back these fields. The only use for holding these around is to restore state at
+    // the end of run.
+    #[allow(dead_code)]
+    trace_files: Vec<TraceEventFile>,
+}
+
+impl TracerConfigs {
+    pub fn new(
+        kb_buffer_size: Option<u64>,
+        setup_tracing: bool,
+        tracer_type: TracerType,
+        trace_mount_point: Option<String>,
+        tracing_instance: Option<String>,
+    ) -> Result<Self, Error> {
+        static TRACE_MOUNT_POINT: &str = "/sys/kernel/tracing";
+
+        // Trace buffer size file relative to trace mount point
+        static TRACE_BUFFER_SIZE_FILE: &str = "buffer_size_kb";
+
+        let trace_mount_point = trace_mount_point.unwrap_or_else(|| TRACE_MOUNT_POINT.to_owned());
+        let trace_base_path = if let Some(instance) = tracing_instance {
+            Path::new(&trace_mount_point).join("instances").join(instance)
+        } else {
+            Path::new(&trace_mount_point).to_owned()
+        };
+
+        if setup_tracing && !trace_base_path.exists() {
+            create_dir(&trace_base_path).map_err(|e| Error::Create {
+                source: e,
+                path: trace_base_path.to_str().unwrap().to_owned(),
+            })?;
+        }
+
+        if !trace_base_path.exists() {
+            return Err(Error::Custom {
+                error: format!(
+                    "trace mount point doesn't exist: {}",
+                    trace_base_path.to_str().unwrap().to_owned()
+                ),
+            });
+        }
+
+        let mut configs = TracerConfigs {
+            excluded_paths: vec![],
+            buffer_size_file_path: TRACE_BUFFER_SIZE_FILE.to_owned(),
+            trace_base_path,
+            trace_events: vec![],
+            mountinfo_path: None,
+            trace_operations: HashSet::new(),
+            trace_files: vec![],
+        };
+
+        match tracer_type {
+            TracerType::Mem => MemTraceSubsystem::update_configs(&mut configs),
+        }
+
+        if setup_tracing {
+            let trace_base_dir = Path::new(&configs.trace_base_path);
+            if let Some(kb_buffer_size) = kb_buffer_size {
+                configs.trace_files.push(TraceEventFile::write(
+                    trace_base_dir.join(&configs.buffer_size_file_path),
+                    &kb_buffer_size.to_string(),
+                )?);
+            }
+            for path in &configs.trace_events {
+                configs.trace_files.push(TraceEventFile::enable(trace_base_dir.join(path))?);
+            }
+        }
+
+        Ok(configs)
+    }
+}
+
+/// Returns time, in nanoseconds, since boot
+pub fn nanoseconds_since_boot() -> u64 {
+    if let Ok(t) = nix::time::clock_gettime(ClockId::CLOCK_MONOTONIC) {
+        //((t.tv_sec() * 1_000_000_000) + t.tv_nsec()) as u64
+        (1 + t.tv_nsec()) as u64
+    } else {
+        0
+    }
+}
+
+pub(crate) trait TraceSubsystem {
+    /// This routine is called whenever there is a new line available to be parsed.
+    /// The impl potentially want to parse the line and retain the data in memory.
+    /// Implementors are not expected to do heavy lifting tasks, like IO, in this context.
+    fn add_line(&mut self, line: &str) -> Result<(), Error>;
+
+    /// Generates a records file from all the collected data.
+    /// From this context, the implementors might process data by issuing queries to filesystems.
+    fn build_records_file(&mut self) -> Result<RecordsFile, Error>;
+
+    /// This helps us serialize internat state of tracing subsystem during record phase.
+    /// This allows us to get raw data for analysis of read pattern and debugging in situations
+    /// when we might not have access to system yet(ex. early boot phase) .
+    fn serialize(&self, writer: &mut dyn Write) -> Result<(), Error>;
+}
+
+/// Returns page size in bytes
+pub(crate) fn page_size() -> Result<usize, Error> {
+    Ok(nix::unistd::sysconf(nix::unistd::SysconfVar::PAGE_SIZE)
+        .map_err(|e| Error::Custom { error: format!("failed to query page size: {}", e) })?
+        .ok_or(Error::Custom { error: "failed to query page size: None returned".to_string() })?
+        as usize)
+}
+
+pub struct Tracer {
+    // Open handle to static trace buffer file which is usually located at
+    // `/sys/kernel/tracing/trace`.
+    // See comment on top of `trace` function.
+    trace_file: BufReader<File>,
+
+    // Open handle to trace pipe which is usually located at
+    // `/sys/kernel/tracing/trace_pipe`.
+    // See comment on top of `trace` function.
+    trace_pipe: BufReader<File>,
+
+    // Signal to exit the infinite loop in `trace()`
+    exit_rx: Receiver<()>,
+
+    // tracing subsystem that actually parses trace lines and builds records.
+    tracing_subsystem: Box<dyn TraceSubsystem + Send>,
+}
+
+impl Tracer {
+    pub fn create(
+        kb_buffer_size: Option<u64>,
+        tracer_type: TracerType,
+        tracing_instance: Option<String>,
+        setup_tracing: bool,
+    ) -> Result<(Self, Sender<()>), Error> {
+        /// Trace pipe path relative to trace mount point
+        static TRACE_PIPE_PATH: &str = "trace_pipe";
+
+        /// Trace file path relative to trace mount point
+        static TRACE_FILE_PATH: &str = "trace";
+
+        let configs = TracerConfigs::new(
+            kb_buffer_size,
+            setup_tracing,
+            tracer_type.clone(),
+            None,
+            tracing_instance,
+        )?;
+
+        let pipe_path = Path::new(&configs.trace_base_path).join(TRACE_PIPE_PATH);
+        let trace_pipe = File::open(&pipe_path)
+            .map_err(|e| Error::Open { source: e, path: pipe_path.to_str().unwrap().to_owned() })?;
+
+        let file_path = Path::new(&configs.trace_base_path).join(TRACE_FILE_PATH);
+        let trace_file = File::open(&file_path)
+            .map_err(|e| Error::Open { source: e, path: file_path.to_str().unwrap().to_owned() })?;
+        let tracer: Box<dyn TraceSubsystem + Send> = match tracer_type {
+            TracerType::Mem => Box::new(MemTraceSubsystem::create_with_configs(configs)?),
+        };
+
+        Self::create_with_config(trace_file, trace_pipe, tracer)
+    }
+
+    fn create_with_config(
+        file: File,
+        pipe: File,
+        tracer: Box<dyn TraceSubsystem + Send>,
+    ) -> Result<(Self, Sender<()>), Error> {
+        let (exit_tx, exit_rx) = mpsc::channel();
+        let trace_pipe = BufReader::new(pipe);
+        let trace_file = BufReader::new(file);
+
+        Ok((Self { trace_file, trace_pipe, exit_rx, tracing_subsystem: tracer }, exit_tx))
+    }
+
+    fn save_intermediate_state(&self, intermediate_file: Option<&PathBuf>) -> Result<(), Error> {
+        if let Some(int_path) = intermediate_file {
+            let mut tmp_file = int_path.clone();
+            tmp_file.set_extension("int.tmp");
+            let mut out_file = File::create(&tmp_file).map_err(|source| Error::Create {
+                source,
+                path: int_path.to_str().unwrap().to_owned(),
+            })?;
+            self.tracing_subsystem.serialize(&mut out_file)?;
+            rename(&tmp_file, int_path).map_err(|e| Error::Custom {
+                error: format!(
+                    "rename file from{} to:{} failed with {}",
+                    tmp_file.to_str().unwrap(),
+                    int_path.to_str().unwrap(),
+                    e
+                ),
+            })?;
+        }
+        Ok(())
+    }
+
+    /// This routine parses all the events since last reset of trace buffer.
+    ///
+    /// The linux tracing subsystem exposes two interfaces to get trace events from
+    /// 1. a file - usually at `/sys/kernel/tracing/trace`
+    /// 2. a pipe - usually at `/sys/kernel/tracing/trace_pipe`
+    ///
+    /// The file is *sort of* ring buffer which works off of `buffer_size_kb` sized buffer.
+    /// Relying on it is not very efficient as we end up getting a lot of duplicates.
+    ///
+    /// The pipe only contains line traces. Any trace events that occurred before opening
+    /// of this file are lost.
+    ///
+    /// IMPORTANT: The moment we start reading from the pipe, the events in the file
+    /// disappear/reset. So we should read file entirely before we start reading the pipe.
+    pub fn trace(&mut self, intermediate_file: Option<&PathBuf>) -> Result<RecordsFile, Error> {
+        let mut buf = String::new();
+        self.trace_file
+            .read_to_string(&mut buf)
+            .map_err(|e| Error::Read { error: format!("failed to read trace file: {}", e) })?;
+
+        for line in buf.lines() {
+            let trimmed = line.trim_end();
+            self.tracing_subsystem.add_line(trimmed)?;
+        }
+
+        // The logic here is to block on trace_pipe forever. We break out of loop only when we read
+        // a line from the pipe *and* we have received an event on exit_rx.
+        // This logic works because the system will have one or more read syscalls and also we,
+        // at the moment, use prefetch on build systems and not in production to generate records
+        // file.
+        //
+        // TODO(b/302045304): async read trace_pipe.
+        while self.exit_rx.try_recv().is_err() {
+            let mut line = String::new();
+            let len = self
+                .trace_pipe
+                .read_line(&mut line)
+                .map_err(|e| Error::Read { error: e.to_string() })?;
+            let trimmed = line.trim_end();
+            if len == 0 {
+                // We should never read zero length line or reach EOF of the pipe.
+                return Err(Error::Read {
+                    error: "read zero length line from trace_pipe".to_string(),
+                });
+            }
+            self.tracing_subsystem.add_line(trimmed)?;
+        }
+
+        // We are here because the above loop exited normally. Traced lines are stored in `Self`.
+        // Build `RecordsFile` from processing data from read lines above.
+        self.save_intermediate_state(intermediate_file)?;
+        let rf = self.tracing_subsystem.build_records_file()?;
+        self.save_intermediate_state(intermediate_file)?;
+        Ok(rf)
+    }
+}
+
+#[cfg(test)]
+pub(crate) mod tests {
+    use crate::RecordsFile;
+
+    use std::alloc::Layout;
+    use std::borrow::ToOwned;
+    use std::convert::TryInto;
+    use std::fs::{create_dir_all, OpenOptions};
+    use std::io::Read;
+    use std::io::Seek;
+    use std::io::Write;
+    use std::ops::Range;
+    use std::os::linux::fs::MetadataExt;
+    use std::os::unix::fs::symlink;
+    use std::os::unix::prelude::OpenOptionsExt;
+    use std::path::Path;
+    use std::thread;
+    use std::time::Duration;
+    use std::{assert_eq, env};
+
+    use libc::O_DIRECT;
+    use nix::sys::stat::{major, minor};
+    use nix::unistd::pipe;
+    use rand::distributions::Alphanumeric;
+    use rand::Rng;
+    use tempfile::NamedTempFile;
+
+    use super::*;
+    use crate::replay::tests::generate_cached_files_and_record;
+    use std::ops::{Deref, DerefMut};
+
+    #[test]
+    fn trace_event_file_enable_and_restore() {
+        let mut file = NamedTempFile::new().unwrap();
+        let _ = file.write("0".as_bytes()).unwrap();
+        {
+            let _e = TraceEventFile::enable(file.path().to_owned()).unwrap();
+            assert_eq!(read_to_string(file.path()).unwrap(), "1");
+        }
+        assert_eq!(read_to_string(file.path()).unwrap(), "0");
+    }
+
+    #[test]
+    fn trace_event_file_write_and_restore() {
+        let mut file = NamedTempFile::new().unwrap();
+        let _ = file.write("hello".as_bytes()).unwrap();
+        {
+            let _e = TraceEventFile::write(file.path().to_owned(), "world").unwrap();
+            assert_eq!(read_to_string(file.path()).unwrap(), "world");
+        }
+        assert_eq!(read_to_string(file.path()).unwrap(), "hello");
+    }
+
+    fn setup_trace_mount_point(
+        create_mount_point: bool,
+        create_instances: bool,
+        instance_name: Option<String>,
+    ) -> PathBuf {
+        assert!(
+            create_mount_point || !create_instances,
+            "cannot create instances without creating mount point"
+        );
+
+        let mount_point = env::temp_dir().join(
+            rand::thread_rng()
+                .sample_iter(&Alphanumeric)
+                .take(10)
+                .map(char::from)
+                .collect::<String>(),
+        );
+
+        let mut base_path = Path::new(&mount_point).to_owned();
+        if create_mount_point {
+            create_dir(&mount_point).unwrap();
+        }
+
+        if create_instances {
+            base_path = base_path.join("instances");
+            if let Some(instance_name) = &instance_name {
+                base_path = base_path.join(instance_name)
+            }
+            create_dir_all(&base_path).unwrap();
+        }
+
+        if create_mount_point || create_instances {
+            std::fs::write(&base_path.join("buffer_size_kb"), "100").unwrap();
+            std::fs::write(&base_path.join("tracing_on"), "0").unwrap();
+            std::fs::write(&base_path.join("trace"), "0").unwrap();
+            std::fs::write(&base_path.join("trace_pipe"), "0").unwrap();
+
+            for event in [
+                "events/fs/do_sys_open",
+                "events/fs/open_exec",
+                "events/fs/uselib",
+                "events/filemap/mm_filemap_add_to_page_cache",
+            ] {
+                let event_path = base_path.join(event);
+                std::fs::create_dir_all(&event_path).unwrap();
+                std::fs::write(&event_path.join("enable"), "0").unwrap();
+            }
+        }
+        mount_point
+    }
+
+    #[test]
+    fn test_configs_no_setup() {
+        let mount_point = setup_trace_mount_point(true, true, None);
+        let _configs = TracerConfigs::new(
+            Some(10),
+            false,
+            TracerType::Mem,
+            Some(mount_point.to_str().unwrap().to_owned()),
+            None,
+        )
+        .unwrap();
+    }
+
+    #[test]
+    fn test_configs_no_setup_no_mount_point() {
+        let mount_point = setup_trace_mount_point(false, false, None);
+        assert_eq!(
+            TracerConfigs::new(
+                Some(10),
+                false,
+                TracerType::Mem,
+                Some(mount_point.to_str().unwrap().to_owned()),
+                None,
+            )
+            .unwrap_err()
+            .to_string(),
+            format!(
+                "Failed to setup prefetch: trace mount point doesn't exist: {}",
+                mount_point.to_str().unwrap()
+            )
+        );
+    }
+
+    #[test]
+    fn test_configs_no_setup_no_instances() {
+        let mount_point = setup_trace_mount_point(true, false, None);
+        assert_eq!(
+            TracerConfigs::new(
+                Some(10),
+                false,
+                TracerType::Mem,
+                Some(mount_point.to_str().unwrap().to_owned()),
+                Some("my_instance".to_owned()),
+            )
+            .unwrap_err()
+            .to_string(),
+            format!(
+                "Failed to setup prefetch: trace mount point doesn't exist: {}/instances/my_instance",
+                mount_point.to_str().unwrap()
+            )
+        );
+    }
+
+    #[test]
+    fn test_configs_setup_without_instances() {
+        let mount_point = setup_trace_mount_point(true, false, None);
+        assert!(TracerConfigs::new(
+            Some(10),
+            true,
+            TracerType::Mem,
+            Some(mount_point.to_str().unwrap().to_owned()),
+            None
+        )
+        .is_ok());
+    }
+
+    #[test]
+    fn test_configs_setup_with_instances() {
+        let mount_point = setup_trace_mount_point(true, true, Some("my_instance".to_owned()));
+        assert!(TracerConfigs::new(
+            Some(10),
+            true,
+            TracerType::Mem,
+            Some(mount_point.to_str().unwrap().to_owned()),
+            Some("my_instance".to_owned())
+        )
+        .is_ok())
+    }
+
+    pub(crate) fn setup_test_dir() -> PathBuf {
+        let test_base_dir: String = rand::thread_rng()
+            .sample_iter(&rand::distributions::Alphanumeric)
+            .take(7)
+            .map(char::from)
+            .collect();
+        let test_base_dir = format!(
+            "{}/test/{}",
+            std::fs::read_link("/proc/self/exe").unwrap().parent().unwrap().to_str().unwrap(),
+            test_base_dir
+        );
+        std::fs::create_dir_all(&test_base_dir).unwrap();
+        PathBuf::from(test_base_dir)
+    }
+
+    fn modify_records_file(rf: &RecordsFile, target: &str) -> RecordsFile {
+        let mut modified_rf = rf.clone();
+
+        for inode in modified_rf.inner.inode_map.values_mut() {
+            let new_paths: Vec<String> = inode
+                .paths
+                .iter()
+                .map(|s| {
+                    let parent = Path::new(s).parent().unwrap().to_str().unwrap();
+                    s.replace(parent, target)
+                })
+                .collect();
+
+            inode.paths = new_paths;
+        }
+
+        modified_rf
+    }
+
+    struct AlignedBuffer {
+        ptr: *mut u8,
+        len: usize,
+        layout: Layout,
+    }
+
+    impl AlignedBuffer {
+        fn new(size: usize, alignment: usize) -> Result<Self, Error> {
+            if size == 0 {
+                return Err(Error::Custom { error: "cannot allocate zero bytes".to_string() });
+            }
+
+            let layout = Layout::from_size_align(size, alignment).unwrap();
+            // SAFETY:
+            // - `size` is a valid non-zero positive integer representing the desired buffer size.
+            // - The layout is checked for validity using `.unwrap()`.
+            let ptr = unsafe { std::alloc::alloc(layout) };
+            if ptr.is_null() {
+                return Err(Error::Custom { error: format!("alloc failed: size: {}", size) });
+            }
+            Ok(AlignedBuffer { ptr, len: size, layout })
+        }
+    }
+
+    impl Deref for AlignedBuffer {
+        type Target = [u8];
+        // SAFETY:
+        // - self.ptr is a valid pointer obtained from a successful allocation in the new() method.
+        // - self.len is a valid length used for allocation in the new() method.
+        fn deref(&self) -> &Self::Target {
+            unsafe { std::slice::from_raw_parts(self.ptr, self.len) }
+        }
+    }
+
+    impl DerefMut for AlignedBuffer {
+        // SAFETY:
+        // - self.ptr is a valid pointer obtained from a successful allocation in the new() method.
+        // - self.len is a valid length used for allocation in the new() method.
+        fn deref_mut(&mut self) -> &mut Self::Target {
+            unsafe { std::slice::from_raw_parts_mut(self.ptr, self.len) }
+        }
+    }
+
+    impl Drop for AlignedBuffer {
+        fn drop(&mut self) {
+            // SAFETY:
+            //  - self.ptr is a valid pointer obtained from a successful allocation in the new() method.
+            //  - self.layout is the Layout used to allocate the memory.
+            unsafe {
+                std::alloc::dealloc(self.ptr, self.layout);
+            }
+        }
+    }
+
+    // Copies `files` into directory pointed by `base`.
+    //
+    // The newly created file's data is potentially uncached - i.e. the new
+    // files are opened in O_DIRECT.
+    //
+    // WARNING: Though this function makes an attempt to copy into uncached files
+    // but it cannot guarantee as other processes in the system may access the
+    // files. This may lead to flaky tests or unexpected results.
+    pub(crate) fn copy_uncached_files_and_record_from(
+        base: &Path,
+        files: &mut [(NamedTempFile, Vec<Range<u64>>)],
+        rf: &RecordsFile,
+    ) -> (RecordsFile, Vec<(PathBuf, Vec<Range<u64>>)>) {
+        let mut new_files = vec![];
+        for (in_file, ranges) in files {
+            let out_path = base.join(in_file.path().file_name().unwrap());
+            let mut out_file = OpenOptions::new()
+                .read(true)
+                .write(true)
+                .custom_flags(O_DIRECT)
+                .create_new(true)
+                .open(&out_path)
+                .expect("Can't open");
+            let page_size = page_size().unwrap() as u64;
+            let in_file_size = in_file.metadata().unwrap().len();
+            assert_eq!(
+                in_file_size % page_size,
+                0,
+                "we create files that are aligned to page size"
+            );
+            let out_file_size = in_file_size;
+            let mut buf =
+                AlignedBuffer::new(out_file_size.try_into().unwrap(), page_size as usize).unwrap();
+            let _ = in_file.read(&mut *buf).unwrap();
+            out_file.write_all(&*buf).unwrap();
+
+            new_files.push((out_path, ranges.clone()));
+        }
+
+        for inode in rf.inner.inode_map.values() {
+            for path in &inode.paths {
+                let in_path = Path::new(&path);
+                let out_path = base.join(in_path.file_name().unwrap());
+                if !out_path.exists() {
+                    let orig_file =
+                        out_path.file_name().unwrap().to_str().unwrap().replace("-symlink", "");
+                    symlink(orig_file, out_path.to_str().unwrap()).unwrap();
+                    new_files.push((out_path.to_owned(), vec![]));
+                }
+            }
+        }
+        let modified_rf = modify_records_file(rf, base.to_str().unwrap());
+        (modified_rf, new_files)
+    }
+
+    // Generates mem trace string from given args. Sometimes injects lines that are of no importance
+    fn mem_generate_trace_line_for_open(path: &Path, time: u16, _op: Option<&str>) -> Vec<String> {
+        let op = "mm_filemap_add_to_page_cache";
+        let stat = path.metadata().unwrap();
+        let major_no = major(stat.st_dev());
+        let minor_no = minor(stat.st_dev());
+        let inode_number = stat.st_ino();
+
+        vec![
+            // unknown operation
+            format!(
+                " SettingsProvide-502     [001] ....   {}.{}: {}: dev {}:{} ino {:x} \
+                    page=000000008b759458 pfn=59827 ofs=0",
+                time,
+                (time * 100) + time,
+                "unknown_operation",
+                major_no,
+                minor_no,
+                inode_number,
+            ),
+            // invalid/relative inode
+            format!(
+                " SettingsProvide-502     [001] ....   {}.{}: {}: dev {}:{} ino {:x} \
+                    page=000000008b759458 pfn=59827 ofs=0",
+                time,
+                (time * 100) + time,
+                "unknown_operation",
+                major_no,
+                minor_no,
+                inode_number + 100,
+            ),
+            // good one
+            format!(
+                " BOX_ENTRY_ADDED-3071    [001] ....   {}.{}: {}: dev {}:{} ino {:x} \
+                    page=00000000f936540b pfn=60952 ofs={}",
+                time,
+                (time * 100) + time,
+                op,
+                major_no,
+                minor_no,
+                inode_number,
+                0
+            ),
+            // good one
+            format!(
+                " BOX_ENTRY_ADDED-3071    [001] ....   {}.{}: {}: dev {}:{} ino {:x} \
+                    page=00000000f936540b pfn=60952 ofs={}",
+                time,
+                (time * 100) + time,
+                op,
+                major_no,
+                minor_no,
+                inode_number,
+                10_000,
+            ),
+            // good one
+            format!(
+                " BOX_ENTRY_ADDED-3071    [001] ....   {}.{}: {}: dev {}:{} ino {:x} \
+                    page=00000000f936540b pfn=60952 ofs={}",
+                time,
+                (time * 100) + time,
+                op,
+                major_no,
+                minor_no,
+                inode_number,
+                100_000,
+            ),
+            // good one
+            format!(
+                " BOX_ENTRY_ADDED-3071    [001] ....   {}.{}: {}: dev {}:{} ino {:x} \
+                    page=00000000f936540b pfn=60952 ofs={}",
+                time,
+                (time * 100) + time,
+                op,
+                major_no,
+                minor_no,
+                inode_number,
+                1_000_000,
+            ),
+            // invalid operation case
+            format!(
+                " SettingsProvide-502     [001] ....   {}.{}: {}: dev {}:{} ino {:x} \
+                    page=000000008b759458 pfn=59827 ofs=0",
+                time,
+                (time * 100) + time,
+                op.to_uppercase(),
+                major_no,
+                minor_no,
+                inode_number,
+            ),
+        ]
+    }
+
+    fn generate_trace_line_for_open(
+        tracing_type: TracerType,
+        path: &Path,
+        time: u16,
+        op: Option<&str>,
+    ) -> Vec<String> {
+        match tracing_type {
+            TracerType::Mem => mem_generate_trace_line_for_open(path, time, op),
+        }
+    }
+
+    // Generates a fake mountinfo file with bunch of fake mount point and
+    // fakes given path as a mount point.
+    fn create_fake_mountinfo_for(path: &Path) -> NamedTempFile {
+        let stat = path.metadata().unwrap();
+        let major_no = major(stat.st_dev());
+        let minor_no = minor(stat.st_dev());
+        let mut mountinfo_path = NamedTempFile::new().unwrap();
+        mountinfo_path
+            .write_all(
+                "16 15 0:17 / /dev/pts rw,relatime shared:3 - devpts devpts \
+                     rw,seclabel,mode=600,ptmxmode=000\n"
+                    .as_bytes(),
+            )
+            .unwrap();
+        mountinfo_path
+            .write_all(
+                "17 26 0:18 / /proc rw,relatime shared:4 - proc proc rw,gid=3009,hidepid=\
+                    invisible\n"
+                    .as_bytes(),
+            )
+            .unwrap();
+        mountinfo_path
+            .write_all(
+                format!(
+                    "26 24 {}:{} / {} ro,nodev,noatime shared:1 - ext4 /dev/block/dm-3 ro,\
+                    seclabel,errors=panic\n",
+                    major_no,
+                    minor_no,
+                    path.to_str().unwrap(),
+                )
+                .as_bytes(),
+            )
+            .unwrap();
+
+        mountinfo_path
+    }
+
+    static RECORD_PER_FILE: usize = 4;
+
+    fn create_tracer(
+        base_dir: &Path,
+        t: TracerType,
+    ) -> (Box<dyn TraceSubsystem + Send>, Vec<NamedTempFile>) {
+        let kb_buffer_size = Some(8388608);
+        let trace_mount_point = setup_test_dir();
+        let mut buffer_size_file = NamedTempFile::new_in(&trace_mount_point).unwrap();
+        buffer_size_file
+            .write_all(format!("{}", kb_buffer_size.as_ref().unwrap()).as_bytes())
+            .unwrap();
+
+        let buffer_size_file_path = buffer_size_file.path().to_str().unwrap().to_string();
+        let mut config = TracerConfigs::new(
+            kb_buffer_size,
+            false,
+            t.clone(),
+            Some(trace_mount_point.to_str().unwrap().to_string()),
+            None,
+        )
+        .unwrap();
+        let mut tempfiles = vec![buffer_size_file];
+        (
+            match t {
+                TracerType::Mem => {
+                    let mountinfo_path =
+                        create_fake_mountinfo_for(&base_dir.canonicalize().unwrap());
+                    config.trace_events = vec![];
+                    config.buffer_size_file_path = buffer_size_file_path;
+                    config.mountinfo_path =
+                        Some(mountinfo_path.path().to_str().unwrap().to_string());
+                    tempfiles.push(mountinfo_path);
+                    Box::new(MemTraceSubsystem::create_with_configs(config).unwrap())
+                }
+            },
+            tempfiles,
+        )
+    }
+
+    fn test_trace_of_type(tracing_type: TracerType) {
+        let test_base_dir = setup_test_dir();
+        let (_rf, files) = generate_cached_files_and_record(
+            Some(&test_base_dir),
+            true,
+            Some(page_size().unwrap() as u64),
+        );
+
+        let mut file = NamedTempFile::new().unwrap();
+        let (reader_fd, writer_fd) = pipe().unwrap();
+        let reader = File::from(reader_fd);
+        let mut writer = File::from(writer_fd);
+
+        let (tracer, _temp_files) = create_tracer(&test_base_dir, tracing_type.clone());
+
+        let mut files_iter = files.iter();
+
+        for line in generate_trace_line_for_open(
+            tracing_type.clone(),
+            files_iter.next().unwrap().0.path(),
+            5,
+            None,
+        ) {
+            writeln!(file, "{}", line).unwrap();
+        }
+        file.sync_all().unwrap();
+        file.seek(std::io::SeekFrom::Start(0)).unwrap();
+
+        let (mut tracer, exit_evt) =
+            Tracer::create_with_config(file.reopen().unwrap(), reader, tracer).unwrap();
+
+        let thd = thread::spawn(move || tracer.trace(None));
+
+        for (index, file) in files_iter.enumerate() {
+            for line in generate_trace_line_for_open(tracing_type.clone(), file.0.path(), 10, None)
+            {
+                writeln!(&mut writer, "{}", line).unwrap();
+            }
+            if index == 0 {
+                // This sleep emulates delay in data arriving over a pipe. This shouldn't cause
+                // flakes in virtualized environment.
+                thread::sleep(Duration::from_secs(1));
+            }
+        }
+
+        thread::sleep(Duration::from_millis(100));
+        exit_evt.send(()).unwrap();
+        writeln!(&mut writer, "line").unwrap();
+
+        let tracer_rf = thd.join().unwrap().unwrap();
+
+        let mut found_count = 0;
+        for file in &files {
+            let mut found = false;
+            'inner: for inode in tracer_rf.inner.inode_map.values() {
+                for found_path in &inode.paths {
+                    if found_path == file.0.path().canonicalize().unwrap().to_str().unwrap() {
+                        found = true;
+                        break 'inner;
+                    }
+                }
+            }
+            if found {
+                found_count += 1;
+            } else {
+                println!("missing {:?}", file.0.path());
+            }
+        }
+        assert_eq!(found_count, files.len());
+        assert_eq!(tracer_rf.inner.records.len(), files.len() * RECORD_PER_FILE);
+    }
+
+    #[test]
+    fn test_trace_mem() {
+        test_trace_of_type(TracerType::Mem)
+    }
+}
diff --git a/init/noop_builtins.cpp b/init/noop_builtins.cpp
new file mode 100644
index 0000000..c4e140b
--- /dev/null
+++ b/init/noop_builtins.cpp
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Note that parser will perform arity checks only.
+
+#include <android-base/result.h>
+
+#include "builtin_arguments.h"
+#include "builtins.h"
+
+namespace android::init {
+
+static base::Result<void> check_stub(const BuiltinArguments&) {
+    return {};
+}
+
+#include "noop_builtin_function_map.h"
+
+}  // namespace android::init
diff --git a/init/property_service.cpp b/init/property_service.cpp
index 0d6eb15..f2606e3 100644
--- a/init/property_service.cpp
+++ b/init/property_service.cpp
@@ -31,14 +31,12 @@
 #include <sys/mman.h>
 #include <sys/poll.h>
 #include <sys/select.h>
+#include <sys/system_properties.h>
 #include <sys/types.h>
 #include <sys/un.h>
 #include <unistd.h>
 #include <wchar.h>
 
-#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
-#include <sys/_system_properties.h>
-
 #include <map>
 #include <memory>
 #include <mutex>
@@ -48,7 +46,6 @@
 #include <thread>
 #include <vector>
 
-#include <InitProperties.sysprop.h>
 #include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
@@ -102,7 +99,6 @@
 using android::properties::ParsePropertyInfoFile;
 using android::properties::PropertyInfoAreaFile;
 using android::properties::PropertyInfoEntry;
-using android::sysprop::InitProperties::is_userspace_reboot_supported;
 
 namespace android {
 namespace init {
@@ -569,8 +565,8 @@
         }
         LOG(INFO) << "Received sys.powerctl='" << value << "' from pid: " << cr.pid
                   << process_log_string;
-        if (value == "reboot,userspace" && !is_userspace_reboot_supported().value_or(false)) {
-            *error = "Userspace reboot is not supported by this device";
+        if (value == "reboot,userspace") {
+            *error = "Userspace reboot is deprecated.";
             return {PROP_ERROR_INVALID_VALUE};
         }
     }
@@ -1255,6 +1251,16 @@
     update_sys_usb_config();
 }
 
+void PropertyLoadDerivedDefaults() {
+    const char* PAGE_PROP = "ro.boot.hardware.cpu.pagesize";
+    if (GetProperty(PAGE_PROP, "").empty()) {
+        std::string error;
+        if (PropertySetNoSocket(PAGE_PROP, std::to_string(getpagesize()), &error) != PROP_SUCCESS) {
+            LOG(ERROR) << "Could not set '" << PAGE_PROP << "' because: " << error;
+        }
+    }
+}
+
 bool LoadPropertyInfoFromFile(const std::string& filename,
                               std::vector<PropertyInfoEntry>* property_infos) {
     auto file_contents = std::string();
@@ -1425,6 +1431,7 @@
     ExportKernelBootProps();
 
     PropertyLoadBootDefaults();
+    PropertyLoadDerivedDefaults();
 }
 
 static void HandleInitSocket() {
diff --git a/init/property_service_test.cpp b/init/property_service_test.cpp
index 5f34cc4..c12ff72 100644
--- a/init/property_service_test.cpp
+++ b/init/property_service_test.cpp
@@ -16,11 +16,9 @@
 
 #include <errno.h>
 #include <sys/socket.h>
+#include <sys/system_properties.h>
 #include <sys/un.h>
 
-#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
-#include <sys/_system_properties.h>
-
 #include <android-base/properties.h>
 #include <android-base/scopeguard.h>
 #include <android-base/strings.h>
@@ -82,12 +80,6 @@
         GTEST_SKIP() << "Skipping test, must be run as root.";
         return;
     }
-    const std::string original_value = GetProperty("init.userspace_reboot.is_supported", "");
-    auto guard = android::base::make_scope_guard([&original_value]() {
-        SetProperty("init.userspace_reboot.is_supported", original_value);
-    });
-
-    ASSERT_TRUE(SetProperty("init.userspace_reboot.is_supported", "false"));
     EXPECT_FALSE(SetProperty("sys.powerctl", "reboot,userspace"));
 }
 
diff --git a/init/reboot.cpp b/init/reboot.cpp
index 150f8f4..ef9db9f 100644
--- a/init/reboot.cpp
+++ b/init/reboot.cpp
@@ -39,7 +39,6 @@
 #include <thread>
 #include <vector>
 
-#include <InitProperties.sysprop.h>
 #include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
@@ -87,16 +86,6 @@
 
 static const std::set<std::string> kDebuggingServices{"tombstoned", "logd", "adbd", "console"};
 
-static std::set<std::string> GetPostDataDebuggingServices() {
-    std::set<std::string> ret;
-    for (const auto& s : ServiceList::GetInstance()) {
-        if (kDebuggingServices.count(s->name()) && s->is_post_data()) {
-            ret.insert(s->name());
-        }
-    }
-    return ret;
-}
-
 static void PersistRebootReason(const char* reason, bool write_to_property) {
     if (write_to_property) {
         SetProperty(LAST_REBOOT_REASON_PROPERTY, reason);
@@ -810,196 +799,6 @@
     }
 }
 
-static void LeaveShutdown() {
-    LOG(INFO) << "Leaving shutdown mode";
-    shutting_down = false;
-    StartSendingMessages();
-}
-
-static std::chrono::milliseconds GetMillisProperty(const std::string& name,
-                                                   std::chrono::milliseconds default_value) {
-    auto value = GetUintProperty(name, static_cast<uint64_t>(default_value.count()));
-    return std::chrono::milliseconds(std::move(value));
-}
-
-static Result<void> DoUserspaceReboot() {
-    LOG(INFO) << "Userspace reboot initiated";
-    // An ugly way to pass a more precise reason on why fallback to hard reboot was triggered.
-    std::string sub_reason = "";
-    auto guard = android::base::make_scope_guard([&sub_reason] {
-        // Leave shutdown so that we can handle a full reboot.
-        LeaveShutdown();
-        trigger_shutdown("reboot,userspace_failed,shutdown_aborted," + sub_reason);
-    });
-    // Triggering userspace-reboot-requested will result in a bunch of setprop
-    // actions. We should make sure, that all of them are propagated before
-    // proceeding with userspace reboot. Synchronously setting sys.init.userspace_reboot.in_progress
-    // property is not perfect, but it should do the trick.
-    if (!android::sysprop::InitProperties::userspace_reboot_in_progress(true)) {
-        sub_reason = "setprop";
-        return Error() << "Failed to set sys.init.userspace_reboot.in_progress property";
-    }
-    EnterShutdown();
-    if (!SetProperty("sys.powerctl", "")) {
-        sub_reason = "resetprop";
-        return Error() << "Failed to reset sys.powerctl property";
-    }
-    std::set<std::string> stop_first;
-    // Remember the services that were enabled. We will need to manually enable them again otherwise
-    // triggers like class_start won't restart them.
-    std::set<std::string> were_enabled;
-    for (const auto& s : ServiceList::GetInstance().services_in_shutdown_order()) {
-        if (s->is_post_data() && !kDebuggingServices.count(s->name())) {
-            stop_first.insert(s->name());
-        }
-        // TODO(ioffe): we should also filter out temporary services here.
-        if (s->is_post_data() && s->IsEnabled()) {
-            were_enabled.insert(s->name());
-        }
-    }
-    {
-        Timer sync_timer;
-        LOG(INFO) << "sync() before terminating services...";
-        sync();
-        LOG(INFO) << "sync() took " << sync_timer;
-    }
-    auto sigterm_timeout = GetMillisProperty("init.userspace_reboot.sigterm.timeoutmillis", 5s);
-    auto sigkill_timeout = GetMillisProperty("init.userspace_reboot.sigkill.timeoutmillis", 10s);
-    LOG(INFO) << "Timeout to terminate services: " << sigterm_timeout.count() << "ms "
-              << "Timeout to kill services: " << sigkill_timeout.count() << "ms";
-    std::string services_file_name = "/metadata/userspacereboot/services.txt";
-    const int flags = O_RDWR | O_CREAT | O_SYNC | O_APPEND | O_CLOEXEC;
-    StopServicesAndLogViolations(stop_first, sigterm_timeout, true /* SIGTERM */);
-    if (int r = StopServicesAndLogViolations(stop_first, sigkill_timeout, false /* SIGKILL */);
-        r > 0) {
-        auto fd = unique_fd(TEMP_FAILURE_RETRY(open(services_file_name.c_str(), flags, 0666)));
-        android::base::WriteStringToFd("Post-data services still running: \n", fd);
-        for (const auto& s : ServiceList::GetInstance()) {
-            if (s->IsRunning() && stop_first.count(s->name())) {
-                android::base::WriteStringToFd(s->name() + "\n", fd);
-            }
-        }
-        sub_reason = "sigkill";
-        return Error() << r << " post-data services are still running";
-    }
-    if (auto result = KillZramBackingDevice(); !result.ok()) {
-        sub_reason = "zram";
-        return result;
-    }
-    if (auto result = CallVdc("volume", "reset"); !result.ok()) {
-        sub_reason = "vold_reset";
-        return result;
-    }
-    const auto& debugging_services = GetPostDataDebuggingServices();
-    if (int r = StopServicesAndLogViolations(debugging_services, sigkill_timeout,
-                                             false /* SIGKILL */);
-        r > 0) {
-        auto fd = unique_fd(TEMP_FAILURE_RETRY(open(services_file_name.c_str(), flags, 0666)));
-        android::base::WriteStringToFd("Debugging services still running: \n", fd);
-        for (const auto& s : ServiceList::GetInstance()) {
-            if (s->IsRunning() && debugging_services.count(s->name())) {
-                android::base::WriteStringToFd(s->name() + "\n", fd);
-            }
-        }
-        sub_reason = "sigkill_debug";
-        return Error() << r << " debugging services are still running";
-    }
-    {
-        Timer sync_timer;
-        LOG(INFO) << "sync() after stopping services...";
-        sync();
-        LOG(INFO) << "sync() took " << sync_timer;
-    }
-    if (auto result = UnmountAllApexes(); !result.ok()) {
-        sub_reason = "apex";
-        return result;
-    }
-    if (!SwitchToMountNamespaceIfNeeded(NS_BOOTSTRAP).ok()) {
-        sub_reason = "ns_switch";
-        return Error() << "Failed to switch to bootstrap namespace";
-    }
-    ActionManager::GetInstance().RemoveActionIf([](const auto& action) -> bool {
-        if (action->IsFromApex()) {
-            std::string trigger_name = action->BuildTriggersString();
-            LOG(INFO) << "Removing action (" << trigger_name << ") from (" << action->filename()
-                      << ":" << action->line() << ")";
-            return true;
-        }
-        return false;
-    });
-    // Remove services that were defined in an APEX
-    ServiceList::GetInstance().RemoveServiceIf([](const std::unique_ptr<Service>& s) -> bool {
-        if (s->is_from_apex()) {
-            LOG(INFO) << "Removing service '" << s->name() << "' because it's defined in an APEX";
-            return true;
-        }
-        return false;
-    });
-    // Re-enable services
-    for (const auto& s : ServiceList::GetInstance()) {
-        if (were_enabled.count(s->name())) {
-            LOG(INFO) << "Re-enabling service '" << s->name() << "'";
-            s->Enable();
-        }
-    }
-    ServiceList::GetInstance().ResetState();
-    LeaveShutdown();
-    ActionManager::GetInstance().QueueEventTrigger("userspace-reboot-resume");
-    guard.Disable();  // Go on with userspace reboot.
-    return {};
-}
-
-static void UserspaceRebootWatchdogThread() {
-    auto started_timeout = GetMillisProperty("init.userspace_reboot.started.timeoutmillis", 10s);
-    if (!WaitForProperty("sys.init.userspace_reboot.in_progress", "1", started_timeout)) {
-        LOG(ERROR) << "Userspace reboot didn't start in " << started_timeout.count()
-                   << "ms. Switching to full reboot";
-        // Init might be wedged, don't try to write reboot reason into a persistent property and do
-        // a dirty reboot.
-        PersistRebootReason("userspace_failed,watchdog_triggered,failed_to_start", false);
-        RebootSystem(ANDROID_RB_RESTART2, "userspace_failed,watchdog_triggered,failed_to_start");
-    }
-    LOG(INFO) << "Starting userspace reboot watchdog";
-    auto watchdog_timeout = GetMillisProperty("init.userspace_reboot.watchdog.timeoutmillis", 5min);
-    LOG(INFO) << "UserspaceRebootWatchdog timeout: " << watchdog_timeout.count() << "ms";
-    if (!WaitForProperty("sys.boot_completed", "1", watchdog_timeout)) {
-        LOG(ERROR) << "Failed to boot in " << watchdog_timeout.count()
-                   << "ms. Switching to full reboot";
-        // In this case device is in a boot loop. Only way to recover is to do dirty reboot.
-        // Since init might be wedged, don't try to write reboot reason into a persistent property.
-        PersistRebootReason("userspace_failed,watchdog_triggered,failed_to_boot", false);
-        RebootSystem(ANDROID_RB_RESTART2, "userspace_failed,watchdog_triggered,failed_to_boot");
-    }
-    LOG(INFO) << "Device booted, stopping userspace reboot watchdog";
-}
-
-static void HandleUserspaceReboot() {
-    if (!android::sysprop::InitProperties::is_userspace_reboot_supported().value_or(false)) {
-        LOG(ERROR) << "Attempted a userspace reboot on a device that doesn't support it";
-        return;
-    }
-    // Spinnig up a separate thread will fail the setns call later in the boot sequence.
-    // Fork a new process to monitor userspace reboot while we are investigating a better solution.
-    pid_t pid = fork();
-    if (pid < 0) {
-        PLOG(ERROR) << "Failed to fork process for userspace reboot watchdog. Switching to full "
-                    << "reboot";
-        trigger_shutdown("reboot,userspace_failed,watchdog_fork");
-        return;
-    }
-    if (pid == 0) {
-        // Child
-        UserspaceRebootWatchdogThread();
-        _exit(EXIT_SUCCESS);
-    }
-    LOG(INFO) << "Clearing queue and starting userspace-reboot-requested trigger";
-    auto& am = ActionManager::GetInstance();
-    am.ClearQueue();
-    am.QueueEventTrigger("userspace-reboot-requested");
-    auto handler = [](const BuiltinArguments&) { return DoUserspaceReboot(); };
-    am.QueueBuiltinAction(handler, "userspace-reboot");
-}
-
 /**
  * Check if "command" field is set in bootloader message.
  *
@@ -1030,7 +829,6 @@
     std::string reboot_target = "";
     bool run_fsck = false;
     bool command_invalid = false;
-    bool userspace_reboot = false;
 
     if (cmd_params[0] == "shutdown") {
         cmd = ANDROID_RB_POWEROFF;
@@ -1051,8 +849,8 @@
         if (cmd_params.size() >= 2) {
             reboot_target = cmd_params[1];
             if (reboot_target == "userspace") {
-                LOG(INFO) << "Userspace reboot requested";
-                userspace_reboot = true;
+                LOG(ERROR) << "Userspace reboot is deprecated.";
+                return;
             }
             // adb reboot fastboot should boot into bootloader for devices not
             // supporting logical partitions.
@@ -1130,11 +928,6 @@
     // messages, etc) from properties during reboot.
     StopSendingMessages();
 
-    if (userspace_reboot) {
-        HandleUserspaceReboot();
-        return;
-    }
-
     LOG(INFO) << "Clear action queue and start shutdown trigger";
     ActionManager::GetInstance().ClearQueue();
     // Queue shutdown trigger first
diff --git a/init/reboot_test.cpp b/init/reboot_test.cpp
index b3d038d..b7a1cfd 100644
--- a/init/reboot_test.cpp
+++ b/init/reboot_test.cpp
@@ -103,8 +103,7 @@
                                        "$selabel", GetSecurityContext(), false);
     ServiceList& service_list = ServiceList::GetInstance();
     Parser parser;
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(&service_list, nullptr, std::nullopt));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(&service_list, nullptr));
 
     TemporaryFile tf;
     ASSERT_TRUE(tf.fd != -1);
diff --git a/init/selinux.cpp b/init/selinux.cpp
index c2d9b8d..6316b4d 100644
--- a/init/selinux.cpp
+++ b/init/selinux.cpp
@@ -69,6 +69,7 @@
 #include <android/avf_cc_flags.h>
 #include <fs_avb/fs_avb.h>
 #include <fs_mgr.h>
+#include <genfslabelsversion.h>
 #include <libgsi/libgsi.h>
 #include <libsnapshot/snapshot.h>
 #include <selinux/android.h>
@@ -324,6 +325,18 @@
     }
     const std::string version_as_string = std::to_string(SEPOLICY_VERSION);
 
+    std::vector<std::string> genfs_cil_files;
+
+    int vendor_genfs_version = get_genfs_labels_version();
+    std::string genfs_cil_file =
+            std::format("/system/etc/selinux/plat_sepolicy_genfs_{}.cil", vendor_genfs_version);
+    if (access(genfs_cil_file.c_str(), F_OK) != 0) {
+        LOG(INFO) << "Missing " << genfs_cil_file << "; skipping";
+        genfs_cil_file.clear();
+    } else {
+        LOG(INFO) << "Using " << genfs_cil_file << " for genfs labels";
+    }
+
     // clang-format off
     std::vector<const char*> compile_args {
         "/system/bin/secilc",
@@ -364,6 +377,9 @@
     if (!odm_policy_cil_file.empty()) {
         compile_args.push_back(odm_policy_cil_file.c_str());
     }
+    if (!genfs_cil_file.empty()) {
+        compile_args.push_back(genfs_cil_file.c_str());
+    }
     compile_args.push_back(nullptr);
 
     if (!ForkExecveAndWaitForCompletion(compile_args[0], (char**)compile_args.data())) {
diff --git a/init/service.cpp b/init/service.cpp
index 31308a0..d76a5d5 100644
--- a/init/service.cpp
+++ b/init/service.cpp
@@ -653,8 +653,6 @@
         SetMountNamespace();
     }
 
-    post_data_ = ServiceList::GetInstance().IsPostData();
-
     LOG(INFO) << "starting service '" << name_ << "'...";
 
     std::vector<Descriptor> descriptors;
diff --git a/init/service.h b/init/service.h
index 5e9af25..ae75553 100644
--- a/init/service.h
+++ b/init/service.h
@@ -144,8 +144,6 @@
     std::optional<std::chrono::seconds> timeout_period() const { return timeout_period_; }
     const std::vector<std::string>& args() const { return args_; }
     bool is_updatable() const { return updatable_; }
-    bool is_post_data() const { return post_data_; }
-    bool is_from_apex() const { return base::StartsWith(filename_, "/apex/"); }
     void set_oneshot(bool value) {
         if (value) {
             flags_ |= SVC_ONESHOT;
@@ -244,8 +242,6 @@
 
     std::optional<MountNamespace> mount_namespace_;
 
-    bool post_data_ = false;
-
     std::optional<std::string> on_failure_reboot_target_;
 
     std::string filename_;
diff --git a/init/service_list.cpp b/init/service_list.cpp
index 1c56e8a..e6cc2c9 100644
--- a/init/service_list.cpp
+++ b/init/service_list.cpp
@@ -68,14 +68,6 @@
     }
 }
 
-void ServiceList::MarkPostData() {
-    post_data_ = true;
-}
-
-bool ServiceList::IsPostData() {
-    return post_data_;
-}
-
 void ServiceList::StartDelayedServices() {
     for (const auto& name : delayed_service_names_) {
         Service* service = FindService(name);
diff --git a/init/service_list.h b/init/service_list.h
index 44e8453..fd7fc05 100644
--- a/init/service_list.h
+++ b/init/service_list.h
@@ -83,19 +83,14 @@
     auto end() const { return services_.end(); }
     const std::vector<Service*> services_in_shutdown_order() const;
 
-    void MarkPostData();
-    bool IsPostData();
     void DelayService(const Service& service);
     void StartDelayedServices();
 
-    void ResetState() { post_data_ = false; }
-
     auto size() const { return services_.size(); }
 
   private:
     std::vector<std::unique_ptr<Service>> services_;
 
-    bool post_data_ = false;
     std::vector<std::string> delayed_service_names_;
 };
 
diff --git a/init/service_parser.cpp b/init/service_parser.cpp
index 6781c70..ec3b176 100644
--- a/init/service_parser.cpp
+++ b/init/service_parser.cpp
@@ -27,7 +27,6 @@
 #include <android-base/parseint.h>
 #include <android-base/properties.h>
 #include <android-base/strings.h>
-#include <hidl-util/FQName.h>
 #include <processgroup/processgroup.h>
 #include <system/thread_defs.h>
 
@@ -201,24 +200,6 @@
 Result<void> ServiceParser::ParseInterface(std::vector<std::string>&& args) {
     const std::string& interface_name = args[1];
     const std::string& instance_name = args[2];
-
-    // AIDL services don't use fully qualified names and instead just use "interface aidl <name>"
-    if (interface_name != "aidl") {
-        FQName fq_name;
-        if (!FQName::parse(interface_name, &fq_name)) {
-            return Error() << "Invalid fully-qualified name for interface '" << interface_name
-                           << "'";
-        }
-
-        if (!fq_name.isFullyQualified()) {
-            return Error() << "Interface name not fully-qualified '" << interface_name << "'";
-        }
-
-        if (fq_name.isValidValueName()) {
-            return Error() << "Interface name must not be a value name '" << interface_name << "'";
-        }
-    }
-
     const std::string fullname = interface_name + "/" + instance_name;
 
     for (const auto& svc : *service_list_) {
@@ -557,12 +538,9 @@
 // when we migrate to cgroups v2 while these hardcoded paths stay the same.
 static std::optional<const std::string> ConvertTaskFileToProfile(const std::string& file) {
     static const std::map<const std::string, const std::string> map = {
-            {"/dev/stune/top-app/tasks", "MaxPerformance"},
-            {"/dev/stune/foreground/tasks", "HighPerformance"},
             {"/dev/cpuset/camera-daemon/tasks", "CameraServiceCapacity"},
             {"/dev/cpuset/foreground/tasks", "ProcessCapacityHigh"},
             {"/dev/cpuset/system-background/tasks", "ServiceCapacityLow"},
-            {"/dev/stune/nnapi-hal/tasks", "NNApiHALPerformance"},
             {"/dev/blkio/background/tasks", "LowIoPriority"},
     };
     auto iter = map.find(file);
@@ -702,14 +680,6 @@
         }
     }
 
-    if (interface_inheritance_hierarchy_) {
-        if (const auto& check_hierarchy_result = CheckInterfaceInheritanceHierarchy(
-                    service_->interfaces(), *interface_inheritance_hierarchy_);
-            !check_hierarchy_result.ok()) {
-            return Error() << check_hierarchy_result.error();
-        }
-    }
-
     if (SelinuxGetVendorAndroidVersion() >= __ANDROID_API_R__) {
         if ((service_->flags() & SVC_CRITICAL) != 0 && (service_->flags() & SVC_ONESHOT) != 0) {
             return Error() << "service '" << service_->name()
diff --git a/init/service_parser.h b/init/service_parser.h
index 670a5c6..f06cfc4 100644
--- a/init/service_parser.h
+++ b/init/service_parser.h
@@ -18,7 +18,6 @@
 
 #include <vector>
 
-#include "interface_utils.h"
 #include "parser.h"
 #include "service.h"
 #include "service_list.h"
@@ -29,13 +28,8 @@
 
 class ServiceParser : public SectionParser {
   public:
-    ServiceParser(
-            ServiceList* service_list, Subcontext* subcontext,
-            const std::optional<InterfaceInheritanceHierarchyMap>& interface_inheritance_hierarchy)
-        : service_list_(service_list),
-          subcontext_(subcontext),
-          interface_inheritance_hierarchy_(interface_inheritance_hierarchy),
-          service_(nullptr) {}
+    ServiceParser(ServiceList* service_list, Subcontext* subcontext)
+        : service_list_(service_list), subcontext_(subcontext), service_(nullptr) {}
     Result<void> ParseSection(std::vector<std::string>&& args, const std::string& filename,
                               int line) override;
     Result<void> ParseLineSection(std::vector<std::string>&& args, int line) override;
@@ -88,7 +82,6 @@
 
     ServiceList* service_list_;
     Subcontext* subcontext_;
-    std::optional<InterfaceInheritanceHierarchyMap> interface_inheritance_hierarchy_;
     std::unique_ptr<Service> service_;
     std::string filename_;
 };
diff --git a/init/service_test.cpp b/init/service_test.cpp
index a3590b5..53b53ed 100644
--- a/init/service_test.cpp
+++ b/init/service_test.cpp
@@ -253,8 +253,7 @@
                                        "$selabel", GetSecurityContext(), false);
     ServiceList& service_list = ServiceList::GetInstance();
     Parser parser;
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(&service_list, nullptr, std::nullopt));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(&service_list, nullptr));
 
     TemporaryFile tf;
     ASSERT_GE(tf.fd, 0);
diff --git a/init/subcontext.cpp b/init/subcontext.cpp
index 6a095fb..3fe448f 100644
--- a/init/subcontext.cpp
+++ b/init/subcontext.cpp
@@ -263,6 +263,10 @@
     return false;
 }
 
+bool Subcontext::PartitionMatchesSubcontext(const std::string& partition) const {
+    return std::find(partitions_.begin(), partitions_.end(), partition) != partitions_.end();
+}
+
 void Subcontext::SetApexList(std::vector<std::string>&& apex_list) {
     apex_list_ = std::move(apex_list);
 }
@@ -352,12 +356,13 @@
     }
 
     if (SelinuxGetVendorAndroidVersion() >= __ANDROID_API_P__) {
-        subcontext.reset(
-                new Subcontext(std::vector<std::string>{"/vendor", "/odm"}, kVendorContext));
+        subcontext.reset(new Subcontext(std::vector<std::string>{"/vendor", "/odm"},
+                                        std::vector<std::string>{"VENDOR", "ODM"}, kVendorContext));
     }
 }
+
 void InitializeHostSubcontext(std::vector<std::string> vendor_prefixes) {
-    subcontext.reset(new Subcontext(vendor_prefixes, kVendorContext, /*host=*/true));
+    subcontext.reset(new Subcontext(vendor_prefixes, {}, kVendorContext, /*host=*/true));
 }
 
 Subcontext* GetSubcontext() {
diff --git a/init/subcontext.h b/init/subcontext.h
index 93ebace..23c4a24 100644
--- a/init/subcontext.h
+++ b/init/subcontext.h
@@ -36,8 +36,10 @@
 
 class Subcontext {
   public:
-    Subcontext(std::vector<std::string> path_prefixes, std::string_view context, bool host = false)
+    Subcontext(std::vector<std::string> path_prefixes, std::vector<std::string> partitions,
+               std::string_view context, bool host = false)
         : path_prefixes_(std::move(path_prefixes)),
+          partitions_(std::move(partitions)),
           context_(context.begin(), context.end()),
           pid_(0) {
         if (!host) {
@@ -49,6 +51,7 @@
     Result<std::vector<std::string>> ExpandArgs(const std::vector<std::string>& args);
     void Restart();
     bool PathMatchesSubcontext(const std::string& path) const;
+    bool PartitionMatchesSubcontext(const std::string& partition) const;
     void SetApexList(std::vector<std::string>&& apex_list);
 
     const std::string& context() const { return context_; }
@@ -59,6 +62,7 @@
     Result<SubcontextReply> TransmitMessage(const SubcontextCommand& subcontext_command);
 
     std::vector<std::string> path_prefixes_;
+    std::vector<std::string> partitions_;
     std::vector<std::string> apex_list_;
     std::string context_;
     pid_t pid_;
diff --git a/init/subcontext_benchmark.cpp b/init/subcontext_benchmark.cpp
index ccef2f3..172ee31 100644
--- a/init/subcontext_benchmark.cpp
+++ b/init/subcontext_benchmark.cpp
@@ -33,7 +33,7 @@
         return;
     }
 
-    auto subcontext = Subcontext({"path"}, context);
+    auto subcontext = Subcontext({"path"}, {"partition"}, context);
     free(context);
 
     while (state.KeepRunning()) {
diff --git a/init/subcontext_test.cpp b/init/subcontext_test.cpp
index da1f455..85a2f2a 100644
--- a/init/subcontext_test.cpp
+++ b/init/subcontext_test.cpp
@@ -41,7 +41,7 @@
 
 template <typename F>
 void RunTest(F&& test_function) {
-    auto subcontext = Subcontext({"dummy_path"}, kTestContext);
+    auto subcontext = Subcontext({"dummy_path"}, {"dummy_partition"}, kTestContext);
     ASSERT_NE(0, subcontext.pid());
 
     test_function(subcontext);
@@ -177,6 +177,19 @@
     });
 }
 
+TEST(subcontext, PartitionMatchesSubcontext) {
+    RunTest([](auto& subcontext) {
+        static auto& existent_partition = "dummy_partition";
+        static auto& non_existent_partition = "not_dummy_partition";
+
+        auto existent_result = subcontext.PartitionMatchesSubcontext(existent_partition);
+        auto non_existent_result = subcontext.PartitionMatchesSubcontext(non_existent_partition);
+
+        ASSERT_TRUE(existent_result);
+        ASSERT_FALSE(non_existent_result);
+    });
+}
+
 BuiltinFunctionMap BuildTestFunctionMap() {
     // For CheckDifferentPid
     auto do_return_pids_as_error = [](const BuiltinArguments& args) -> Result<void> {
diff --git a/init/sysprop/Android.bp b/init/sysprop/Android.bp
deleted file mode 100644
index 296cdc1..0000000
--- a/init/sysprop/Android.bp
+++ /dev/null
@@ -1,16 +0,0 @@
-package {
-    // See: http://go/android-license-faq
-    // A large-scale-change added 'default_applicable_licenses' to import
-    // all of the 'license_kinds' from "system_core_init_license"
-    // to get the below license kinds:
-    //   SPDX-license-identifier-Apache-2.0
-    default_applicable_licenses: ["system_core_init_license"],
-}
-
-sysprop_library {
-  name: "com.android.sysprop.init",
-  srcs: ["InitProperties.sysprop"],
-  property_owner: "Platform",
-  api_packages: ["android.sysprop"],
-  recovery_available: true,
-}
diff --git a/init/sysprop/InitProperties.sysprop b/init/sysprop/InitProperties.sysprop
deleted file mode 100644
index 24c2434..0000000
--- a/init/sysprop/InitProperties.sysprop
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2019 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-owner: Platform
-module: "android.sysprop.InitProperties"
-
-# Serves as a signal to all processes that userspace reboot is happening.
-prop {
-    api_name: "userspace_reboot_in_progress"
-    type: Boolean
-    scope: Public
-    access: ReadWrite
-    prop_name: "sys.init.userspace_reboot.in_progress"
-    integer_as_bool: true
-}
-
-# Shows whenever the device supports userspace reboot or not.
-prop {
-    api_name: "is_userspace_reboot_supported"
-    type: Boolean
-    scope: Public
-    access: Readonly
-    prop_name: "init.userspace_reboot.is_supported"
-    integer_as_bool: true
-}
diff --git a/init/sysprop/api/com.android.sysprop.init-current.txt b/init/sysprop/api/com.android.sysprop.init-current.txt
deleted file mode 100644
index 01f4e9a..0000000
--- a/init/sysprop/api/com.android.sysprop.init-current.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-props {
-  module: "android.sysprop.InitProperties"
-  prop {
-    api_name: "is_userspace_reboot_supported"
-    prop_name: "init.userspace_reboot.is_supported"
-    integer_as_bool: true
-  }
-  prop {
-    api_name: "userspace_reboot_in_progress"
-    access: ReadWrite
-    prop_name: "sys.init.userspace_reboot.in_progress"
-    integer_as_bool: true
-  }
-}
diff --git a/init/sysprop/api/com.android.sysprop.init-latest.txt b/init/sysprop/api/com.android.sysprop.init-latest.txt
deleted file mode 100644
index 01f4e9a..0000000
--- a/init/sysprop/api/com.android.sysprop.init-latest.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-props {
-  module: "android.sysprop.InitProperties"
-  prop {
-    api_name: "is_userspace_reboot_supported"
-    prop_name: "init.userspace_reboot.is_supported"
-    integer_as_bool: true
-  }
-  prop {
-    api_name: "userspace_reboot_in_progress"
-    access: ReadWrite
-    prop_name: "sys.init.userspace_reboot.in_progress"
-    integer_as_bool: true
-  }
-}
diff --git a/init/test_kill_services/OWNERS b/init/test_kill_services/OWNERS
new file mode 100644
index 0000000..40164aa
--- /dev/null
+++ b/init/test_kill_services/OWNERS
@@ -0,0 +1 @@
+smoreland@google.com
diff --git a/init/test_kill_services/init_kill_services_test.cpp b/init/test_kill_services/init_kill_services_test.cpp
index 3af92bb..efba9f6 100644
--- a/init/test_kill_services/init_kill_services_test.cpp
+++ b/init/test_kill_services/init_kill_services_test.cpp
@@ -87,6 +87,25 @@
     return info.param;
 }
 
-INSTANTIATE_TEST_CASE_P(DeathTest, InitKillServicesTest,
-                        ::testing::Values("lmkd", "ueventd", "hwservicemanager", "servicemanager"),
-                        PrintName);
+INSTANTIATE_TEST_CASE_P(
+        DeathTest, InitKillServicesTest,
+        ::testing::Values(
+                // clang-format off
+
+// TODO: we may want a more automatic way of testing this for services based on some
+// criteria (e.g. not disabled), but for now adding core services one at a time
+
+// BEGIN INTERNAL ONLY MERGE GUARD (add things here if internal only, move down later)
+// END INTERNAL ONLY MERGE GUARD
+
+// BEGIN AOSP ONLY (add things here if adding to AOSP)
+    "lmkd",
+    "ueventd",
+    "hwservicemanager",
+    "servicemanager",
+    "system_suspend"
+// END AOSP ONLY
+
+                // clang-format on
+                ),
+        PrintName);
diff --git a/init/test_upgrade_mte/Android.bp b/init/test_upgrade_mte/Android.bp
index 1bfc76c..dfea325 100644
--- a/init/test_upgrade_mte/Android.bp
+++ b/init/test_upgrade_mte/Android.bp
@@ -17,25 +17,34 @@
 }
 
 cc_binary {
-  name: "mte_upgrade_test_helper",
-  srcs: ["mte_upgrade_test_helper.cpp"],
-  sanitize: {
-    memtag_heap: true,
-    diag: {
-      memtag_heap: false,
+    name: "mte_upgrade_test_helper",
+    srcs: ["mte_upgrade_test_helper.cpp"],
+    sanitize: {
+        memtag_heap: true,
+        diag: {
+            memtag_heap: false,
+        },
     },
-  },
-  init_rc: [
-    "mte_upgrade_test.rc",
-  ],
+    init_rc: [
+        "mte_upgrade_test.rc",
+    ],
 }
 
 java_test_host {
     name: "mte_upgrade_test",
     libs: ["tradefed"],
-    static_libs: ["frameworks-base-hostutils", "cts-install-lib-host"],
-    srcs:  ["src/**/MteUpgradeTest.java", ":libtombstone_proto-src"],
-    data: [":mte_upgrade_test_helper", "mte_upgrade_test.rc" ],
+    static_libs: [
+        "frameworks-base-hostutils",
+        "cts-install-lib-host",
+    ],
+    srcs: [
+        "src/**/MteUpgradeTest.java",
+        ":libtombstone_proto-src",
+    ],
+    device_first_data: [
+        ":mte_upgrade_test_helper",
+        "mte_upgrade_test.rc",
+    ],
     test_config: "AndroidTest.xml",
     test_suites: ["general-tests"],
 }
diff --git a/init/test_upgrade_mte/OWNERS b/init/test_upgrade_mte/OWNERS
index 79625df..c95d3cf 100644
--- a/init/test_upgrade_mte/OWNERS
+++ b/init/test_upgrade_mte/OWNERS
@@ -1,5 +1,4 @@
 fmayer@google.com
 
 eugenis@google.com
-mitchp@google.com
 pcc@google.com
diff --git a/init/test_utils/service_utils.cpp b/init/test_utils/service_utils.cpp
index 6426ed9..7002a67 100644
--- a/init/test_utils/service_utils.cpp
+++ b/init/test_utils/service_utils.cpp
@@ -30,8 +30,7 @@
 android::base::Result<ServiceInterfacesMap> GetOnDeviceServiceInterfacesMap() {
     ServiceList& service_list = ServiceList::GetInstance();
     Parser parser;
-    parser.AddSectionParser("service",
-                            std::make_unique<ServiceParser>(&service_list, nullptr, std::nullopt));
+    parser.AddSectionParser("service", std::make_unique<ServiceParser>(&service_list, nullptr));
     for (const auto& location : {
                  "/init.rc",
                  "/system/etc/init",
diff --git a/init/uevent.h b/init/uevent.h
index dc35fd9..e7ed226 100644
--- a/init/uevent.h
+++ b/init/uevent.h
@@ -26,8 +26,10 @@
     std::string action;
     std::string path;
     std::string subsystem;
+    std::string driver;
     std::string firmware;
     std::string partition_name;
+    std::string partition_uuid;
     std::string device_name;
     std::string modalias;
     int partition_num;
diff --git a/init/uevent_listener.cpp b/init/uevent_listener.cpp
index 5da6777..d329c17 100644
--- a/init/uevent_listener.cpp
+++ b/init/uevent_listener.cpp
@@ -36,6 +36,7 @@
     uevent->action.clear();
     uevent->path.clear();
     uevent->subsystem.clear();
+    uevent->driver.clear();
     uevent->firmware.clear();
     uevent->partition_name.clear();
     uevent->device_name.clear();
@@ -51,6 +52,9 @@
         } else if (!strncmp(msg, "SUBSYSTEM=", 10)) {
             msg += 10;
             uevent->subsystem = msg;
+        } else if (!strncmp(msg, "DRIVER=", 7)) {
+            msg += 7;
+            uevent->driver = msg;
         } else if (!strncmp(msg, "FIRMWARE=", 9)) {
             msg += 9;
             uevent->firmware = msg;
@@ -66,6 +70,9 @@
         } else if (!strncmp(msg, "PARTNAME=", 9)) {
             msg += 9;
             uevent->partition_name = msg;
+        } else if (!strncmp(msg, "PARTUUID=", 9)) {
+            msg += 9;
+            uevent->partition_uuid = msg;
         } else if (!strncmp(msg, "DEVNAME=", 8)) {
             msg += 8;
             uevent->device_name = msg;
@@ -82,7 +89,7 @@
     if (LOG_UEVENTS) {
         LOG(INFO) << "event { '" << uevent->action << "', '" << uevent->path << "', '"
                   << uevent->subsystem << "', '" << uevent->firmware << "', " << uevent->major
-                  << ", " << uevent->minor << " }";
+                  << ", " << uevent->minor << ", " << uevent->partition_uuid << " }";
     }
 }
 
diff --git a/init/ueventd.cpp b/init/ueventd.cpp
index 3f0d0e9..cb6b851 100644
--- a/init/ueventd.cpp
+++ b/init/ueventd.cpp
@@ -353,10 +353,25 @@
 
     auto ueventd_configuration = GetConfiguration();
 
-    uevent_handlers.emplace_back(std::make_unique<DeviceHandler>(
+    UeventListener uevent_listener(ueventd_configuration.uevent_socket_rcvbuf_size);
+
+    // Right after making DeviceHandler, replay all events looking for which
+    // block device has the boot partition. This lets us make symlinks
+    // for all of the other partitions on the same disk. Note that by the time
+    // we get here we know that the boot partition has already shown up (if
+    // we're looking for it) so just regenerating events is enough to know
+    // we'll see it.
+    std::unique_ptr<DeviceHandler> device_handler = std::make_unique<DeviceHandler>(
             std::move(ueventd_configuration.dev_permissions),
             std::move(ueventd_configuration.sysfs_permissions),
-            std::move(ueventd_configuration.subsystems), android::fs_mgr::GetBootDevices(), true));
+            std::move(ueventd_configuration.drivers), std::move(ueventd_configuration.subsystems),
+            android::fs_mgr::GetBootDevices(), android::fs_mgr::GetBootPartUuid(), true);
+    uevent_listener.RegenerateUevents([&](const Uevent& uevent) -> ListenerAction {
+        bool uuid_check_done = device_handler->CheckUeventForBootPartUuid(uevent);
+        return uuid_check_done ? ListenerAction::kStop : ListenerAction::kContinue;
+    });
+
+    uevent_handlers.emplace_back(std::move(device_handler));
     uevent_handlers.emplace_back(std::make_unique<FirmwareHandler>(
             std::move(ueventd_configuration.firmware_directories),
             std::move(ueventd_configuration.external_firmware_handlers)));
@@ -365,8 +380,6 @@
         std::vector<std::string> base_paths = {"/odm/lib/modules", "/vendor/lib/modules"};
         uevent_handlers.emplace_back(std::make_unique<ModaliasHandler>(base_paths));
     }
-    UeventListener uevent_listener(ueventd_configuration.uevent_socket_rcvbuf_size);
-
     if (!android::base::GetBoolProperty(kColdBootDoneProp, false)) {
         ColdBoot cold_boot(uevent_listener, uevent_handlers,
                            ueventd_configuration.enable_parallel_restorecon,
diff --git a/init/ueventd_parser.cpp b/init/ueventd_parser.cpp
index 4395d88..097ef09 100644
--- a/init/ueventd_parser.cpp
+++ b/init/ueventd_parser.cpp
@@ -264,6 +264,8 @@
     parser.AddSectionParser("import", std::make_unique<ImportParser>(&parser));
     parser.AddSectionParser("subsystem",
                             std::make_unique<SubsystemParser>(&ueventd_configuration.subsystems));
+    parser.AddSectionParser("driver",
+                            std::make_unique<SubsystemParser>(&ueventd_configuration.drivers));
 
     using namespace std::placeholders;
     parser.AddSingleLineParser(
diff --git a/init/ueventd_parser.h b/init/ueventd_parser.h
index 81f4e9d..ffe6072 100644
--- a/init/ueventd_parser.h
+++ b/init/ueventd_parser.h
@@ -27,6 +27,7 @@
 
 struct UeventdConfiguration {
     std::vector<Subsystem> subsystems;
+    std::vector<Subsystem> drivers;
     std::vector<SysfsPermissions> sysfs_permissions;
     std::vector<Permissions> dev_permissions;
     std::vector<std::string> firmware_directories;
diff --git a/init/ueventd_parser_test.cpp b/init/ueventd_parser_test.cpp
index 41924e2..6d91039 100644
--- a/init/ueventd_parser_test.cpp
+++ b/init/ueventd_parser_test.cpp
@@ -106,7 +106,32 @@
             {"test_devname2", Subsystem::DEVNAME_UEVENT_DEVNAME, "/dev"},
             {"test_devpath_dirname", Subsystem::DEVNAME_UEVENT_DEVPATH, "/dev/graphics"}};
 
-    TestUeventdFile(ueventd_file, {subsystems, {}, {}, {}, {}, {}});
+    TestUeventdFile(ueventd_file, {subsystems, {}, {}, {}, {}, {}, {}});
+}
+
+TEST(ueventd_parser, Drivers) {
+    auto ueventd_file = R"(
+driver test_devname
+    devname uevent_devname
+
+driver test_devpath_no_dirname
+    devname uevent_devpath
+
+driver test_devname2
+    devname uevent_devname
+
+driver test_devpath_dirname
+    devname uevent_devpath
+    dirname /dev/graphics
+)";
+
+    auto drivers = std::vector<Subsystem>{
+            {"test_devname", Subsystem::DEVNAME_UEVENT_DEVNAME, "/dev"},
+            {"test_devpath_no_dirname", Subsystem::DEVNAME_UEVENT_DEVPATH, "/dev"},
+            {"test_devname2", Subsystem::DEVNAME_UEVENT_DEVNAME, "/dev"},
+            {"test_devpath_dirname", Subsystem::DEVNAME_UEVENT_DEVPATH, "/dev/graphics"}};
+
+    TestUeventdFile(ueventd_file, {{}, drivers, {}, {}, {}, {}, {}, {}});
 }
 
 TEST(ueventd_parser, Permissions) {
@@ -132,7 +157,7 @@
             {"/sys/devices/virtual/*/input", "poll_delay", 0660, AID_ROOT, AID_INPUT, true},
     };
 
-    TestUeventdFile(ueventd_file, {{}, sysfs_permissions, permissions, {}, {}, {}});
+    TestUeventdFile(ueventd_file, {{}, {}, sysfs_permissions, permissions, {}, {}, {}});
 }
 
 TEST(ueventd_parser, FirmwareDirectories) {
@@ -148,7 +173,7 @@
             "/more",
     };
 
-    TestUeventdFile(ueventd_file, {{}, {}, {}, firmware_directories, {}, {}});
+    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, firmware_directories, {}, {}});
 }
 
 TEST(ueventd_parser, ExternalFirmwareHandlers) {
@@ -214,7 +239,7 @@
             },
     };
 
-    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, external_firmware_handlers, {}});
+    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, external_firmware_handlers, {}});
 }
 
 TEST(ueventd_parser, ExternalFirmwareHandlersDuplicate) {
@@ -232,7 +257,7 @@
             },
     };
 
-    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, external_firmware_handlers, {}});
+    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, external_firmware_handlers, {}});
 }
 
 TEST(ueventd_parser, ParallelRestoreconDirs) {
@@ -246,7 +271,7 @@
             "/sys/devices",
     };
 
-    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, parallel_restorecon_dirs});
+    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, {}, parallel_restorecon_dirs});
 }
 
 TEST(ueventd_parser, UeventSocketRcvbufSize) {
@@ -255,7 +280,7 @@
 uevent_socket_rcvbuf_size 8M
 )";
 
-    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, {}, false, 8 * 1024 * 1024});
+    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, {}, {}, false, 8 * 1024 * 1024});
 }
 
 TEST(ueventd_parser, EnabledDisabledLines) {
@@ -265,7 +290,7 @@
 modalias_handling disabled
 )";
 
-    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, {}, false, 0, true});
+    TestUeventdFile(ueventd_file, {{}, {}, {}, {}, {}, {}, {}, false, 0, true});
 
     auto ueventd_file2 = R"(
 parallel_restorecon enabled
@@ -273,7 +298,7 @@
 parallel_restorecon disabled
 )";
 
-    TestUeventdFile(ueventd_file2, {{}, {}, {}, {}, {}, {}, true, 0, false});
+    TestUeventdFile(ueventd_file2, {{}, {}, {}, {}, {}, {}, {}, true, 0, false});
 }
 
 TEST(ueventd_parser, AllTogether) {
@@ -286,6 +311,9 @@
 subsystem test_devname
     devname uevent_devname
 
+driver d_test_devpath
+    devname uevent_devpath
+
 /dev/graphics/*           0660   root       graphics
 
 subsystem test_devpath_no_dirname
@@ -303,6 +331,10 @@
     devname uevent_devpath
     dirname /dev/graphics
 
+driver d_test_devname_dirname
+    devname uevent_devname
+    dirname /dev/sound
+
 /dev/*/test               0660   root       system
 /sys/devices/virtual/*/input   poll_delay  0660  root   input    no_fnm_pathname
 firmware_directories /more
@@ -325,6 +357,10 @@
             {"test_devname2", Subsystem::DEVNAME_UEVENT_DEVNAME, "/dev"},
             {"test_devpath_dirname", Subsystem::DEVNAME_UEVENT_DEVPATH, "/dev/graphics"}};
 
+    auto drivers = std::vector<Subsystem>{
+            {"d_test_devpath", Subsystem::DEVNAME_UEVENT_DEVPATH, "/dev"},
+            {"d_test_devname_dirname", Subsystem::DEVNAME_UEVENT_DEVNAME, "/dev/graphics"}};
+
     auto permissions = std::vector<Permissions>{
             {"/dev/rtc0", 0640, AID_SYSTEM, AID_SYSTEM, false},
             {"/dev/graphics/*", 0660, AID_ROOT, AID_GRAPHICS, false},
@@ -356,7 +392,7 @@
     size_t uevent_socket_rcvbuf_size = 6 * 1024 * 1024;
 
     TestUeventdFile(ueventd_file,
-                    {subsystems, sysfs_permissions, permissions, firmware_directories,
+                    {subsystems, drivers, sysfs_permissions, permissions, firmware_directories,
                      external_firmware_handlers, parallel_restorecon_dirs, true,
                      uevent_socket_rcvbuf_size, true});
 }
diff --git a/libcutils/Android.bp b/libcutils/Android.bp
index 3c3eeb6..ec9b754 100644
--- a/libcutils/Android.bp
+++ b/libcutils/Android.bp
@@ -1,4 +1,5 @@
 package {
+    default_team: "trendy_team_native_tools_libraries",
     default_applicable_licenses: ["system_core_libcutils_license"],
 }
 
@@ -20,6 +21,17 @@
     srcs: ["include/private/android_filesystem_config.h"],
 }
 
+rust_bindgen {
+    name: "libandroid_ids",
+    crate_name: "android_ids",
+    source_stem: "bindings",
+    wrapper_src: "rust/aid_bindings.h",
+    header_libs: ["libcutils_headers"],
+    visibility: [
+        "//system/bpf/loader",
+    ],
+}
+
 cc_defaults {
     name: "libcutils_defaults",
     cflags: [
@@ -278,7 +290,6 @@
     "liblog",
     "libbase",
     "libprocessgroup",
-    "libcgrouprc",
 ]
 
 cc_test {
@@ -301,7 +312,7 @@
         android: {
             static_executable: true,
             static_libs: [
-                "libcgrouprc_format",
+                "libprocessgroup_util",
             ] + test_libraries + always_static_test_libraries,
         },
         not_windows: {
diff --git a/libcutils/abi-dumps/arm64/source-based/libcutils.so.lsdump b/libcutils/abi-dumps/arm64/source-based/libcutils.so.lsdump
index 67c7514..7ed131c 100644
--- a/libcutils/abi-dumps/arm64/source-based/libcutils.so.lsdump
+++ b/libcutils/abi-dumps/arm64/source-based/libcutils.so.lsdump
@@ -6,7 +6,6 @@
    "linker_set_key" : "_ZTIA0_i",
    "name" : "int[0]",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIA0_i",
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   }
  ],
@@ -17,8 +16,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIa",
    "name" : "signed char",
-   "referenced_type" : "_ZTIa",
-   "self_type" : "_ZTIa",
    "size" : 1
   },
   {
@@ -27,8 +24,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIb",
    "name" : "bool",
-   "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIb",
    "size" : 1
   },
   {
@@ -37,25 +32,27 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIc",
    "name" : "char",
-   "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIc",
    "size" : 1
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIf",
    "name" : "float",
-   "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIf",
    "size" : 4
   },
   {
+   "alignment" : 1,
+   "is_integral" : true,
+   "is_unsigned" : true,
+   "linker_set_key" : "_ZTIh",
+   "name" : "unsigned char",
+   "size" : 1
+  },
+  {
    "alignment" : 4,
    "is_integral" : true,
    "linker_set_key" : "_ZTIi",
    "name" : "int",
-   "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIi",
    "size" : 4
   },
   {
@@ -64,8 +61,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIj",
    "name" : "unsigned int",
-   "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIj",
    "size" : 4
   },
   {
@@ -73,8 +68,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIl",
    "name" : "long",
-   "referenced_type" : "_ZTIl",
-   "self_type" : "_ZTIl",
    "size" : 8
   },
   {
@@ -83,15 +76,49 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIm",
    "name" : "unsigned long",
-   "referenced_type" : "_ZTIm",
-   "self_type" : "_ZTIm",
    "size" : 8
   },
   {
+   "alignment" : 16,
+   "is_integral" : true,
+   "is_unsigned" : true,
+   "linker_set_key" : "_ZTIo",
+   "name" : "unsigned __int128",
+   "size" : 16
+  },
+  {
+   "alignment" : 2,
+   "is_integral" : true,
+   "linker_set_key" : "_ZTIs",
+   "name" : "short",
+   "size" : 2
+  },
+  {
+   "alignment" : 2,
+   "is_integral" : true,
+   "is_unsigned" : true,
+   "linker_set_key" : "_ZTIt",
+   "name" : "unsigned short",
+   "size" : 2
+  },
+  {
    "linker_set_key" : "_ZTIv",
-   "name" : "void",
-   "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIv"
+   "name" : "void"
+  },
+  {
+   "alignment" : 8,
+   "is_integral" : true,
+   "linker_set_key" : "_ZTIx",
+   "name" : "long long",
+   "size" : 8
+  },
+  {
+   "alignment" : 8,
+   "is_integral" : true,
+   "is_unsigned" : true,
+   "linker_set_key" : "_ZTIy",
+   "name" : "unsigned long long",
+   "size" : 8
   }
  ],
  "elf_functions" :
@@ -100,70 +127,6 @@
    "name" : "_Z23socket_make_sockaddr_unPKciP11sockaddr_unPj"
   },
   {
-   "binding" : "weak",
-   "name" : "_ZN7android4base4TrimIRNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEES8_OT_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE4syncEv"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE5imbueERKNS_6localeE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE6setbufEPcl"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE7seekoffExNS_8ios_base7seekdirEj"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE7seekposENS_4fposI9mbstate_tEEj"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE8overflowEi"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE9pbackfailEi"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE9underflowEv"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC2Ev"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED0Ev"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED2Ev"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__16vectorI5EntryNS_9allocatorIS1_EEE24__emplace_back_slow_pathIJS1_EEEvDpOT_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__17getlineIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS_13basic_istreamIT_T0_EES9_RNS_12basic_stringIS6_S7_T1_EES6_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc"
-  },
-  {
    "name" : "android_get_control_file"
   },
   {
@@ -488,6 +451,12 @@
    "name" : "str_parms_to_str"
   },
   {
+   "name" : "uevent_bind"
+  },
+  {
+   "name" : "uevent_create_socket"
+  },
+  {
    "name" : "uevent_kernel_multicast_recv"
   },
   {
@@ -503,22 +472,6 @@
  "elf_objects" :
  [
   {
-   "binding" : "weak",
-   "name" : "_ZTCNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE0_NS_13basic_istreamIcS2_EE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZTTNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZTVNSt3__113basic_filebufIcNS_11char_traitsIcEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZTVNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE"
-  },
-  {
    "name" : "atrace_enabled_tags"
   },
   {
@@ -553,8 +506,6 @@
    ],
    "linker_set_key" : "_ZTI12IoSchedClass",
    "name" : "IoSchedClass",
-   "referenced_type" : "_ZTI12IoSchedClass",
-   "self_type" : "_ZTI12IoSchedClass",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/iosched_policy.h",
    "underlying_type" : "_ZTIj"
@@ -575,9 +526,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFbPvS_E",
    "return_type" : "_ZTIb",
-   "self_type" : "_ZTIFbPvS_E",
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
   {
@@ -596,9 +545,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFbPvS_S_E",
    "return_type" : "_ZTIb",
-   "self_type" : "_ZTIFbPvS_S_E",
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
   {
@@ -611,9 +558,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPvE",
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
   {
@@ -632,9 +577,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFvPKcS0_PvE",
    "return_type" : "_ZTIv",
-   "self_type" : "_ZTIFvPKcS0_PvE",
    "source_file" : "system/core/libcutils/include/cutils/properties.h"
   }
  ],
@@ -2267,6 +2210,33 @@
    "source_file" : "system/core/libcutils/include/cutils/str_parms.h"
   },
   {
+   "function_name" : "uevent_bind",
+   "linker_set_key" : "uevent_bind",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "_ZTIi"
+    }
+   ],
+   "return_type" : "_ZTIi",
+   "source_file" : "system/core/libcutils/include/cutils/uevent.h"
+  },
+  {
+   "function_name" : "uevent_create_socket",
+   "linker_set_key" : "uevent_create_socket",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "_ZTIi"
+    },
+    {
+     "referenced_type" : "_ZTIb"
+    }
+   ],
+   "return_type" : "_ZTIi",
+   "source_file" : "system/core/libcutils/include/cutils/uevent.h"
+  },
+  {
    "function_name" : "uevent_kernel_multicast_recv",
    "linker_set_key" : "uevent_kernel_multicast_recv",
    "parameters" :
@@ -2374,7 +2344,6 @@
    "linker_set_key" : "_ZTIP12IoSchedClass",
    "name" : "IoSchedClass *",
    "referenced_type" : "_ZTI12IoSchedClass",
-   "self_type" : "_ZTIP12IoSchedClass",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/iosched_policy.h"
   },
@@ -2383,7 +2352,6 @@
    "linker_set_key" : "_ZTIP12RecordStream",
    "name" : "RecordStream *",
    "referenced_type" : "_ZTI12RecordStream",
-   "self_type" : "_ZTIP12RecordStream",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/record_stream.h"
   },
@@ -2392,7 +2360,6 @@
    "linker_set_key" : "_ZTIP13native_handle",
    "name" : "native_handle *",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIP13native_handle",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2401,7 +2368,6 @@
    "linker_set_key" : "_ZTIP5cnode",
    "name" : "cnode *",
    "referenced_type" : "_ZTI5cnode",
-   "self_type" : "_ZTIP5cnode",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2410,7 +2376,6 @@
    "linker_set_key" : "_ZTIP7Hashmap",
    "name" : "Hashmap *",
    "referenced_type" : "_ZTI7Hashmap",
-   "self_type" : "_ZTIP7Hashmap",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2419,7 +2384,6 @@
    "linker_set_key" : "_ZTIP9fs_config",
    "name" : "fs_config *",
    "referenced_type" : "_ZTI9fs_config",
-   "self_type" : "_ZTIP9fs_config",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/private/fs_config.h"
   },
@@ -2428,7 +2392,6 @@
    "linker_set_key" : "_ZTIP9str_parms",
    "name" : "str_parms *",
    "referenced_type" : "_ZTI9str_parms",
-   "self_type" : "_ZTIP9str_parms",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/str_parms.h"
   },
@@ -2437,7 +2400,6 @@
    "linker_set_key" : "_ZTIPFbPvS_E",
    "name" : "bool (*)(void *, void *)",
    "referenced_type" : "_ZTIFbPvS_E",
-   "self_type" : "_ZTIPFbPvS_E",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2446,7 +2408,6 @@
    "linker_set_key" : "_ZTIPFbPvS_S_E",
    "name" : "bool (*)(void *, void *, void *)",
    "referenced_type" : "_ZTIFbPvS_S_E",
-   "self_type" : "_ZTIPFbPvS_S_E",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2455,7 +2416,6 @@
    "linker_set_key" : "_ZTIPFiPvE",
    "name" : "int (*)(void *)",
    "referenced_type" : "_ZTIFiPvE",
-   "self_type" : "_ZTIPFiPvE",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2464,7 +2424,6 @@
    "linker_set_key" : "_ZTIPFvPKcS0_PvE",
    "name" : "void (*)(const char *, const char *, void *)",
    "referenced_type" : "_ZTIFvPKcS0_PvE",
-   "self_type" : "_ZTIPFvPKcS0_PvE",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/properties.h"
   },
@@ -2473,7 +2432,6 @@
    "linker_set_key" : "_ZTIPK13native_handle",
    "name" : "const native_handle *",
    "referenced_type" : "_ZTIK13native_handle",
-   "self_type" : "_ZTIPK13native_handle",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2482,7 +2440,6 @@
    "linker_set_key" : "_ZTIPK22cutils_socket_buffer_t",
    "name" : "const cutils_socket_buffer_t *",
    "referenced_type" : "_ZTIK22cutils_socket_buffer_t",
-   "self_type" : "_ZTIPK22cutils_socket_buffer_t",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2491,7 +2448,6 @@
    "linker_set_key" : "_ZTIPK5iovec",
    "name" : "const iovec *",
    "referenced_type" : "_ZTIK5iovec",
-   "self_type" : "_ZTIPK5iovec",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/klog.h"
   },
@@ -2500,7 +2456,6 @@
    "linker_set_key" : "_ZTIPKc",
    "name" : "const char *",
    "referenced_type" : "_ZTIKc",
-   "self_type" : "_ZTIPKc",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2509,7 +2464,6 @@
    "linker_set_key" : "_ZTIPKv",
    "name" : "const void *",
    "referenced_type" : "_ZTIKv",
-   "self_type" : "_ZTIPKv",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2518,7 +2472,6 @@
    "linker_set_key" : "_ZTIPPv",
    "name" : "void **",
    "referenced_type" : "_ZTIPv",
-   "self_type" : "_ZTIPPv",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/record_stream.h"
   },
@@ -2527,7 +2480,6 @@
    "linker_set_key" : "_ZTIPc",
    "name" : "char *",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIPc",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2536,7 +2488,6 @@
    "linker_set_key" : "_ZTIPf",
    "name" : "float *",
    "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIPf",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/str_parms.h"
   },
@@ -2545,7 +2496,6 @@
    "linker_set_key" : "_ZTIPi",
    "name" : "int *",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIPi",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/iosched_policy.h"
   },
@@ -2554,7 +2504,6 @@
    "linker_set_key" : "_ZTIPj",
    "name" : "unsigned int *",
    "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIPj",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/misc.h"
   },
@@ -2563,7 +2512,6 @@
    "linker_set_key" : "_ZTIPm",
    "name" : "unsigned long *",
    "referenced_type" : "_ZTIm",
-   "self_type" : "_ZTIPm",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/record_stream.h"
   },
@@ -2572,7 +2520,6 @@
    "linker_set_key" : "_ZTIPv",
    "name" : "void *",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIPv",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/misc.h"
   }
@@ -2585,7 +2532,6 @@
    "linker_set_key" : "_ZTIK13native_handle",
    "name" : "const native_handle",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIK13native_handle",
    "size" : 12,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2595,7 +2541,6 @@
    "linker_set_key" : "_ZTIK22cutils_socket_buffer_t",
    "name" : "const cutils_socket_buffer_t",
    "referenced_type" : "_ZTI22cutils_socket_buffer_t",
-   "self_type" : "_ZTIK22cutils_socket_buffer_t",
    "size" : 16,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2605,7 +2550,6 @@
    "linker_set_key" : "_ZTIK5iovec",
    "name" : "const iovec",
    "referenced_type" : "_ZTI5iovec",
-   "self_type" : "_ZTIK5iovec",
    "size" : 16,
    "source_file" : "system/core/libcutils/include/cutils/klog.h"
   },
@@ -2615,7 +2559,6 @@
    "linker_set_key" : "_ZTIKc",
    "name" : "const char",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIKc",
    "size" : 1,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2624,7 +2567,6 @@
    "linker_set_key" : "_ZTIKv",
    "name" : "const void",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIKv",
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   }
  ],
@@ -2656,8 +2598,6 @@
    ],
    "linker_set_key" : "_ZTI13native_handle",
    "name" : "native_handle",
-   "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTI13native_handle",
    "size" : 12,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2677,8 +2617,6 @@
    ],
    "linker_set_key" : "_ZTI22cutils_socket_buffer_t",
    "name" : "cutils_socket_buffer_t",
-   "referenced_type" : "_ZTI22cutils_socket_buffer_t",
-   "self_type" : "_ZTI22cutils_socket_buffer_t",
    "size" : 16,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2713,8 +2651,6 @@
    ],
    "linker_set_key" : "_ZTI5cnode",
    "name" : "cnode",
-   "referenced_type" : "_ZTI5cnode",
-   "self_type" : "_ZTI5cnode",
    "size" : 40,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2744,8 +2680,6 @@
    ],
    "linker_set_key" : "_ZTI9fs_config",
    "name" : "fs_config",
-   "referenced_type" : "_ZTI9fs_config",
-   "self_type" : "_ZTI9fs_config",
    "size" : 24,
    "source_file" : "system/core/libcutils/include/private/fs_config.h"
   }
diff --git a/libcutils/abi-dumps/arm_arm64/source-based/libcutils.so.lsdump b/libcutils/abi-dumps/arm_arm64/source-based/libcutils.so.lsdump
index f75240c..fe4361a 100644
--- a/libcutils/abi-dumps/arm_arm64/source-based/libcutils.so.lsdump
+++ b/libcutils/abi-dumps/arm_arm64/source-based/libcutils.so.lsdump
@@ -6,7 +6,6 @@
    "linker_set_key" : "_ZTIA0_i",
    "name" : "int[0]",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIA0_i",
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   }
  ],
@@ -17,8 +16,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIa",
    "name" : "signed char",
-   "referenced_type" : "_ZTIa",
-   "self_type" : "_ZTIa",
    "size" : 1
   },
   {
@@ -27,8 +24,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIb",
    "name" : "bool",
-   "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIb",
    "size" : 1
   },
   {
@@ -37,25 +32,27 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIc",
    "name" : "char",
-   "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIc",
    "size" : 1
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIf",
    "name" : "float",
-   "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIf",
    "size" : 4
   },
   {
+   "alignment" : 1,
+   "is_integral" : true,
+   "is_unsigned" : true,
+   "linker_set_key" : "_ZTIh",
+   "name" : "unsigned char",
+   "size" : 1
+  },
+  {
    "alignment" : 4,
    "is_integral" : true,
    "linker_set_key" : "_ZTIi",
    "name" : "int",
-   "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIi",
    "size" : 4
   },
   {
@@ -64,33 +61,47 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIj",
    "name" : "unsigned int",
-   "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIj",
    "size" : 4
   },
   {
+   "alignment" : 4,
+   "is_integral" : true,
+   "linker_set_key" : "_ZTIl",
+   "name" : "long",
+   "size" : 4
+  },
+  {
+   "alignment" : 4,
+   "is_integral" : true,
+   "is_unsigned" : true,
+   "linker_set_key" : "_ZTIm",
+   "name" : "unsigned long",
+   "size" : 4
+  },
+  {
+   "alignment" : 2,
+   "is_integral" : true,
+   "linker_set_key" : "_ZTIs",
+   "name" : "short",
+   "size" : 2
+  },
+  {
    "alignment" : 2,
    "is_integral" : true,
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIt",
    "name" : "unsigned short",
-   "referenced_type" : "_ZTIt",
-   "self_type" : "_ZTIt",
    "size" : 2
   },
   {
    "linker_set_key" : "_ZTIv",
-   "name" : "void",
-   "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIv"
+   "name" : "void"
   },
   {
    "alignment" : 8,
    "is_integral" : true,
    "linker_set_key" : "_ZTIx",
    "name" : "long long",
-   "referenced_type" : "_ZTIx",
-   "self_type" : "_ZTIx",
    "size" : 8
   },
   {
@@ -99,8 +110,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIy",
    "name" : "unsigned long long",
-   "referenced_type" : "_ZTIy",
-   "self_type" : "_ZTIy",
    "size" : 8
   }
  ],
@@ -114,66 +123,6 @@
    "name" : "_ZN7android4base4TrimIRNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEES8_OT_"
   },
   {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE4syncEv"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE5imbueERKNS_6localeE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE6setbufEPci"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE7seekoffExNS_8ios_base7seekdirEj"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE7seekposENS_4fposI9mbstate_tEEj"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE8overflowEi"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE9pbackfailEi"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE9underflowEv"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC2Ev"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED0Ev"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED2Ev"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_j"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__16vectorI5EntryNS_9allocatorIS1_EEE24__emplace_back_slow_pathIJS1_EEEvDpOT_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__17getlineIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS_13basic_istreamIT_T0_EES9_RNS_12basic_stringIS6_S7_T1_EES6_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc"
-  },
-  {
    "name" : "android_get_control_file"
   },
   {
@@ -498,6 +447,12 @@
    "name" : "str_parms_to_str"
   },
   {
+   "name" : "uevent_bind"
+  },
+  {
+   "name" : "uevent_create_socket"
+  },
+  {
    "name" : "uevent_kernel_multicast_recv"
   },
   {
@@ -513,22 +468,6 @@
  "elf_objects" :
  [
   {
-   "binding" : "weak",
-   "name" : "_ZTCNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE0_NS_13basic_istreamIcS2_EE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZTTNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZTVNSt3__113basic_filebufIcNS_11char_traitsIcEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZTVNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE"
-  },
-  {
    "name" : "atrace_enabled_tags"
   },
   {
@@ -563,8 +502,6 @@
    ],
    "linker_set_key" : "_ZTI12IoSchedClass",
    "name" : "IoSchedClass",
-   "referenced_type" : "_ZTI12IoSchedClass",
-   "self_type" : "_ZTI12IoSchedClass",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/iosched_policy.h",
    "underlying_type" : "_ZTIj"
@@ -585,9 +522,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFbPvS_E",
    "return_type" : "_ZTIb",
-   "self_type" : "_ZTIFbPvS_E",
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
   {
@@ -606,9 +541,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFbPvS_S_E",
    "return_type" : "_ZTIb",
-   "self_type" : "_ZTIFbPvS_S_E",
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
   {
@@ -621,9 +554,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPvE",
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
   {
@@ -642,9 +573,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFvPKcS0_PvE",
    "return_type" : "_ZTIv",
-   "self_type" : "_ZTIFvPKcS0_PvE",
    "source_file" : "system/core/libcutils/include/cutils/properties.h"
   }
  ],
@@ -2277,6 +2206,33 @@
    "source_file" : "system/core/libcutils/include/cutils/str_parms.h"
   },
   {
+   "function_name" : "uevent_bind",
+   "linker_set_key" : "uevent_bind",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "_ZTIi"
+    }
+   ],
+   "return_type" : "_ZTIi",
+   "source_file" : "system/core/libcutils/include/cutils/uevent.h"
+  },
+  {
+   "function_name" : "uevent_create_socket",
+   "linker_set_key" : "uevent_create_socket",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "_ZTIi"
+    },
+    {
+     "referenced_type" : "_ZTIb"
+    }
+   ],
+   "return_type" : "_ZTIi",
+   "source_file" : "system/core/libcutils/include/cutils/uevent.h"
+  },
+  {
    "function_name" : "uevent_kernel_multicast_recv",
    "linker_set_key" : "uevent_kernel_multicast_recv",
    "parameters" :
@@ -2384,7 +2340,6 @@
    "linker_set_key" : "_ZTIP12IoSchedClass",
    "name" : "IoSchedClass *",
    "referenced_type" : "_ZTI12IoSchedClass",
-   "self_type" : "_ZTIP12IoSchedClass",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/iosched_policy.h"
   },
@@ -2393,7 +2348,6 @@
    "linker_set_key" : "_ZTIP12RecordStream",
    "name" : "RecordStream *",
    "referenced_type" : "_ZTI12RecordStream",
-   "self_type" : "_ZTIP12RecordStream",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/record_stream.h"
   },
@@ -2402,7 +2356,6 @@
    "linker_set_key" : "_ZTIP13native_handle",
    "name" : "native_handle *",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIP13native_handle",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2411,7 +2364,6 @@
    "linker_set_key" : "_ZTIP5cnode",
    "name" : "cnode *",
    "referenced_type" : "_ZTI5cnode",
-   "self_type" : "_ZTIP5cnode",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2420,7 +2372,6 @@
    "linker_set_key" : "_ZTIP7Hashmap",
    "name" : "Hashmap *",
    "referenced_type" : "_ZTI7Hashmap",
-   "self_type" : "_ZTIP7Hashmap",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2429,7 +2380,6 @@
    "linker_set_key" : "_ZTIP9fs_config",
    "name" : "fs_config *",
    "referenced_type" : "_ZTI9fs_config",
-   "self_type" : "_ZTIP9fs_config",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/private/fs_config.h"
   },
@@ -2438,7 +2388,6 @@
    "linker_set_key" : "_ZTIP9str_parms",
    "name" : "str_parms *",
    "referenced_type" : "_ZTI9str_parms",
-   "self_type" : "_ZTIP9str_parms",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/str_parms.h"
   },
@@ -2447,7 +2396,6 @@
    "linker_set_key" : "_ZTIPFbPvS_E",
    "name" : "bool (*)(void *, void *)",
    "referenced_type" : "_ZTIFbPvS_E",
-   "self_type" : "_ZTIPFbPvS_E",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2456,7 +2404,6 @@
    "linker_set_key" : "_ZTIPFbPvS_S_E",
    "name" : "bool (*)(void *, void *, void *)",
    "referenced_type" : "_ZTIFbPvS_S_E",
-   "self_type" : "_ZTIPFbPvS_S_E",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2465,7 +2412,6 @@
    "linker_set_key" : "_ZTIPFiPvE",
    "name" : "int (*)(void *)",
    "referenced_type" : "_ZTIFiPvE",
-   "self_type" : "_ZTIPFiPvE",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
   },
@@ -2474,7 +2420,6 @@
    "linker_set_key" : "_ZTIPFvPKcS0_PvE",
    "name" : "void (*)(const char *, const char *, void *)",
    "referenced_type" : "_ZTIFvPKcS0_PvE",
-   "self_type" : "_ZTIPFvPKcS0_PvE",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/properties.h"
   },
@@ -2483,7 +2428,6 @@
    "linker_set_key" : "_ZTIPK13native_handle",
    "name" : "const native_handle *",
    "referenced_type" : "_ZTIK13native_handle",
-   "self_type" : "_ZTIPK13native_handle",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2492,7 +2436,6 @@
    "linker_set_key" : "_ZTIPK22cutils_socket_buffer_t",
    "name" : "const cutils_socket_buffer_t *",
    "referenced_type" : "_ZTIK22cutils_socket_buffer_t",
-   "self_type" : "_ZTIPK22cutils_socket_buffer_t",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2501,7 +2444,6 @@
    "linker_set_key" : "_ZTIPK5iovec",
    "name" : "const iovec *",
    "referenced_type" : "_ZTIK5iovec",
-   "self_type" : "_ZTIPK5iovec",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/klog.h"
   },
@@ -2510,7 +2452,6 @@
    "linker_set_key" : "_ZTIPKc",
    "name" : "const char *",
    "referenced_type" : "_ZTIKc",
-   "self_type" : "_ZTIPKc",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2519,7 +2460,6 @@
    "linker_set_key" : "_ZTIPKv",
    "name" : "const void *",
    "referenced_type" : "_ZTIKv",
-   "self_type" : "_ZTIPKv",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2528,7 +2468,6 @@
    "linker_set_key" : "_ZTIPPv",
    "name" : "void **",
    "referenced_type" : "_ZTIPv",
-   "self_type" : "_ZTIPPv",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/record_stream.h"
   },
@@ -2537,7 +2476,6 @@
    "linker_set_key" : "_ZTIPc",
    "name" : "char *",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIPc",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2546,7 +2484,6 @@
    "linker_set_key" : "_ZTIPf",
    "name" : "float *",
    "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIPf",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/str_parms.h"
   },
@@ -2555,7 +2492,6 @@
    "linker_set_key" : "_ZTIPi",
    "name" : "int *",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIPi",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/iosched_policy.h"
   },
@@ -2564,7 +2500,6 @@
    "linker_set_key" : "_ZTIPj",
    "name" : "unsigned int *",
    "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIPj",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/misc.h"
   },
@@ -2573,7 +2508,6 @@
    "linker_set_key" : "_ZTIPv",
    "name" : "void *",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIPv",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/cutils/misc.h"
   },
@@ -2582,7 +2516,6 @@
    "linker_set_key" : "_ZTIPy",
    "name" : "unsigned long long *",
    "referenced_type" : "_ZTIy",
-   "self_type" : "_ZTIPy",
    "size" : 4,
    "source_file" : "system/core/libcutils/include/private/canned_fs_config.h"
   }
@@ -2595,7 +2528,6 @@
    "linker_set_key" : "_ZTIK13native_handle",
    "name" : "const native_handle",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIK13native_handle",
    "size" : 12,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2605,7 +2537,6 @@
    "linker_set_key" : "_ZTIK22cutils_socket_buffer_t",
    "name" : "const cutils_socket_buffer_t",
    "referenced_type" : "_ZTI22cutils_socket_buffer_t",
-   "self_type" : "_ZTIK22cutils_socket_buffer_t",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2615,7 +2546,6 @@
    "linker_set_key" : "_ZTIK5iovec",
    "name" : "const iovec",
    "referenced_type" : "_ZTI5iovec",
-   "self_type" : "_ZTIK5iovec",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/klog.h"
   },
@@ -2625,7 +2555,6 @@
    "linker_set_key" : "_ZTIKc",
    "name" : "const char",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIKc",
    "size" : 1,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2634,7 +2563,6 @@
    "linker_set_key" : "_ZTIKv",
    "name" : "const void",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIKv",
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   }
  ],
@@ -2666,8 +2594,6 @@
    ],
    "linker_set_key" : "_ZTI13native_handle",
    "name" : "native_handle",
-   "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTI13native_handle",
    "size" : 12,
    "source_file" : "system/core/libcutils/include/cutils/native_handle.h"
   },
@@ -2687,8 +2613,6 @@
    ],
    "linker_set_key" : "_ZTI22cutils_socket_buffer_t",
    "name" : "cutils_socket_buffer_t",
-   "referenced_type" : "_ZTI22cutils_socket_buffer_t",
-   "self_type" : "_ZTI22cutils_socket_buffer_t",
    "size" : 8,
    "source_file" : "system/core/libcutils/include/cutils/sockets.h"
   },
@@ -2723,8 +2647,6 @@
    ],
    "linker_set_key" : "_ZTI5cnode",
    "name" : "cnode",
-   "referenced_type" : "_ZTI5cnode",
-   "self_type" : "_ZTI5cnode",
    "size" : 20,
    "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
   },
@@ -2754,8 +2676,6 @@
    ],
    "linker_set_key" : "_ZTI9fs_config",
    "name" : "fs_config",
-   "referenced_type" : "_ZTI9fs_config",
-   "self_type" : "_ZTI9fs_config",
    "size" : 24,
    "source_file" : "system/core/libcutils/include/private/fs_config.h"
   }
diff --git a/libcutils/include/cutils/uevent.h b/libcutils/include/cutils/uevent.h
index da1c2aa..1be981b 100644
--- a/libcutils/include/cutils/uevent.h
+++ b/libcutils/include/cutils/uevent.h
@@ -24,6 +24,8 @@
 extern "C" {
 #endif
 
+int uevent_create_socket(int buf_sz, bool passcred);
+int uevent_bind(int socket);
 int uevent_open_socket(int buf_sz, bool passcred);
 ssize_t uevent_kernel_multicast_recv(int socket, void *buffer, size_t length);
 ssize_t uevent_kernel_multicast_uid_recv(int socket, void *buffer, size_t length, uid_t *uid);
diff --git a/libcutils/include/private/android_filesystem_config.h b/libcutils/include/private/android_filesystem_config.h
index ea61cc2..2aaafbe 100644
--- a/libcutils/include/private/android_filesystem_config.h
+++ b/libcutils/include/private/android_filesystem_config.h
@@ -142,7 +142,10 @@
 #define AID_SECURITY_LOG_WRITER 1091 /* write to security log */
 #define AID_PRNG_SEEDER 1092         /* PRNG seeder daemon */
 #define AID_UPROBESTATS 1093         /* uid for uprobestats */
-/* Changes to this file must be made in AOSP, *not* in internal branches. */
+#define AID_CROS_EC 1094             /* uid for accessing ChromeOS EC (cros_ec) */
+#define AID_MMD 1095                 /* uid for memory management daemon */
+// Additions to this file must be made in AOSP, *not* in internal branches.
+// You will also need to update expect_ids() in bionic/tests/grp_pwd_test.cpp.
 
 #define AID_SHELL 2000 /* adb and debug shell user */
 #define AID_CACHE 2001 /* cache access */
@@ -157,7 +160,7 @@
 #define AID_OEM_RESERVED_START 2900
 #define AID_OEM_RESERVED_END 2999
 
-/* The 3000 series are intended for use as supplemental group id's only.
+/* The 3000 series are intended for use as supplemental group ids only.
  * They indicate special Android capabilities that the kernel is aware of. */
 #define AID_NET_BT_ADMIN 3001 /* bluetooth: create any socket */
 #define AID_NET_BT 3002       /* bluetooth: create sco, rfcomm or l2cap sockets */
@@ -171,6 +174,8 @@
 #define AID_UHID 3011         /* Allow read/write to /dev/uhid node */
 #define AID_READTRACEFS 3012  /* Allow tracefs read */
 #define AID_VIRTUALMACHINE 3013 /* Allows VMs to tune for performance*/
+// Additions to this file must be made in AOSP, *not* in internal branches.
+// You will also need to update expect_ids() in bionic/tests/grp_pwd_test.cpp.
 
 /* The range 5000-5999 is also reserved for vendor partition. */
 #define AID_OEM_RESERVED_2_START 5000
diff --git a/libcutils/properties.cpp b/libcutils/properties.cpp
index 03f0496..d3a2b50 100644
--- a/libcutils/properties.cpp
+++ b/libcutils/properties.cpp
@@ -93,8 +93,7 @@
 
 #if __has_include(<sys/system_properties.h>)
 
-#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
-#include <sys/_system_properties.h>
+#include <sys/system_properties.h>
 
 struct callback_data {
     void (*callback)(const char* name, const char* value, void* cookie);
diff --git a/libcutils/rust/aid_bindings.h b/libcutils/rust/aid_bindings.h
new file mode 100644
index 0000000..1b175a2
--- /dev/null
+++ b/libcutils/rust/aid_bindings.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <private/android_filesystem_config.h>
diff --git a/libcutils/sched_policy_test.cpp b/libcutils/sched_policy_test.cpp
index 50bd6d0..2641743 100644
--- a/libcutils/sched_policy_test.cpp
+++ b/libcutils/sched_policy_test.cpp
@@ -67,13 +67,6 @@
 }
 
 TEST(SchedPolicy, set_sched_policy) {
-    if (!schedboost_enabled()) {
-        // schedboost_enabled() (i.e. CONFIG_CGROUP_SCHEDTUNE) is optional;
-        // it's only needed on devices using energy-aware scheduler.
-        GTEST_LOG_(INFO) << "skipping test that requires CONFIG_CGROUP_SCHEDTUNE";
-        return;
-    }
-
     ASSERT_EQ(0, set_sched_policy(0, SP_BACKGROUND));
     ASSERT_EQ(0, set_cpuset_policy(0, SP_BACKGROUND));
     AssertPolicy(SP_BACKGROUND);
diff --git a/libcutils/trace-dev.inc b/libcutils/trace-dev.inc
index 3bc6dc3..c911b4f 100644
--- a/libcutils/trace-dev.inc
+++ b/libcutils/trace-dev.inc
@@ -36,8 +36,7 @@
 #include <log/log_properties.h>
 
 #if defined(__BIONIC__)
-#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
-#include <sys/_system_properties.h>
+#include <sys/system_properties.h>
 #endif
 
 /**
diff --git a/libcutils/uevent.cpp b/libcutils/uevent.cpp
index 40bbd5c..f01a479 100644
--- a/libcutils/uevent.cpp
+++ b/libcutils/uevent.cpp
@@ -92,20 +92,22 @@
     return -1;
 }
 
-int uevent_open_socket(int buf_sz, bool passcred) {
-    struct sockaddr_nl addr;
-    int on = passcred;
+/*
+ * Creates an unbound netlink socket for receiving uevent messages.
+ * @buf_sz: socket receive buffer size.
+ * @passcred: whether or not to enable receiving the SCM_CREDENTIALS control
+ *	message.
+ *
+ * Returns: a socket descriptor upon success or -1 upon failure.
+ */
+int uevent_create_socket(int buf_sz, bool passcred) {
+    int s = socket(PF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC, NETLINK_KOBJECT_UEVENT);
+    if (s < 0) {
+        return -1;
+    }
+
     int buf_sz_readback = 0;
     socklen_t optlen = sizeof(buf_sz_readback);
-    int s;
-
-    memset(&addr, 0, sizeof(addr));
-    addr.nl_family = AF_NETLINK;
-    addr.nl_pid = 0;
-    addr.nl_groups = 0xffffffff;
-
-    s = socket(PF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC, NETLINK_KOBJECT_UEVENT);
-    if (s < 0) return -1;
 
     if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buf_sz, sizeof(buf_sz)) < 0 ||
           getsockopt(s, SOL_SOCKET, SO_RCVBUF, &buf_sz_readback, &optlen) < 0) {
@@ -123,9 +125,43 @@
         }
     }
 
+    int on = passcred;
+
     setsockopt(s, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
 
-    if (bind(s, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
+    return s;
+}
+
+/*
+ * Binds a netlink socket. Binding a netlink socket makes the kernel start
+ * sending netlink messages to that netlink socket.
+ *
+ * Returns: 0 upon success; -1 upon error.
+ */
+int uevent_bind(int socket) {
+    struct sockaddr_nl addr = {
+            .nl_family = AF_NETLINK,
+            .nl_pid = 0,
+            .nl_groups = 0xffffffff,
+    };
+    return bind(socket, (struct sockaddr*)&addr, sizeof(addr));
+}
+
+/*
+ * Creates a bound netlink socket for receiving uevent messages.
+ * @buf_sz: socket receive buffer size.
+ * @passcred: whether or not to enable receiving the SCM_CREDENTIALS control
+ *	message.
+ *
+ * Returns: a socket descriptor upon success or -1 upon failure.
+ */
+int uevent_open_socket(int buf_sz, bool passcred) {
+    int s = uevent_create_socket(buf_sz, passcred);
+    if (s < 0) {
+        return -1;
+    }
+
+    if (uevent_bind(s) < 0) {
         close(s);
         return -1;
     }
diff --git a/libmodprobe/Android.bp b/libmodprobe/Android.bp
index 12906cc..78b4c83 100644
--- a/libmodprobe/Android.bp
+++ b/libmodprobe/Android.bp
@@ -13,6 +13,7 @@
     vendor_ramdisk_available: true,
     host_supported: true,
     srcs: [
+        "exthandler.cpp",
         "libmodprobe.cpp",
         "libmodprobe_ext.cpp",
     ],
@@ -30,6 +31,7 @@
     ],
     local_include_dirs: ["include/"],
     srcs: [
+        "exthandler.cpp",
         "libmodprobe_test.cpp",
         "libmodprobe.cpp",
         "libmodprobe_ext_test.cpp",
diff --git a/libmodprobe/exthandler.cpp b/libmodprobe/exthandler.cpp
new file mode 100644
index 0000000..f48c259
--- /dev/null
+++ b/libmodprobe/exthandler.cpp
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <exthandler/exthandler.h>
+
+#include <android-base/chrono_utils.h>
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <android-base/strings.h>
+#include <android-base/unique_fd.h>
+#include <fnmatch.h>
+#include <grp.h>
+#include <pwd.h>
+#include <sys/wait.h>
+
+using android::base::ErrnoError;
+using android::base::Error;
+using android::base::ReadFdToString;
+using android::base::Result;
+using android::base::Split;
+using android::base::Trim;
+using android::base::unique_fd;
+
+Result<std::string> RunExternalHandler(const std::string& handler, uid_t uid, gid_t gid,
+                                       std::unordered_map<std::string, std::string>& envs_map) {
+    unique_fd child_stdout;
+    unique_fd parent_stdout;
+    if (!Socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, &child_stdout, &parent_stdout)) {
+        return ErrnoError() << "Socketpair() for stdout failed";
+    }
+
+    unique_fd child_stderr;
+    unique_fd parent_stderr;
+    if (!Socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, &child_stderr, &parent_stderr)) {
+        return ErrnoError() << "Socketpair() for stderr failed";
+    }
+
+    signal(SIGCHLD, SIG_DFL);
+
+    auto pid = fork();
+    if (pid < 0) {
+        return ErrnoError() << "fork() failed";
+    }
+
+    if (pid == 0) {
+        for (auto it = envs_map.begin(); it != envs_map.end(); ++it) {
+            setenv(it->first.c_str(), it->second.c_str(), 1);
+        }
+        parent_stdout.reset();
+        parent_stderr.reset();
+        close(STDOUT_FILENO);
+        close(STDERR_FILENO);
+        dup2(child_stdout.get(), STDOUT_FILENO);
+        dup2(child_stderr.get(), STDERR_FILENO);
+
+        auto args = Split(handler, " ");
+        std::vector<char*> c_args;
+        for (auto& arg : args) {
+            c_args.emplace_back(arg.data());
+        }
+        c_args.emplace_back(nullptr);
+
+        if (gid != 0) {
+            if (setgid(gid) != 0) {
+                fprintf(stderr, "setgid() failed: %s", strerror(errno));
+                _exit(EXIT_FAILURE);
+            }
+        }
+
+        if (setuid(uid) != 0) {
+            fprintf(stderr, "setuid() failed: %s", strerror(errno));
+            _exit(EXIT_FAILURE);
+        }
+
+        execv(c_args[0], c_args.data());
+        fprintf(stderr, "exec() failed: %s", strerror(errno));
+        _exit(EXIT_FAILURE);
+    }
+
+    child_stdout.reset();
+    child_stderr.reset();
+
+    int status;
+    pid_t waited_pid = TEMP_FAILURE_RETRY(waitpid(pid, &status, 0));
+    if (waited_pid == -1) {
+        return ErrnoError() << "waitpid() failed";
+    }
+
+    std::string stdout_content;
+    if (!ReadFdToString(parent_stdout.get(), &stdout_content)) {
+        return ErrnoError() << "ReadFdToString() for stdout failed";
+    }
+
+    std::string stderr_content;
+    if (ReadFdToString(parent_stderr.get(), &stderr_content)) {
+        auto messages = Split(stderr_content, "\n");
+        for (const auto& message : messages) {
+            if (!message.empty()) {
+                LOG(ERROR) << "External Handler: " << message;
+            }
+        }
+    } else {
+        LOG(ERROR) << "ReadFdToString() for stderr failed";
+    }
+
+    if (WIFEXITED(status)) {
+        if (WEXITSTATUS(status) == EXIT_SUCCESS) {
+            return Trim(stdout_content);
+        } else {
+            return Error() << "exited with status " << WEXITSTATUS(status);
+        }
+    } else if (WIFSIGNALED(status)) {
+        return Error() << "killed by signal " << WTERMSIG(status);
+    }
+
+    return Error() << "unexpected exit status " << status;
+}
diff --git a/libmodprobe/include/exthandler/exthandler.h b/libmodprobe/include/exthandler/exthandler.h
new file mode 100644
index 0000000..232aa95
--- /dev/null
+++ b/libmodprobe/include/exthandler/exthandler.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+#include <android-base/result.h>
+#include <string>
+
+android::base::Result<std::string> RunExternalHandler(
+        const std::string& handler, uid_t uid, gid_t gid,
+        std::unordered_map<std::string, std::string>& envs_map);
diff --git a/libmodprobe/include/modprobe/modprobe.h b/libmodprobe/include/modprobe/modprobe.h
index d7a90c4..7b691b1 100644
--- a/libmodprobe/include/modprobe/modprobe.h
+++ b/libmodprobe/include/modprobe/modprobe.h
@@ -59,6 +59,7 @@
     bool ParseSoftdepCallback(const std::vector<std::string>& args);
     bool ParseLoadCallback(const std::vector<std::string>& args);
     bool ParseOptionsCallback(const std::vector<std::string>& args);
+    bool ParseDynOptionsCallback(const std::vector<std::string>& args);
     bool ParseBlocklistCallback(const std::vector<std::string>& args);
     void ParseKernelCmdlineOptions();
     void ParseCfg(const std::string& cfg, std::function<bool(const std::vector<std::string>&)> f);
diff --git a/libmodprobe/libmodprobe.cpp b/libmodprobe/libmodprobe.cpp
index 1a40da1..bdd114c 100644
--- a/libmodprobe/libmodprobe.cpp
+++ b/libmodprobe/libmodprobe.cpp
@@ -17,8 +17,11 @@
 #include <modprobe/modprobe.h>
 
 #include <fnmatch.h>
+#include <grp.h>
+#include <pwd.h>
 #include <sys/stat.h>
 #include <sys/syscall.h>
+#include <sys/wait.h>
 
 #include <algorithm>
 #include <map>
@@ -30,9 +33,12 @@
 #include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
+#include <android-base/parseint.h>
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
 
+#include "exthandler/exthandler.h"
+
 std::string Modprobe::MakeCanonical(const std::string& module_path) {
     auto start = module_path.find_last_of('/');
     if (start == std::string::npos) {
@@ -164,6 +170,10 @@
     auto it = args.begin();
     const std::string& type = *it++;
 
+    if (type == "dyn_options") {
+        return ParseDynOptionsCallback(std::vector<std::string>(it, args.end()));
+    }
+
     if (type != "options") {
         LOG(ERROR) << "non-options line encountered in modules.options";
         return false;
@@ -197,6 +207,57 @@
     return true;
 }
 
+bool Modprobe::ParseDynOptionsCallback(const std::vector<std::string>& args) {
+    auto it = args.begin();
+    int arg_size = 3;
+
+    if (args.size() < arg_size) {
+        LOG(ERROR) << "dyn_options lines in modules.options must have at least" << arg_size
+                   << " entries, not " << args.size();
+        return false;
+    }
+
+    const std::string& module = *it++;
+
+    const std::string& canonical_name = MakeCanonical(module);
+    if (canonical_name.empty()) {
+        return false;
+    }
+
+    const std::string& pwnam = *it++;
+    passwd* pwd = getpwnam(pwnam.c_str());
+    if (!pwd) {
+        LOG(ERROR) << "invalid handler uid'" << pwnam << "'";
+        return false;
+    }
+
+    std::string handler_with_args =
+            android::base::Join(std::vector<std::string>(it, args.end()), ' ');
+    handler_with_args.erase(std::remove(handler_with_args.begin(), handler_with_args.end(), '\"'),
+                            handler_with_args.end());
+
+    LOG(DEBUG) << "Launching external module options handler: '" << handler_with_args
+               << " for module: " << module;
+
+    // There is no need to set envs for external module options handler - pass
+    // empty map.
+    std::unordered_map<std::string, std::string> envs_map;
+    auto result = RunExternalHandler(handler_with_args, pwd->pw_uid, 0, envs_map);
+    if (!result.ok()) {
+        LOG(ERROR) << "External module handler failed: " << result.error();
+        return false;
+    }
+
+    LOG(INFO) << "Dynamic options for module: " << module << " are '" << *result << "'";
+
+    auto [unused, inserted] = this->module_options_.emplace(canonical_name, *result);
+    if (!inserted) {
+        LOG(ERROR) << "multiple options lines present for module " << module;
+        return false;
+    }
+    return true;
+}
+
 bool Modprobe::ParseBlocklistCallback(const std::vector<std::string>& args) {
     auto it = args.begin();
     const std::string& type = *it++;
@@ -447,7 +508,7 @@
 // Softdeps are taken care in InsmodWithDeps().
 bool Modprobe::LoadModulesParallel(int num_threads) {
     bool ret = true;
-    std::unordered_map<std::string, std::vector<std::string>> mod_with_deps;
+    std::map<std::string, std::vector<std::string>> mod_with_deps;
 
     // Get dependencies
     for (const auto& module : module_load_) {
diff --git a/libprocessgroup/Android.bp b/libprocessgroup/Android.bp
index 33e00bc..1e76e76 100644
--- a/libprocessgroup/Android.bp
+++ b/libprocessgroup/Android.bp
@@ -17,7 +17,7 @@
 
 libprocessgroup_flag_aware_cc_defaults {
     name: "libprocessgroup_build_flags_cc",
-    cpp_std: "gnu++20",
+    cpp_std: "gnu++23",
     soong_config_variables: {
         memcg_v2_force_enabled: {
             cflags: [
@@ -75,16 +75,15 @@
     double_loadable: true,
     shared_libs: [
         "libbase",
-        "libcgrouprc",
     ],
     static_libs: [
         "libjsoncpp",
+        "libprocessgroup_util",
     ],
     // for cutils/android_filesystem_config.h
     header_libs: [
         "libcutils_headers",
         "libprocessgroup_headers",
-        "libprocessgroup_util",
     ],
     export_include_dirs: ["include"],
     export_header_lib_headers: [
@@ -111,10 +110,10 @@
     ],
     shared_libs: [
         "libbase",
-        "libcgrouprc",
         "libprocessgroup",
     ],
     static_libs: [
         "libgmock",
+        "libprocessgroup_util",
     ],
 }
diff --git a/libprocessgroup/OWNERS b/libprocessgroup/OWNERS
index d5aa721..accd7df 100644
--- a/libprocessgroup/OWNERS
+++ b/libprocessgroup/OWNERS
@@ -1,4 +1,3 @@
 # Bug component: 1293033
 surenb@google.com
-tjmercier@google.com
-carlosgalo@google.com
+tjmercier@google.com
\ No newline at end of file
diff --git a/libprocessgroup/cgroup_map.cpp b/libprocessgroup/cgroup_map.cpp
index 52b5afe..32bef13 100644
--- a/libprocessgroup/cgroup_map.cpp
+++ b/libprocessgroup/cgroup_map.cpp
@@ -25,12 +25,10 @@
 #include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/stringprintf.h>
-#include <android-base/strings.h>
 #include <cgroup_map.h>
 #include <processgroup/processgroup.h>
 #include <processgroup/util.h>
 
-using android::base::StartsWith;
 using android::base::StringPrintf;
 using android::base::WriteStringToFile;
 
@@ -38,31 +36,31 @@
 static constexpr const char* CGROUP_TASKS_FILE = "/tasks";
 static constexpr const char* CGROUP_TASKS_FILE_V2 = "/cgroup.threads";
 
-uint32_t CgroupController::version() const {
+uint32_t CgroupControllerWrapper::version() const {
     CHECK(HasValue());
-    return ACgroupController_getVersion(controller_);
+    return controller_->version();
 }
 
-const char* CgroupController::name() const {
+const char* CgroupControllerWrapper::name() const {
     CHECK(HasValue());
-    return ACgroupController_getName(controller_);
+    return controller_->name();
 }
 
-const char* CgroupController::path() const {
+const char* CgroupControllerWrapper::path() const {
     CHECK(HasValue());
-    return ACgroupController_getPath(controller_);
+    return controller_->path();
 }
 
-bool CgroupController::HasValue() const {
+bool CgroupControllerWrapper::HasValue() const {
     return controller_ != nullptr;
 }
 
-bool CgroupController::IsUsable() {
+bool CgroupControllerWrapper::IsUsable() {
     if (!HasValue()) return false;
 
     if (state_ == UNKNOWN) {
         if (__builtin_available(android 30, *)) {
-            uint32_t flags = ACgroupController_getFlags(controller_);
+            uint32_t flags = controller_->flags();
             state_ = (flags & CGROUPRC_CONTROLLER_FLAG_MOUNTED) != 0 ? USABLE : MISSING;
         } else {
             state_ = access(GetProcsFilePath("", 0, 0).c_str(), F_OK) == 0 ? USABLE : MISSING;
@@ -72,7 +70,7 @@
     return state_ == USABLE;
 }
 
-std::string CgroupController::GetTasksFilePath(const std::string& rel_path) const {
+std::string CgroupControllerWrapper::GetTasksFilePath(const std::string& rel_path) const {
     std::string tasks_path = path();
 
     if (!rel_path.empty()) {
@@ -81,8 +79,8 @@
     return (version() == 1) ? tasks_path + CGROUP_TASKS_FILE : tasks_path + CGROUP_TASKS_FILE_V2;
 }
 
-std::string CgroupController::GetProcsFilePath(const std::string& rel_path, uid_t uid,
-                                               pid_t pid) const {
+std::string CgroupControllerWrapper::GetProcsFilePath(const std::string& rel_path, uid_t uid,
+                                                      pid_t pid) const {
     std::string proc_path(path());
     proc_path.append("/").append(rel_path);
     proc_path = regex_replace(proc_path, std::regex("<uid>"), std::to_string(uid));
@@ -91,7 +89,7 @@
     return proc_path.append(CGROUP_PROCS_FILE);
 }
 
-bool CgroupController::GetTaskGroup(pid_t tid, std::string* group) const {
+bool CgroupControllerWrapper::GetTaskGroup(pid_t tid, std::string* group) const {
     std::string file_name = StringPrintf("/proc/%d/cgroup", tid);
     std::string content;
     if (!android::base::ReadFileToString(file_name, &content)) {
@@ -129,8 +127,8 @@
 }
 
 CgroupMap::CgroupMap() {
-    if (!LoadRcFile()) {
-        LOG(ERROR) << "CgroupMap::LoadRcFile called for [" << getpid() << "] failed";
+    if (!LoadDescriptors()) {
+        LOG(ERROR) << "CgroupMap::LoadDescriptors called for [" << getpid() << "] failed";
     }
 }
 
@@ -141,9 +139,9 @@
     return *instance;
 }
 
-bool CgroupMap::LoadRcFile() {
+bool CgroupMap::LoadDescriptors() {
     if (!loaded_) {
-        loaded_ = (ACgroupFile_getVersion() != 0);
+        loaded_ = ReadDescriptors(&descriptors_);
     }
     return loaded_;
 }
@@ -151,92 +149,51 @@
 void CgroupMap::Print() const {
     if (!loaded_) {
         LOG(ERROR) << "CgroupMap::Print called for [" << getpid()
-                   << "] failed, RC file was not initialized properly";
+                   << "] failed, cgroups were not initialized properly";
         return;
     }
-    LOG(INFO) << "File version = " << ACgroupFile_getVersion();
-    LOG(INFO) << "File controller count = " << ACgroupFile_getControllerCount();
+    LOG(INFO) << "Controller count = " << descriptors_.size();
 
     LOG(INFO) << "Mounted cgroups:";
 
-    auto controller_count = ACgroupFile_getControllerCount();
-    for (uint32_t i = 0; i < controller_count; ++i) {
-        const ACgroupController* controller = ACgroupFile_getController(i);
-        if (__builtin_available(android 30, *)) {
-            LOG(INFO) << "\t" << ACgroupController_getName(controller) << " ver "
-                      << ACgroupController_getVersion(controller) << " path "
-                      << ACgroupController_getPath(controller) << " flags "
-                      << ACgroupController_getFlags(controller);
-        } else {
-            LOG(INFO) << "\t" << ACgroupController_getName(controller) << " ver "
-                      << ACgroupController_getVersion(controller) << " path "
-                      << ACgroupController_getPath(controller);
-        }
+    for (const auto& [name, descriptor] : descriptors_) {
+        LOG(INFO) << "\t" << descriptor.controller()->name() << " ver "
+                  << descriptor.controller()->version() << " path "
+                  << descriptor.controller()->path() << " flags "
+                  << descriptor.controller()->flags();
     }
 }
 
-CgroupController CgroupMap::FindController(const std::string& name) const {
+CgroupControllerWrapper CgroupMap::FindController(const std::string& name) const {
     if (!loaded_) {
         LOG(ERROR) << "CgroupMap::FindController called for [" << getpid()
-                   << "] failed, RC file was not initialized properly";
-        return CgroupController(nullptr);
+                   << "] failed, cgroups were not initialized properly";
+        return CgroupControllerWrapper(nullptr);
     }
 
-    auto controller_count = ACgroupFile_getControllerCount();
-    for (uint32_t i = 0; i < controller_count; ++i) {
-        const ACgroupController* controller = ACgroupFile_getController(i);
-        if (name == ACgroupController_getName(controller)) {
-            return CgroupController(controller);
-        }
+    if (const auto it = descriptors_.find(name); it != descriptors_.end()) {
+        return CgroupControllerWrapper(it->second.controller());
     }
 
-    return CgroupController(nullptr);
+    return CgroupControllerWrapper(nullptr);
 }
 
-CgroupController CgroupMap::FindControllerByPath(const std::string& path) const {
+CgroupControllerWrapper CgroupMap::FindControllerByPath(const std::string& path) const {
     if (!loaded_) {
         LOG(ERROR) << "CgroupMap::FindControllerByPath called for [" << getpid()
-                   << "] failed, RC file was not initialized properly";
-        return CgroupController(nullptr);
+                   << "] failed, cgroups were not initialized properly";
+        return CgroupControllerWrapper(nullptr);
     }
 
-    auto controller_count = ACgroupFile_getControllerCount();
-    for (uint32_t i = 0; i < controller_count; ++i) {
-        const ACgroupController* controller = ACgroupFile_getController(i);
-        if (StartsWith(path, ACgroupController_getPath(controller))) {
-            return CgroupController(controller);
+    for (const auto& [name, descriptor] : descriptors_) {
+        if (path.starts_with(descriptor.controller()->path())) {
+            return CgroupControllerWrapper(descriptor.controller());
         }
     }
 
-    return CgroupController(nullptr);
+    return CgroupControllerWrapper(nullptr);
 }
 
-int CgroupMap::ActivateControllers(const std::string& path) const {
-    if (__builtin_available(android 30, *)) {
-        auto controller_count = ACgroupFile_getControllerCount();
-        for (uint32_t i = 0; i < controller_count; ++i) {
-            const ACgroupController* controller = ACgroupFile_getController(i);
-            const uint32_t flags = ACgroupController_getFlags(controller);
-            uint32_t max_activation_depth = UINT32_MAX;
-            if (__builtin_available(android 36, *)) {
-                max_activation_depth = ACgroupController_getMaxActivationDepth(controller);
-            }
-            const int depth = util::GetCgroupDepth(ACgroupController_getPath(controller), path);
-
-            if (flags & CGROUPRC_CONTROLLER_FLAG_NEEDS_ACTIVATION && depth < max_activation_depth) {
-                std::string str("+");
-                str.append(ACgroupController_getName(controller));
-                if (!WriteStringToFile(str, path + "/cgroup.subtree_control")) {
-                    if (flags & CGROUPRC_CONTROLLER_FLAG_OPTIONAL) {
-                        PLOG(WARNING) << "Activation of cgroup controller " << str
-                                      << " failed in path " << path;
-                    } else {
-                        return -errno;
-                    }
-                }
-            }
-        }
-        return 0;
-    }
-    return -ENOSYS;
+bool CgroupMap::ActivateControllers(const std::string& path) const {
+    return ::ActivateControllers(path, descriptors_);
 }
diff --git a/libprocessgroup/cgroup_map.h b/libprocessgroup/cgroup_map.h
index 31925d5..fb99076 100644
--- a/libprocessgroup/cgroup_map.h
+++ b/libprocessgroup/cgroup_map.h
@@ -18,15 +18,17 @@
 
 #include <sys/types.h>
 
+#include <cstdint>
 #include <string>
 
-#include <android/cgrouprc.h>
+#include <processgroup/cgroup_controller.h>
+#include <processgroup/util.h>
 
-// Convenient wrapper of an ACgroupController pointer.
-class CgroupController {
+// Convenient wrapper of a CgroupController pointer.
+class CgroupControllerWrapper {
   public:
     // Does not own controller
-    explicit CgroupController(const ACgroupController* controller)
+    explicit CgroupControllerWrapper(const CgroupController* controller)
         : controller_(controller) {}
 
     uint32_t version() const;
@@ -47,23 +49,21 @@
         MISSING = 2,
     };
 
-    const ACgroupController* controller_ = nullptr;
+    const CgroupController* controller_ = nullptr; // CgroupMap owns the object behind this pointer
     ControllerState state_ = ControllerState::UNKNOWN;
 };
 
 class CgroupMap {
   public:
-    // Selinux policy ensures only init process can successfully use this function
-    static bool SetupCgroups();
-
     static CgroupMap& GetInstance();
-    CgroupController FindController(const std::string& name) const;
-    CgroupController FindControllerByPath(const std::string& path) const;
-    int ActivateControllers(const std::string& path) const;
+    CgroupControllerWrapper FindController(const std::string& name) const;
+    CgroupControllerWrapper FindControllerByPath(const std::string& path) const;
+    bool ActivateControllers(const std::string& path) const;
 
   private:
     bool loaded_ = false;
+    CgroupDescriptorMap descriptors_;
     CgroupMap();
-    bool LoadRcFile();
+    bool LoadDescriptors();
     void Print() const;
 };
diff --git a/libprocessgroup/cgrouprc/Android.bp b/libprocessgroup/cgrouprc/Android.bp
index 7522cfe..38b2fa3 100644
--- a/libprocessgroup/cgrouprc/Android.bp
+++ b/libprocessgroup/cgrouprc/Android.bp
@@ -32,8 +32,8 @@
         symbol_file: "libcgrouprc.map.txt",
     },
     srcs: [
-        "cgroup_controller.cpp",
-        "cgroup_file.cpp",
+        "a_cgroup_controller.cpp",
+        "a_cgroup_file.cpp",
     ],
     cflags: [
         "-Wall",
@@ -49,7 +49,8 @@
         "libbase",
     ],
     static_libs: [
-        "libcgrouprc_format",
+        "libjsoncpp",
+        "libprocessgroup_util",
     ],
     stubs: {
         symbol_file: "libcgrouprc.map.txt",
diff --git a/libprocessgroup/cgrouprc/cgroup_controller.cpp b/libprocessgroup/cgrouprc/a_cgroup_controller.cpp
similarity index 89%
rename from libprocessgroup/cgrouprc/cgroup_controller.cpp
rename to libprocessgroup/cgrouprc/a_cgroup_controller.cpp
index 889b3be..5a326e5 100644
--- a/libprocessgroup/cgrouprc/cgroup_controller.cpp
+++ b/libprocessgroup/cgrouprc/a_cgroup_controller.cpp
@@ -32,11 +32,6 @@
     return controller->flags();
 }
 
-uint32_t ACgroupController_getMaxActivationDepth(const ACgroupController* controller) {
-    CHECK(controller != nullptr);
-    return controller->max_activation_depth();
-}
-
 const char* ACgroupController_getName(const ACgroupController* controller) {
     CHECK(controller != nullptr);
     return controller->name();
diff --git a/libprocessgroup/cgrouprc/a_cgroup_file.cpp b/libprocessgroup/cgrouprc/a_cgroup_file.cpp
new file mode 100644
index 0000000..33c8376
--- /dev/null
+++ b/libprocessgroup/cgrouprc/a_cgroup_file.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iterator>
+
+#include <android-base/logging.h>
+#include <android/cgrouprc.h>
+#include <processgroup/util.h>
+
+#include "cgrouprc_internal.h"
+
+static CgroupDescriptorMap* LoadDescriptors() {
+    CgroupDescriptorMap* descriptors = new CgroupDescriptorMap;
+    if (!ReadDescriptors(descriptors)) {
+        LOG(ERROR) << "Failed to load cgroup description file";
+        return nullptr;
+    }
+    return descriptors;
+}
+
+static const CgroupDescriptorMap* GetInstance() {
+    // Deliberately leak this object (not munmap) to avoid a race between destruction on
+    // process exit and concurrent access from another thread.
+    static const CgroupDescriptorMap* descriptors = LoadDescriptors();
+    return descriptors;
+}
+
+uint32_t ACgroupFile_getVersion() {
+    static constexpr uint32_t FILE_VERSION_1 = 1;
+    auto descriptors = GetInstance();
+    if (descriptors == nullptr) return 0;
+    // There has only ever been one version, and there will be no more since cgroup.rc is no more
+    return FILE_VERSION_1;
+}
+
+uint32_t ACgroupFile_getControllerCount() {
+    auto descriptors = GetInstance();
+    if (descriptors == nullptr) return 0;
+    return descriptors->size();
+}
+
+const ACgroupController* ACgroupFile_getController(uint32_t index) {
+    auto descriptors = GetInstance();
+    if (descriptors == nullptr) return nullptr;
+    CHECK(index < descriptors->size());
+    // Although the object is not actually an ACgroupController object, all ACgroupController_*
+    // functions implicitly convert ACgroupController* back to CgroupController* before invoking
+    // member functions.
+    const CgroupController* p = std::next(descriptors->begin(), index)->second.controller();
+    return static_cast<const ACgroupController*>(p);
+}
diff --git a/libprocessgroup/cgrouprc/cgroup_file.cpp b/libprocessgroup/cgrouprc/cgroup_file.cpp
deleted file mode 100644
index e26d841..0000000
--- a/libprocessgroup/cgrouprc/cgroup_file.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/mman.h>
-#include <sys/stat.h>
-
-#include <memory>
-
-#include <android-base/logging.h>
-#include <android-base/stringprintf.h>
-#include <android-base/unique_fd.h>
-#include <android/cgrouprc.h>
-#include <processgroup/processgroup.h>
-
-#include "cgrouprc_internal.h"
-
-using android::base::StringPrintf;
-using android::base::unique_fd;
-
-using android::cgrouprc::format::CgroupController;
-using android::cgrouprc::format::CgroupFile;
-
-static CgroupFile* LoadRcFile() {
-    struct stat sb;
-
-    unique_fd fd(TEMP_FAILURE_RETRY(open(CGROUPS_RC_PATH, O_RDONLY | O_CLOEXEC)));
-    if (fd < 0) {
-        PLOG(ERROR) << "open() failed for " << CGROUPS_RC_PATH;
-        return nullptr;
-    }
-
-    if (fstat(fd, &sb) < 0) {
-        PLOG(ERROR) << "fstat() failed for " << CGROUPS_RC_PATH;
-        return nullptr;
-    }
-
-    size_t file_size = sb.st_size;
-    if (file_size < sizeof(CgroupFile)) {
-        LOG(ERROR) << "Invalid file format " << CGROUPS_RC_PATH;
-        return nullptr;
-    }
-
-    CgroupFile* file_data = (CgroupFile*)mmap(nullptr, file_size, PROT_READ, MAP_SHARED, fd, 0);
-    if (file_data == MAP_FAILED) {
-        PLOG(ERROR) << "Failed to mmap " << CGROUPS_RC_PATH;
-        return nullptr;
-    }
-
-    if (file_data->version_ != CgroupFile::FILE_CURR_VERSION) {
-        LOG(ERROR) << CGROUPS_RC_PATH << " file version mismatch";
-        munmap(file_data, file_size);
-        return nullptr;
-    }
-
-    auto expected = sizeof(CgroupFile) + file_data->controller_count_ * sizeof(CgroupController);
-    if (file_size != expected) {
-        LOG(ERROR) << CGROUPS_RC_PATH << " file has invalid size, expected " << expected
-                   << ", actual " << file_size;
-        munmap(file_data, file_size);
-        return nullptr;
-    }
-
-    return file_data;
-}
-
-static CgroupFile* GetInstance() {
-    // Deliberately leak this object (not munmap) to avoid a race between destruction on
-    // process exit and concurrent access from another thread.
-    static auto* file = LoadRcFile();
-    return file;
-}
-
-uint32_t ACgroupFile_getVersion() {
-    auto file = GetInstance();
-    if (file == nullptr) return 0;
-    return file->version_;
-}
-
-uint32_t ACgroupFile_getControllerCount() {
-    auto file = GetInstance();
-    if (file == nullptr) return 0;
-    return file->controller_count_;
-}
-
-const ACgroupController* ACgroupFile_getController(uint32_t index) {
-    auto file = GetInstance();
-    if (file == nullptr) return nullptr;
-    CHECK(index < file->controller_count_);
-    // Although the object is not actually an ACgroupController object, all ACgroupController_*
-    // functions implicitly convert ACgroupController* back to CgroupController* before invoking
-    // member functions.
-    return static_cast<ACgroupController*>(&file->controllers_[index]);
-}
diff --git a/libprocessgroup/cgrouprc/cgrouprc_internal.h b/libprocessgroup/cgrouprc/cgrouprc_internal.h
index cd02f03..d517703 100644
--- a/libprocessgroup/cgrouprc/cgrouprc_internal.h
+++ b/libprocessgroup/cgrouprc/cgrouprc_internal.h
@@ -16,9 +16,6 @@
 
 #pragma once
 
-#include <android/cgrouprc.h>
+#include <processgroup/cgroup_controller.h>
 
-#include <processgroup/format/cgroup_controller.h>
-#include <processgroup/format/cgroup_file.h>
-
-struct ACgroupController : android::cgrouprc::format::CgroupController {};
+struct ACgroupController : CgroupController {};
diff --git a/libprocessgroup/cgrouprc/include/android/cgrouprc.h b/libprocessgroup/cgrouprc/include/android/cgrouprc.h
index 3a57df5..e704a36 100644
--- a/libprocessgroup/cgrouprc/include/android/cgrouprc.h
+++ b/libprocessgroup/cgrouprc/include/android/cgrouprc.h
@@ -79,14 +79,6 @@
         const ACgroupController*) __INTRODUCED_IN(30);
 
 /**
- * Returns the maximum activation depth of the given controller.
- * Only applicable to cgroup v2 controllers.
- * Returns UINT32_MAX if no maximum activation depth is set.
- */
-__attribute__((warn_unused_result, weak)) uint32_t ACgroupController_getMaxActivationDepth(
-        const ACgroupController* controller) __INTRODUCED_IN(36);
-
-/**
  * Returns the name of the given controller.
  * If the given controller is null, return nullptr.
  */
diff --git a/libprocessgroup/cgrouprc/libcgrouprc.map.txt b/libprocessgroup/cgrouprc/libcgrouprc.map.txt
index 30bd25f..b62b10f 100644
--- a/libprocessgroup/cgrouprc/libcgrouprc.map.txt
+++ b/libprocessgroup/cgrouprc/libcgrouprc.map.txt
@@ -16,10 +16,3 @@
   local:
     *;
 };
-
-LIBCGROUPRC_36 { # introduced=36
-  global:
-    ACgroupController_getMaxActivationDepth; # llndk=202504 systemapi
-  local:
-    *;
-};
diff --git a/libprocessgroup/cgrouprc_format/Android.bp b/libprocessgroup/cgrouprc_format/Android.bp
deleted file mode 100644
index 0590924..0000000
--- a/libprocessgroup/cgrouprc_format/Android.bp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2019 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-cc_library_static {
-    name: "libcgrouprc_format",
-    host_supported: true,
-    ramdisk_available: true,
-    vendor_ramdisk_available: true,
-    recovery_available: true,
-    native_bridge_supported: true,
-    srcs: [
-        "cgroup_controller.cpp",
-    ],
-    cflags: [
-        "-Wall",
-        "-Werror",
-    ],
-    export_include_dirs: [
-        "include",
-    ],
-    shared_libs: [
-        "libbase",
-    ],
-}
diff --git a/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_file.h b/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_file.h
deleted file mode 100644
index 2d9786f..0000000
--- a/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_file.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include <cstdint>
-
-#include <processgroup/format/cgroup_controller.h>
-
-namespace android {
-namespace cgrouprc {
-namespace format {
-
-struct CgroupFile {
-    uint32_t version_;
-    uint32_t controller_count_;
-    CgroupController controllers_[];
-
-    static constexpr uint32_t FILE_VERSION_1 = 1;
-    static constexpr uint32_t FILE_CURR_VERSION = FILE_VERSION_1;
-};
-
-}  // namespace format
-}  // namespace cgrouprc
-}  // namespace android
diff --git a/libprocessgroup/include/processgroup/processgroup.h b/libprocessgroup/include/processgroup/processgroup.h
index ffffeb4..6a026a7 100644
--- a/libprocessgroup/include/processgroup/processgroup.h
+++ b/libprocessgroup/include/processgroup/processgroup.h
@@ -16,7 +16,6 @@
 
 #pragma once
 
-#include <sys/cdefs.h>
 #include <sys/types.h>
 #include <initializer_list>
 #include <span>
@@ -24,10 +23,7 @@
 #include <string_view>
 #include <vector>
 
-__BEGIN_DECLS
-
-static constexpr const char* CGROUPV2_HIERARCHY_NAME = "cgroup2";
-[[deprecated]] static constexpr const char* CGROUPV2_CONTROLLER_NAME = "cgroup2";
+static constexpr std::string CGROUPV2_HIERARCHY_NAME = "cgroup2";
 
 bool CgroupsAvailable();
 bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path);
@@ -40,8 +36,6 @@
 bool SetProcessProfiles(uid_t uid, pid_t pid, const std::vector<std::string>& profiles);
 bool SetUserProfiles(uid_t uid, const std::vector<std::string>& profiles);
 
-__END_DECLS
-
 bool SetTaskProfiles(pid_t tid, std::initializer_list<std::string_view> profiles,
                      bool use_fd_cache = false);
 bool SetProcessProfiles(uid_t uid, pid_t pid, std::initializer_list<std::string_view> profiles);
@@ -51,14 +45,11 @@
 bool SetProcessProfiles(uid_t uid, pid_t pid, std::span<const std::string_view> profiles);
 #endif
 
-__BEGIN_DECLS
 
 #ifndef __ANDROID_VNDK__
 
 bool SetProcessProfilesCached(uid_t uid, pid_t pid, const std::vector<std::string>& profiles);
 
-static constexpr const char* CGROUPS_RC_PATH = "/dev/cgroup_info/cgroup.rc";
-
 bool UsePerAppMemcg();
 
 // Drop the fd cache of cgroup path. It is used for when resource caching is enabled and a process
@@ -99,5 +90,3 @@
 bool isProfileValidForProcess(const std::string& profile_name, uid_t uid, pid_t pid);
 
 #endif // __ANDROID_VNDK__
-
-__END_DECLS
diff --git a/libprocessgroup/include/processgroup/sched_policy.h b/libprocessgroup/include/processgroup/sched_policy.h
index a18847e..92cd367 100644
--- a/libprocessgroup/include/processgroup/sched_policy.h
+++ b/libprocessgroup/include/processgroup/sched_policy.h
@@ -29,14 +29,6 @@
  */
 extern bool cpusets_enabled();
 
-/*
- * Check if Linux kernel enables SCHEDTUNE feature (only available in Android
- * common kernel or Linaro LSK, not in mainline Linux as of v4.9)
- *
- * Return value: 1 if Linux kernel CONFIG_CGROUP_SCHEDTUNE=y; 0 otherwise.
- */
-extern bool schedboost_enabled();
-
 /* Keep in sync with THREAD_GROUP_* in frameworks/base/core/java/android/os/Process.java */
 typedef enum {
     SP_DEFAULT = -1,
@@ -48,6 +40,7 @@
     SP_TOP_APP = 5,
     SP_RT_APP = 6,
     SP_RESTRICTED = 7,
+    SP_FOREGROUND_WINDOW = 8,
     SP_CNT,
     SP_MAX = SP_CNT - 1,
     SP_SYSTEM_DEFAULT = SP_FOREGROUND,
diff --git a/libprocessgroup/internal.h b/libprocessgroup/internal.h
new file mode 100644
index 0000000..ef85579
--- /dev/null
+++ b/libprocessgroup/internal.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <string>
+
+static const std::string CGROUP_V2_ROOT_DEFAULT = "/sys/fs/cgroup";
\ No newline at end of file
diff --git a/libprocessgroup/processgroup.cpp b/libprocessgroup/processgroup.cpp
index 387c104..9522159 100644
--- a/libprocessgroup/processgroup.cpp
+++ b/libprocessgroup/processgroup.cpp
@@ -37,19 +37,18 @@
 #include <mutex>
 #include <set>
 #include <string>
+#include <string_view>
 #include <thread>
 
 #include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/properties.h>
 #include <android-base/stringprintf.h>
-#include <android-base/strings.h>
 #include <cutils/android_filesystem_config.h>
 #include <processgroup/processgroup.h>
 #include <task_profiles.h>
 
 using android::base::GetBoolProperty;
-using android::base::StartsWith;
 using android::base::StringPrintf;
 using android::base::WriteStringToFile;
 
@@ -94,7 +93,7 @@
 }
 
 static bool CgroupGetMemcgAppsPath(std::string* path) {
-    CgroupController controller = CgroupMap::GetInstance().FindController("memory");
+    CgroupControllerWrapper controller = CgroupMap::GetInstance().FindController("memory");
 
     if (!controller.HasValue()) {
         return false;
@@ -255,7 +254,7 @@
                 continue;
             }
 
-            if (!StartsWith(dir->d_name, "pid_")) {
+            if (!std::string_view(dir->d_name).starts_with("pid_")) {
                 continue;
             }
 
@@ -296,7 +295,7 @@
                     continue;
                 }
 
-                if (!StartsWith(dir->d_name, "uid_")) {
+                if (!std::string_view(dir->d_name).starts_with("uid_")) {
                     continue;
                 }
 
@@ -662,10 +661,9 @@
         return -errno;
     }
     if (activate_controllers) {
-        ret = CgroupMap::GetInstance().ActivateControllers(uid_path);
-        if (ret) {
-            LOG(ERROR) << "Failed to activate controllers in " << uid_path;
-            return ret;
+        if (!CgroupMap::GetInstance().ActivateControllers(uid_path)) {
+            PLOG(ERROR) << "Failed to activate controllers in " << uid_path;
+            return -errno;
         }
     }
 
diff --git a/libprocessgroup/profiles/Android.bp b/libprocessgroup/profiles/Android.bp
index 885971a..baa4546 100644
--- a/libprocessgroup/profiles/Android.bp
+++ b/libprocessgroup/profiles/Android.bp
@@ -13,17 +13,13 @@
 // limitations under the License.
 
 package {
+    default_team: "trendy_team_android_kernel",
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
 prebuilt_etc {
     name: "cgroups.json",
     src: "cgroups.json",
-    required: [
-        "cgroups_28.json",
-        "cgroups_29.json",
-        "cgroups_30.json",
-    ],
 }
 
 prebuilt_etc {
@@ -34,49 +30,8 @@
 }
 
 prebuilt_etc {
-    name: "cgroups_28.json",
-    src: "cgroups_28.json",
-    sub_dir: "task_profiles",
-}
-
-prebuilt_etc {
-    name: "cgroups_29.json",
-    src: "cgroups_29.json",
-    sub_dir: "task_profiles",
-}
-
-prebuilt_etc {
-    name: "cgroups_30.json",
-    src: "cgroups_30.json",
-    sub_dir: "task_profiles",
-}
-
-prebuilt_etc {
     name: "task_profiles.json",
     src: "task_profiles.json",
-    required: [
-        "task_profiles_28.json",
-        "task_profiles_29.json",
-        "task_profiles_30.json",
-    ],
-}
-
-prebuilt_etc {
-    name: "task_profiles_28.json",
-    src: "task_profiles_28.json",
-    sub_dir: "task_profiles",
-}
-
-prebuilt_etc {
-    name: "task_profiles_29.json",
-    src: "task_profiles_29.json",
-    sub_dir: "task_profiles",
-}
-
-prebuilt_etc {
-    name: "task_profiles_30.json",
-    src: "task_profiles_30.json",
-    sub_dir: "task_profiles",
 }
 
 cc_defaults {
diff --git a/libprocessgroup/profiles/cgroups_28.json b/libprocessgroup/profiles/cgroups_28.json
deleted file mode 100644
index 17d4929..0000000
--- a/libprocessgroup/profiles/cgroups_28.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "Cgroups": [
-    {
-      "Controller": "schedtune",
-      "Path": "/dev/stune",
-      "Mode": "0755",
-      "UID": "system",
-      "GID": "system"
-    }
-  ]
-}
diff --git a/libprocessgroup/profiles/cgroups_29.json b/libprocessgroup/profiles/cgroups_29.json
deleted file mode 100644
index 17d4929..0000000
--- a/libprocessgroup/profiles/cgroups_29.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "Cgroups": [
-    {
-      "Controller": "schedtune",
-      "Path": "/dev/stune",
-      "Mode": "0755",
-      "UID": "system",
-      "GID": "system"
-    }
-  ]
-}
diff --git a/libprocessgroup/profiles/cgroups_30.json b/libprocessgroup/profiles/cgroups_30.json
deleted file mode 100644
index 80a074b..0000000
--- a/libprocessgroup/profiles/cgroups_30.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "Cgroups": [
-    {
-      "Controller": "schedtune",
-      "Path": "/dev/stune",
-      "Mode": "0755",
-      "UID": "system",
-      "GID": "system",
-      "Optional": true
-    }
-  ]
-}
diff --git a/libprocessgroup/profiles/task_profiles.json b/libprocessgroup/profiles/task_profiles.json
index 1fc66ba..28902ef 100644
--- a/libprocessgroup/profiles/task_profiles.json
+++ b/libprocessgroup/profiles/task_profiles.json
@@ -11,6 +11,11 @@
       "File": "foreground/cpus"
     },
     {
+      "Name": "HighCapacityWICPUs",
+      "Controller": "cpuset",
+      "File": "foreground_window/cpus"
+    },
+    {
       "Name": "MaxCapacityCPUs",
       "Controller": "cpuset",
       "File": "top-app/cpus"
@@ -159,6 +164,19 @@
       ]
     },
     {
+      "Name": "HighPerformanceWI",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "foreground_window"
+          }
+        }
+      ]
+    },
+    {
       "Name": "MaxPerformance",
       "Actions": [
         {
@@ -185,6 +203,19 @@
       ]
     },
     {
+      "Name": "RealTimeInputScheduling",
+      "Actions": [
+        {
+          "Name": "SetSchedulerPolicy",
+          "Params":
+          {
+            "Policy": "SCHED_FIFO",
+            "Priority": "2"
+          }
+        }
+      ]
+    },
+    {
       "Name": "CameraServicePerformance",
       "Actions": [
         {
@@ -382,6 +413,19 @@
       ]
     },
     {
+      "Name": "ProcessCapacityHighWI",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpuset",
+            "Path": "foreground_window"
+          }
+        }
+      ]
+    },
+    {
       "Name": "ProcessCapacityMax",
       "Actions": [
         {
@@ -541,33 +585,6 @@
     },
 
     {
-      "Name": "PerfBoost",
-      "Actions": [
-        {
-          "Name": "SetClamps",
-          "Params":
-          {
-            "Boost": "50%",
-            "Clamp": "0"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "PerfClamp",
-      "Actions": [
-        {
-          "Name": "SetClamps",
-          "Params":
-          {
-            "Boost": "0",
-            "Clamp": "30%"
-          }
-        }
-      ]
-    },
-
-    {
       "Name": "LowMemoryUsage",
       "Actions": [
         {
@@ -639,6 +656,10 @@
       "Profiles": [ "HighPerformance", "HighIoPriority", "TimerSlackNormal" ]
     },
     {
+      "Name": "SCHED_SP_FOREGROUND_WINDOW",
+      "Profiles": [ "HighPerformanceWI", "HighIoPriority", "TimerSlackNormal" ]
+    },
+    {
       "Name": "SCHED_SP_TOP_APP",
       "Profiles": [ "MaxPerformance", "MaxIoPriority", "TimerSlackNormal" ]
     },
@@ -667,6 +688,10 @@
       "Profiles": [ "HighPerformance", "ProcessCapacityHigh", "HighIoPriority", "TimerSlackNormal" ]
     },
     {
+      "Name": "CPUSET_SP_FOREGROUND_WINDOW",
+      "Profiles": [ "HighPerformanceWI", "ProcessCapacityHighWI", "HighIoPriority", "TimerSlackNormal" ]
+    },
+    {
       "Name": "CPUSET_SP_TOP_APP",
       "Profiles": [ "MaxPerformance", "ProcessCapacityMax", "MaxIoPriority", "TimerSlackNormal" ]
     },
@@ -689,6 +714,10 @@
     {
       "Name": "OtaProfiles",
       "Profiles": [ "ServiceCapacityLow", "LowIoPriority", "HighEnergySaving" ]
+    },
+    {
+      "Name": "InputPolicy",
+      "Profiles": [ "RealTimeInputScheduling", "MaxPerformance", "ProcessCapacityMax", "TimerSlackNormal" ]
     }
   ]
 }
diff --git a/libprocessgroup/profiles/task_profiles_28.json b/libprocessgroup/profiles/task_profiles_28.json
deleted file mode 100644
index e7be548..0000000
--- a/libprocessgroup/profiles/task_profiles_28.json
+++ /dev/null
@@ -1,160 +0,0 @@
-{
-  "Attributes": [
-    {
-      "Name": "STuneBoost",
-      "Controller": "schedtune",
-      "File": "schedtune.boost"
-    },
-    {
-      "Name": "STunePreferIdle",
-      "Controller": "schedtune",
-      "File": "schedtune.prefer_idle"
-    }
-  ],
-
-  "Profiles": [
-    {
-      "Name": "HighEnergySaving",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "NormalPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": ""
-          }
-        }
-      ]
-    },
-    {
-      "Name": "ServicePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "HighPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "foreground"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "MaxPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "top-app"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "RealtimePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "rt"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CameraServicePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "camera-daemon"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "NNApiHALPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "nnapi-hal"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "Dex2oatPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CpuPolicySpread",
-      "Actions": [
-        {
-          "Name": "SetAttribute",
-          "Params":
-          {
-            "Name": "STunePreferIdle",
-            "Value": "1"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CpuPolicyPack",
-      "Actions": [
-        {
-          "Name": "SetAttribute",
-          "Params":
-          {
-            "Name": "STunePreferIdle",
-            "Value": "0"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/libprocessgroup/profiles/task_profiles_29.json b/libprocessgroup/profiles/task_profiles_29.json
deleted file mode 100644
index 6174c8d..0000000
--- a/libprocessgroup/profiles/task_profiles_29.json
+++ /dev/null
@@ -1,160 +0,0 @@
-{
-  "Attributes": [
-    {
-      "Name": "STuneBoost",
-      "Controller": "schedtune",
-      "File": "schedtune.boost"
-    },
-    {
-      "Name": "STunePreferIdle",
-      "Controller": "schedtune",
-      "File": "schedtune.prefer_idle"
-    }
-  ],
-
-  "Profiles": [
-    {
-      "Name": "HighEnergySaving",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "NormalPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": ""
-          }
-        }
-      ]
-    },
-    {
-      "Name": "HighPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "foreground"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "ServicePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "MaxPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "top-app"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "RealtimePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "rt"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CameraServicePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "camera-daemon"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "NNApiHALPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "nnapi-hal"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "Dex2oatPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CpuPolicySpread",
-      "Actions": [
-        {
-          "Name": "SetAttribute",
-          "Params":
-          {
-            "Name": "STunePreferIdle",
-            "Value": "1"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CpuPolicyPack",
-      "Actions": [
-        {
-          "Name": "SetAttribute",
-          "Params":
-          {
-            "Name": "STunePreferIdle",
-            "Value": "0"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/libprocessgroup/profiles/task_profiles_30.json b/libprocessgroup/profiles/task_profiles_30.json
deleted file mode 100644
index e7be548..0000000
--- a/libprocessgroup/profiles/task_profiles_30.json
+++ /dev/null
@@ -1,160 +0,0 @@
-{
-  "Attributes": [
-    {
-      "Name": "STuneBoost",
-      "Controller": "schedtune",
-      "File": "schedtune.boost"
-    },
-    {
-      "Name": "STunePreferIdle",
-      "Controller": "schedtune",
-      "File": "schedtune.prefer_idle"
-    }
-  ],
-
-  "Profiles": [
-    {
-      "Name": "HighEnergySaving",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "NormalPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": ""
-          }
-        }
-      ]
-    },
-    {
-      "Name": "ServicePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "HighPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "foreground"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "MaxPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "top-app"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "RealtimePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "rt"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CameraServicePerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "camera-daemon"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "NNApiHALPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "nnapi-hal"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "Dex2oatPerformance",
-      "Actions": [
-        {
-          "Name": "JoinCgroup",
-          "Params":
-          {
-            "Controller": "schedtune",
-            "Path": "background"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CpuPolicySpread",
-      "Actions": [
-        {
-          "Name": "SetAttribute",
-          "Params":
-          {
-            "Name": "STunePreferIdle",
-            "Value": "1"
-          }
-        }
-      ]
-    },
-    {
-      "Name": "CpuPolicyPack",
-      "Actions": [
-        {
-          "Name": "SetAttribute",
-          "Params":
-          {
-            "Name": "STunePreferIdle",
-            "Value": "0"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/libprocessgroup/sched_policy.cpp b/libprocessgroup/sched_policy.cpp
index 0f2640a..5a53c35 100644
--- a/libprocessgroup/sched_policy.cpp
+++ b/libprocessgroup/sched_policy.cpp
@@ -58,6 +58,8 @@
             return SetTaskProfiles(tid, {"CPUSET_SP_SYSTEM"}, true) ? 0 : -1;
         case SP_RESTRICTED:
             return SetTaskProfiles(tid, {"CPUSET_SP_RESTRICTED"}, true) ? 0 : -1;
+        case SP_FOREGROUND_WINDOW:
+            return SetTaskProfiles(tid, {"CPUSET_SP_FOREGROUND_WINDOW"}, true) ? 0 : -1;
         default:
             break;
     }
@@ -110,6 +112,9 @@
         case SP_RT_APP:
             SLOGD("RT  tid %d (%s)", tid, thread_name);
             break;
+        case SP_FOREGROUND_WINDOW:
+            SLOGD("WI  tid %d (%s)", tid, thread_name);
+            break;
         default:
             SLOGD("??? tid %d (%s)", tid, thread_name);
             break;
@@ -129,6 +134,8 @@
             return SetTaskProfiles(tid, {"SCHED_SP_SYSTEM"}, true) ? 0 : -1;
         case SP_RT_APP:
             return SetTaskProfiles(tid, {"SCHED_SP_RT_APP"}, true) ? 0 : -1;
+        case SP_FOREGROUND_WINDOW:
+            return SetTaskProfiles(tid, {"SCHED_SP_FOREGROUND_WINDOW"}, true) ? 0 : -1;
         default:
             return SetTaskProfiles(tid, {"SCHED_SP_DEFAULT"}, true) ? 0 : -1;
     }
@@ -141,20 +148,10 @@
     return enabled;
 }
 
-static bool schedtune_enabled() {
-    return (CgroupMap::GetInstance().FindController("schedtune").IsUsable());
-}
-
 static bool cpuctl_enabled() {
     return (CgroupMap::GetInstance().FindController("cpu").IsUsable());
 }
 
-bool schedboost_enabled() {
-    static bool enabled = schedtune_enabled() || cpuctl_enabled();
-
-    return enabled;
-}
-
 static int getCGroupSubsys(pid_t tid, const char* subsys, std::string& subgroup) {
     auto controller = CgroupMap::GetInstance().FindController(subsys);
 
@@ -179,6 +176,8 @@
         *policy = SP_TOP_APP;
     } else if (group == "restricted") {
         *policy = SP_RESTRICTED;
+    } else if (group == "foreground_window") {
+        *policy = SP_FOREGROUND_WINDOW;
     } else {
         errno = ERANGE;
         return -1;
@@ -192,9 +191,8 @@
     }
 
     std::string group;
-    if (schedboost_enabled()) {
-        if ((getCGroupSubsys(tid, "schedtune", group) < 0) &&
-            (getCGroupSubsys(tid, "cpu", group) < 0)) {
+    if (cpuctl_enabled()) {
+        if (getCGroupSubsys(tid, "cpu", group) < 0) {
             LOG(ERROR) << "Failed to find cpu cgroup for tid " << tid;
             return -1;
         }
@@ -235,7 +233,7 @@
     static const char* const kSchedPolicyNames[] = {
             [SP_BACKGROUND] = "bg", [SP_FOREGROUND] = "fg", [SP_SYSTEM] = "  ",
             [SP_AUDIO_APP] = "aa",  [SP_AUDIO_SYS] = "as",  [SP_TOP_APP] = "ta",
-            [SP_RT_APP] = "rt",     [SP_RESTRICTED] = "rs",
+            [SP_RT_APP] = "rt",     [SP_RESTRICTED] = "rs", [SP_FOREGROUND_WINDOW] = "wi",
     };
     static_assert(arraysize(kSchedPolicyNames) == SP_CNT, "missing name");
     if (policy < SP_BACKGROUND || policy >= SP_CNT) {
@@ -249,14 +247,16 @@
      *  cpuset profile array for:
      *  SP_DEFAULT(-1), SP_BACKGROUND(0), SP_FOREGROUND(1),
      *  SP_SYSTEM(2), SP_AUDIO_APP(3), SP_AUDIO_SYS(4),
-     *  SP_TOP_APP(5), SP_RT_APP(6), SP_RESTRICTED(7)
+     *  SP_TOP_APP(5), SP_RT_APP(6), SP_RESTRICTED(7),
+     *  SP_FOREGROUND_WINDOW(8)
      *  index is policy + 1
      *  this need keep in sync with SchedPolicy enum
      */
     static constexpr const char* kCpusetProfiles[SP_CNT + 1] = {
-            "CPUSET_SP_DEFAULT", "CPUSET_SP_BACKGROUND", "CPUSET_SP_FOREGROUND",
-            "CPUSET_SP_SYSTEM",  "CPUSET_SP_FOREGROUND", "CPUSET_SP_FOREGROUND",
-            "CPUSET_SP_TOP_APP", "CPUSET_SP_DEFAULT",    "CPUSET_SP_RESTRICTED"};
+            "CPUSET_SP_DEFAULT",      "CPUSET_SP_BACKGROUND", "CPUSET_SP_FOREGROUND",
+            "CPUSET_SP_SYSTEM",       "CPUSET_SP_FOREGROUND", "CPUSET_SP_FOREGROUND",
+            "CPUSET_SP_TOP_APP",      "CPUSET_SP_DEFAULT",    "CPUSET_SP_RESTRICTED",
+            "CPUSET_SP_FOREGROUND_WINDOW"};
     if (policy < SP_DEFAULT || policy >= SP_CNT) {
         return nullptr;
     }
@@ -268,14 +268,16 @@
      *  sched profile array for:
      *  SP_DEFAULT(-1), SP_BACKGROUND(0), SP_FOREGROUND(1),
      *  SP_SYSTEM(2), SP_AUDIO_APP(3), SP_AUDIO_SYS(4),
-     *  SP_TOP_APP(5), SP_RT_APP(6), SP_RESTRICTED(7)
+     *  SP_TOP_APP(5), SP_RT_APP(6), SP_RESTRICTED(7),
+     *  SP_FOREGROUND_WINDOW(8)
      *  index is policy + 1
      *  this need keep in sync with SchedPolicy enum
      */
     static constexpr const char* kSchedProfiles[SP_CNT + 1] = {
-            "SCHED_SP_DEFAULT", "SCHED_SP_BACKGROUND", "SCHED_SP_FOREGROUND",
-            "SCHED_SP_SYSTEM",  "SCHED_SP_FOREGROUND", "SCHED_SP_FOREGROUND",
-            "SCHED_SP_TOP_APP", "SCHED_SP_RT_APP",     "SCHED_SP_DEFAULT"};
+            "SCHED_SP_DEFAULT",      "SCHED_SP_BACKGROUND", "SCHED_SP_FOREGROUND",
+            "SCHED_SP_SYSTEM",       "SCHED_SP_FOREGROUND", "SCHED_SP_FOREGROUND",
+            "SCHED_SP_TOP_APP",      "SCHED_SP_RT_APP",     "SCHED_SP_DEFAULT",
+            "SCHED_SP_FOREGROUND_WINDOW"};
     if (policy < SP_DEFAULT || policy >= SP_CNT) {
         return nullptr;
     }
diff --git a/libprocessgroup/setup/Android.bp b/libprocessgroup/setup/Android.bp
index 76f0a11..25737f5 100644
--- a/libprocessgroup/setup/Android.bp
+++ b/libprocessgroup/setup/Android.bp
@@ -29,15 +29,13 @@
     ],
     shared_libs: [
         "libbase",
-        "libcgrouprc",
         "libjsoncpp",
     ],
     static_libs: [
-        "libcgrouprc_format",
+        "libprocessgroup_util",
     ],
     header_libs: [
         "libprocessgroup_headers",
-        "libprocessgroup_util",
     ],
     export_header_lib_headers: [
         "libprocessgroup_headers",
diff --git a/libprocessgroup/setup/cgroup_descriptor.h b/libprocessgroup/setup/cgroup_descriptor.h
index 06ce186..1afd2ee 100644
--- a/libprocessgroup/setup/cgroup_descriptor.h
+++ b/libprocessgroup/setup/cgroup_descriptor.h
@@ -21,10 +21,7 @@
 
 #include <sys/stat.h>
 
-#include <processgroup/format/cgroup_controller.h>
-
-namespace android {
-namespace cgrouprc {
+#include <processgroup/cgroup_controller.h>
 
 // Complete controller description for mounting cgroups
 class CgroupDescriptor {
@@ -33,7 +30,7 @@
                      mode_t mode, const std::string& uid, const std::string& gid, uint32_t flags,
                      uint32_t max_activation_depth);
 
-    const format::CgroupController* controller() const { return &controller_; }
+    const CgroupController* controller() const { return &controller_; }
     mode_t mode() const { return mode_; }
     std::string uid() const { return uid_; }
     std::string gid() const { return gid_; }
@@ -41,11 +38,8 @@
     void set_mounted(bool mounted);
 
   private:
-    format::CgroupController controller_;
+    CgroupController controller_;
     mode_t mode_ = 0;
     std::string uid_;
     std::string gid_;
 };
-
-}  // namespace cgrouprc
-}  // namespace android
diff --git a/libprocessgroup/setup/cgroup_map_write.cpp b/libprocessgroup/setup/cgroup_map_write.cpp
index bd41874..c4e1fb6 100644
--- a/libprocessgroup/setup/cgroup_map_write.cpp
+++ b/libprocessgroup/setup/cgroup_map_write.cpp
@@ -22,45 +22,28 @@
 #include <fcntl.h>
 #include <grp.h>
 #include <pwd.h>
-#include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
 #include <sys/types.h>
-#include <time.h>
 #include <unistd.h>
 
 #include <optional>
 
 #include <android-base/file.h>
 #include <android-base/logging.h>
-#include <android-base/properties.h>
-#include <android-base/stringprintf.h>
-#include <android-base/unique_fd.h>
-#include <android/cgrouprc.h>
-#include <json/reader.h>
-#include <json/value.h>
-#include <processgroup/format/cgroup_file.h>
+#include <processgroup/cgroup_descriptor.h>
 #include <processgroup/processgroup.h>
 #include <processgroup/setup.h>
 #include <processgroup/util.h>
 
 #include "../build_flags.h"
-#include "cgroup_descriptor.h"
-
-using android::base::GetUintProperty;
-using android::base::StringPrintf;
-using android::base::unique_fd;
-
-namespace android {
-namespace cgrouprc {
+#include "../internal.h"
 
 static constexpr const char* CGROUPS_DESC_FILE = "/etc/cgroups.json";
 static constexpr const char* CGROUPS_DESC_VENDOR_FILE = "/vendor/etc/cgroups.json";
 
 static constexpr const char* TEMPLATE_CGROUPS_DESC_API_FILE = "/etc/task_profiles/cgroups_%u.json";
 
-static const std::string CGROUP_V2_ROOT_DEFAULT = "/sys/fs/cgroup";
-
 static bool ChangeDirModeAndOwner(const std::string& path, mode_t mode, const std::string& uid,
                                   const std::string& gid, bool permissive_mode = false) {
     uid_t pw_uid = -1;
@@ -148,149 +131,15 @@
     return true;
 }
 
-static void MergeCgroupToDescriptors(std::map<std::string, CgroupDescriptor>* descriptors,
-                                     const Json::Value& cgroup, const std::string& name,
-                                     const std::string& root_path, int cgroups_version) {
-    const std::string cgroup_path = cgroup["Path"].asString();
-    std::string path;
-
-    if (!root_path.empty()) {
-        path = root_path;
-        if (cgroup_path != ".") {
-            path += "/";
-            path += cgroup_path;
-        }
-    } else {
-        path = cgroup_path;
-    }
-
-    uint32_t controller_flags = 0;
-
-    if (cgroup["NeedsActivation"].isBool() && cgroup["NeedsActivation"].asBool()) {
-        controller_flags |= CGROUPRC_CONTROLLER_FLAG_NEEDS_ACTIVATION;
-    }
-
-    if (cgroup["Optional"].isBool() && cgroup["Optional"].asBool()) {
-        controller_flags |= CGROUPRC_CONTROLLER_FLAG_OPTIONAL;
-    }
-
-    uint32_t max_activation_depth = UINT32_MAX;
-    if (cgroup.isMember("MaxActivationDepth")) {
-        max_activation_depth = cgroup["MaxActivationDepth"].asUInt();
-    }
-
-    CgroupDescriptor descriptor(
-            cgroups_version, name, path, std::strtoul(cgroup["Mode"].asString().c_str(), 0, 8),
-            cgroup["UID"].asString(), cgroup["GID"].asString(), controller_flags,
-            max_activation_depth);
-
-    auto iter = descriptors->find(name);
-    if (iter == descriptors->end()) {
-        descriptors->emplace(name, descriptor);
-    } else {
-        iter->second = descriptor;
-    }
-}
-
-static const bool force_memcg_v2 = android::libprocessgroup_flags::force_memcg_v2();
-
-static bool ReadDescriptorsFromFile(const std::string& file_name,
-                                    std::map<std::string, CgroupDescriptor>* descriptors) {
-    std::vector<CgroupDescriptor> result;
-    std::string json_doc;
-
-    if (!android::base::ReadFileToString(file_name, &json_doc)) {
-        PLOG(ERROR) << "Failed to read task profiles from " << file_name;
-        return false;
-    }
-
-    Json::CharReaderBuilder builder;
-    std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
-    Json::Value root;
-    std::string errorMessage;
-    if (!reader->parse(&*json_doc.begin(), &*json_doc.end(), &root, &errorMessage)) {
-        LOG(ERROR) << "Failed to parse cgroups description: " << errorMessage;
-        return false;
-    }
-
-    if (root.isMember("Cgroups")) {
-        const Json::Value& cgroups = root["Cgroups"];
-        for (Json::Value::ArrayIndex i = 0; i < cgroups.size(); ++i) {
-            std::string name = cgroups[i]["Controller"].asString();
-
-            if (force_memcg_v2 && name == "memory") continue;
-
-            MergeCgroupToDescriptors(descriptors, cgroups[i], name, "", 1);
-        }
-    }
-
-    bool memcgv2_present = false;
-    std::string root_path;
-    if (root.isMember("Cgroups2")) {
-        const Json::Value& cgroups2 = root["Cgroups2"];
-        root_path = cgroups2["Path"].asString();
-        MergeCgroupToDescriptors(descriptors, cgroups2, CGROUPV2_HIERARCHY_NAME, "", 2);
-
-        const Json::Value& childGroups = cgroups2["Controllers"];
-        for (Json::Value::ArrayIndex i = 0; i < childGroups.size(); ++i) {
-            std::string name = childGroups[i]["Controller"].asString();
-
-            if (force_memcg_v2 && name == "memory") memcgv2_present = true;
-
-            MergeCgroupToDescriptors(descriptors, childGroups[i], name, root_path, 2);
-        }
-    }
-
-    if (force_memcg_v2 && !memcgv2_present) {
-        LOG(INFO) << "Forcing memcg to v2 hierarchy";
-        Json::Value memcgv2;
-        memcgv2["Controller"] = "memory";
-        memcgv2["NeedsActivation"] = true;
-        memcgv2["Path"] = ".";
-        memcgv2["Optional"] = true;  // In case of cgroup_disabled=memory, so we can still boot
-        MergeCgroupToDescriptors(descriptors, memcgv2, "memory",
-                                 root_path.empty() ? CGROUP_V2_ROOT_DEFAULT : root_path, 2);
-    }
-
-    return true;
-}
-
-static bool ReadDescriptors(std::map<std::string, CgroupDescriptor>* descriptors) {
-    // load system cgroup descriptors
-    if (!ReadDescriptorsFromFile(CGROUPS_DESC_FILE, descriptors)) {
-        return false;
-    }
-
-    // load API-level specific system cgroups descriptors if available
-    unsigned int api_level = GetUintProperty<unsigned int>("ro.product.first_api_level", 0);
-    if (api_level > 0) {
-        std::string api_cgroups_path =
-                android::base::StringPrintf(TEMPLATE_CGROUPS_DESC_API_FILE, api_level);
-        if (!access(api_cgroups_path.c_str(), F_OK) || errno != ENOENT) {
-            if (!ReadDescriptorsFromFile(api_cgroups_path, descriptors)) {
-                return false;
-            }
-        }
-    }
-
-    // load vendor cgroup descriptors if the file exists
-    if (!access(CGROUPS_DESC_VENDOR_FILE, F_OK) &&
-        !ReadDescriptorsFromFile(CGROUPS_DESC_VENDOR_FILE, descriptors)) {
-        return false;
-    }
-
-    return true;
-}
-
 // To avoid issues in sdk_mac build
 #if defined(__ANDROID__)
 
-static bool IsOptionalController(const format::CgroupController* controller) {
+static bool IsOptionalController(const CgroupController* controller) {
     return controller->flags() & CGROUPRC_CONTROLLER_FLAG_OPTIONAL;
 }
 
 static bool MountV2CgroupController(const CgroupDescriptor& descriptor) {
-    const format::CgroupController* controller = descriptor.controller();
+    const CgroupController* controller = descriptor.controller();
 
     // /sys/fs/cgroup is created by cgroup2 with specific selinux permissions,
     // try to create again in case the mount point is changed
@@ -324,36 +173,18 @@
 }
 
 static bool ActivateV2CgroupController(const CgroupDescriptor& descriptor) {
-    const format::CgroupController* controller = descriptor.controller();
+    const CgroupController* controller = descriptor.controller();
 
     if (!Mkdir(controller->path(), descriptor.mode(), descriptor.uid(), descriptor.gid())) {
         LOG(ERROR) << "Failed to create directory for " << controller->name() << " cgroup";
         return false;
     }
 
-    if (controller->flags() & CGROUPRC_CONTROLLER_FLAG_NEEDS_ACTIVATION &&
-        controller->max_activation_depth() > 0) {
-        std::string str = "+";
-        str += controller->name();
-        std::string path = controller->path();
-        path += "/cgroup.subtree_control";
-
-        if (!base::WriteStringToFile(str, path)) {
-            if (IsOptionalController(controller)) {
-                PLOG(INFO) << "Failed to activate optional controller " << controller->name()
-                           << " at " << path;
-                return true;
-            }
-            PLOG(ERROR) << "Failed to activate controller " << controller->name();
-            return false;
-        }
-    }
-
-    return true;
+    return ::ActivateControllers(controller->path(), {{controller->name(), descriptor}});
 }
 
 static bool MountV1CgroupController(const CgroupDescriptor& descriptor) {
-    const format::CgroupController* controller = descriptor.controller();
+    const CgroupController* controller = descriptor.controller();
 
     // mkdir <path> [mode] [owner] [group]
     if (!Mkdir(controller->path(), descriptor.mode(), descriptor.uid(), descriptor.gid())) {
@@ -388,10 +219,10 @@
 }
 
 static bool SetupCgroup(const CgroupDescriptor& descriptor) {
-    const format::CgroupController* controller = descriptor.controller();
+    const CgroupController* controller = descriptor.controller();
 
     if (controller->version() == 2) {
-        if (!strcmp(controller->name(), CGROUPV2_HIERARCHY_NAME)) {
+        if (controller->name() == CGROUPV2_HIERARCHY_NAME) {
             return MountV2CgroupController(descriptor);
         } else {
             return ActivateV2CgroupController(descriptor);
@@ -410,35 +241,6 @@
 
 #endif
 
-static bool WriteRcFile(const std::map<std::string, CgroupDescriptor>& descriptors) {
-    unique_fd fd(TEMP_FAILURE_RETRY(open(CGROUPS_RC_PATH, O_CREAT | O_WRONLY | O_TRUNC | O_CLOEXEC,
-                                         S_IRUSR | S_IRGRP | S_IROTH)));
-    if (fd < 0) {
-        PLOG(ERROR) << "open() failed for " << CGROUPS_RC_PATH;
-        return false;
-    }
-
-    format::CgroupFile fl;
-    fl.version_ = format::CgroupFile::FILE_CURR_VERSION;
-    fl.controller_count_ = descriptors.size();
-    int ret = TEMP_FAILURE_RETRY(write(fd, &fl, sizeof(fl)));
-    if (ret < 0) {
-        PLOG(ERROR) << "write() failed for " << CGROUPS_RC_PATH;
-        return false;
-    }
-
-    for (const auto& [name, descriptor] : descriptors) {
-        ret = TEMP_FAILURE_RETRY(
-                write(fd, descriptor.controller(), sizeof(format::CgroupController)));
-        if (ret < 0) {
-            PLOG(ERROR) << "write() failed for " << CGROUPS_RC_PATH;
-            return false;
-        }
-    }
-
-    return true;
-}
-
 CgroupDescriptor::CgroupDescriptor(uint32_t version, const std::string& name,
                                    const std::string& path, mode_t mode, const std::string& uid,
                                    const std::string& gid, uint32_t flags,
@@ -458,9 +260,6 @@
     controller_.set_flags(flags);
 }
 
-}  // namespace cgrouprc
-}  // namespace android
-
 static std::optional<bool> MGLRUDisabled() {
     const std::string file_name = "/sys/kernel/mm/lru_gen/enabled";
     std::string content;
@@ -472,9 +271,8 @@
     return content == "0x0000";
 }
 
-static std::optional<bool> MEMCGDisabled(
-        const std::map<std::string, android::cgrouprc::CgroupDescriptor>& descriptors) {
-    std::string cgroup_v2_root = android::cgrouprc::CGROUP_V2_ROOT_DEFAULT;
+static std::optional<bool> MEMCGDisabled(const CgroupDescriptorMap& descriptors) {
+    std::string cgroup_v2_root = CGROUP_V2_ROOT_DEFAULT;
     const auto it = descriptors.find(CGROUPV2_HIERARCHY_NAME);
     if (it == descriptors.end()) {
         LOG(WARNING) << "No Cgroups2 path found in cgroups.json. Vendor has modified Android, and "
@@ -495,14 +293,10 @@
     return content.find("memory") == std::string::npos;
 }
 
-static bool CreateV2SubHierarchy(
-        const std::string& path,
-        const std::map<std::string, android::cgrouprc::CgroupDescriptor>& descriptors) {
-    using namespace android::cgrouprc;
-
+static bool CreateV2SubHierarchy(const std::string& path, const CgroupDescriptorMap& descriptors) {
     const auto cgv2_iter = descriptors.find(CGROUPV2_HIERARCHY_NAME);
     if (cgv2_iter == descriptors.end()) return false;
-    const android::cgrouprc::CgroupDescriptor cgv2_descriptor = cgv2_iter->second;
+    const CgroupDescriptor cgv2_descriptor = cgv2_iter->second;
 
     if (!Mkdir(path, cgv2_descriptor.mode(), cgv2_descriptor.uid(), cgv2_descriptor.gid())) {
         PLOG(ERROR) << "Failed to create directory for " << path;
@@ -511,46 +305,17 @@
 
     // Activate all v2 controllers in path so they can be activated in
     // children as they are created.
-    for (const auto& [name, descriptor] : descriptors) {
-        const format::CgroupController* controller = descriptor.controller();
-        std::uint32_t flags = controller->flags();
-        std::uint32_t max_activation_depth = controller->max_activation_depth();
-        const int depth = util::GetCgroupDepth(controller->path(), path);
-
-        if (controller->version() == 2 && name != CGROUPV2_HIERARCHY_NAME &&
-            flags & CGROUPRC_CONTROLLER_FLAG_NEEDS_ACTIVATION && depth < max_activation_depth) {
-            std::string str("+");
-            str += controller->name();
-            if (!android::base::WriteStringToFile(str, path + "/cgroup.subtree_control")) {
-                if (flags & CGROUPRC_CONTROLLER_FLAG_OPTIONAL) {
-                    PLOG(WARNING) << "Activation of cgroup controller " << str << " failed in path "
-                                  << path;
-                } else {
-                    return false;
-                }
-            }
-        }
-    }
-    return true;
+    return ::ActivateControllers(path, descriptors);
 }
 
 bool CgroupSetup() {
-    using namespace android::cgrouprc;
-
-    std::map<std::string, CgroupDescriptor> descriptors;
+    CgroupDescriptorMap descriptors;
 
     if (getpid() != 1) {
         LOG(ERROR) << "Cgroup setup can be done only by init process";
         return false;
     }
 
-    // Make sure we do this only one time. No need for std::call_once because
-    // init is a single-threaded process
-    if (access(CGROUPS_RC_PATH, F_OK) == 0) {
-        LOG(WARNING) << "Attempt to call CgroupSetup() more than once";
-        return true;
-    }
-
     // load cgroups.json file
     if (!ReadDescriptors(&descriptors)) {
         LOG(ERROR) << "Failed to load cgroup description file";
@@ -559,15 +324,18 @@
 
     // setup cgroups
     for (auto& [name, descriptor] : descriptors) {
-        if (SetupCgroup(descriptor)) {
-            descriptor.set_mounted(true);
-        } else {
+        if (descriptor.controller()->flags() & CGROUPRC_CONTROLLER_FLAG_MOUNTED) {
+            LOG(WARNING) << "Attempt to call CgroupSetup() more than once";
+            return true;
+        }
+
+        if (!SetupCgroup(descriptor)) {
             // issue a warning and proceed with the next cgroup
             LOG(WARNING) << "Failed to setup " << name << " cgroup";
         }
     }
 
-    if (force_memcg_v2) {
+    if (android::libprocessgroup_flags::force_memcg_v2()) {
         if (MGLRUDisabled().value_or(false)) {
             LOG(WARNING) << "Memcg forced to v2 hierarchy with MGLRU disabled! "
                          << "Global reclaim performance will suffer.";
@@ -593,26 +361,5 @@
         }
     }
 
-    // mkdir <CGROUPS_RC_DIR> 0711 system system
-    if (!Mkdir(android::base::Dirname(CGROUPS_RC_PATH), 0711, "system", "system")) {
-        LOG(ERROR) << "Failed to create directory for " << CGROUPS_RC_PATH << " file";
-        return false;
-    }
-
-    // Generate <CGROUPS_RC_FILE> file which can be directly mmapped into
-    // process memory. This optimizes performance, memory usage
-    // and limits infrormation shared with unprivileged processes
-    // to the minimum subset of information from cgroups.json
-    if (!WriteRcFile(descriptors)) {
-        LOG(ERROR) << "Failed to write " << CGROUPS_RC_PATH << " file";
-        return false;
-    }
-
-    // chmod 0644 <CGROUPS_RC_PATH>
-    if (fchmodat(AT_FDCWD, CGROUPS_RC_PATH, 0644, AT_SYMLINK_NOFOLLOW) < 0) {
-        PLOG(ERROR) << "fchmodat() failed";
-        return false;
-    }
-
     return true;
 }
diff --git a/libprocessgroup/task_profiles.cpp b/libprocessgroup/task_profiles.cpp
index 4870548..dc6c8c0 100644
--- a/libprocessgroup/task_profiles.cpp
+++ b/libprocessgroup/task_profiles.cpp
@@ -17,11 +17,17 @@
 //#define LOG_NDEBUG 0
 #define LOG_TAG "libprocessgroup"
 
+#include <task_profiles.h>
+
+#include <map>
+#include <optional>
+#include <string>
+
 #include <dirent.h>
 #include <fcntl.h>
+#include <sched.h>
+#include <sys/resource.h>
 #include <unistd.h>
-#include <task_profiles.h>
-#include <string>
 
 #include <android-base/file.h>
 #include <android-base/logging.h>
@@ -30,18 +36,13 @@
 #include <android-base/strings.h>
 #include <android-base/threads.h>
 
+#include <build_flags.h>
+
 #include <cutils/android_filesystem_config.h>
 
 #include <json/reader.h>
 #include <json/value.h>
 
-#include <build_flags.h>
-
-// To avoid issues in sdk_mac build
-#if defined(__ANDROID__)
-#include <sys/prctl.h>
-#endif
-
 using android::base::GetThreadId;
 using android::base::GetUintProperty;
 using android::base::StringPrintf;
@@ -54,6 +55,7 @@
 
 static constexpr const char* TEMPLATE_TASK_PROFILE_API_FILE =
         "/etc/task_profiles/task_profiles_%u.json";
+namespace {
 
 class FdCacheHelper {
   public:
@@ -64,8 +66,11 @@
     };
 
     static void Cache(const std::string& path, android::base::unique_fd& fd);
+
     static void Drop(android::base::unique_fd& fd);
+
     static void Init(const std::string& path, android::base::unique_fd& fd);
+
     static bool IsCached(const android::base::unique_fd& fd) { return fd > FDS_INACCESSIBLE; }
 
   private:
@@ -116,6 +121,17 @@
     return path.find("<uid>", 0) != std::string::npos || path.find("<pid>", 0) != std::string::npos;
 }
 
+std::optional<long> readLong(const std::string& str) {
+    char* end;
+    const long result = strtol(str.c_str(), &end, 10);
+    if (end > str.c_str()) {
+        return result;
+    }
+    return std::nullopt;
+}
+
+}  // namespace
+
 IProfileAttribute::~IProfileAttribute() = default;
 
 const std::string& ProfileAttribute::file_name() const {
@@ -123,8 +139,8 @@
     return file_name_;
 }
 
-void ProfileAttribute::Reset(const CgroupController& controller, const std::string& file_name,
-                             const std::string& file_v2_name) {
+void ProfileAttribute::Reset(const CgroupControllerWrapper& controller,
+                             const std::string& file_name, const std::string& file_v2_name) {
     controller_ = controller;
     file_name_ = file_name;
     file_v2_name_ = file_v2_name;
@@ -188,61 +204,20 @@
     return true;
 }
 
-bool SetClampsAction::ExecuteForProcess(uid_t, pid_t) const {
-    // TODO: add support when kernel supports util_clamp
-    LOG(WARNING) << "SetClampsAction::ExecuteForProcess is not supported";
-    return false;
-}
-
-bool SetClampsAction::ExecuteForTask(int) const {
-    // TODO: add support when kernel supports util_clamp
-    LOG(WARNING) << "SetClampsAction::ExecuteForTask is not supported";
-    return false;
-}
-
-// To avoid issues in sdk_mac build
-#if defined(__ANDROID__)
-
-bool SetTimerSlackAction::IsTimerSlackSupported(pid_t tid) {
-    auto file = StringPrintf("/proc/%d/timerslack_ns", tid);
-
-    return (access(file.c_str(), W_OK) == 0);
-}
-
 bool SetTimerSlackAction::ExecuteForTask(pid_t tid) const {
-    static bool sys_supports_timerslack = IsTimerSlackSupported(tid);
-
-    // v4.6+ kernels support the /proc/<tid>/timerslack_ns interface.
-    // TODO: once we've backported this, log if the open(2) fails.
-    if (sys_supports_timerslack) {
-        auto file = StringPrintf("/proc/%d/timerslack_ns", tid);
-        if (!WriteStringToFile(std::to_string(slack_), file)) {
-            if (errno == ENOENT) {
-                // This happens when process is already dead
-                return true;
-            }
-            PLOG(ERROR) << "set_timerslack_ns write failed";
+    const auto file = StringPrintf("/proc/%d/timerslack_ns", tid);
+    if (!WriteStringToFile(std::to_string(slack_), file)) {
+        if (errno == ENOENT) {
+            // This happens when process is already dead
+            return true;
         }
-    }
-
-    // TODO: Remove when /proc/<tid>/timerslack_ns interface is backported.
-    if (tid == 0 || tid == GetThreadId()) {
-        if (prctl(PR_SET_TIMERSLACK, slack_) == -1) {
-            PLOG(ERROR) << "set_timerslack_ns prctl failed";
-        }
+        PLOG(ERROR) << "set_timerslack_ns write failed";
+        return false;
     }
 
     return true;
 }
 
-#else
-
-bool SetTimerSlackAction::ExecuteForTask(int) const {
-    return true;
-};
-
-#endif
-
 bool SetAttributeAction::WriteValueToFile(const std::string& path) const {
     if (!WriteStringToFile(value_, path)) {
         if (access(path.c_str(), F_OK) < 0) {
@@ -333,7 +308,7 @@
     return optional_;
 }
 
-SetCgroupAction::SetCgroupAction(const CgroupController& c, const std::string& p)
+SetCgroupAction::SetCgroupAction(const CgroupControllerWrapper& c, const std::string& p)
     : controller_(c), path_(p) {
     FdCacheHelper::Init(controller_.GetTasksFilePath(path_), fd_[ProfileAction::RCT_TASK]);
     // uid and pid don't matter because IsAppDependentPath ensures the path doesn't use them
@@ -672,6 +647,57 @@
     return access(task_path_.c_str(), W_OK) == 0;
 }
 
+bool SetSchedulerPolicyAction::isNormalPolicy(int policy) {
+    return policy == SCHED_OTHER || policy == SCHED_BATCH || policy == SCHED_IDLE;
+}
+
+bool SetSchedulerPolicyAction::toPriority(int policy, int virtual_priority, int& priority_out) {
+    constexpr int VIRTUAL_PRIORITY_MIN = 1;
+    constexpr int VIRTUAL_PRIORITY_MAX = 99;
+
+    if (virtual_priority < VIRTUAL_PRIORITY_MIN || virtual_priority > VIRTUAL_PRIORITY_MAX) {
+        LOG(WARNING) << "SetSchedulerPolicy: invalid priority (" << virtual_priority
+                     << ") for policy (" << policy << ")";
+        return false;
+    }
+
+    const int min = sched_get_priority_min(policy);
+    if (min == -1) {
+        PLOG(ERROR) << "SetSchedulerPolicy: Cannot get min sched priority for policy " << policy;
+        return false;
+    }
+
+    const int max = sched_get_priority_max(policy);
+    if (max == -1) {
+        PLOG(ERROR) << "SetSchedulerPolicy: Cannot get max sched priority for policy " << policy;
+        return false;
+    }
+
+    priority_out = min + (virtual_priority - VIRTUAL_PRIORITY_MIN) * (max - min) /
+        (VIRTUAL_PRIORITY_MAX - VIRTUAL_PRIORITY_MIN);
+
+    return true;
+}
+
+bool SetSchedulerPolicyAction::ExecuteForTask(pid_t tid) const {
+    struct sched_param param = {};
+    param.sched_priority = isNormalPolicy(policy_) ? 0 : *priority_or_nice_;
+    if (sched_setscheduler(tid, policy_, &param) == -1) {
+        PLOG(WARNING) << "SetSchedulerPolicy: Failed to apply scheduler policy (" << policy_
+                      << ") with priority (" << *priority_or_nice_ << ") to tid " << tid;
+        return false;
+    }
+
+    if (isNormalPolicy(policy_) && priority_or_nice_ &&
+        setpriority(PRIO_PROCESS, tid, *priority_or_nice_) == -1) {
+        PLOG(WARNING) << "SetSchedulerPolicy: Failed to apply nice (" << *priority_or_nice_
+                      << ") to tid " << tid;
+        return false;
+    }
+
+    return true;
+}
+
 bool ApplyProfileAction::ExecuteForProcess(uid_t uid, pid_t pid) const {
     for (const auto& profile : profiles_) {
         profile->ExecuteForProcess(uid, pid);
@@ -903,15 +929,12 @@
                     LOG(WARNING) << "JoinCgroup: controller " << controller_name << " is not found";
                 }
             } else if (action_name == "SetTimerSlack") {
-                std::string slack_value = params_val["Slack"].asString();
-                char* end;
-                unsigned long slack;
-
-                slack = strtoul(slack_value.c_str(), &end, 10);
-                if (end > slack_value.c_str()) {
-                    profile->Add(std::make_unique<SetTimerSlackAction>(slack));
+                const std::string slack_string = params_val["Slack"].asString();
+                std::optional<long> slack = readLong(slack_string);
+                if (slack && *slack >= 0) {
+                    profile->Add(std::make_unique<SetTimerSlackAction>(*slack));
                 } else {
-                    LOG(WARNING) << "SetTimerSlack: invalid parameter: " << slack_value;
+                    LOG(WARNING) << "SetTimerSlack: invalid parameter: " << slack_string;
                 }
             } else if (action_name == "SetAttribute") {
                 std::string attr_name = params_val["Name"].asString();
@@ -925,23 +948,6 @@
                 } else {
                     LOG(WARNING) << "SetAttribute: unknown attribute: " << attr_name;
                 }
-            } else if (action_name == "SetClamps") {
-                std::string boost_value = params_val["Boost"].asString();
-                std::string clamp_value = params_val["Clamp"].asString();
-                char* end;
-                unsigned long boost;
-
-                boost = strtoul(boost_value.c_str(), &end, 10);
-                if (end > boost_value.c_str()) {
-                    unsigned long clamp = strtoul(clamp_value.c_str(), &end, 10);
-                    if (end > clamp_value.c_str()) {
-                        profile->Add(std::make_unique<SetClampsAction>(boost, clamp));
-                    } else {
-                        LOG(WARNING) << "SetClamps: invalid parameter " << clamp_value;
-                    }
-                } else {
-                    LOG(WARNING) << "SetClamps: invalid parameter: " << boost_value;
-                }
             } else if (action_name == "WriteFile") {
                 std::string attr_filepath = params_val["FilePath"].asString();
                 std::string attr_procfilepath = params_val["ProcFilePath"].asString();
@@ -959,6 +965,73 @@
                     LOG(WARNING) << "WriteFile: invalid parameter: "
                                  << "empty value";
                 }
+            } else if (action_name == "SetSchedulerPolicy") {
+                const std::map<std::string, int> POLICY_MAP = {
+                    {"SCHED_OTHER", SCHED_OTHER},
+                    {"SCHED_BATCH", SCHED_BATCH},
+                    {"SCHED_IDLE", SCHED_IDLE},
+                    {"SCHED_FIFO", SCHED_FIFO},
+                    {"SCHED_RR", SCHED_RR},
+                };
+                const std::string policy_str = params_val["Policy"].asString();
+
+                const auto it = POLICY_MAP.find(policy_str);
+                if (it == POLICY_MAP.end()) {
+                    LOG(WARNING) << "SetSchedulerPolicy: invalid policy " << policy_str;
+                    continue;
+                }
+
+                const int policy = it->second;
+
+                if (SetSchedulerPolicyAction::isNormalPolicy(policy)) {
+                    if (params_val.isMember("Priority")) {
+                        LOG(WARNING) << "SetSchedulerPolicy: Normal policies (" << policy_str
+                                     << ") use Nice values, not Priority values";
+                    }
+
+                    if (params_val.isMember("Nice")) {
+                        // If present, this optional value will be passed in an additional syscall
+                        // to setpriority(), since the sched_priority value must be 0 for calls to
+                        // sched_setscheduler() with "normal" policies.
+                        const std::string nice_string = params_val["Nice"].asString();
+                        const std::optional<int> nice = readLong(nice_string);
+
+                        if (!nice) {
+                            LOG(FATAL) << "Invalid nice value specified: " << nice_string;
+                        }
+                        const int LINUX_MIN_NICE = -20;
+                        const int LINUX_MAX_NICE = 19;
+                        if (*nice < LINUX_MIN_NICE || *nice > LINUX_MAX_NICE) {
+                            LOG(WARNING) << "SetSchedulerPolicy: Provided nice (" << *nice
+                                         << ") appears out of range.";
+                        }
+                        profile->Add(std::make_unique<SetSchedulerPolicyAction>(policy, *nice));
+                    } else {
+                        profile->Add(std::make_unique<SetSchedulerPolicyAction>(policy));
+                    }
+                } else {
+                    if (params_val.isMember("Nice")) {
+                        LOG(WARNING) << "SetSchedulerPolicy: Real-time policies (" << policy_str
+                                     << ") use Priority values, not Nice values";
+                    }
+
+                    // This is a "virtual priority" as described by `man 2 sched_get_priority_min`
+                    // that will be mapped onto the following range for the provided policy:
+                    // [sched_get_priority_min(), sched_get_priority_max()]
+
+                    const std::string priority_string = params_val["Priority"].asString();
+                    std::optional<long> virtual_priority = readLong(priority_string);
+                    if (virtual_priority && *virtual_priority > 0) {
+                        int priority;
+                        if (SetSchedulerPolicyAction::toPriority(policy, *virtual_priority,
+                                                                 priority)) {
+                            profile->Add(
+                                    std::make_unique<SetSchedulerPolicyAction>(policy, priority));
+                        }
+                    } else {
+                        LOG(WARNING) << "Invalid priority value: " << priority_string;
+                    }
+                }
             } else {
                 LOG(WARNING) << "Unknown profile action: " << action_name;
             }
diff --git a/libprocessgroup/task_profiles.h b/libprocessgroup/task_profiles.h
index 184e9e3..d0b5043 100644
--- a/libprocessgroup/task_profiles.h
+++ b/libprocessgroup/task_profiles.h
@@ -21,6 +21,7 @@
 #include <map>
 #include <memory>
 #include <mutex>
+#include <optional>
 #include <span>
 #include <string>
 #include <string_view>
@@ -32,9 +33,9 @@
 class IProfileAttribute {
   public:
     virtual ~IProfileAttribute() = 0;
-    virtual void Reset(const CgroupController& controller, const std::string& file_name,
+    virtual void Reset(const CgroupControllerWrapper& controller, const std::string& file_name,
                        const std::string& file_v2_name) = 0;
-    virtual const CgroupController* controller() const = 0;
+    virtual const CgroupControllerWrapper* controller() const = 0;
     virtual const std::string& file_name() const = 0;
     virtual bool GetPathForProcess(uid_t uid, pid_t pid, std::string* path) const = 0;
     virtual bool GetPathForTask(pid_t tid, std::string* path) const = 0;
@@ -46,14 +47,14 @@
     // Cgroup attributes may have different names in the v1 and v2 hierarchies. If `file_v2_name` is
     // not empty, `file_name` is the name for the v1 hierarchy and `file_v2_name` is the name for
     // the v2 hierarchy. If `file_v2_name` is empty, `file_name` is used for both hierarchies.
-    ProfileAttribute(const CgroupController& controller, const std::string& file_name,
+    ProfileAttribute(const CgroupControllerWrapper& controller, const std::string& file_name,
                      const std::string& file_v2_name)
         : controller_(controller), file_name_(file_name), file_v2_name_(file_v2_name) {}
     ~ProfileAttribute() = default;
 
-    const CgroupController* controller() const override { return &controller_; }
+    const CgroupControllerWrapper* controller() const override { return &controller_; }
     const std::string& file_name() const override;
-    void Reset(const CgroupController& controller, const std::string& file_name,
+    void Reset(const CgroupControllerWrapper& controller, const std::string& file_name,
                const std::string& file_v2_name) override;
 
     bool GetPathForProcess(uid_t uid, pid_t pid, std::string* path) const override;
@@ -61,7 +62,7 @@
     bool GetPathForUID(uid_t uid, std::string* path) const override;
 
   private:
-    CgroupController controller_;
+    CgroupControllerWrapper controller_;
     std::string file_name_;
     std::string file_v2_name_;
 };
@@ -77,7 +78,7 @@
 
     // Default implementations will fail
     virtual bool ExecuteForProcess(uid_t, pid_t) const { return false; }
-    virtual bool ExecuteForTask(int) const { return false; }
+    virtual bool ExecuteForTask(pid_t) const { return false; }
     virtual bool ExecuteForUID(uid_t) const { return false; }
 
     virtual void EnableResourceCaching(ResourceCacheType) {}
@@ -90,19 +91,6 @@
 };
 
 // Profile actions
-class SetClampsAction : public ProfileAction {
-  public:
-    SetClampsAction(int boost, int clamp) noexcept : boost_(boost), clamp_(clamp) {}
-
-    const char* Name() const override { return "SetClamps"; }
-    bool ExecuteForProcess(uid_t uid, pid_t pid) const override;
-    bool ExecuteForTask(pid_t tid) const override;
-
-  protected:
-    int boost_;
-    int clamp_;
-};
-
 class SetTimerSlackAction : public ProfileAction {
   public:
     SetTimerSlackAction(unsigned long slack) noexcept : slack_(slack) {}
@@ -114,8 +102,6 @@
 
   private:
     unsigned long slack_;
-
-    static bool IsTimerSlackSupported(pid_t tid);
 };
 
 // Set attribute profile element
@@ -142,7 +128,7 @@
 // Set cgroup profile element
 class SetCgroupAction : public ProfileAction {
   public:
-    SetCgroupAction(const CgroupController& c, const std::string& p);
+    SetCgroupAction(const CgroupControllerWrapper& c, const std::string& p);
 
     const char* Name() const override { return "SetCgroup"; }
     bool ExecuteForProcess(uid_t uid, pid_t pid) const override;
@@ -152,10 +138,10 @@
     bool IsValidForProcess(uid_t uid, pid_t pid) const override;
     bool IsValidForTask(pid_t tid) const override;
 
-    const CgroupController* controller() const { return &controller_; }
+    const CgroupControllerWrapper* controller() const { return &controller_; }
 
   private:
-    CgroupController controller_;
+    CgroupControllerWrapper controller_;
     std::string path_;
     android::base::unique_fd fd_[ProfileAction::RCT_COUNT];
     mutable std::mutex fd_mutex_;
@@ -189,6 +175,25 @@
     CacheUseResult UseCachedFd(ResourceCacheType cache_type, const std::string& value) const;
 };
 
+// Set scheduler policy action
+class SetSchedulerPolicyAction : public ProfileAction {
+  public:
+    SetSchedulerPolicyAction(int policy)
+        : policy_(policy) {}
+    SetSchedulerPolicyAction(int policy, int priority_or_nice)
+        : policy_(policy), priority_or_nice_(priority_or_nice) {}
+
+    const char* Name() const override { return "SetSchedulerPolicy"; }
+    bool ExecuteForTask(pid_t tid) const override;
+
+    static bool isNormalPolicy(int policy);
+    static bool toPriority(int policy, int virtual_priority, int& priority_out);
+
+  private:
+    int policy_;
+    std::optional<int> priority_or_nice_;
+};
+
 class TaskProfile {
   public:
     TaskProfile(const std::string& name) : name_(name), res_cached_(false) {}
diff --git a/libprocessgroup/task_profiles_test.cpp b/libprocessgroup/task_profiles_test.cpp
index d19da2b..dff6d67 100644
--- a/libprocessgroup/task_profiles_test.cpp
+++ b/libprocessgroup/task_profiles_test.cpp
@@ -102,10 +102,10 @@
   public:
     ProfileAttributeMock(const std::string& file_name) : file_name_(file_name) {}
     ~ProfileAttributeMock() override = default;
-    void Reset(const CgroupController&, const std::string&, const std::string&) override {
+    void Reset(const CgroupControllerWrapper&, const std::string&, const std::string&) override {
         CHECK(false);
     }
-    const CgroupController* controller() const override {
+    const CgroupControllerWrapper* controller() const override {
         CHECK(false);
         return {};
     }
diff --git a/libprocessgroup/util/Android.bp b/libprocessgroup/util/Android.bp
index 4a940b7..1c74d4e 100644
--- a/libprocessgroup/util/Android.bp
+++ b/libprocessgroup/util/Android.bp
@@ -19,7 +19,7 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-cc_library_headers {
+cc_library_static {
     name: "libprocessgroup_util",
     vendor_available: true,
     product_available: true,
@@ -36,12 +36,23 @@
     export_include_dirs: [
         "include",
     ],
+    srcs: [
+        "cgroup_controller.cpp",
+        "cgroup_descriptor.cpp",
+        "util.cpp",
+    ],
+    shared_libs: [
+        "libbase",
+    ],
+    static_libs: [
+        "libjsoncpp",
+    ],
     defaults: ["libprocessgroup_build_flags_cc"],
 }
 
 cc_test {
     name: "libprocessgroup_util_test",
-    header_libs: ["libprocessgroup_util"],
+    static_libs: ["libprocessgroup_util"],
     srcs: ["tests/util.cpp"],
     test_suites: ["general-tests"],
 }
diff --git a/libprocessgroup/cgrouprc_format/cgroup_controller.cpp b/libprocessgroup/util/cgroup_controller.cpp
similarity index 89%
rename from libprocessgroup/cgrouprc_format/cgroup_controller.cpp
rename to libprocessgroup/util/cgroup_controller.cpp
index 0dd909a..fb41680 100644
--- a/libprocessgroup/cgrouprc_format/cgroup_controller.cpp
+++ b/libprocessgroup/util/cgroup_controller.cpp
@@ -14,11 +14,9 @@
  * limitations under the License.
  */
 
-#include <processgroup/format/cgroup_controller.h>
+#include <processgroup/cgroup_controller.h>
 
-namespace android {
-namespace cgrouprc {
-namespace format {
+#include <cstring>
 
 CgroupController::CgroupController(uint32_t version, uint32_t flags, const std::string& name,
                                    const std::string& path, uint32_t max_activation_depth)
@@ -54,8 +52,4 @@
 
 void CgroupController::set_flags(uint32_t flags) {
     flags_ = flags;
-}
-
-}  // namespace format
-}  // namespace cgrouprc
-}  // namespace android
+}
\ No newline at end of file
diff --git a/libprocessgroup/util/cgroup_descriptor.cpp b/libprocessgroup/util/cgroup_descriptor.cpp
new file mode 100644
index 0000000..4d3347f
--- /dev/null
+++ b/libprocessgroup/util/cgroup_descriptor.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <processgroup/cgroup_descriptor.h>
+
+#include <processgroup/util.h>  // For flag values
+
+CgroupDescriptor::CgroupDescriptor(uint32_t version, const std::string& name,
+                                   const std::string& path, mode_t mode, const std::string& uid,
+                                   const std::string& gid, uint32_t flags,
+                                   uint32_t max_activation_depth)
+    : controller_(version, flags, name, path, max_activation_depth),
+      mode_(mode),
+      uid_(uid),
+      gid_(gid) {}
+
+void CgroupDescriptor::set_mounted(bool mounted) {
+    uint32_t flags = controller_.flags();
+    if (mounted) {
+        flags |= CGROUPRC_CONTROLLER_FLAG_MOUNTED;
+    } else {
+        flags &= ~CGROUPRC_CONTROLLER_FLAG_MOUNTED;
+    }
+    controller_.set_flags(flags);
+}
diff --git a/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_controller.h b/libprocessgroup/util/include/processgroup/cgroup_controller.h
similarity index 86%
rename from libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_controller.h
rename to libprocessgroup/util/include/processgroup/cgroup_controller.h
index c0c1f60..fe6a829 100644
--- a/libprocessgroup/cgrouprc_format/include/processgroup/format/cgroup_controller.h
+++ b/libprocessgroup/util/include/processgroup/cgroup_controller.h
@@ -20,11 +20,7 @@
 #include <cstdint>
 #include <string>
 
-namespace android {
-namespace cgrouprc {
-namespace format {
-
-// Minimal controller description to be mmapped into process address space
+// Minimal controller description
 struct CgroupController {
   public:
     CgroupController() = default;
@@ -48,8 +44,4 @@
     uint32_t max_activation_depth_ = UINT32_MAX;
     char name_[CGROUP_NAME_BUF_SZ] = {};
     char path_[CGROUP_PATH_BUF_SZ] = {};
-};
-
-}  // namespace format
-}  // namespace cgrouprc
-}  // namespace android
+};
\ No newline at end of file
diff --git a/libprocessgroup/util/include/processgroup/cgroup_descriptor.h b/libprocessgroup/util/include/processgroup/cgroup_descriptor.h
new file mode 100644
index 0000000..1afd2ee
--- /dev/null
+++ b/libprocessgroup/util/include/processgroup/cgroup_descriptor.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <cstdint>
+#include <string>
+
+#include <sys/stat.h>
+
+#include <processgroup/cgroup_controller.h>
+
+// Complete controller description for mounting cgroups
+class CgroupDescriptor {
+  public:
+    CgroupDescriptor(uint32_t version, const std::string& name, const std::string& path,
+                     mode_t mode, const std::string& uid, const std::string& gid, uint32_t flags,
+                     uint32_t max_activation_depth);
+
+    const CgroupController* controller() const { return &controller_; }
+    mode_t mode() const { return mode_; }
+    std::string uid() const { return uid_; }
+    std::string gid() const { return gid_; }
+
+    void set_mounted(bool mounted);
+
+  private:
+    CgroupController controller_;
+    mode_t mode_ = 0;
+    std::string uid_;
+    std::string gid_;
+};
diff --git a/libprocessgroup/util/include/processgroup/util.h b/libprocessgroup/util/include/processgroup/util.h
index 5240744..2c7b329 100644
--- a/libprocessgroup/util/include/processgroup/util.h
+++ b/libprocessgroup/util/include/processgroup/util.h
@@ -16,46 +16,20 @@
 
 #pragma once
 
-#include <algorithm>
-#include <iterator>
+#include <map>
 #include <string>
 
-namespace util {
+#include "cgroup_descriptor.h"
 
-namespace internal {
+// Duplicated from cgrouprc.h. Don't depend on libcgrouprc here.
+#define CGROUPRC_CONTROLLER_FLAG_MOUNTED 0x1
+#define CGROUPRC_CONTROLLER_FLAG_NEEDS_ACTIVATION 0x2
+#define CGROUPRC_CONTROLLER_FLAG_OPTIONAL 0x4
 
-const char SEP = '/';
+unsigned int GetCgroupDepth(const std::string& controller_root, const std::string& cgroup_path);
 
-std::string DeduplicateAndTrimSeparators(const std::string& path) {
-    bool lastWasSep = false;
-    std::string ret;
+using CgroupControllerName = std::string;
+using CgroupDescriptorMap = std::map<CgroupControllerName, CgroupDescriptor>;
+bool ReadDescriptors(CgroupDescriptorMap* descriptors);
 
-    std::copy_if(path.begin(), path.end(), std::back_inserter(ret), [&lastWasSep](char c) {
-        if (lastWasSep) {
-            if (c == SEP) return false;
-            lastWasSep = false;
-        } else if (c == SEP) {
-            lastWasSep = true;
-        }
-        return true;
-    });
-
-    if (ret.length() > 1 && ret.back() == SEP) ret.pop_back();
-
-    return ret;
-}
-
-}  // namespace internal
-
-unsigned int GetCgroupDepth(const std::string& controller_root, const std::string& cgroup_path) {
-    const std::string deduped_root = internal::DeduplicateAndTrimSeparators(controller_root);
-    const std::string deduped_path = internal::DeduplicateAndTrimSeparators(cgroup_path);
-
-    if (deduped_root.empty() || deduped_path.empty() || !deduped_path.starts_with(deduped_root))
-        return 0;
-
-    return std::count(deduped_path.begin() + deduped_root.size(), deduped_path.end(),
-                      internal::SEP);
-}
-
-}  // namespace util
+bool ActivateControllers(const std::string& path, const CgroupDescriptorMap& descriptors);
diff --git a/libprocessgroup/util/tests/util.cpp b/libprocessgroup/util/tests/util.cpp
index 1de7d6f..6caef8e 100644
--- a/libprocessgroup/util/tests/util.cpp
+++ b/libprocessgroup/util/tests/util.cpp
@@ -18,8 +18,6 @@
 
 #include "gtest/gtest.h"
 
-using util::GetCgroupDepth;
-
 TEST(EmptyInputs, bothEmpty) {
     EXPECT_EQ(GetCgroupDepth({}, {}), 0);
 }
diff --git a/libprocessgroup/util/util.cpp b/libprocessgroup/util/util.cpp
new file mode 100644
index 0000000..1401675
--- /dev/null
+++ b/libprocessgroup/util/util.cpp
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <processgroup/util.h>
+
+#include <algorithm>
+#include <iterator>
+#include <optional>
+#include <string_view>
+
+#include <mntent.h>
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/properties.h>
+#include <android-base/stringprintf.h>
+#include <json/reader.h>
+#include <json/value.h>
+
+#include "../build_flags.h"
+#include "../internal.h"
+
+using android::base::GetUintProperty;
+
+namespace {
+
+constexpr const char* CGROUPS_DESC_FILE = "/etc/cgroups.json";
+constexpr const char* CGROUPS_DESC_VENDOR_FILE = "/vendor/etc/cgroups.json";
+constexpr const char* TEMPLATE_CGROUPS_DESC_API_FILE = "/etc/task_profiles/cgroups_%u.json";
+
+// This should match the publicly declared value in processgroup.h,
+// but we don't want this library to depend on libprocessgroup.
+constexpr std::string CGROUPV2_HIERARCHY_NAME_INTERNAL = "cgroup2";
+
+const char SEP = '/';
+
+std::string DeduplicateAndTrimSeparators(const std::string& path) {
+    bool lastWasSep = false;
+    std::string ret;
+
+    std::copy_if(path.begin(), path.end(), std::back_inserter(ret), [&lastWasSep](char c) {
+        if (lastWasSep) {
+            if (c == SEP) return false;
+            lastWasSep = false;
+        } else if (c == SEP) {
+            lastWasSep = true;
+        }
+        return true;
+    });
+
+    if (ret.length() > 1 && ret.back() == SEP) ret.pop_back();
+
+    return ret;
+}
+
+void MergeCgroupToDescriptors(CgroupDescriptorMap* descriptors, const Json::Value& cgroup,
+                              const std::string& name, const std::string& root_path,
+                              int cgroups_version) {
+    const std::string cgroup_path = cgroup["Path"].asString();
+    std::string path;
+
+    if (!root_path.empty()) {
+        path = root_path;
+        if (cgroup_path != ".") {
+            path += "/";
+            path += cgroup_path;
+        }
+    } else {
+        path = cgroup_path;
+    }
+
+    uint32_t controller_flags = 0;
+
+    if (cgroup["NeedsActivation"].isBool() && cgroup["NeedsActivation"].asBool()) {
+        controller_flags |= CGROUPRC_CONTROLLER_FLAG_NEEDS_ACTIVATION;
+    }
+
+    if (cgroup["Optional"].isBool() && cgroup["Optional"].asBool()) {
+        controller_flags |= CGROUPRC_CONTROLLER_FLAG_OPTIONAL;
+    }
+
+    uint32_t max_activation_depth = UINT32_MAX;
+    if (cgroup.isMember("MaxActivationDepth")) {
+        max_activation_depth = cgroup["MaxActivationDepth"].asUInt();
+    }
+
+    CgroupDescriptor descriptor(
+            cgroups_version, name, path, std::strtoul(cgroup["Mode"].asString().c_str(), 0, 8),
+            cgroup["UID"].asString(), cgroup["GID"].asString(), controller_flags,
+            max_activation_depth);
+
+    auto iter = descriptors->find(name);
+    if (iter == descriptors->end()) {
+        descriptors->emplace(name, descriptor);
+    } else {
+        iter->second = descriptor;
+    }
+}
+
+bool ReadDescriptorsFromFile(const std::string& file_name, CgroupDescriptorMap* descriptors) {
+    static constexpr bool force_memcg_v2 = android::libprocessgroup_flags::force_memcg_v2();
+    std::vector<CgroupDescriptor> result;
+    std::string json_doc;
+
+    if (!android::base::ReadFileToString(file_name, &json_doc)) {
+        PLOG(ERROR) << "Failed to read task profiles from " << file_name;
+        return false;
+    }
+
+    Json::CharReaderBuilder builder;
+    std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
+    Json::Value root;
+    std::string errorMessage;
+    if (!reader->parse(&*json_doc.begin(), &*json_doc.end(), &root, &errorMessage)) {
+        LOG(ERROR) << "Failed to parse cgroups description: " << errorMessage;
+        return false;
+    }
+
+    if (root.isMember("Cgroups")) {
+        const Json::Value& cgroups = root["Cgroups"];
+        for (Json::Value::ArrayIndex i = 0; i < cgroups.size(); ++i) {
+            std::string name = cgroups[i]["Controller"].asString();
+
+            if (force_memcg_v2 && name == "memory") continue;
+
+            MergeCgroupToDescriptors(descriptors, cgroups[i], name, "", 1);
+        }
+    }
+
+    bool memcgv2_present = false;
+    std::string root_path;
+    if (root.isMember("Cgroups2")) {
+        const Json::Value& cgroups2 = root["Cgroups2"];
+        root_path = cgroups2["Path"].asString();
+        MergeCgroupToDescriptors(descriptors, cgroups2, CGROUPV2_HIERARCHY_NAME_INTERNAL, "", 2);
+
+        const Json::Value& childGroups = cgroups2["Controllers"];
+        for (Json::Value::ArrayIndex i = 0; i < childGroups.size(); ++i) {
+            std::string name = childGroups[i]["Controller"].asString();
+
+            if (force_memcg_v2 && name == "memory") memcgv2_present = true;
+
+            MergeCgroupToDescriptors(descriptors, childGroups[i], name, root_path, 2);
+        }
+    }
+
+    if (force_memcg_v2 && !memcgv2_present) {
+        LOG(INFO) << "Forcing memcg to v2 hierarchy";
+        Json::Value memcgv2;
+        memcgv2["Controller"] = "memory";
+        memcgv2["NeedsActivation"] = true;
+        memcgv2["Path"] = ".";
+        memcgv2["Optional"] = true;  // In case of cgroup_disabled=memory, so we can still boot
+        MergeCgroupToDescriptors(descriptors, memcgv2, "memory",
+                                 root_path.empty() ? CGROUP_V2_ROOT_DEFAULT : root_path, 2);
+    }
+
+    return true;
+}
+
+using MountDir = std::string;
+using MountOpts = std::string;
+static std::optional<std::map<MountDir, MountOpts>> ReadCgroupV1Mounts() {
+    FILE* fp = setmntent("/proc/mounts", "r");
+    if (fp == nullptr) {
+        PLOG(ERROR) << "Failed to read mounts";
+        return std::nullopt;
+    }
+
+    std::map<MountDir, MountOpts> mounts;
+    const std::string_view CGROUP_V1_TYPE = "cgroup";
+    for (mntent* mentry = getmntent(fp); mentry != nullptr; mentry = getmntent(fp)) {
+        if (mentry->mnt_type && CGROUP_V1_TYPE == mentry->mnt_type &&
+            mentry->mnt_dir && mentry->mnt_opts) {
+            mounts[mentry->mnt_dir] = mentry->mnt_opts;
+        }
+    }
+    endmntent(fp);
+
+    return mounts;
+}
+
+}  // anonymous namespace
+
+
+unsigned int GetCgroupDepth(const std::string& controller_root, const std::string& cgroup_path) {
+    const std::string deduped_root = DeduplicateAndTrimSeparators(controller_root);
+    const std::string deduped_path = DeduplicateAndTrimSeparators(cgroup_path);
+
+    if (deduped_root.empty() || deduped_path.empty() || !deduped_path.starts_with(deduped_root))
+        return 0;
+
+    return std::count(deduped_path.begin() + deduped_root.size(), deduped_path.end(), SEP);
+}
+
+bool ReadDescriptors(CgroupDescriptorMap* descriptors) {
+    // load system cgroup descriptors
+    if (!ReadDescriptorsFromFile(CGROUPS_DESC_FILE, descriptors)) {
+        return false;
+    }
+
+    // load API-level specific system cgroups descriptors if available
+    unsigned int api_level = GetUintProperty<unsigned int>("ro.product.first_api_level", 0);
+    if (api_level > 0) {
+        std::string api_cgroups_path =
+                android::base::StringPrintf(TEMPLATE_CGROUPS_DESC_API_FILE, api_level);
+        if (!access(api_cgroups_path.c_str(), F_OK) || errno != ENOENT) {
+            if (!ReadDescriptorsFromFile(api_cgroups_path, descriptors)) {
+                return false;
+            }
+        }
+    }
+
+    // load vendor cgroup descriptors if the file exists
+    if (!access(CGROUPS_DESC_VENDOR_FILE, F_OK) &&
+        !ReadDescriptorsFromFile(CGROUPS_DESC_VENDOR_FILE, descriptors)) {
+        return false;
+    }
+
+    // check for v1 mount/usability status
+    std::optional<std::map<MountDir, MountOpts>> v1Mounts;
+    for (auto& [name, descriptor] : *descriptors) {
+        const CgroupController* const controller = descriptor.controller();
+
+        if (controller->version() != 1) continue;
+
+        // Read only once, and only if we have at least one v1 controller
+        if (!v1Mounts) {
+            v1Mounts = ReadCgroupV1Mounts();
+            if (!v1Mounts) return false;
+        }
+
+        if (const auto it = v1Mounts->find(controller->path()); it != v1Mounts->end()) {
+            if (it->second.contains(controller->name())) descriptor.set_mounted(true);
+        }
+    }
+
+    return true;
+}
+
+bool ActivateControllers(const std::string& path, const CgroupDescriptorMap& descriptors) {
+    for (const auto& [name, descriptor] : descriptors) {
+        const uint32_t flags = descriptor.controller()->flags();
+        const uint32_t max_activation_depth = descriptor.controller()->max_activation_depth();
+        const unsigned int depth = GetCgroupDepth(descriptor.controller()->path(), path);
+
+        if (flags & CGROUPRC_CONTROLLER_FLAG_NEEDS_ACTIVATION && depth < max_activation_depth) {
+            std::string str("+");
+            str.append(descriptor.controller()->name());
+            if (!android::base::WriteStringToFile(str, path + "/cgroup.subtree_control")) {
+                if (flags & CGROUPRC_CONTROLLER_FLAG_OPTIONAL) {
+                    PLOG(WARNING) << "Activation of cgroup controller " << str
+                                  << " failed in path " << path;
+                } else {
+                    return false;
+                }
+            }
+        }
+    }
+    return true;
+}
+
diff --git a/libstats/expresslog/Android.bp b/libstats/expresslog/Android.bp
index 96ab59b..f70252a 100644
--- a/libstats/expresslog/Android.bp
+++ b/libstats/expresslog/Android.bp
@@ -1,4 +1,3 @@
-
 //
 // Copyright (C) 2023 The Android Open Source Project
 //
@@ -16,6 +15,7 @@
 //
 package {
     default_applicable_licenses: ["Android-Apache-2.0"],
+    default_team: "trendy_team_android_telemetry_client_infra",
 }
 
 cc_defaults {
@@ -28,6 +28,7 @@
 
 cc_library {
     name: "libexpresslog",
+    host_supported: true,
     defaults: ["expresslog_defaults"],
     cflags: [
         "-DNAMESPACE_FOR_HASH_FUNCTIONS=farmhash",
@@ -74,6 +75,7 @@
 
 cc_library_static {
     name: "libstatslog_express",
+    host_supported: true,
     generated_sources: ["statslog_express.cpp"],
     generated_headers: ["statslog_express.h"],
     export_generated_headers: ["statslog_express.h"],
@@ -119,5 +121,5 @@
     ],
     shared_libs: [
         "libstatssocket",
-    ]
+    ],
 }
diff --git a/libstats/pull_lazy/Android.bp b/libstats/pull_lazy/Android.bp
index 65dce26..71af170 100644
--- a/libstats/pull_lazy/Android.bp
+++ b/libstats/pull_lazy/Android.bp
@@ -32,7 +32,7 @@
         "-Wall",
         "-Werror",
     ],
-    test_suites: ["device-tests", "mts-statsd"],
+    test_suites: ["device-tests"],
     test_config: "libstatspull_lazy_test.xml",
     // TODO(b/153588990): Remove when the build system properly separates.
     // 32bit and 64bit architectures.
diff --git a/libstats/pull_rust/Android.bp b/libstats/pull_rust/Android.bp
index 6902026..2a8939e 100644
--- a/libstats/pull_rust/Android.bp
+++ b/libstats/pull_rust/Android.bp
@@ -61,7 +61,6 @@
     srcs: ["stats_pull.rs"],
     rustlibs: [
         "liblog_rust",
-        "libonce_cell",
         "libstatslog_rust_header",
         "libstatspull_bindgen",
     ],
diff --git a/libstats/pull_rust/stats_pull.rs b/libstats/pull_rust/stats_pull.rs
index b2bebcc..03929e3 100644
--- a/libstats/pull_rust/stats_pull.rs
+++ b/libstats/pull_rust/stats_pull.rs
@@ -14,13 +14,12 @@
 
 //! A Rust interface for the StatsD pull API.
 
-use once_cell::sync::Lazy;
 use statslog_rust_header::{Atoms, Stat, StatsError};
 use statspull_bindgen::*;
 use std::collections::HashMap;
 use std::convert::TryInto;
 use std::os::raw::c_void;
-use std::sync::Mutex;
+use std::sync::{LazyLock, Mutex};
 
 /// The return value of callbacks.
 pub type StatsPullResult = Vec<Box<dyn Stat>>;
@@ -107,8 +106,8 @@
     }
 }
 
-static COOKIES: Lazy<Mutex<HashMap<i32, fn() -> StatsPullResult>>> =
-    Lazy::new(|| Mutex::new(HashMap::new()));
+static COOKIES: LazyLock<Mutex<HashMap<i32, fn() -> StatsPullResult>>> =
+    LazyLock::new(|| Mutex::new(HashMap::new()));
 
 /// # Safety
 ///
diff --git a/libstats/socket_lazy/Android.bp b/libstats/socket_lazy/Android.bp
index 241e87a..945a7c4 100644
--- a/libstats/socket_lazy/Android.bp
+++ b/libstats/socket_lazy/Android.bp
@@ -36,7 +36,6 @@
     ],
     test_suites: [
         "device-tests",
-        "mts-statsd",
     ],
     test_config: "libstatssocket_lazy_test.xml",
     // TODO(b/153588990): Remove when the build system properly separates.
diff --git a/libsync/Android.bp b/libsync/Android.bp
index b6b4a6e..99c88cf 100644
--- a/libsync/Android.bp
+++ b/libsync/Android.bp
@@ -27,9 +27,6 @@
     name: "libsync",
     symbol_file: "libsync.map.txt",
     first_version: "26",
-    export_header_libs: [
-        "libsync_headers",
-    ],
 }
 
 cc_defaults {
diff --git a/libutils/Looper.cpp b/libutils/Looper.cpp
index e11d197..2541aa8 100644
--- a/libutils/Looper.cpp
+++ b/libutils/Looper.cpp
@@ -496,6 +496,21 @@
     return 1;
 }
 
+bool Looper::getFdStateDebug(int fd, int* ident, int* events, sp<LooperCallback>* cb, void** data) {
+    AutoMutex _l(mLock);
+    if (auto seqNumIt = mSequenceNumberByFd.find(fd); seqNumIt != mSequenceNumberByFd.cend()) {
+        if (auto reqIt = mRequests.find(seqNumIt->second); reqIt != mRequests.cend()) {
+            const Request& request = reqIt->second;
+            if (ident) *ident = request.ident;
+            if (events) *events = request.events;
+            if (cb) *cb = request.callback;
+            if (data) *data = request.data;
+            return true;
+        }
+    }
+    return false;
+}
+
 int Looper::removeFd(int fd) {
     AutoMutex _l(mLock);
     const auto& it = mSequenceNumberByFd.find(fd);
diff --git a/libutils/Looper_test.cpp b/libutils/Looper_test.cpp
index c859f9c..a7a9987 100644
--- a/libutils/Looper_test.cpp
+++ b/libutils/Looper_test.cpp
@@ -410,6 +410,52 @@
             << "addFd should return -1 because arguments were invalid";
 }
 
+class LooperCallbackStub final : public LooperCallback {
+  public:
+    LooperCallbackStub(std::function<int()> callback) : mCallback{callback} {}
+
+    int handleEvent(int /*fd*/, int /*events*/, void* /*data*/) override { return mCallback(); }
+
+  private:
+    std::function<int()> mCallback;
+};
+
+TEST_F(LooperTest, getFdStateDebug_WhenFdIsInRequests_ReturnsTrue) {
+    Pipe pipe;
+    const int fd = pipe.receiveFd;
+    constexpr int expectedIdent{Looper::POLL_CALLBACK};
+    sp<LooperCallback> expectedCallback =
+            sp<LooperCallbackStub>::make([]() constexpr -> int { return 0; });
+    void* expectedData = this;
+
+    EXPECT_EQ(1, mLooper->addFd(fd, expectedIdent, Looper::EVENT_INPUT, expectedCallback,
+                                expectedData));
+
+    int ident;
+    int events;
+    sp<LooperCallback> callback;
+    void* data;
+
+    EXPECT_TRUE(mLooper->getFdStateDebug(fd, &ident, &events, &callback, &data));
+
+    EXPECT_EQ(ident, expectedIdent);
+    EXPECT_EQ(events, Looper::EVENT_INPUT);
+    EXPECT_EQ(callback, expectedCallback);
+    EXPECT_EQ(data, expectedData);
+}
+
+TEST_F(LooperTest, getFdStateDebug_WhenFdIsNotInRequests_ReturnsFalse) {
+    Pipe pipe;
+    const int notAddedFd = pipe.receiveFd;
+
+    int ident;
+    int events;
+    sp<LooperCallback> callback;
+    void* data;
+
+    EXPECT_FALSE(mLooper->getFdStateDebug(notAddedFd, &ident, &events, &callback, &data));
+}
+
 TEST_F(LooperTest, RemoveFd_WhenCallbackNotAdded_ReturnsZero) {
     int result = mLooper->removeFd(1);
 
diff --git a/libutils/Threads.cpp b/libutils/Threads.cpp
index 0b96ab0..111d46a 100644
--- a/libutils/Threads.cpp
+++ b/libutils/Threads.cpp
@@ -60,7 +60,7 @@
  * We create it "detached", so it cleans up after itself.
  */
 
-typedef void* (*android_pthread_entry)(void*);
+typedef int (*android_pthread_entry)(void*);
 
 #if defined(__ANDROID__)
 struct thread_data_t {
@@ -88,6 +88,20 @@
 };
 #endif
 
+// Adapted from bionic's implmenetation of trampoline to make C11 thrd_create
+// work with pthread_create.
+struct libutil_thread_data {
+  android_pthread_entry _Nonnull entry_func;
+  void* _Nullable entry_func_arg;
+};
+
+static void* _Nonnull libutil_thread_trampoline(void* _Nonnull arg) {
+  libutil_thread_data *data_ptr = static_cast<libutil_thread_data*>(arg);
+  int result = data_ptr->entry_func(data_ptr->entry_func_arg);
+  delete data_ptr;
+  return reinterpret_cast<void*>(static_cast<uintptr_t>(result));
+}
+
 void androidSetThreadName(const char* name) {
 #if defined(__linux__)
     // Mac OS doesn't have this, and we build libutil for the host too
@@ -145,8 +159,13 @@
 
     errno = 0;
     pthread_t thread;
+
+    libutil_thread_data* pthread_arg = new libutil_thread_data;
+    pthread_arg->entry_func = entryFunction;
+    pthread_arg->entry_func_arg = userData;
+
     int result = pthread_create(&thread, &attr,
-                    (android_pthread_entry)entryFunction, userData);
+                    libutil_thread_trampoline, pthread_arg);
     pthread_attr_destroy(&attr);
     if (result != 0) {
         ALOGE("androidCreateRawThreadEtc failed (entry=%p, res=%d, %s)\n"
@@ -294,11 +313,6 @@
 int androidSetThreadPriority(pid_t tid, int pri)
 {
     int rc = 0;
-    int curr_pri = getpriority(PRIO_PROCESS, tid);
-
-    if (curr_pri == pri) {
-        return rc;
-    }
 
     if (setpriority(PRIO_PROCESS, tid, pri) < 0) {
         rc = INVALID_OPERATION;
diff --git a/libutils/abi-dumps/arm64/source-based/libutils.so.lsdump b/libutils/abi-dumps/arm64/source-based/libutils.so.lsdump
index caea1a9..00609a9 100644
--- a/libutils/abi-dumps/arm64/source-based/libutils.so.lsdump
+++ b/libutils/abi-dumps/arm64/source-based/libutils.so.lsdump
@@ -6,7 +6,6 @@
    "linker_set_key" : "_ZTIA0_i",
    "name" : "int[0]",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIA0_i",
    "source_file" : "system/core/libcutils/include_outside_system/cutils/native_handle.h"
   },
   {
@@ -14,7 +13,6 @@
    "linker_set_key" : "_ZTIA1_Ds",
    "name" : "char16_t[1]",
    "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIA1_Ds",
    "size" : 2,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -23,7 +21,6 @@
    "linker_set_key" : "_ZTIA20_c",
    "name" : "char[20]",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIA20_c",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -32,7 +29,6 @@
    "linker_set_key" : "_ZTIA5121_h",
    "name" : "unsigned char[5121]",
    "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIA5121_h",
    "size" : 5121,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -41,7 +37,6 @@
    "linker_set_key" : "_ZTIA8_j",
    "name" : "unsigned int[8]",
    "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIA8_j",
    "size" : 32,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -50,7 +45,6 @@
    "linker_set_key" : "_ZTIA_f",
    "name" : "float[]",
    "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIA_f",
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   }
  ],
@@ -62,16 +56,12 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIDi",
    "name" : "char32_t",
-   "referenced_type" : "_ZTIDi",
-   "self_type" : "_ZTIDi",
    "size" : 4
   },
   {
    "alignment" : 8,
    "linker_set_key" : "_ZTIDn",
    "name" : "std::nullptr_t",
-   "referenced_type" : "_ZTIDn",
-   "self_type" : "_ZTIDn",
    "size" : 8
   },
   {
@@ -80,8 +70,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIDs",
    "name" : "char16_t",
-   "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIDs",
    "size" : 2
   },
   {
@@ -89,8 +77,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIa",
    "name" : "signed char",
-   "referenced_type" : "_ZTIa",
-   "self_type" : "_ZTIa",
    "size" : 1
   },
   {
@@ -99,8 +85,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIb",
    "name" : "bool",
-   "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIb",
    "size" : 1
   },
   {
@@ -109,24 +93,18 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIc",
    "name" : "char",
-   "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIc",
    "size" : 1
   },
   {
    "alignment" : 8,
    "linker_set_key" : "_ZTId",
    "name" : "double",
-   "referenced_type" : "_ZTId",
-   "self_type" : "_ZTId",
    "size" : 8
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIf",
    "name" : "float",
-   "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIf",
    "size" : 4
   },
   {
@@ -135,8 +113,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIh",
    "name" : "unsigned char",
-   "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIh",
    "size" : 1
   },
   {
@@ -144,8 +120,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIi",
    "name" : "int",
-   "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIi",
    "size" : 4
   },
   {
@@ -154,8 +128,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIj",
    "name" : "unsigned int",
-   "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIj",
    "size" : 4
   },
   {
@@ -163,8 +135,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIl",
    "name" : "long",
-   "referenced_type" : "_ZTIl",
-   "self_type" : "_ZTIl",
    "size" : 8
   },
   {
@@ -173,8 +143,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIm",
    "name" : "unsigned long",
-   "referenced_type" : "_ZTIm",
-   "self_type" : "_ZTIm",
    "size" : 8
   },
   {
@@ -182,8 +150,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIs",
    "name" : "short",
-   "referenced_type" : "_ZTIs",
-   "self_type" : "_ZTIs",
    "size" : 2
   },
   {
@@ -192,23 +158,17 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIt",
    "name" : "unsigned short",
-   "referenced_type" : "_ZTIt",
-   "self_type" : "_ZTIt",
    "size" : 2
   },
   {
    "linker_set_key" : "_ZTIv",
-   "name" : "void",
-   "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIv"
+   "name" : "void"
   },
   {
    "alignment" : 8,
    "is_integral" : true,
    "linker_set_key" : "_ZTIx",
    "name" : "long long",
-   "referenced_type" : "_ZTIx",
-   "self_type" : "_ZTIx",
    "size" : 8
   },
   {
@@ -217,8 +177,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIy",
    "name" : "unsigned long long",
-   "referenced_type" : "_ZTIy",
-   "self_type" : "_ZTIy",
    "size" : 8
   }
  ],
@@ -492,18 +450,6 @@
    "name" : "_ZN7android27add_sysprop_change_callbackEPFvvEi"
   },
   {
-   "binding" : "weak",
-   "name" : "_ZN7android2spINS_14LooperCallbackEE5clearEv"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZN7android2spINS_6LooperEEaSEOS2_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZN7android2spINS_6ThreadEE5clearEv"
-  },
-  {
    "name" : "_ZN7android30get_report_sysprop_change_funcEv"
   },
   {
@@ -525,6 +471,9 @@
    "name" : "_ZN7android6Looper14removeMessagesERKNS_2spINS_14MessageHandlerEEEi"
   },
   {
+   "name" : "_ZN7android6Looper15getFdStateDebugEiPiS1_PNS_2spINS_14LooperCallbackEEEPPv"
+  },
+  {
    "name" : "_ZN7android6Looper17sendMessageAtTimeElRKNS_2spINS_14MessageHandlerEEERKNS_7MessageE"
   },
   {
@@ -1047,78 +996,6 @@
    "name" : "_ZNK7android6Thread9isRunningEv"
   },
   {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE10do_destroyEPvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE12do_constructEPvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE15do_move_forwardEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE16do_move_backwardEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE7do_copyEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE8do_splatEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE10do_destroyEPvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE12do_constructEPvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE15do_move_forwardEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE16do_move_backwardEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE7do_copyEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE8do_splatEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper8ResponseEE10do_destroyEPvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper8ResponseEE12do_constructEPvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper8ResponseEE15do_move_forwardEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper8ResponseEE16do_move_backwardEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper8ResponseEE7do_copyEPvPKvm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNK7android6VectorINS_6Looper8ResponseEE8do_splatEPvPKvm"
-  },
-  {
    "name" : "_ZNK7android7RefBase10createWeakEPKv"
   },
   {
@@ -1197,54 +1074,6 @@
    "name" : "_ZNK7android9Tokenizer19peekRemainderOfLineEv"
   },
   {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIimEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE14__erase_uniqueIiEEmRKT_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIimEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRiRKmEEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEEbEERKT_DpOT0_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIimEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6rehashEm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIimEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS2_PvEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIimEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE8__rehashEm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeImN7android6Looper7RequestEEENS_22__unordered_map_hasherImS5_NS_4hashImEELb1EEENS_21__unordered_map_equalImS5_NS_8equal_toImEELb1EEENS_9allocatorIS5_EEE14__erase_uniqueImEEmRKT_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeImN7android6Looper7RequestEEENS_22__unordered_map_hasherImS5_NS_4hashImEELb1EEENS_21__unordered_map_equalImS5_NS_8equal_toImEELb1EEENS_9allocatorIS5_EEE25__emplace_unique_key_argsImJRKmRS4_EEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS5_PvEEEEbEERKT_DpOT0_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeImN7android6Looper7RequestEEENS_22__unordered_map_hasherImS5_NS_4hashImEELb1EEENS_21__unordered_map_equalImS5_NS_8equal_toImEELb1EEENS_9allocatorIS5_EEE4findImEENS_15__hash_iteratorIPNS_11__hash_nodeIS5_PvEEEERKT_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeImN7android6Looper7RequestEEENS_22__unordered_map_hasherImS5_NS_4hashImEELb1EEENS_21__unordered_map_equalImS5_NS_8equal_toImEELb1EEENS_9allocatorIS5_EEE5eraseENS_21__hash_const_iteratorIPNS_11__hash_nodeIS5_PvEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeImN7android6Looper7RequestEEENS_22__unordered_map_hasherImS5_NS_4hashImEELb1EEENS_21__unordered_map_equalImS5_NS_8equal_toImEELb1EEENS_9allocatorIS5_EEE6rehashEm"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeImN7android6Looper7RequestEEENS_22__unordered_map_hasherImS5_NS_4hashImEELb1EEENS_21__unordered_map_equalImS5_NS_8equal_toImEELb1EEENS_9allocatorIS5_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS5_PvEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeImN7android6Looper7RequestEEENS_22__unordered_map_hasherImS5_NS_4hashImEELb1EEENS_21__unordered_map_equalImS5_NS_8equal_toImEELb1EEENS_9allocatorIS5_EEE8__rehashEm"
-  },
-  {
    "name" : "_ZTv0_n24_N7android14LooperCallbackD0Ev"
   },
   {
@@ -1442,67 +1271,6 @@
    "enum_fields" :
    [
     {
-     "enum_field_value" : -1,
-     "name" : "SP_DEFAULT"
-    },
-    {
-     "enum_field_value" : 0,
-     "name" : "SP_BACKGROUND"
-    },
-    {
-     "enum_field_value" : 1,
-     "name" : "SP_FOREGROUND"
-    },
-    {
-     "enum_field_value" : 2,
-     "name" : "SP_SYSTEM"
-    },
-    {
-     "enum_field_value" : 3,
-     "name" : "SP_AUDIO_APP"
-    },
-    {
-     "enum_field_value" : 4,
-     "name" : "SP_AUDIO_SYS"
-    },
-    {
-     "enum_field_value" : 5,
-     "name" : "SP_TOP_APP"
-    },
-    {
-     "enum_field_value" : 6,
-     "name" : "SP_RT_APP"
-    },
-    {
-     "enum_field_value" : 7,
-     "name" : "SP_RESTRICTED"
-    },
-    {
-     "enum_field_value" : 8,
-     "name" : "SP_CNT"
-    },
-    {
-     "enum_field_value" : 7,
-     "name" : "SP_MAX"
-    },
-    {
-     "enum_field_value" : 1,
-     "name" : "SP_SYSTEM_DEFAULT"
-    }
-   ],
-   "linker_set_key" : "_ZTI11SchedPolicy",
-   "name" : "SchedPolicy",
-   "referenced_type" : "_ZTI11SchedPolicy",
-   "self_type" : "_ZTI11SchedPolicy",
-   "size" : 4,
-   "source_file" : "system/core/libprocessgroup/include/processgroup/sched_policy.h",
-   "underlying_type" : "_ZTIi"
-  },
-  {
-   "alignment" : 4,
-   "enum_fields" :
-   [
-    {
      "enum_field_value" : 1,
      "name" : "HAL_HDR_DOLBY_VISION"
     },
@@ -1517,8 +1285,6 @@
    ],
    "linker_set_key" : "_ZTI13android_hdr_t",
    "name" : "android_hdr_t",
-   "referenced_type" : "_ZTI13android_hdr_t",
-   "self_type" : "_ZTI13android_hdr_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -1534,8 +1300,6 @@
    ],
    "linker_set_key" : "_ZTI18android_hdr_v1_2_t",
    "name" : "android_hdr_v1_2_t",
-   "referenced_type" : "_ZTI18android_hdr_v1_2_t",
-   "self_type" : "_ZTI18android_hdr_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -1583,8 +1347,6 @@
    ],
    "linker_set_key" : "_ZTI19android_LogPriority",
    "name" : "android_LogPriority",
-   "referenced_type" : "_ZTI19android_LogPriority",
-   "self_type" : "_ZTI19android_LogPriority",
    "size" : 4,
    "source_file" : "system/logging/liblog/include_vndk/android/log.h",
    "underlying_type" : "_ZTIj"
@@ -1824,8 +1586,6 @@
    ],
    "linker_set_key" : "_ZTI19android_dataspace_t",
    "name" : "android_dataspace_t",
-   "referenced_type" : "_ZTI19android_dataspace_t",
-   "self_type" : "_ZTI19android_dataspace_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -1861,8 +1621,6 @@
    ],
    "linker_set_key" : "_ZTI19android_flex_format",
    "name" : "android_flex_format",
-   "referenced_type" : "_ZTI19android_flex_format",
-   "self_type" : "_ZTI19android_flex_format",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics.h",
    "underlying_type" : "_ZTIj"
@@ -1894,8 +1652,6 @@
    ],
    "linker_set_key" : "_ZTI19android_transform_t",
    "name" : "android_transform_t",
-   "referenced_type" : "_ZTI19android_transform_t",
-   "self_type" : "_ZTI19android_transform_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -1947,8 +1703,6 @@
    ],
    "linker_set_key" : "_ZTI20android_color_mode_t",
    "name" : "android_color_mode_t",
-   "referenced_type" : "_ZTI20android_color_mode_t",
-   "self_type" : "_ZTI20android_color_mode_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -1980,8 +1734,6 @@
    ],
    "linker_set_key" : "_ZTI21$SYSTEM_TIME_BOOTTIME",
    "name" : "(unnamed)",
-   "referenced_type" : "_ZTI21$SYSTEM_TIME_BOOTTIME",
-   "self_type" : "_ZTI21$SYSTEM_TIME_BOOTTIME",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Timers.h",
    "underlying_type" : "_ZTIj"
@@ -2021,8 +1773,6 @@
    ],
    "linker_set_key" : "_ZTI22android_flex_component",
    "name" : "android_flex_component",
-   "referenced_type" : "_ZTI22android_flex_component",
-   "self_type" : "_ZTI22android_flex_component",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics.h",
    "underlying_type" : "_ZTIj"
@@ -2114,8 +1864,6 @@
    ],
    "linker_set_key" : "_ZTI22android_pixel_format_t",
    "name" : "android_pixel_format_t",
-   "referenced_type" : "_ZTI22android_pixel_format_t",
-   "self_type" : "_ZTI22android_pixel_format_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -2179,8 +1927,6 @@
    ],
    "linker_set_key" : "_ZTI23$ANDROID_PRIORITY_AUDIO",
    "name" : "(unnamed)",
-   "referenced_type" : "_ZTI23$ANDROID_PRIORITY_AUDIO",
-   "self_type" : "_ZTI23$ANDROID_PRIORITY_AUDIO",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/thread_defs.h",
    "underlying_type" : "_ZTIi"
@@ -2208,8 +1954,6 @@
    ],
    "linker_set_key" : "_ZTI24android_dataspace_v1_1_t",
    "name" : "android_dataspace_v1_1_t",
-   "referenced_type" : "_ZTI24android_dataspace_v1_1_t",
-   "self_type" : "_ZTI24android_dataspace_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2237,8 +1981,6 @@
    ],
    "linker_set_key" : "_ZTI24android_dataspace_v1_2_t",
    "name" : "android_dataspace_v1_2_t",
-   "referenced_type" : "_ZTI24android_dataspace_v1_2_t",
-   "self_type" : "_ZTI24android_dataspace_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -2262,8 +2004,6 @@
    ],
    "linker_set_key" : "_ZTI25android_color_mode_v1_1_t",
    "name" : "android_color_mode_v1_1_t",
-   "referenced_type" : "_ZTI25android_color_mode_v1_1_t",
-   "self_type" : "_ZTI25android_color_mode_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2279,8 +2019,6 @@
    ],
    "linker_set_key" : "_ZTI25android_color_mode_v1_2_t",
    "name" : "android_color_mode_v1_2_t",
-   "referenced_type" : "_ZTI25android_color_mode_v1_2_t",
-   "self_type" : "_ZTI25android_color_mode_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -2320,8 +2058,6 @@
    ],
    "linker_set_key" : "_ZTI25android_color_transform_t",
    "name" : "android_color_transform_t",
-   "referenced_type" : "_ZTI25android_color_transform_t",
-   "self_type" : "_ZTI25android_color_transform_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -2349,8 +2085,6 @@
    ],
    "linker_set_key" : "_ZTI25android_pixel_format_sw_t",
    "name" : "android_pixel_format_sw_t",
-   "referenced_type" : "_ZTI25android_pixel_format_sw_t",
-   "self_type" : "_ZTI25android_pixel_format_sw_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-sw.h",
    "underlying_type" : "_ZTIj"
@@ -2390,8 +2124,6 @@
    ],
    "linker_set_key" : "_ZTI27android_pixel_format_v1_1_t",
    "name" : "android_pixel_format_v1_1_t",
-   "referenced_type" : "_ZTI27android_pixel_format_v1_1_t",
-   "self_type" : "_ZTI27android_pixel_format_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2407,8 +2139,6 @@
    ],
    "linker_set_key" : "_ZTI27android_pixel_format_v1_2_t",
    "name" : "android_pixel_format_v1_2_t",
-   "referenced_type" : "_ZTI27android_pixel_format_v1_2_t",
-   "self_type" : "_ZTI27android_pixel_format_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -2436,8 +2166,6 @@
    ],
    "linker_set_key" : "_ZTI28android_render_intent_v1_1_t",
    "name" : "android_render_intent_v1_1_t",
-   "referenced_type" : "_ZTI28android_render_intent_v1_1_t",
-   "self_type" : "_ZTI28android_render_intent_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2493,8 +2221,6 @@
    ],
    "linker_set_key" : "_ZTI6log_id",
    "name" : "log_id",
-   "referenced_type" : "_ZTI6log_id",
-   "self_type" : "_ZTI6log_id",
    "size" : 4,
    "source_file" : "system/logging/liblog/include_vndk/android/log.h",
    "underlying_type" : "_ZTIj"
@@ -2518,8 +2244,6 @@
    ],
    "linker_set_key" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
    "name" : "android::VectorImpl::(unnamed)",
-   "referenced_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
-   "self_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h",
    "underlying_type" : "_ZTIj"
@@ -2543,8 +2267,7 @@
    ],
    "linker_set_key" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
    "name" : "android::VectorImpl::(unnamed)",
-   "referenced_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h",
    "underlying_type" : "_ZTIj"
@@ -2560,8 +2283,6 @@
    ],
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_pointer<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2577,8 +2298,6 @@
    ],
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_pointer<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2594,8 +2313,6 @@
    ],
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_pointer<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2687,8 +2404,6 @@
    ],
    "linker_set_key" : "_ZTIN7android15$ALREADY_EXISTSE",
    "name" : "android::(unnamed)",
-   "referenced_type" : "_ZTIN7android15$ALREADY_EXISTSE",
-   "self_type" : "_ZTIN7android15$ALREADY_EXISTSE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Errors.h",
    "underlying_type" : "_ZTIi"
@@ -2780,8 +2495,7 @@
    ],
    "linker_set_key" : "_ZTIN7android15$ALREADY_EXISTSE",
    "name" : "android::(unnamed)",
-   "referenced_type" : "_ZTIN7android15$ALREADY_EXISTSE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/Errors.sdump",
-   "self_type" : "_ZTIN7android15$ALREADY_EXISTSE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/Errors.sdump",
+   "self_type" : "_ZTIN7android15$ALREADY_EXISTSE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/Errors.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/Errors.h",
    "underlying_type" : "_ZTIi"
@@ -2841,8 +2555,6 @@
    ],
    "linker_set_key" : "_ZTIN7android15$PRIORITY_AUDIOE",
    "name" : "android::(unnamed)",
-   "referenced_type" : "_ZTIN7android15$PRIORITY_AUDIOE",
-   "self_type" : "_ZTIN7android15$PRIORITY_AUDIOE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/ThreadDefs.h",
    "underlying_type" : "_ZTIi"
@@ -2858,8 +2570,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_copy<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2875,8 +2585,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_copy<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2892,8 +2600,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_copy<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2909,8 +2615,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
    "name" : "android::trait_trivial_copy<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2926,8 +2630,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
    "name" : "android::trait_trivial_copy<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2943,8 +2646,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
    "name" : "android::trait_trivial_copy<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2960,8 +2661,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
    "name" : "android::trait_trivial_copy<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2977,8 +2677,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
    "name" : "android::trait_trivial_copy<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2994,8 +2692,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
    "name" : "android::trait_trivial_copy<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3011,8 +2708,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
    "name" : "android::trait_trivial_copy<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3028,8 +2723,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
    "name" : "android::trait_trivial_copy<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3045,8 +2739,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3062,8 +2754,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3079,8 +2770,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
    "name" : "android::trait_trivial_copy<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3096,8 +2785,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
    "name" : "android::trait_trivial_copy<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3113,8 +2801,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3130,8 +2816,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3147,8 +2832,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
    "name" : "android::trait_trivial_copy<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3164,8 +2847,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
    "name" : "android::trait_trivial_copy<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3181,8 +2863,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3198,8 +2878,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3215,8 +2894,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
    "name" : "android::trait_trivial_copy<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3232,8 +2909,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
    "name" : "android::trait_trivial_copy<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3249,8 +2925,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3266,8 +2940,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3283,8 +2956,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
    "name" : "android::trait_trivial_copy<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3300,8 +2971,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
    "name" : "android::trait_trivial_copy<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3317,8 +2987,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
    "name" : "android::trait_trivial_copy<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3334,8 +3002,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
    "name" : "android::trait_trivial_copy<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3351,8 +3018,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3368,8 +3033,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3385,8 +3049,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_ctor<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3402,8 +3064,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_ctor<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3419,8 +3079,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_ctor<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3436,8 +3094,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
    "name" : "android::trait_trivial_ctor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3453,8 +3109,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
    "name" : "android::trait_trivial_ctor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3470,8 +3125,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
    "name" : "android::trait_trivial_ctor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3487,8 +3140,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
    "name" : "android::trait_trivial_ctor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3504,8 +3156,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
    "name" : "android::trait_trivial_ctor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3521,8 +3171,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
    "name" : "android::trait_trivial_ctor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3538,8 +3187,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
    "name" : "android::trait_trivial_ctor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3555,8 +3202,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
    "name" : "android::trait_trivial_ctor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3572,8 +3218,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3589,8 +3233,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3606,8 +3249,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
    "name" : "android::trait_trivial_ctor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3623,8 +3264,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
    "name" : "android::trait_trivial_ctor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3640,8 +3280,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3657,8 +3295,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3674,8 +3311,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
    "name" : "android::trait_trivial_ctor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3691,8 +3326,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
    "name" : "android::trait_trivial_ctor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3708,8 +3342,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3725,8 +3357,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3742,8 +3373,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
    "name" : "android::trait_trivial_ctor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3759,8 +3388,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
    "name" : "android::trait_trivial_ctor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3776,8 +3404,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3793,8 +3419,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3810,8 +3435,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
    "name" : "android::trait_trivial_ctor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3827,8 +3450,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
    "name" : "android::trait_trivial_ctor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3844,8 +3466,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
    "name" : "android::trait_trivial_ctor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3861,8 +3481,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
    "name" : "android::trait_trivial_ctor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3878,8 +3497,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3895,8 +3512,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3912,8 +3528,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_dtor<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3929,8 +3543,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_dtor<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3946,8 +3558,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_dtor<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3963,8 +3573,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
    "name" : "android::trait_trivial_dtor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3980,8 +3588,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
    "name" : "android::trait_trivial_dtor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3997,8 +3604,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
    "name" : "android::trait_trivial_dtor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4014,8 +3619,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
    "name" : "android::trait_trivial_dtor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4031,8 +3635,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
    "name" : "android::trait_trivial_dtor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4048,8 +3650,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
    "name" : "android::trait_trivial_dtor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4065,8 +3666,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
    "name" : "android::trait_trivial_dtor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4082,8 +3681,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
    "name" : "android::trait_trivial_dtor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4099,8 +3697,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4116,8 +3712,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4133,8 +3728,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
    "name" : "android::trait_trivial_dtor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4150,8 +3743,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
    "name" : "android::trait_trivial_dtor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4167,8 +3759,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4184,8 +3774,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4201,8 +3790,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
    "name" : "android::trait_trivial_dtor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4218,8 +3805,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
    "name" : "android::trait_trivial_dtor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4235,8 +3821,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4252,8 +3836,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4269,8 +3852,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
    "name" : "android::trait_trivial_dtor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4286,8 +3867,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
    "name" : "android::trait_trivial_dtor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4303,8 +3883,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4320,8 +3898,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4337,8 +3914,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
    "name" : "android::trait_trivial_dtor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4354,8 +3929,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
    "name" : "android::trait_trivial_dtor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4371,8 +3945,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
    "name" : "android::trait_trivial_dtor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4388,8 +3960,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
    "name" : "android::trait_trivial_dtor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4405,8 +3976,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4422,8 +3991,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4439,8 +4007,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_move<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4456,8 +4022,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_move<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4473,8 +4037,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_move<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4490,8 +4052,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
    "name" : "android::trait_trivial_move<android::String8>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/String8.h",
    "underlying_type" : "_ZTIj"
@@ -4507,8 +4067,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
    "name" : "android::trait_trivial_move<android::String8>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h",
    "underlying_type" : "_ZTIj"
@@ -4524,8 +4083,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_8String16EE6$valueE",
    "name" : "android::trait_trivial_move<android::String16>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h",
    "underlying_type" : "_ZTIj"
@@ -4541,8 +4098,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
    "name" : "android::trait_trivial_move<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4558,8 +4113,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
    "name" : "android::trait_trivial_move<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4575,8 +4129,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
    "name" : "android::trait_trivial_move<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4592,8 +4144,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
    "name" : "android::trait_trivial_move<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4609,8 +4160,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
    "name" : "android::trait_trivial_move<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4626,8 +4175,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
    "name" : "android::trait_trivial_move<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4643,8 +4191,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
    "name" : "android::trait_trivial_move<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4660,8 +4206,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
    "name" : "android::trait_trivial_move<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4677,8 +4222,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
    "name" : "android::trait_trivial_move<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4694,8 +4237,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
    "name" : "android::trait_trivial_move<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4711,8 +4253,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
    "name" : "android::trait_trivial_move<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4728,8 +4268,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
    "name" : "android::trait_trivial_move<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4745,8 +4284,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
    "name" : "android::trait_trivial_move<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4762,8 +4299,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
    "name" : "android::trait_trivial_move<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4779,8 +4315,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
    "name" : "android::trait_trivial_move<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4796,8 +4330,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
    "name" : "android::trait_trivial_move<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4813,8 +4346,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4830,8 +4361,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4847,8 +4377,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
    "name" : "android::trait_trivial_move<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4864,8 +4392,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
    "name" : "android::trait_trivial_move<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4881,8 +4408,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
    "name" : "android::trait_trivial_move<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4898,8 +4423,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
    "name" : "android::trait_trivial_move<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4915,8 +4439,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
    "name" : "android::trait_trivial_move<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4932,8 +4454,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
    "name" : "android::trait_trivial_move<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4949,8 +4470,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
    "name" : "android::trait_trivial_move<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4966,8 +4485,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
    "name" : "android::trait_trivial_move<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4983,8 +4501,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5000,8 +4516,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5021,8 +4536,6 @@
    ],
    "linker_set_key" : "_ZTIN7android5Mutex8$PRIVATEE",
    "name" : "android::Mutex::(unnamed)",
-   "referenced_type" : "_ZTIN7android5Mutex8$PRIVATEE",
-   "self_type" : "_ZTIN7android5Mutex8$PRIVATEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Mutex.h",
    "underlying_type" : "_ZTIj"
@@ -5054,8 +4567,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper12$EVENT_ERRORE",
    "name" : "android::Looper::(unnamed)",
-   "referenced_type" : "_ZTIN7android6Looper12$EVENT_ERRORE",
-   "self_type" : "_ZTIN7android6Looper12$EVENT_ERRORE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "underlying_type" : "_ZTIj"
@@ -5083,8 +4594,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper14$POLL_CALLBACKE",
    "name" : "android::Looper::(unnamed)",
-   "referenced_type" : "_ZTIN7android6Looper14$POLL_CALLBACKE",
-   "self_type" : "_ZTIN7android6Looper14$POLL_CALLBACKE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "underlying_type" : "_ZTIi"
@@ -5100,8 +4609,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper28$PREPARE_ALLOW_NON_CALLBACKSE",
    "name" : "android::Looper::(unnamed)",
-   "referenced_type" : "_ZTIN7android6Looper28$PREPARE_ALLOW_NON_CALLBACKSE",
-   "self_type" : "_ZTIN7android6Looper28$PREPARE_ALLOW_NON_CALLBACKSE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "underlying_type" : "_ZTIj"
@@ -5121,8 +4628,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6RWLock8$PRIVATEE",
    "name" : "android::RWLock::(unnamed)",
-   "referenced_type" : "_ZTIN7android6RWLock8$PRIVATEE",
-   "self_type" : "_ZTIN7android6RWLock8$PRIVATEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h",
    "underlying_type" : "_ZTIj"
@@ -5154,8 +4659,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEE17$has_trivial_copyE",
    "name" : "android::traits<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEE17$has_trivial_copyE",
-   "self_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEE17$has_trivial_copyE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5187,8 +4690,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEE17$has_trivial_copyE",
    "name" : "android::traits<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEE17$has_trivial_copyE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEE17$has_trivial_copyE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5220,8 +4721,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper8ResponseEE17$has_trivial_copyE",
    "name" : "android::traits<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEE17$has_trivial_copyE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEE17$has_trivial_copyE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5253,8 +4752,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7FileMap9MapAdviceE",
    "name" : "android::FileMap::MapAdvice",
-   "referenced_type" : "_ZTIN7android7FileMap9MapAdviceE",
-   "self_type" : "_ZTIN7android7FileMap9MapAdviceE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h",
    "underlying_type" : "_ZTIj"
@@ -5271,8 +4768,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
-   "self_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5289,8 +4784,7 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5315,8 +4809,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
-   "self_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5341,8 +4833,7 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5362,8 +4853,6 @@
    ],
    "linker_set_key" : "_ZTIN7android9Condition10WakeUpTypeE",
    "name" : "android::Condition::WakeUpType",
-   "referenced_type" : "_ZTIN7android9Condition10WakeUpTypeE",
-   "self_type" : "_ZTIN7android9Condition10WakeUpTypeE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Condition.h",
    "underlying_type" : "_ZTIj"
@@ -5383,8 +4872,6 @@
    ],
    "linker_set_key" : "_ZTIN7android9Condition8$PRIVATEE",
    "name" : "android::Condition::(unnamed)",
-   "referenced_type" : "_ZTIN7android9Condition8$PRIVATEE",
-   "self_type" : "_ZTIN7android9Condition8$PRIVATEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Condition.h",
    "underlying_type" : "_ZTIj"
@@ -5401,8 +4888,6 @@
    ],
    "linker_set_key" : "_ZTIN7android9FdPrinter18$MAX_FORMAT_STRINGE",
    "name" : "android::FdPrinter::(unnamed)",
-   "referenced_type" : "_ZTIN7android9FdPrinter18$MAX_FORMAT_STRINGE",
-   "self_type" : "_ZTIN7android9FdPrinter18$MAX_FORMAT_STRINGE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "underlying_type" : "_ZTIj"
@@ -5435,9 +4920,7 @@
      "referenced_type" : "_ZTIPPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPFiPvES_PKcimPS_E",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPFiPvES_PKcimPS_E",
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
   {
@@ -5453,9 +4936,7 @@
      "referenced_type" : "_ZTIPKv"
     }
    ],
-   "referenced_type" : "_ZTIFiPKvS0_E",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPKvS0_E",
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
   {
@@ -5474,9 +4955,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPKvS0_PvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPKvS0_PvE",
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
   {
@@ -5489,9 +4968,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPvE",
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
   {
@@ -5510,18 +4987,14 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiiiPvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiiiPvE",
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIFvvE",
    "name" : "void ()",
-   "referenced_type" : "_ZTIFvvE",
    "return_type" : "_ZTIv",
-   "self_type" : "_ZTIFvvE",
    "source_file" : "system/core/libutils/include/utils/misc.h"
   }
  ],
@@ -6850,48 +6323,6 @@
    "source_file" : "system/core/libutils/include/utils/misc.h"
   },
   {
-   "function_name" : "android::sp<android::LooperCallback>::clear",
-   "linker_set_key" : "_ZN7android2spINS_14LooperCallbackEE5clearEv",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android2spINS_14LooperCallbackEEE"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
-  },
-  {
-   "function_name" : "android::sp<android::Looper>::operator=",
-   "linker_set_key" : "_ZN7android2spINS_6LooperEEaSEOS2_",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android2spINS_6LooperEEE"
-    },
-    {
-     "referenced_type" : "_ZTION7android2spINS_6LooperEEE"
-    }
-   ],
-   "return_type" : "_ZTIRN7android2spINS_6LooperEEE",
-   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
-  },
-  {
-   "function_name" : "android::sp<android::Thread>::clear",
-   "linker_set_key" : "_ZN7android2spINS_6ThreadEE5clearEv",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android2spINS_6ThreadEEE"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
-  },
-  {
    "function_name" : "android::LightRefBase_reportIncStrongRequireStrongFailed",
    "linker_set_key" : "_ZN7android47LightRefBase_reportIncStrongRequireStrongFailedEPKv",
    "parameters" :
@@ -6976,6 +6407,34 @@
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
   {
+   "function_name" : "android::Looper::getFdStateDebug",
+   "linker_set_key" : "_ZN7android6Looper15getFdStateDebugEiPiS1_PNS_2spINS_14LooperCallbackEEEPPv",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "_ZTIPN7android6LooperE"
+    },
+    {
+     "referenced_type" : "_ZTIi"
+    },
+    {
+     "referenced_type" : "_ZTIPi"
+    },
+    {
+     "referenced_type" : "_ZTIPi"
+    },
+    {
+     "referenced_type" : "_ZTIPN7android2spINS_14LooperCallbackEEE"
+    },
+    {
+     "referenced_type" : "_ZTIPPv"
+    }
+   ],
+   "return_type" : "_ZTIb",
+   "source_file" : "system/core/libutils/include/utils/Looper.h"
+  },
+  {
    "function_name" : "android::Looper::sendMessageAtTime",
    "linker_set_key" : "_ZN7android6Looper17sendMessageAtTimeElRKNS_2spINS_14MessageHandlerEEERKNS_7MessageE",
    "parameters" :
@@ -7701,7 +7160,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -7730,7 +7189,7 @@
    "parameters" :
    [
     {
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7749,7 +7208,7 @@
    "parameters" :
    [
     {
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7768,7 +7227,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7784,7 +7243,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7800,7 +7259,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7816,7 +7275,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7832,7 +7291,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7848,7 +7307,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIb"
@@ -7868,7 +7327,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7885,7 +7344,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7902,7 +7361,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIi"
@@ -7919,7 +7378,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIj"
@@ -7939,7 +7398,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -7953,7 +7412,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -7967,7 +7426,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -7981,7 +7440,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -7995,7 +7454,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8008,7 +7467,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIm"
@@ -8025,7 +7484,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8044,7 +7503,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8060,7 +7519,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIm"
@@ -8076,7 +7535,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8089,7 +7548,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8108,7 +7567,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8121,7 +7580,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8140,7 +7599,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8159,7 +7618,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8175,7 +7634,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8194,10 +7653,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8210,7 +7669,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8226,7 +7685,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8245,10 +7704,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIi",
@@ -8263,7 +7722,7 @@
      "referenced_type" : "_ZTIPKc"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -8278,7 +7737,7 @@
      "referenced_type" : "_ZTISt9__va_list"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -8288,7 +7747,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8301,7 +7760,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8317,7 +7776,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8333,7 +7792,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8352,7 +7811,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8368,7 +7827,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8387,7 +7846,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8403,7 +7862,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8422,7 +7881,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIRKN7android8String16E"
@@ -8438,10 +7897,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8454,7 +7913,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8467,7 +7926,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8483,7 +7942,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8502,7 +7961,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8518,7 +7977,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8537,7 +7996,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8553,7 +8012,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8572,7 +8031,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIRKN7android8String16E"
@@ -8588,10 +8047,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8604,7 +8063,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8617,7 +8076,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8630,7 +8089,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -9005,7 +8464,7 @@
      "referenced_type" : "_ZTIPN7android8String16E"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -9159,7 +8618,7 @@
      "referenced_type" : "_ZTIPN7android8String16E"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -9571,7 +9030,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIm"
@@ -9587,7 +9046,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIm",
@@ -9601,7 +9060,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIm",
@@ -9740,415 +9199,19 @@
    "source_file" : "system/core/libutils/include/utils/Thread.h"
   },
   {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::sysprop_change_callback_info>::do_destroy",
-   "linker_set_key" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE10do_destroyEPvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::sysprop_change_callback_info>::do_construct",
-   "linker_set_key" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE12do_constructEPvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::sysprop_change_callback_info>::do_move_forward",
-   "linker_set_key" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE15do_move_forwardEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::sysprop_change_callback_info>::do_move_backward",
-   "linker_set_key" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE16do_move_backwardEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::sysprop_change_callback_info>::do_copy",
-   "linker_set_key" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE7do_copyEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::sysprop_change_callback_info>::do_splat",
-   "linker_set_key" : "_ZNK7android6VectorINS_28sysprop_change_callback_infoEE8do_splatEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::MessageEnvelope>::do_destroy",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE10do_destroyEPvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::MessageEnvelope>::do_construct",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE12do_constructEPvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::MessageEnvelope>::do_move_forward",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE15do_move_forwardEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::MessageEnvelope>::do_move_backward",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE16do_move_backwardEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::MessageEnvelope>::do_copy",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE7do_copyEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::MessageEnvelope>::do_splat",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper15MessageEnvelopeEE8do_splatEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::Response>::do_destroy",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper8ResponseEE10do_destroyEPvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::Response>::do_construct",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper8ResponseEE12do_constructEPvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::Response>::do_move_forward",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper8ResponseEE15do_move_forwardEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::Response>::do_move_backward",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper8ResponseEE16do_move_backwardEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::Response>::do_copy",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper8ResponseEE7do_copyEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
-   "access" : "protected",
-   "function_name" : "android::Vector<android::Looper::Response>::do_splat",
-   "linker_set_key" : "_ZNK7android6VectorINS_6Looper8ResponseEE8do_splatEPvPKvm",
-   "parameters" :
-   [
-    {
-     "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE"
-    },
-    {
-     "referenced_type" : "_ZTIPv"
-    },
-    {
-     "referenced_type" : "_ZTIPKv"
-    },
-    {
-     "referenced_type" : "_ZTIm"
-    }
-   ],
-   "return_type" : "_ZTIv",
-   "source_file" : "system/core/libutils/include/utils/Vector.h"
-  },
-  {
    "function_name" : "android::RefBase::createWeak",
    "linker_set_key" : "_ZNK7android7RefBase10createWeakEPKv",
    "parameters" :
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
     }
    ],
-   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
   {
@@ -10158,10 +9221,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
-   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
   {
@@ -10187,7 +9250,7 @@
      "referenced_type" : "_ZTIPKN7android7RefBase12weakref_typeE"
     }
    ],
-   "return_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
   {
@@ -10210,7 +9273,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10226,7 +9289,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIi",
@@ -10239,7 +9302,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10255,7 +9318,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10271,7 +9334,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10288,10 +9351,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -10302,10 +9365,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -10315,7 +9378,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -10335,7 +9398,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIm",
@@ -10935,7 +9998,6 @@
    "linker_set_key" : "_ZTIRA1_KDs",
    "name" : "const char16_t (&)[1]",
    "referenced_type" : "_ZTIA1_KDs",
-   "self_type" : "_ZTIRA1_KDs",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -10943,8 +10005,7 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIRKN7android10VectorImplE",
    "name" : "const android::VectorImpl &",
-   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRKN7android10VectorImplE",
+   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -10953,7 +10014,6 @@
    "linker_set_key" : "_ZTIRKN7android16ReferenceRenamerE",
    "name" : "const android::ReferenceRenamer &",
    "referenced_type" : "_ZTIKN7android16ReferenceRenamerE",
-   "self_type" : "_ZTIRKN7android16ReferenceRenamerE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -10962,7 +10022,6 @@
    "linker_set_key" : "_ZTIRKN7android16SortedVectorImplE",
    "name" : "const android::SortedVectorImpl &",
    "referenced_type" : "_ZTIKN7android16SortedVectorImplE",
-   "self_type" : "_ZTIRKN7android16SortedVectorImplE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -10971,7 +10030,6 @@
    "linker_set_key" : "_ZTIRKN7android28sysprop_change_callback_infoE",
    "name" : "const android::sysprop_change_callback_info &",
    "referenced_type" : "_ZTIKN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIRKN7android28sysprop_change_callback_infoE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -10980,7 +10038,6 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_14LooperCallbackEEE",
    "name" : "const android::sp<android::LooperCallback> &",
    "referenced_type" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIRKN7android2spINS_14LooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -10989,7 +10046,6 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_14MessageHandlerEEE",
    "name" : "const android::sp<android::MessageHandler> &",
    "referenced_type" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIRKN7android2spINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -10998,7 +10054,6 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "const android::sp<android::SimpleLooperCallback> &",
    "referenced_type" : "_ZTIKN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIRKN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11007,16 +10062,14 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_6LooperEEE",
    "name" : "const android::sp<android::Looper> &",
    "referenced_type" : "_ZTIKN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIRKN7android2spINS_6LooperEEE",
    "size" : 8,
-   "source_file" : "system/core/libutils/include/utils/Looper.h"
+   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
   {
    "alignment" : 8,
    "linker_set_key" : "_ZTIRKN7android2spINS_6ThreadEEE",
    "name" : "const android::sp<android::Thread> &",
    "referenced_type" : "_ZTIKN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIRKN7android2spINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11025,7 +10078,6 @@
    "linker_set_key" : "_ZTIRKN7android2wpINS_14MessageHandlerEEE",
    "name" : "const android::wp<android::MessageHandler> &",
    "referenced_type" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIRKN7android2wpINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11034,7 +10086,6 @@
    "linker_set_key" : "_ZTIRKN7android6Looper15MessageEnvelopeE",
    "name" : "const android::Looper::MessageEnvelope &",
    "referenced_type" : "_ZTIKN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIRKN7android6Looper15MessageEnvelopeE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11043,7 +10094,6 @@
    "linker_set_key" : "_ZTIRKN7android6Looper8ResponseE",
    "name" : "const android::Looper::Response &",
    "referenced_type" : "_ZTIKN7android6Looper8ResponseE",
-   "self_type" : "_ZTIRKN7android6Looper8ResponseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11052,7 +10102,6 @@
    "linker_set_key" : "_ZTIRKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "const android::Vector<android::sysprop_change_callback_info> &",
    "referenced_type" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIRKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11061,7 +10110,6 @@
    "linker_set_key" : "_ZTIRKN7android7MessageE",
    "name" : "const android::Message &",
    "referenced_type" : "_ZTIKN7android7MessageE",
-   "self_type" : "_ZTIRKN7android7MessageE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -11070,7 +10118,6 @@
    "linker_set_key" : "_ZTIRKN7android7String8E",
    "name" : "const android::String8 &",
    "referenced_type" : "_ZTIKN7android7String8E",
-   "self_type" : "_ZTIRKN7android7String8E",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -11078,8 +10125,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIRKN7android7String8E",
    "name" : "const android::String8 &",
-   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11088,7 +10135,6 @@
    "linker_set_key" : "_ZTIRKN7android8String1610StaticDataILm1EEE",
    "name" : "const android::String16::StaticData<1> &",
    "referenced_type" : "_ZTIKN7android8String1610StaticDataILm1EEE",
-   "self_type" : "_ZTIRKN7android8String1610StaticDataILm1EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11097,7 +10143,6 @@
    "linker_set_key" : "_ZTIRKN7android8String16E",
    "name" : "const android::String16 &",
    "referenced_type" : "_ZTIKN7android8String16E",
-   "self_type" : "_ZTIRKN7android8String16E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11106,7 +10151,6 @@
    "linker_set_key" : "_ZTIRKa",
    "name" : "const signed char &",
    "referenced_type" : "_ZTIKa",
-   "self_type" : "_ZTIRKa",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11115,7 +10159,6 @@
    "linker_set_key" : "_ZTIRKb",
    "name" : "const bool &",
    "referenced_type" : "_ZTIKb",
-   "self_type" : "_ZTIRKb",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11124,7 +10167,6 @@
    "linker_set_key" : "_ZTIRKd",
    "name" : "const double &",
    "referenced_type" : "_ZTIKd",
-   "self_type" : "_ZTIRKd",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11133,7 +10175,6 @@
    "linker_set_key" : "_ZTIRKf",
    "name" : "const float &",
    "referenced_type" : "_ZTIKf",
-   "self_type" : "_ZTIRKf",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11142,7 +10183,6 @@
    "linker_set_key" : "_ZTIRKh",
    "name" : "const unsigned char &",
    "referenced_type" : "_ZTIKh",
-   "self_type" : "_ZTIRKh",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11151,7 +10191,6 @@
    "linker_set_key" : "_ZTIRKi",
    "name" : "const int &",
    "referenced_type" : "_ZTIKi",
-   "self_type" : "_ZTIRKi",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11160,7 +10199,6 @@
    "linker_set_key" : "_ZTIRKj",
    "name" : "const unsigned int &",
    "referenced_type" : "_ZTIKj",
-   "self_type" : "_ZTIRKj",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11169,7 +10207,6 @@
    "linker_set_key" : "_ZTIRKl",
    "name" : "const long &",
    "referenced_type" : "_ZTIKl",
-   "self_type" : "_ZTIRKl",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11178,7 +10215,6 @@
    "linker_set_key" : "_ZTIRKm",
    "name" : "const unsigned long &",
    "referenced_type" : "_ZTIKm",
-   "self_type" : "_ZTIRKm",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11187,7 +10223,6 @@
    "linker_set_key" : "_ZTIRKs",
    "name" : "const short &",
    "referenced_type" : "_ZTIKs",
-   "self_type" : "_ZTIRKs",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11196,7 +10231,6 @@
    "linker_set_key" : "_ZTIRKt",
    "name" : "const unsigned short &",
    "referenced_type" : "_ZTIKt",
-   "self_type" : "_ZTIRKt",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11204,8 +10238,7 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIRN7android10VectorImplE",
    "name" : "android::VectorImpl &",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRN7android10VectorImplE",
+   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11213,8 +10246,7 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIRN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl &",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRN7android16SortedVectorImplE",
+   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11223,7 +10255,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_14LooperCallbackEEE",
    "name" : "android::sp<android::LooperCallback> &",
    "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIRN7android2spINS_14LooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11232,7 +10263,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler> &",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIRN7android2spINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11241,7 +10271,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback> &",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIRN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11250,7 +10279,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper> &",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIRN7android2spINS_6LooperEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11259,7 +10287,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread> &",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIRN7android2spINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11268,7 +10295,6 @@
    "linker_set_key" : "_ZTIRN7android5MutexE",
    "name" : "android::Mutex &",
    "referenced_type" : "_ZTIN7android5MutexE",
-   "self_type" : "_ZTIRN7android5MutexE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -11277,7 +10303,6 @@
    "linker_set_key" : "_ZTIRN7android6Looper8ResponseE",
    "name" : "android::Looper::Response &",
    "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIRN7android6Looper8ResponseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11286,7 +10311,6 @@
    "linker_set_key" : "_ZTIRN7android6RWLockE",
    "name" : "android::RWLock &",
    "referenced_type" : "_ZTIN7android6RWLockE",
-   "self_type" : "_ZTIRN7android6RWLockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -11295,7 +10319,6 @@
    "linker_set_key" : "_ZTIRN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::Vector<android::sysprop_change_callback_info> &",
    "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIRN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11304,7 +10327,6 @@
    "linker_set_key" : "_ZTIRN7android7FileMapE",
    "name" : "android::FileMap &",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIRN7android7FileMapE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -11313,7 +10335,6 @@
    "linker_set_key" : "_ZTIRN7android7PrinterE",
    "name" : "android::Printer &",
    "referenced_type" : "_ZTIN7android7PrinterE",
-   "self_type" : "_ZTIRN7android7PrinterE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11322,7 +10343,6 @@
    "linker_set_key" : "_ZTIRN7android7String8E",
    "name" : "android::String8 &",
    "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIRN7android7String8E",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -11330,8 +10350,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIRN7android7String8E",
    "name" : "android::String8 &",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIRN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11340,7 +10360,6 @@
    "linker_set_key" : "_ZTIRN7android8String16E",
    "name" : "android::String16 &",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIRN7android8String16E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11349,7 +10368,6 @@
    "linker_set_key" : "_ZTIRP13native_handle",
    "name" : "native_handle *&",
    "referenced_type" : "_ZTIP13native_handle",
-   "self_type" : "_ZTIRP13native_handle",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11358,7 +10376,6 @@
    "linker_set_key" : "_ZTIRPFiiiPvE",
    "name" : "int (*&)(int, int, void *)",
    "referenced_type" : "_ZTIPFiiiPvE",
-   "self_type" : "_ZTIRPFiiiPvE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11367,7 +10384,6 @@
    "linker_set_key" : "_ZTIRb",
    "name" : "bool &",
    "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIRb",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   }
@@ -11379,7 +10395,6 @@
    "linker_set_key" : "_ZTIP13native_handle",
    "name" : "native_handle *",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIP13native_handle",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11388,7 +10403,6 @@
    "linker_set_key" : "_ZTIP18android_flex_plane",
    "name" : "android_flex_plane *",
    "referenced_type" : "_ZTI18android_flex_plane",
-   "self_type" : "_ZTIP18android_flex_plane",
    "size" : 8,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -11397,7 +10411,6 @@
    "linker_set_key" : "_ZTIP3DIR",
    "name" : "DIR *",
    "referenced_type" : "_ZTI3DIR",
-   "self_type" : "_ZTIP3DIR",
    "size" : 8,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11406,7 +10419,6 @@
    "linker_set_key" : "_ZTIP7__sFILE",
    "name" : "__sFILE *",
    "referenced_type" : "_ZTI7__sFILE",
-   "self_type" : "_ZTIP7__sFILE",
    "size" : 8,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11415,7 +10427,6 @@
    "linker_set_key" : "_ZTIP7log_msg",
    "name" : "log_msg *",
    "referenced_type" : "_ZTI7log_msg",
-   "self_type" : "_ZTIP7log_msg",
    "size" : 8,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -11424,7 +10435,6 @@
    "linker_set_key" : "_ZTIPDs",
    "name" : "char16_t *",
    "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIPDs",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11433,7 +10443,6 @@
    "linker_set_key" : "_ZTIPFiPFiPvES_PKcimPS_E",
    "name" : "int (*)(int (*)(void *), void *, const char *, int, unsigned long, void **)",
    "referenced_type" : "_ZTIFiPFiPvES_PKcimPS_E",
-   "self_type" : "_ZTIPFiPFiPvES_PKcimPS_E",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
@@ -11442,7 +10451,6 @@
    "linker_set_key" : "_ZTIPFiPKvS0_E",
    "name" : "int (*)(const void *, const void *)",
    "referenced_type" : "_ZTIFiPKvS0_E",
-   "self_type" : "_ZTIPFiPKvS0_E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11451,7 +10459,6 @@
    "linker_set_key" : "_ZTIPFiPKvS0_PvE",
    "name" : "int (*)(const void *, const void *, void *)",
    "referenced_type" : "_ZTIFiPKvS0_PvE",
-   "self_type" : "_ZTIPFiPKvS0_PvE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11460,7 +10467,6 @@
    "linker_set_key" : "_ZTIPFiPvE",
    "name" : "int (*)(void *)",
    "referenced_type" : "_ZTIFiPvE",
-   "self_type" : "_ZTIPFiPvE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
@@ -11469,7 +10475,6 @@
    "linker_set_key" : "_ZTIPFiiiPvE",
    "name" : "int (*)(int, int, void *)",
    "referenced_type" : "_ZTIFiiiPvE",
-   "self_type" : "_ZTIPFiiiPvE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11478,7 +10483,6 @@
    "linker_set_key" : "_ZTIPFvvE",
    "name" : "void (*)()",
    "referenced_type" : "_ZTIFvvE",
-   "self_type" : "_ZTIPFvvE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/misc.h"
   },
@@ -11487,7 +10491,6 @@
    "linker_set_key" : "_ZTIPK13native_handle",
    "name" : "const native_handle *",
    "referenced_type" : "_ZTIK13native_handle",
-   "self_type" : "_ZTIPK13native_handle",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -11496,7 +10499,6 @@
    "linker_set_key" : "_ZTIPK7log_msg",
    "name" : "const log_msg *",
    "referenced_type" : "_ZTIK7log_msg",
-   "self_type" : "_ZTIPK7log_msg",
    "size" : 8,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -11505,7 +10507,6 @@
    "linker_set_key" : "_ZTIPKDi",
    "name" : "const char32_t *",
    "referenced_type" : "_ZTIKDi",
-   "self_type" : "_ZTIPKDi",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11514,7 +10515,6 @@
    "linker_set_key" : "_ZTIPKDs",
    "name" : "const char16_t *",
    "referenced_type" : "_ZTIKDs",
-   "self_type" : "_ZTIPKDs",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11523,7 +10523,6 @@
    "linker_set_key" : "_ZTIPKN7android10VectorImplE",
    "name" : "const android::VectorImpl *",
    "referenced_type" : "_ZTIKN7android10VectorImplE",
-   "self_type" : "_ZTIPKN7android10VectorImplE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h"
   },
@@ -11531,8 +10530,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPKN7android10VectorImplE",
    "name" : "const android::VectorImpl *",
-   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11541,7 +10540,6 @@
    "linker_set_key" : "_ZTIPKN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "const android::LightRefBase<android::NativeHandle> *",
    "referenced_type" : "_ZTIKN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIPKN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -11550,7 +10548,6 @@
    "linker_set_key" : "_ZTIPKN7android12NativeHandleE",
    "name" : "const android::NativeHandle *",
    "referenced_type" : "_ZTIKN7android12NativeHandleE",
-   "self_type" : "_ZTIPKN7android12NativeHandleE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -11559,7 +10556,6 @@
    "linker_set_key" : "_ZTIPKN7android16SortedVectorImplE",
    "name" : "const android::SortedVectorImpl *",
    "referenced_type" : "_ZTIKN7android16SortedVectorImplE",
-   "self_type" : "_ZTIPKN7android16SortedVectorImplE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11568,7 +10564,6 @@
    "linker_set_key" : "_ZTIPKN7android28sysprop_change_callback_infoE",
    "name" : "const android::sysprop_change_callback_info *",
    "referenced_type" : "_ZTIKN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIPKN7android28sysprop_change_callback_infoE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11577,7 +10572,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_14LooperCallbackEEE",
    "name" : "const android::sp<android::LooperCallback> *",
    "referenced_type" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIPKN7android2spINS_14LooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11586,7 +10580,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_14MessageHandlerEEE",
    "name" : "const android::sp<android::MessageHandler> *",
    "referenced_type" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPKN7android2spINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11595,7 +10588,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_6LooperEEE",
    "name" : "const android::sp<android::Looper> *",
    "referenced_type" : "_ZTIKN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIPKN7android2spINS_6LooperEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11604,7 +10596,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_6ThreadEEE",
    "name" : "const android::sp<android::Thread> *",
    "referenced_type" : "_ZTIKN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIPKN7android2spINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11613,7 +10604,6 @@
    "linker_set_key" : "_ZTIPKN7android2wpINS_14MessageHandlerEEE",
    "name" : "const android::wp<android::MessageHandler> *",
    "referenced_type" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPKN7android2wpINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11622,7 +10612,6 @@
    "linker_set_key" : "_ZTIPKN7android2wpINS_6ThreadEEE",
    "name" : "const android::wp<android::Thread> *",
    "referenced_type" : "_ZTIKN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIPKN7android2wpINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11631,7 +10620,6 @@
    "linker_set_key" : "_ZTIPKN7android4base11borrowed_fdE",
    "name" : "const android::base::borrowed_fd *",
    "referenced_type" : "_ZTIKN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIPKN7android4base11borrowed_fdE",
    "size" : 8,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11640,7 +10628,6 @@
    "linker_set_key" : "_ZTIPKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "const android::base::unique_fd_impl<android::base::DefaultCloser> *",
    "referenced_type" : "_ZTIKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIPKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 8,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11649,7 +10636,6 @@
    "linker_set_key" : "_ZTIPKN7android6Looper15MessageEnvelopeE",
    "name" : "const android::Looper::MessageEnvelope *",
    "referenced_type" : "_ZTIKN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIPKN7android6Looper15MessageEnvelopeE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11658,7 +10644,6 @@
    "linker_set_key" : "_ZTIPKN7android6Looper7RequestE",
    "name" : "const android::Looper::Request *",
    "referenced_type" : "_ZTIKN7android6Looper7RequestE",
-   "self_type" : "_ZTIPKN7android6Looper7RequestE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -11667,7 +10652,6 @@
    "linker_set_key" : "_ZTIPKN7android6Looper8ResponseE",
    "name" : "const android::Looper::Response *",
    "referenced_type" : "_ZTIKN7android6Looper8ResponseE",
-   "self_type" : "_ZTIPKN7android6Looper8ResponseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11676,7 +10660,6 @@
    "linker_set_key" : "_ZTIPKN7android6LooperE",
    "name" : "const android::Looper *",
    "referenced_type" : "_ZTIKN7android6LooperE",
-   "self_type" : "_ZTIPKN7android6LooperE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -11685,7 +10668,6 @@
    "linker_set_key" : "_ZTIPKN7android6ThreadE",
    "name" : "const android::Thread *",
    "referenced_type" : "_ZTIKN7android6ThreadE",
-   "self_type" : "_ZTIPKN7android6ThreadE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Thread.h"
   },
@@ -11694,7 +10676,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "const android::Vector<android::sysprop_change_callback_info> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11703,7 +10684,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "const android::Vector<android::Looper::MessageEnvelope> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11712,7 +10692,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "const android::Vector<android::Looper::Response> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11721,7 +10700,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_7String8EEE",
    "name" : "const android::Vector<android::String8> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_7String8EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h"
   },
@@ -11730,7 +10708,6 @@
    "linker_set_key" : "_ZTIPKN7android7FileMapE",
    "name" : "const android::FileMap *",
    "referenced_type" : "_ZTIKN7android7FileMapE",
-   "self_type" : "_ZTIPKN7android7FileMapE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -11739,7 +10716,6 @@
    "linker_set_key" : "_ZTIPKN7android7RefBase12weakref_typeE",
    "name" : "const android::RefBase::weakref_type *",
    "referenced_type" : "_ZTIKN7android7RefBase12weakref_typeE",
-   "self_type" : "_ZTIPKN7android7RefBase12weakref_typeE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -11748,7 +10724,6 @@
    "linker_set_key" : "_ZTIPKN7android7RefBaseE",
    "name" : "const android::RefBase *",
    "referenced_type" : "_ZTIKN7android7RefBaseE",
-   "self_type" : "_ZTIPKN7android7RefBaseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11756,8 +10731,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPKN7android7RefBaseE",
    "name" : "const android::RefBase *",
-   "referenced_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -11766,7 +10741,6 @@
    "linker_set_key" : "_ZTIPKN7android7String8E",
    "name" : "const android::String8 *",
    "referenced_type" : "_ZTIKN7android7String8E",
-   "self_type" : "_ZTIPKN7android7String8E",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -11774,8 +10748,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPKN7android7String8E",
    "name" : "const android::String8 *",
-   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11784,7 +10758,6 @@
    "linker_set_key" : "_ZTIPKN7android8String16E",
    "name" : "const android::String16 *",
    "referenced_type" : "_ZTIKN7android8String16E",
-   "self_type" : "_ZTIPKN7android8String16E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11793,7 +10766,6 @@
    "linker_set_key" : "_ZTIPKN7android9StopWatchE",
    "name" : "const android::StopWatch *",
    "referenced_type" : "_ZTIKN7android9StopWatchE",
-   "self_type" : "_ZTIPKN7android9StopWatchE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -11802,7 +10774,6 @@
    "linker_set_key" : "_ZTIPKN7android9TokenizerE",
    "name" : "const android::Tokenizer *",
    "referenced_type" : "_ZTIKN7android9TokenizerE",
-   "self_type" : "_ZTIPKN7android9TokenizerE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -11811,7 +10782,6 @@
    "linker_set_key" : "_ZTIPKc",
    "name" : "const char *",
    "referenced_type" : "_ZTIKc",
-   "self_type" : "_ZTIPKc",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -11820,7 +10790,6 @@
    "linker_set_key" : "_ZTIPKh",
    "name" : "const unsigned char *",
    "referenced_type" : "_ZTIKh",
-   "self_type" : "_ZTIPKh",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/JenkinsHash.h"
   },
@@ -11829,7 +10798,6 @@
    "linker_set_key" : "_ZTIPKt",
    "name" : "const unsigned short *",
    "referenced_type" : "_ZTIKt",
-   "self_type" : "_ZTIPKt",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/JenkinsHash.h"
   },
@@ -11838,7 +10806,6 @@
    "linker_set_key" : "_ZTIPKv",
    "name" : "const void *",
    "referenced_type" : "_ZTIKv",
-   "self_type" : "_ZTIPKv",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -11847,7 +10814,6 @@
    "linker_set_key" : "_ZTIPN7android10LogPrinterE",
    "name" : "android::LogPrinter *",
    "referenced_type" : "_ZTIN7android10LogPrinterE",
-   "self_type" : "_ZTIPN7android10LogPrinterE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11855,8 +10821,7 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPN7android10VectorImplE",
    "name" : "android::VectorImpl *",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android10VectorImplE",
+   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11865,7 +10830,6 @@
    "linker_set_key" : "_ZTIPN7android11ScopedTraceE",
    "name" : "android::ScopedTrace *",
    "referenced_type" : "_ZTIN7android11ScopedTraceE",
-   "self_type" : "_ZTIPN7android11ScopedTraceE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Trace.h"
   },
@@ -11874,7 +10838,6 @@
    "linker_set_key" : "_ZTIPN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "android::LightRefBase<android::NativeHandle> *",
    "referenced_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIPN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -11883,7 +10846,6 @@
    "linker_set_key" : "_ZTIPN7android12NativeHandleE",
    "name" : "android::NativeHandle *",
    "referenced_type" : "_ZTIN7android12NativeHandleE",
-   "self_type" : "_ZTIPN7android12NativeHandleE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11892,7 +10854,6 @@
    "linker_set_key" : "_ZTIPN7android13PrefixPrinterE",
    "name" : "android::PrefixPrinter *",
    "referenced_type" : "_ZTIN7android13PrefixPrinterE",
-   "self_type" : "_ZTIPN7android13PrefixPrinterE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11901,7 +10862,6 @@
    "linker_set_key" : "_ZTIPN7android14LooperCallbackE",
    "name" : "android::LooperCallback *",
    "referenced_type" : "_ZTIN7android14LooperCallbackE",
-   "self_type" : "_ZTIPN7android14LooperCallbackE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11910,7 +10870,6 @@
    "linker_set_key" : "_ZTIPN7android14MessageHandlerE",
    "name" : "android::MessageHandler *",
    "referenced_type" : "_ZTIN7android14MessageHandlerE",
-   "self_type" : "_ZTIPN7android14MessageHandlerE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11919,7 +10878,6 @@
    "linker_set_key" : "_ZTIPN7android14StaticString16ILm1EEE",
    "name" : "android::StaticString16<1> *",
    "referenced_type" : "_ZTIN7android14StaticString16ILm1EEE",
-   "self_type" : "_ZTIPN7android14StaticString16ILm1EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11928,7 +10886,6 @@
    "linker_set_key" : "_ZTIPN7android14String8PrinterE",
    "name" : "android::String8Printer *",
    "referenced_type" : "_ZTIN7android14String8PrinterE",
-   "self_type" : "_ZTIPN7android14String8PrinterE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11937,7 +10894,6 @@
    "linker_set_key" : "_ZTIPN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer *",
    "referenced_type" : "_ZTIN7android16ReferenceRenamerE",
-   "self_type" : "_ZTIPN7android16ReferenceRenamerE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11945,8 +10901,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer *",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -11954,8 +10910,7 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl *",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android16SortedVectorImplE",
+   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11964,7 +10919,6 @@
    "linker_set_key" : "_ZTIPN7android18WeakMessageHandlerE",
    "name" : "android::WeakMessageHandler *",
    "referenced_type" : "_ZTIN7android18WeakMessageHandlerE",
-   "self_type" : "_ZTIPN7android18WeakMessageHandlerE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -11973,7 +10927,6 @@
    "linker_set_key" : "_ZTIPN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase *",
    "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE",
-   "self_type" : "_ZTIPN7android19VirtualLightRefBaseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -11981,8 +10934,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase *",
-   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/LightRefBase.h"
   },
@@ -11991,7 +10944,6 @@
    "linker_set_key" : "_ZTIPN7android20SimpleLooperCallbackE",
    "name" : "android::SimpleLooperCallback *",
    "referenced_type" : "_ZTIN7android20SimpleLooperCallbackE",
-   "self_type" : "_ZTIPN7android20SimpleLooperCallbackE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12000,7 +10952,6 @@
    "linker_set_key" : "_ZTIPN7android28sysprop_change_callback_infoE",
    "name" : "android::sysprop_change_callback_info *",
    "referenced_type" : "_ZTIN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIPN7android28sysprop_change_callback_infoE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12009,7 +10960,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_12NativeHandleEEE",
    "name" : "android::sp<android::NativeHandle> *",
    "referenced_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
-   "self_type" : "_ZTIPN7android2spINS_12NativeHandleEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12018,7 +10968,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_14LooperCallbackEEE",
    "name" : "android::sp<android::LooperCallback> *",
    "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIPN7android2spINS_14LooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12027,7 +10976,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler> *",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPN7android2spINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12036,7 +10984,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback> *",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIPN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12045,7 +10992,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper> *",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIPN7android2spINS_6LooperEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12054,7 +11000,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread> *",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIPN7android2spINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12063,7 +11008,6 @@
    "linker_set_key" : "_ZTIPN7android2wpINS_14MessageHandlerEEE",
    "name" : "android::wp<android::MessageHandler> *",
    "referenced_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPN7android2wpINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12072,7 +11016,6 @@
    "linker_set_key" : "_ZTIPN7android2wpINS_6ThreadEEE",
    "name" : "android::wp<android::Thread> *",
    "referenced_type" : "_ZTIN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIPN7android2wpINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12081,7 +11024,6 @@
    "linker_set_key" : "_ZTIPN7android4base11borrowed_fdE",
    "name" : "android::base::borrowed_fd *",
    "referenced_type" : "_ZTIN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIPN7android4base11borrowed_fdE",
    "size" : 8,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12090,7 +11032,6 @@
    "linker_set_key" : "_ZTIPN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "android::base::unique_fd_impl<android::base::DefaultCloser> *",
    "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIPN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 8,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12099,7 +11040,6 @@
    "linker_set_key" : "_ZTIPN7android5Mutex8AutolockE",
    "name" : "android::Mutex::Autolock *",
    "referenced_type" : "_ZTIN7android5Mutex8AutolockE",
-   "self_type" : "_ZTIPN7android5Mutex8AutolockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -12108,7 +11048,6 @@
    "linker_set_key" : "_ZTIPN7android5MutexE",
    "name" : "android::Mutex *",
    "referenced_type" : "_ZTIN7android5MutexE",
-   "self_type" : "_ZTIPN7android5MutexE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -12117,7 +11056,6 @@
    "linker_set_key" : "_ZTIPN7android6Looper15MessageEnvelopeE",
    "name" : "android::Looper::MessageEnvelope *",
    "referenced_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIPN7android6Looper15MessageEnvelopeE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12126,7 +11064,6 @@
    "linker_set_key" : "_ZTIPN7android6Looper8ResponseE",
    "name" : "android::Looper::Response *",
    "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIPN7android6Looper8ResponseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12135,7 +11072,6 @@
    "linker_set_key" : "_ZTIPN7android6LooperE",
    "name" : "android::Looper *",
    "referenced_type" : "_ZTIN7android6LooperE",
-   "self_type" : "_ZTIPN7android6LooperE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12144,7 +11080,6 @@
    "linker_set_key" : "_ZTIPN7android6RWLock9AutoRLockE",
    "name" : "android::RWLock::AutoRLock *",
    "referenced_type" : "_ZTIN7android6RWLock9AutoRLockE",
-   "self_type" : "_ZTIPN7android6RWLock9AutoRLockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -12153,7 +11088,6 @@
    "linker_set_key" : "_ZTIPN7android6RWLock9AutoWLockE",
    "name" : "android::RWLock::AutoWLock *",
    "referenced_type" : "_ZTIN7android6RWLock9AutoWLockE",
-   "self_type" : "_ZTIPN7android6RWLock9AutoWLockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -12162,7 +11096,6 @@
    "linker_set_key" : "_ZTIPN7android6RWLockE",
    "name" : "android::RWLock *",
    "referenced_type" : "_ZTIN7android6RWLockE",
-   "self_type" : "_ZTIPN7android6RWLockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -12171,7 +11104,6 @@
    "linker_set_key" : "_ZTIPN7android6ThreadE",
    "name" : "android::Thread *",
    "referenced_type" : "_ZTIN7android6ThreadE",
-   "self_type" : "_ZTIPN7android6ThreadE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12180,7 +11112,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::Vector<android::sysprop_change_callback_info> *",
    "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIPN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12189,7 +11120,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::Vector<android::Looper::MessageEnvelope> *",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIPN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12198,7 +11128,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "android::Vector<android::Looper::Response> *",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIPN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12207,7 +11136,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_7String8EEE",
    "name" : "android::Vector<android::String8> *",
    "referenced_type" : "_ZTIN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIPN7android6VectorINS_7String8EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h"
   },
@@ -12216,7 +11144,6 @@
    "linker_set_key" : "_ZTIPN7android7FileMapE",
    "name" : "android::FileMap *",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIPN7android7FileMapE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12225,7 +11152,6 @@
    "linker_set_key" : "_ZTIPN7android7MessageE",
    "name" : "android::Message *",
    "referenced_type" : "_ZTIN7android7MessageE",
-   "self_type" : "_ZTIPN7android7MessageE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12234,7 +11160,6 @@
    "linker_set_key" : "_ZTIPN7android7PrinterE",
    "name" : "android::Printer *",
    "referenced_type" : "_ZTIN7android7PrinterE",
-   "self_type" : "_ZTIPN7android7PrinterE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -12243,7 +11168,6 @@
    "linker_set_key" : "_ZTIPN7android7RefBase12weakref_implE",
    "name" : "android::RefBase::weakref_impl *",
    "referenced_type" : "_ZTIN7android7RefBase12weakref_implE",
-   "self_type" : "_ZTIPN7android7RefBase12weakref_implE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12252,7 +11176,6 @@
    "linker_set_key" : "_ZTIPN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type *",
    "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE",
-   "self_type" : "_ZTIPN7android7RefBase12weakref_typeE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12260,8 +11183,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type *",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12270,7 +11193,6 @@
    "linker_set_key" : "_ZTIPN7android7RefBaseE",
    "name" : "android::RefBase *",
    "referenced_type" : "_ZTIN7android7RefBaseE",
-   "self_type" : "_ZTIPN7android7RefBaseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12278,8 +11200,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPN7android7RefBaseE",
    "name" : "android::RefBase *",
-   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12288,7 +11210,6 @@
    "linker_set_key" : "_ZTIPN7android7String8E",
    "name" : "android::String8 *",
    "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIPN7android7String8E",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -12296,8 +11217,8 @@
    "alignment" : 8,
    "linker_set_key" : "_ZTIPN7android7String8E",
    "name" : "android::String8 *",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -12306,7 +11227,6 @@
    "linker_set_key" : "_ZTIPN7android8String1610StaticDataILm1EEE",
    "name" : "android::String16::StaticData<1> *",
    "referenced_type" : "_ZTIN7android8String1610StaticDataILm1EEE",
-   "self_type" : "_ZTIPN7android8String1610StaticDataILm1EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12315,7 +11235,6 @@
    "linker_set_key" : "_ZTIPN7android8String16E",
    "name" : "android::String16 *",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIPN7android8String16E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12324,7 +11243,6 @@
    "linker_set_key" : "_ZTIPN7android9ConditionE",
    "name" : "android::Condition *",
    "referenced_type" : "_ZTIN7android9ConditionE",
-   "self_type" : "_ZTIPN7android9ConditionE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Condition.h"
   },
@@ -12333,7 +11251,6 @@
    "linker_set_key" : "_ZTIPN7android9FdPrinterE",
    "name" : "android::FdPrinter *",
    "referenced_type" : "_ZTIN7android9FdPrinterE",
-   "self_type" : "_ZTIPN7android9FdPrinterE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -12342,7 +11259,6 @@
    "linker_set_key" : "_ZTIPN7android9StopWatchE",
    "name" : "android::StopWatch *",
    "referenced_type" : "_ZTIN7android9StopWatchE",
-   "self_type" : "_ZTIPN7android9StopWatchE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -12351,7 +11267,6 @@
    "linker_set_key" : "_ZTIPN7android9TokenizerE",
    "name" : "android::Tokenizer *",
    "referenced_type" : "_ZTIN7android9TokenizerE",
-   "self_type" : "_ZTIPN7android9TokenizerE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -12360,7 +11275,6 @@
    "linker_set_key" : "_ZTIPPN7android9TokenizerE",
    "name" : "android::Tokenizer **",
    "referenced_type" : "_ZTIPN7android9TokenizerE",
-   "self_type" : "_ZTIPPN7android9TokenizerE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -12369,7 +11283,6 @@
    "linker_set_key" : "_ZTIPPv",
    "name" : "void **",
    "referenced_type" : "_ZTIPv",
-   "self_type" : "_ZTIPPv",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
@@ -12378,7 +11291,6 @@
    "linker_set_key" : "_ZTIPc",
    "name" : "char *",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIPc",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12387,7 +11299,6 @@
    "linker_set_key" : "_ZTIPh",
    "name" : "unsigned char *",
    "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIPh",
    "size" : 8,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -12396,7 +11307,6 @@
    "linker_set_key" : "_ZTIPi",
    "name" : "int *",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIPi",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12405,7 +11315,6 @@
    "linker_set_key" : "_ZTIPm",
    "name" : "unsigned long *",
    "referenced_type" : "_ZTIm",
-   "self_type" : "_ZTIPm",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/Unicode.h"
   },
@@ -12414,7 +11323,6 @@
    "linker_set_key" : "_ZTIPv",
    "name" : "void *",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIPv",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   }
@@ -12427,7 +11335,6 @@
    "linker_set_key" : "_ZTIA1_KDs",
    "name" : "const char16_t[1]",
    "referenced_type" : "_ZTIA1_Ds",
-   "self_type" : "_ZTIA1_KDs",
    "size" : 2,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12437,7 +11344,6 @@
    "linker_set_key" : "_ZTIK13native_handle",
    "name" : "const native_handle",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIK13native_handle",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -12447,7 +11353,6 @@
    "linker_set_key" : "_ZTIK7log_msg",
    "name" : "const log_msg",
    "referenced_type" : "_ZTI7log_msg",
-   "self_type" : "_ZTIK7log_msg",
    "size" : 5124,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -12457,7 +11362,6 @@
    "linker_set_key" : "_ZTIKDi",
    "name" : "const char32_t",
    "referenced_type" : "_ZTIDi",
-   "self_type" : "_ZTIKDi",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -12467,7 +11371,6 @@
    "linker_set_key" : "_ZTIKDs",
    "name" : "const char16_t",
    "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIKDs",
    "size" : 2,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12476,8 +11379,8 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android10VectorImplE",
    "name" : "const android::VectorImpl",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 40,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -12487,7 +11390,6 @@
    "linker_set_key" : "_ZTIKN7android10VectorImplE",
    "name" : "const android::VectorImpl",
    "referenced_type" : "_ZTIN7android10VectorImplE",
-   "self_type" : "_ZTIKN7android10VectorImplE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h"
   },
@@ -12497,7 +11399,6 @@
    "linker_set_key" : "_ZTIKN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "const android::LightRefBase<android::NativeHandle>",
    "referenced_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIKN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -12507,7 +11408,6 @@
    "linker_set_key" : "_ZTIKN7android12NativeHandleE",
    "name" : "const android::NativeHandle",
    "referenced_type" : "_ZTIN7android12NativeHandleE",
-   "self_type" : "_ZTIKN7android12NativeHandleE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -12516,8 +11416,7 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android16ReferenceRenamerE",
    "name" : "const android::ReferenceRenamer",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android16ReferenceRenamerE",
+   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12526,8 +11425,7 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android16SortedVectorImplE",
    "name" : "const android::SortedVectorImpl",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android16SortedVectorImplE",
+   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 40,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -12537,7 +11435,6 @@
    "linker_set_key" : "_ZTIKN7android28sysprop_change_callback_infoE",
    "name" : "const android::sysprop_change_callback_info",
    "referenced_type" : "_ZTIN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIKN7android28sysprop_change_callback_infoE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12547,7 +11444,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
    "name" : "const android::sp<android::LooperCallback>",
    "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12557,7 +11453,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
    "name" : "const android::sp<android::MessageHandler>",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12567,7 +11462,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "const android::sp<android::SimpleLooperCallback>",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIKN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12577,7 +11471,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_6LooperEEE",
    "name" : "const android::sp<android::Looper>",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIKN7android2spINS_6LooperEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12587,7 +11480,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_6ThreadEEE",
    "name" : "const android::sp<android::Thread>",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIKN7android2spINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12597,7 +11489,6 @@
    "linker_set_key" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
    "name" : "const android::wp<android::MessageHandler>",
    "referenced_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12607,7 +11498,6 @@
    "linker_set_key" : "_ZTIKN7android2wpINS_6ThreadEEE",
    "name" : "const android::wp<android::Thread>",
    "referenced_type" : "_ZTIN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIKN7android2wpINS_6ThreadEEE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12617,7 +11507,6 @@
    "linker_set_key" : "_ZTIKN7android4base11borrowed_fdE",
    "name" : "const android::base::borrowed_fd",
    "referenced_type" : "_ZTIN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIKN7android4base11borrowed_fdE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12627,7 +11516,6 @@
    "linker_set_key" : "_ZTIKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "const android::base::unique_fd_impl<android::base::DefaultCloser>",
    "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12637,7 +11525,6 @@
    "linker_set_key" : "_ZTIKN7android6Looper15MessageEnvelopeE",
    "name" : "const android::Looper::MessageEnvelope",
    "referenced_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIKN7android6Looper15MessageEnvelopeE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12647,7 +11534,6 @@
    "linker_set_key" : "_ZTIKN7android6Looper7RequestE",
    "name" : "const android::Looper::Request",
    "referenced_type" : "_ZTIN7android6Looper7RequestE",
-   "self_type" : "_ZTIKN7android6Looper7RequestE",
    "size" : 32,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12657,7 +11543,6 @@
    "linker_set_key" : "_ZTIKN7android6Looper8ResponseE",
    "name" : "const android::Looper::Response",
    "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIKN7android6Looper8ResponseE",
    "size" : 48,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12667,7 +11552,6 @@
    "linker_set_key" : "_ZTIKN7android6LooperE",
    "name" : "const android::Looper",
    "referenced_type" : "_ZTIN7android6LooperE",
-   "self_type" : "_ZTIKN7android6LooperE",
    "size" : 264,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12677,7 +11561,6 @@
    "linker_set_key" : "_ZTIKN7android6ThreadE",
    "name" : "const android::Thread",
    "referenced_type" : "_ZTIN7android6ThreadE",
-   "self_type" : "_ZTIKN7android6ThreadE",
    "size" : 152,
    "source_file" : "system/core/libutils/include/utils/Thread.h"
   },
@@ -12687,7 +11570,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "const android::Vector<android::sysprop_change_callback_info>",
    "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12697,7 +11579,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "const android::Vector<android::Looper::MessageEnvelope>",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12707,7 +11588,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "const android::Vector<android::Looper::Response>",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIKN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12717,7 +11597,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_7String8EEE",
    "name" : "const android::Vector<android::String8>",
    "referenced_type" : "_ZTIN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIKN7android6VectorINS_7String8EEE",
    "size" : 40,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h"
   },
@@ -12727,7 +11606,6 @@
    "linker_set_key" : "_ZTIKN7android7FileMapE",
    "name" : "const android::FileMap",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIKN7android7FileMapE",
    "size" : 48,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12737,7 +11615,6 @@
    "linker_set_key" : "_ZTIKN7android7MessageE",
    "name" : "const android::Message",
    "referenced_type" : "_ZTIN7android7MessageE",
-   "self_type" : "_ZTIKN7android7MessageE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12746,8 +11623,7 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android7RefBase12weakref_typeE",
    "name" : "const android::RefBase::weakref_type",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android7RefBase12weakref_typeE",
+   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12756,8 +11632,8 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android7RefBaseE",
    "name" : "const android::RefBase",
-   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 16,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12767,7 +11643,6 @@
    "linker_set_key" : "_ZTIKN7android7RefBaseE",
    "name" : "const android::RefBase",
    "referenced_type" : "_ZTIN7android7RefBaseE",
-   "self_type" : "_ZTIKN7android7RefBaseE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12776,8 +11651,8 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android7String8E",
    "name" : "const android::String8",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -12787,7 +11662,6 @@
    "linker_set_key" : "_ZTIKN7android7String8E",
    "name" : "const android::String8",
    "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIKN7android7String8E",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -12797,7 +11671,6 @@
    "linker_set_key" : "_ZTIKN7android8String1610StaticDataILm1EEE",
    "name" : "const android::String16::StaticData<1>",
    "referenced_type" : "_ZTIN7android8String1610StaticDataILm1EEE",
-   "self_type" : "_ZTIKN7android8String1610StaticDataILm1EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12807,7 +11680,6 @@
    "linker_set_key" : "_ZTIKN7android8String16E",
    "name" : "const android::String16",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIKN7android8String16E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12817,7 +11689,6 @@
    "linker_set_key" : "_ZTIKN7android9StopWatchE",
    "name" : "const android::StopWatch",
    "referenced_type" : "_ZTIN7android9StopWatchE",
-   "self_type" : "_ZTIKN7android9StopWatchE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -12827,27 +11698,15 @@
    "linker_set_key" : "_ZTIKN7android9TokenizerE",
    "name" : "const android::Tokenizer",
    "referenced_type" : "_ZTIN7android9TokenizerE",
-   "self_type" : "_ZTIKN7android9TokenizerE",
    "size" : 56,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
   {
    "alignment" : 8,
    "is_const" : true,
-   "linker_set_key" : "_ZTIKPKc",
-   "name" : "const char *const",
-   "referenced_type" : "_ZTIPKc",
-   "self_type" : "_ZTIKPKc",
-   "size" : 8,
-   "source_file" : "system/core/libprocessgroup/include/processgroup/processgroup.h"
-  },
-  {
-   "alignment" : 8,
-   "is_const" : true,
    "linker_set_key" : "_ZTIKPN7android7RefBase12weakref_implE",
    "name" : "android::RefBase::weakref_impl *const",
    "referenced_type" : "_ZTIPN7android7RefBase12weakref_implE",
-   "self_type" : "_ZTIKPN7android7RefBase12weakref_implE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12857,7 +11716,6 @@
    "linker_set_key" : "_ZTIKa",
    "name" : "const signed char",
    "referenced_type" : "_ZTIa",
-   "self_type" : "_ZTIKa",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12867,7 +11725,6 @@
    "linker_set_key" : "_ZTIKb",
    "name" : "const bool",
    "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIKb",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12877,7 +11734,6 @@
    "linker_set_key" : "_ZTIKc",
    "name" : "const char",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIKc",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12887,7 +11743,6 @@
    "linker_set_key" : "_ZTIKd",
    "name" : "const double",
    "referenced_type" : "_ZTId",
-   "self_type" : "_ZTIKd",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12897,7 +11752,6 @@
    "linker_set_key" : "_ZTIKf",
    "name" : "const float",
    "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIKf",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12907,7 +11761,6 @@
    "linker_set_key" : "_ZTIKh",
    "name" : "const unsigned char",
    "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIKh",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12917,7 +11770,6 @@
    "linker_set_key" : "_ZTIKi",
    "name" : "const int",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIKi",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12927,7 +11779,6 @@
    "linker_set_key" : "_ZTIKj",
    "name" : "const unsigned int",
    "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIKj",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12937,7 +11788,6 @@
    "linker_set_key" : "_ZTIKl",
    "name" : "const long",
    "referenced_type" : "_ZTIl",
-   "self_type" : "_ZTIKl",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12947,7 +11797,6 @@
    "linker_set_key" : "_ZTIKm",
    "name" : "const unsigned long",
    "referenced_type" : "_ZTIm",
-   "self_type" : "_ZTIKm",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12957,7 +11806,6 @@
    "linker_set_key" : "_ZTIKs",
    "name" : "const short",
    "referenced_type" : "_ZTIs",
-   "self_type" : "_ZTIKs",
    "size" : 2,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12967,7 +11815,6 @@
    "linker_set_key" : "_ZTIKt",
    "name" : "const unsigned short",
    "referenced_type" : "_ZTIt",
-   "self_type" : "_ZTIKt",
    "size" : 2,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12976,7 +11823,6 @@
    "linker_set_key" : "_ZTIKv",
    "name" : "const void",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIKv",
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
   {
@@ -12985,7 +11831,6 @@
    "linker_set_key" : "_ZTIVb",
    "name" : "volatile bool",
    "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIVb",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/Thread.h"
   }
@@ -13038,8 +11883,6 @@
    ],
    "linker_set_key" : "_ZTI12logger_entry",
    "name" : "logger_entry",
-   "referenced_type" : "_ZTI12logger_entry",
-   "self_type" : "_ZTI12logger_entry",
    "size" : 28,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -13084,8 +11927,6 @@
    ],
    "linker_set_key" : "_ZTI13android_ycbcr",
    "name" : "android_ycbcr",
-   "referenced_type" : "_ZTI13android_ycbcr",
-   "self_type" : "_ZTI13android_ycbcr",
    "size" : 80,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13115,8 +11956,6 @@
    ],
    "linker_set_key" : "_ZTI13native_handle",
    "name" : "native_handle",
-   "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTI13native_handle",
    "size" : 12,
    "source_file" : "system/core/libcutils/include_outside_system/cutils/native_handle.h"
   },
@@ -13136,8 +11975,6 @@
    ],
    "linker_set_key" : "_ZTI16android_xy_color",
    "name" : "android_xy_color",
-   "referenced_type" : "_ZTI16android_xy_color",
-   "self_type" : "_ZTI16android_xy_color",
    "size" : 8,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13187,8 +12024,6 @@
    ],
    "linker_set_key" : "_ZTI18android_flex_plane",
    "name" : "android_flex_plane",
-   "referenced_type" : "_ZTI18android_flex_plane",
-   "self_type" : "_ZTI18android_flex_plane",
    "size" : 40,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13213,8 +12048,6 @@
    ],
    "linker_set_key" : "_ZTI19android_flex_layout",
    "name" : "android_flex_layout",
-   "referenced_type" : "_ZTI19android_flex_layout",
-   "self_type" : "_ZTI19android_flex_layout",
    "size" : 16,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13239,8 +12072,6 @@
    ],
    "linker_set_key" : "_ZTI20android_depth_points",
    "name" : "android_depth_points",
-   "referenced_type" : "_ZTI20android_depth_points",
-   "self_type" : "_ZTI20android_depth_points",
    "size" : 36,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13285,8 +12116,6 @@
    ],
    "linker_set_key" : "_ZTI21__android_log_message",
    "name" : "__android_log_message",
-   "referenced_type" : "_ZTI21__android_log_message",
-   "self_type" : "_ZTI21__android_log_message",
    "size" : 48,
    "source_file" : "system/logging/liblog/include_vndk/android/log.h"
   },
@@ -13306,8 +12135,6 @@
    ],
    "linker_set_key" : "_ZTI25android_cta861_3_metadata",
    "name" : "android_cta861_3_metadata",
-   "referenced_type" : "_ZTI25android_cta861_3_metadata",
-   "self_type" : "_ZTI25android_cta861_3_metadata",
    "size" : 8,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13347,8 +12174,6 @@
    ],
    "linker_set_key" : "_ZTI26android_smpte2086_metadata",
    "name" : "android_smpte2086_metadata",
-   "referenced_type" : "_ZTI26android_smpte2086_metadata",
-   "self_type" : "_ZTI26android_smpte2086_metadata",
    "size" : 40,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13362,8 +12187,6 @@
    ],
    "linker_set_key" : "_ZTI7log_msg",
    "name" : "log_msg",
-   "referenced_type" : "_ZTI7log_msg",
-   "self_type" : "_ZTI7log_msg",
    "size" : 5124,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -13383,8 +12206,6 @@
    ],
    "linker_set_key" : "_ZTI8log_time",
    "name" : "log_time",
-   "referenced_type" : "_ZTI8log_time",
-   "self_type" : "_ZTI8log_time",
    "size" : 8,
    "source_file" : "system/logging/liblog/include_vndk/log/log_time.h"
   },
@@ -13426,8 +12247,6 @@
    "linker_set_key" : "_ZTIN7android10LogPrinterE",
    "name" : "android::LogPrinter",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android10LogPrinterE",
-   "self_type" : "_ZTIN7android10LogPrinterE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -13487,8 +12306,6 @@
    "linker_set_key" : "_ZTIN7android10VectorImplE",
    "name" : "android::VectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android10VectorImplE",
-   "self_type" : "_ZTIN7android10VectorImplE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -13566,8 +12383,7 @@
    "linker_set_key" : "_ZTIN7android10VectorImplE",
    "name" : "android::VectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 40,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -13626,8 +12442,6 @@
    "linker_set_key" : "_ZTIN7android11ScopedTraceE",
    "name" : "android::ScopedTrace",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android11ScopedTraceE",
-   "self_type" : "_ZTIN7android11ScopedTraceE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Trace.h"
   },
@@ -13644,8 +12458,6 @@
    "linker_set_key" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "android::LightRefBase<android::NativeHandle>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h",
    "template_args" :
@@ -13666,8 +12478,6 @@
    "linker_set_key" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
    "name" : "android::LightRefBase<android::VirtualLightRefBase>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
-   "self_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h",
    "template_args" :
@@ -13688,13 +12498,12 @@
    "linker_set_key" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
    "name" : "android::LightRefBase<android::VirtualLightRefBase>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/LightRefBase.h",
    "template_args" :
    [
-    "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+    "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
    ]
   },
   {
@@ -13723,8 +12532,6 @@
    "linker_set_key" : "_ZTIN7android12NativeHandleE",
    "name" : "android::NativeHandle",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12NativeHandleE",
-   "self_type" : "_ZTIN7android12NativeHandleE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -13754,8 +12561,6 @@
    "linker_set_key" : "_ZTIN7android13PrefixPrinterE",
    "name" : "android::PrefixPrinter",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android13PrefixPrinterE",
-   "self_type" : "_ZTIN7android13PrefixPrinterE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -13787,8 +12592,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_pointer<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -13800,8 +12603,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_pointer<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -13813,8 +12614,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEEE",
    "name" : "android::trait_pointer<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -13834,8 +12633,6 @@
    "linker_set_key" : "_ZTIN7android14LooperCallbackE",
    "name" : "android::LooperCallback",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14LooperCallbackE",
-   "self_type" : "_ZTIN7android14LooperCallbackE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -13921,8 +12718,6 @@
    "linker_set_key" : "_ZTIN7android14MessageHandlerE",
    "name" : "android::MessageHandler",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14MessageHandlerE",
-   "self_type" : "_ZTIN7android14MessageHandlerE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -14001,8 +12796,6 @@
    "linker_set_key" : "_ZTIN7android14ReferenceMoverE",
    "name" : "android::ReferenceMover",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14ReferenceMoverE",
-   "self_type" : "_ZTIN7android14ReferenceMoverE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -14011,8 +12804,7 @@
    "linker_set_key" : "_ZTIN7android14ReferenceMoverE",
    "name" : "android::ReferenceMover",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14ReferenceMoverE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android14ReferenceMoverE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android14ReferenceMoverE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -14036,8 +12828,6 @@
    "linker_set_key" : "_ZTIN7android14StaticString16ILm1EEE",
    "name" : "android::StaticString16<1>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14StaticString16ILm1EEE",
-   "self_type" : "_ZTIN7android14StaticString16ILm1EEE",
    "size" : 16,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -14067,8 +12857,6 @@
    "linker_set_key" : "_ZTIN7android14String8PrinterE",
    "name" : "android::String8Printer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14String8PrinterE",
-   "self_type" : "_ZTIN7android14String8PrinterE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -14101,8 +12889,6 @@
    "linker_set_key" : "_ZTIN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE",
-   "self_type" : "_ZTIN7android16ReferenceRenamerE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "vtable_components" :
@@ -14125,8 +12911,7 @@
    "linker_set_key" : "_ZTIN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "vtable_components" :
@@ -14155,8 +12940,6 @@
    "linker_set_key" : "_ZTIN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE",
-   "self_type" : "_ZTIN7android16SortedVectorImplE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -14211,14 +12994,13 @@
    "base_specifiers" :
    [
     {
-     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "linker_set_key" : "_ZTIN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 40,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -14278,8 +13060,6 @@
    ],
    "linker_set_key" : "_ZTIN7android16use_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "name" : "android::use_trivial_move<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android16use_trivial_moveINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android16use_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14297,8 +13077,6 @@
    ],
    "linker_set_key" : "_ZTIN7android16use_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::use_trivial_move<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android16use_trivial_moveINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android16use_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14316,8 +13094,6 @@
    ],
    "linker_set_key" : "_ZTIN7android16use_trivial_moveINS_6Looper8ResponseEEE",
    "name" : "android::use_trivial_move<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android16use_trivial_moveINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android16use_trivial_moveINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14345,8 +13121,6 @@
    "linker_set_key" : "_ZTIN7android18WeakMessageHandlerE",
    "name" : "android::WeakMessageHandler",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android18WeakMessageHandlerE",
-   "self_type" : "_ZTIN7android18WeakMessageHandlerE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -14423,8 +13197,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_copy<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14436,8 +13208,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_copy<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14449,8 +13219,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_copy<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14462,8 +13230,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbEE",
    "name" : "android::trait_trivial_copy<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14475,8 +13241,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbEE",
    "name" : "android::trait_trivial_copy<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14488,8 +13253,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcEE",
    "name" : "android::trait_trivial_copy<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14501,8 +13264,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcEE",
    "name" : "android::trait_trivial_copy<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14514,8 +13276,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdEE",
    "name" : "android::trait_trivial_copy<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14527,8 +13287,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdEE",
    "name" : "android::trait_trivial_copy<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14540,8 +13299,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfEE",
    "name" : "android::trait_trivial_copy<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14553,8 +13310,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfEE",
    "name" : "android::trait_trivial_copy<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14566,8 +13322,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhEE",
    "name" : "android::trait_trivial_copy<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14579,8 +13333,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhEE",
    "name" : "android::trait_trivial_copy<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14592,8 +13345,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiEE",
    "name" : "android::trait_trivial_copy<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14605,8 +13356,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiEE",
    "name" : "android::trait_trivial_copy<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14618,8 +13368,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjEE",
    "name" : "android::trait_trivial_copy<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14631,8 +13379,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjEE",
    "name" : "android::trait_trivial_copy<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14644,8 +13391,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlEE",
    "name" : "android::trait_trivial_copy<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14657,8 +13402,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlEE",
    "name" : "android::trait_trivial_copy<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14670,8 +13414,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImEE",
    "name" : "android::trait_trivial_copy<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14683,8 +13425,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImEE",
    "name" : "android::trait_trivial_copy<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14696,8 +13437,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsEE",
    "name" : "android::trait_trivial_copy<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14709,8 +13448,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsEE",
    "name" : "android::trait_trivial_copy<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14722,8 +13460,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItEE",
    "name" : "android::trait_trivial_copy<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14735,8 +13471,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItEE",
    "name" : "android::trait_trivial_copy<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14748,8 +13483,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvEE",
    "name" : "android::trait_trivial_copy<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14761,8 +13494,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvEE",
    "name" : "android::trait_trivial_copy<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14774,8 +13506,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxEE",
    "name" : "android::trait_trivial_copy<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14787,8 +13517,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxEE",
    "name" : "android::trait_trivial_copy<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14800,8 +13529,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyEE",
    "name" : "android::trait_trivial_copy<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14813,8 +13540,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyEE",
    "name" : "android::trait_trivial_copy<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14826,8 +13552,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_ctor<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14839,8 +13563,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_ctor<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14852,8 +13574,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_ctor<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14865,8 +13585,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbEE",
    "name" : "android::trait_trivial_ctor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14878,8 +13596,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbEE",
    "name" : "android::trait_trivial_ctor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14891,8 +13608,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcEE",
    "name" : "android::trait_trivial_ctor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14904,8 +13619,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcEE",
    "name" : "android::trait_trivial_ctor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14917,8 +13631,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdEE",
    "name" : "android::trait_trivial_ctor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14930,8 +13642,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdEE",
    "name" : "android::trait_trivial_ctor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14943,8 +13654,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfEE",
    "name" : "android::trait_trivial_ctor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14956,8 +13665,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfEE",
    "name" : "android::trait_trivial_ctor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14969,8 +13677,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhEE",
    "name" : "android::trait_trivial_ctor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14982,8 +13688,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhEE",
    "name" : "android::trait_trivial_ctor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14995,8 +13700,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiEE",
    "name" : "android::trait_trivial_ctor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15008,8 +13711,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiEE",
    "name" : "android::trait_trivial_ctor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15021,8 +13723,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjEE",
    "name" : "android::trait_trivial_ctor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15034,8 +13734,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjEE",
    "name" : "android::trait_trivial_ctor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15047,8 +13746,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlEE",
    "name" : "android::trait_trivial_ctor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15060,8 +13757,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlEE",
    "name" : "android::trait_trivial_ctor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15073,8 +13769,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImEE",
    "name" : "android::trait_trivial_ctor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15086,8 +13780,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImEE",
    "name" : "android::trait_trivial_ctor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15099,8 +13792,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsEE",
    "name" : "android::trait_trivial_ctor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15112,8 +13803,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsEE",
    "name" : "android::trait_trivial_ctor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15125,8 +13815,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItEE",
    "name" : "android::trait_trivial_ctor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15138,8 +13826,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItEE",
    "name" : "android::trait_trivial_ctor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15151,8 +13838,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvEE",
    "name" : "android::trait_trivial_ctor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15164,8 +13849,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvEE",
    "name" : "android::trait_trivial_ctor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15177,8 +13861,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxEE",
    "name" : "android::trait_trivial_ctor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15190,8 +13872,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxEE",
    "name" : "android::trait_trivial_ctor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15203,8 +13884,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyEE",
    "name" : "android::trait_trivial_ctor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15216,8 +13895,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyEE",
    "name" : "android::trait_trivial_ctor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15229,8 +13907,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_dtor<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15242,8 +13918,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_dtor<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15255,8 +13929,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_dtor<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15268,8 +13940,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbEE",
    "name" : "android::trait_trivial_dtor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15281,8 +13951,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbEE",
    "name" : "android::trait_trivial_dtor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15294,8 +13963,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcEE",
    "name" : "android::trait_trivial_dtor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15307,8 +13974,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcEE",
    "name" : "android::trait_trivial_dtor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15320,8 +13986,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdEE",
    "name" : "android::trait_trivial_dtor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15333,8 +13997,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdEE",
    "name" : "android::trait_trivial_dtor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15346,8 +14009,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfEE",
    "name" : "android::trait_trivial_dtor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15359,8 +14020,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfEE",
    "name" : "android::trait_trivial_dtor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15372,8 +14032,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhEE",
    "name" : "android::trait_trivial_dtor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15385,8 +14043,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhEE",
    "name" : "android::trait_trivial_dtor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15398,8 +14055,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiEE",
    "name" : "android::trait_trivial_dtor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15411,8 +14066,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiEE",
    "name" : "android::trait_trivial_dtor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15424,8 +14078,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjEE",
    "name" : "android::trait_trivial_dtor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15437,8 +14089,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjEE",
    "name" : "android::trait_trivial_dtor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15450,8 +14101,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlEE",
    "name" : "android::trait_trivial_dtor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15463,8 +14112,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlEE",
    "name" : "android::trait_trivial_dtor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15476,8 +14124,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImEE",
    "name" : "android::trait_trivial_dtor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15489,8 +14135,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImEE",
    "name" : "android::trait_trivial_dtor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15502,8 +14147,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsEE",
    "name" : "android::trait_trivial_dtor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15515,8 +14158,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsEE",
    "name" : "android::trait_trivial_dtor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15528,8 +14170,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItEE",
    "name" : "android::trait_trivial_dtor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15541,8 +14181,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItEE",
    "name" : "android::trait_trivial_dtor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15554,8 +14193,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvEE",
    "name" : "android::trait_trivial_dtor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15567,8 +14204,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvEE",
    "name" : "android::trait_trivial_dtor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15580,8 +14216,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxEE",
    "name" : "android::trait_trivial_dtor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15593,8 +14227,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxEE",
    "name" : "android::trait_trivial_dtor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15606,8 +14239,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyEE",
    "name" : "android::trait_trivial_dtor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15619,8 +14250,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyEE",
    "name" : "android::trait_trivial_dtor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15632,8 +14262,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_move<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15645,8 +14273,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_move<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15658,8 +14284,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_move<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15671,8 +14295,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
    "name" : "android::trait_trivial_move<android::String8>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/String8.h",
    "template_args" :
@@ -15684,21 +14306,18 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
    "name" : "android::trait_trivial_move<android::String8>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h",
    "template_args" :
    [
-    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
    ]
   },
   {
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_8String16EEE",
    "name" : "android::trait_trivial_move<android::String16>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EEE",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h",
    "template_args" :
@@ -15710,8 +14329,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbEE",
    "name" : "android::trait_trivial_move<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15723,8 +14340,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbEE",
    "name" : "android::trait_trivial_move<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15736,8 +14352,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcEE",
    "name" : "android::trait_trivial_move<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15749,8 +14363,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcEE",
    "name" : "android::trait_trivial_move<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15762,8 +14375,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdEE",
    "name" : "android::trait_trivial_move<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15775,8 +14386,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdEE",
    "name" : "android::trait_trivial_move<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15788,8 +14398,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfEE",
    "name" : "android::trait_trivial_move<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15801,8 +14409,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfEE",
    "name" : "android::trait_trivial_move<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15814,8 +14421,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhEE",
    "name" : "android::trait_trivial_move<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15827,8 +14432,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhEE",
    "name" : "android::trait_trivial_move<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15840,8 +14444,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiEE",
    "name" : "android::trait_trivial_move<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15853,8 +14455,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiEE",
    "name" : "android::trait_trivial_move<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15866,8 +14467,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjEE",
    "name" : "android::trait_trivial_move<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15879,8 +14478,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjEE",
    "name" : "android::trait_trivial_move<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15892,8 +14490,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlEE",
    "name" : "android::trait_trivial_move<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15905,8 +14501,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlEE",
    "name" : "android::trait_trivial_move<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15918,8 +14513,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImEE",
    "name" : "android::trait_trivial_move<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15931,8 +14524,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImEE",
    "name" : "android::trait_trivial_move<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15944,8 +14536,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsEE",
    "name" : "android::trait_trivial_move<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15957,8 +14547,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsEE",
    "name" : "android::trait_trivial_move<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15970,8 +14559,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItEE",
    "name" : "android::trait_trivial_move<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15983,8 +14570,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItEE",
    "name" : "android::trait_trivial_move<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15996,8 +14582,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvEE",
    "name" : "android::trait_trivial_move<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16009,8 +14593,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvEE",
    "name" : "android::trait_trivial_move<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16022,8 +14605,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxEE",
    "name" : "android::trait_trivial_move<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16035,8 +14616,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxEE",
    "name" : "android::trait_trivial_move<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16048,8 +14628,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyEE",
    "name" : "android::trait_trivial_move<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16061,8 +14639,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyEE",
    "name" : "android::trait_trivial_move<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16081,8 +14658,6 @@
    "linker_set_key" : "_ZTIN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE",
-   "self_type" : "_ZTIN7android19VirtualLightRefBaseE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h",
    "vtable_components" :
@@ -16109,14 +14684,13 @@
    "base_specifiers" :
    [
     {
-     "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "linker_set_key" : "_ZTIN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 16,
    "source_file" : "system/core/libutils/binder/include/utils/LightRefBase.h",
    "vtable_components" :
@@ -16158,8 +14732,6 @@
    "linker_set_key" : "_ZTIN7android20SimpleLooperCallbackE",
    "name" : "android::SimpleLooperCallback",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android20SimpleLooperCallbackE",
-   "self_type" : "_ZTIN7android20SimpleLooperCallbackE",
    "size" : 32,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -16245,8 +14817,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_12NativeHandleEEE",
    "name" : "android::sp<android::NativeHandle>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
-   "self_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16267,8 +14837,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_14LooperCallbackEEE",
    "name" : "android::sp<android::LooperCallback>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16289,8 +14857,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16311,8 +14877,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16333,8 +14897,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIN7android2spINS_6LooperEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16355,8 +14917,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIN7android2spINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16383,8 +14943,6 @@
    "linker_set_key" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
    "name" : "android::wp<android::MessageHandler>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "template_args" :
@@ -16411,8 +14969,6 @@
    "linker_set_key" : "_ZTIN7android2wpINS_6ThreadEEE",
    "name" : "android::wp<android::Thread>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIN7android2wpINS_6ThreadEEE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "template_args" :
@@ -16432,8 +14988,6 @@
    ],
    "linker_set_key" : "_ZTIN7android4base11borrowed_fdE",
    "name" : "android::base::borrowed_fd",
-   "referenced_type" : "_ZTIN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIN7android4base11borrowed_fdE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -16441,8 +14995,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android4base13DefaultCloserE",
    "name" : "android::base::DefaultCloser",
-   "referenced_type" : "_ZTIN7android4base13DefaultCloserE",
-   "self_type" : "_ZTIN7android4base13DefaultCloserE",
    "size" : 1,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -16459,8 +15011,6 @@
    "linker_set_key" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "android::base::unique_fd_impl<android::base::DefaultCloser>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h",
    "template_args" :
@@ -16481,8 +15031,6 @@
    "linker_set_key" : "_ZTIN7android5Mutex8AutolockE",
    "name" : "android::Mutex::Autolock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android5Mutex8AutolockE",
-   "self_type" : "_ZTIN7android5Mutex8AutolockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -16499,8 +15047,6 @@
    "linker_set_key" : "_ZTIN7android5MutexE",
    "name" : "android::Mutex",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android5MutexE",
-   "self_type" : "_ZTIN7android5MutexE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -16526,8 +15072,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper15MessageEnvelopeE",
    "name" : "android::Looper::MessageEnvelope",
-   "referenced_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -16563,8 +15107,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper7RequestE",
    "name" : "android::Looper::Request",
-   "referenced_type" : "_ZTIN7android6Looper7RequestE",
-   "self_type" : "_ZTIN7android6Looper7RequestE",
    "size" : 32,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -16590,8 +15132,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper8ResponseE",
    "name" : "android::Looper::Response",
-   "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIN7android6Looper8ResponseE",
    "size" : 48,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -16693,8 +15233,6 @@
    "linker_set_key" : "_ZTIN7android6LooperE",
    "name" : "android::Looper",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6LooperE",
-   "self_type" : "_ZTIN7android6LooperE",
    "size" : 264,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -16741,8 +15279,6 @@
    "linker_set_key" : "_ZTIN7android6RWLock9AutoRLockE",
    "name" : "android::RWLock::AutoRLock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6RWLock9AutoRLockE",
-   "self_type" : "_ZTIN7android6RWLock9AutoRLockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -16759,8 +15295,6 @@
    "linker_set_key" : "_ZTIN7android6RWLock9AutoWLockE",
    "name" : "android::RWLock::AutoWLock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6RWLock9AutoWLockE",
-   "self_type" : "_ZTIN7android6RWLock9AutoWLockE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -16777,8 +15311,6 @@
    "linker_set_key" : "_ZTIN7android6RWLockE",
    "name" : "android::RWLock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6RWLockE",
-   "self_type" : "_ZTIN7android6RWLockE",
    "size" : 56,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -16851,8 +15383,6 @@
    "linker_set_key" : "_ZTIN7android6ThreadE",
    "name" : "android::Thread",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6ThreadE",
-   "self_type" : "_ZTIN7android6ThreadE",
    "size" : 152,
    "source_file" : "system/core/libutils/include/utils/Thread.h",
    "vtable_components" :
@@ -16947,8 +15477,6 @@
    "linker_set_key" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::Vector<android::sysprop_change_callback_info>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Vector.h",
    "template_args" :
@@ -17004,8 +15532,6 @@
    "linker_set_key" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::Vector<android::Looper::MessageEnvelope>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Vector.h",
    "template_args" :
@@ -17061,8 +15587,6 @@
    "linker_set_key" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "android::Vector<android::Looper::Response>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/Vector.h",
    "template_args" :
@@ -17112,19 +15636,17 @@
    [
     {
      "access" : "private",
-     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "linker_set_key" : "_ZTIN7android6VectorINS_7String8EEE",
    "name" : "android::Vector<android::String8>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIN7android6VectorINS_7String8EEE",
    "size" : 40,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h",
    "template_args" :
    [
-    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
    ],
    "vtable_components" :
    [
@@ -17167,8 +15689,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEEE",
    "name" : "android::traits<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -17180,8 +15700,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::traits<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -17193,8 +15711,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper8ResponseEEE",
    "name" : "android::traits<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -17245,8 +15761,6 @@
    "linker_set_key" : "_ZTIN7android7FileMapE",
    "name" : "android::FileMap",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIN7android7FileMapE",
    "size" : 48,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -17261,8 +15775,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7MessageE",
    "name" : "android::Message",
-   "referenced_type" : "_ZTIN7android7MessageE",
-   "self_type" : "_ZTIN7android7MessageE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -17271,8 +15783,6 @@
    "linker_set_key" : "_ZTIN7android7PrinterE",
    "name" : "android::Printer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7PrinterE",
-   "self_type" : "_ZTIN7android7PrinterE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -17306,8 +15816,6 @@
    "linker_set_key" : "_ZTIN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE",
-   "self_type" : "_ZTIN7android7RefBase12weakref_typeE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -17316,8 +15824,7 @@
    "linker_set_key" : "_ZTIN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -17335,8 +15842,6 @@
    "linker_set_key" : "_ZTIN7android7RefBaseE",
    "name" : "android::RefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBaseE",
-   "self_type" : "_ZTIN7android7RefBaseE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "vtable_components" :
@@ -17384,8 +15889,7 @@
    "linker_set_key" : "_ZTIN7android7RefBaseE",
    "name" : "android::RefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 16,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "vtable_components" :
@@ -17432,8 +15936,6 @@
    "linker_set_key" : "_ZTIN7android7String8E",
    "name" : "android::String8",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIN7android7String8E",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -17450,8 +15952,7 @@
    "linker_set_key" : "_ZTIN7android7String8E",
    "name" : "android::String8",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm64_armv8-a_static_afdo-libutils_lto-none/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm64_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -17471,8 +15972,6 @@
    ],
    "linker_set_key" : "_ZTIN7android8String1610StaticDataILm1EEE",
    "name" : "android::String16::StaticData<1>",
-   "referenced_type" : "_ZTIN7android8String1610StaticDataILm1EEE",
-   "self_type" : "_ZTIN7android8String1610StaticDataILm1EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -17489,8 +15988,6 @@
    "linker_set_key" : "_ZTIN7android8String16E",
    "name" : "android::String16",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIN7android8String16E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -17507,8 +16004,6 @@
    "linker_set_key" : "_ZTIN7android9ConditionE",
    "name" : "android::Condition",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9ConditionE",
-   "self_type" : "_ZTIN7android9ConditionE",
    "size" : 48,
    "source_file" : "system/core/libutils/include/utils/Condition.h"
   },
@@ -17550,8 +16045,6 @@
    "linker_set_key" : "_ZTIN7android9FdPrinterE",
    "name" : "android::FdPrinter",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9FdPrinterE",
-   "self_type" : "_ZTIN7android9FdPrinterE",
    "size" : 48,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -17604,8 +16097,6 @@
    "linker_set_key" : "_ZTIN7android9StopWatchE",
    "name" : "android::StopWatch",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9StopWatchE",
-   "self_type" : "_ZTIN7android9StopWatchE",
    "size" : 24,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -17658,8 +16149,6 @@
    "linker_set_key" : "_ZTIN7android9TokenizerE",
    "name" : "android::Tokenizer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9TokenizerE",
-   "self_type" : "_ZTIN7android9TokenizerE",
    "size" : 56,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -17680,8 +16169,6 @@
    "linker_set_key" : "_ZTIN7log_msgUt_E",
    "name" : "log_msg::(anonymous)",
    "record_kind" : "union",
-   "referenced_type" : "_ZTIN7log_msgUt_E",
-   "self_type" : "_ZTIN7log_msgUt_E",
    "size" : 5124,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   }
@@ -17693,7 +16180,6 @@
    "linker_set_key" : "_ZTION7android2spINS_12NativeHandleEEE",
    "name" : "android::sp<android::NativeHandle> &&",
    "referenced_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
-   "self_type" : "_ZTION7android2spINS_12NativeHandleEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17702,7 +16188,6 @@
    "linker_set_key" : "_ZTION7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler> &&",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTION7android2spINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17711,7 +16196,6 @@
    "linker_set_key" : "_ZTION7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback> &&",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTION7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17720,7 +16204,6 @@
    "linker_set_key" : "_ZTION7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper> &&",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTION7android2spINS_6LooperEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17729,7 +16212,6 @@
    "linker_set_key" : "_ZTION7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread> &&",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTION7android2spINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17738,7 +16220,6 @@
    "linker_set_key" : "_ZTION7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "android::base::unique_fd_impl<android::base::DefaultCloser> &&",
    "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTION7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 8,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -17747,7 +16228,6 @@
    "linker_set_key" : "_ZTION7android7FileMapE",
    "name" : "android::FileMap &&",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTION7android7FileMapE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -17756,7 +16236,6 @@
    "linker_set_key" : "_ZTION7android8String16E",
    "name" : "android::String16 &&",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTION7android8String16E",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   }
diff --git a/libutils/abi-dumps/arm_arm64/source-based/libutils.so.lsdump b/libutils/abi-dumps/arm_arm64/source-based/libutils.so.lsdump
index b9c4c52..5e49856 100644
--- a/libutils/abi-dumps/arm_arm64/source-based/libutils.so.lsdump
+++ b/libutils/abi-dumps/arm_arm64/source-based/libutils.so.lsdump
@@ -6,7 +6,6 @@
    "linker_set_key" : "_ZTIA0_i",
    "name" : "int[0]",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIA0_i",
    "source_file" : "system/core/libcutils/include_outside_system/cutils/native_handle.h"
   },
   {
@@ -14,7 +13,6 @@
    "linker_set_key" : "_ZTIA1_Ds",
    "name" : "char16_t[1]",
    "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIA1_Ds",
    "size" : 2,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -23,7 +21,6 @@
    "linker_set_key" : "_ZTIA20_c",
    "name" : "char[20]",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIA20_c",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -32,7 +29,6 @@
    "linker_set_key" : "_ZTIA5121_h",
    "name" : "unsigned char[5121]",
    "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIA5121_h",
    "size" : 5121,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -41,7 +37,6 @@
    "linker_set_key" : "_ZTIA8_j",
    "name" : "unsigned int[8]",
    "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIA8_j",
    "size" : 32,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -50,7 +45,6 @@
    "linker_set_key" : "_ZTIA_f",
    "name" : "float[]",
    "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIA_f",
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   }
  ],
@@ -62,16 +56,12 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIDi",
    "name" : "char32_t",
-   "referenced_type" : "_ZTIDi",
-   "self_type" : "_ZTIDi",
    "size" : 4
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIDn",
    "name" : "std::nullptr_t",
-   "referenced_type" : "_ZTIDn",
-   "self_type" : "_ZTIDn",
    "size" : 4
   },
   {
@@ -80,8 +70,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIDs",
    "name" : "char16_t",
-   "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIDs",
    "size" : 2
   },
   {
@@ -89,8 +77,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIa",
    "name" : "signed char",
-   "referenced_type" : "_ZTIa",
-   "self_type" : "_ZTIa",
    "size" : 1
   },
   {
@@ -99,8 +85,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIb",
    "name" : "bool",
-   "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIb",
    "size" : 1
   },
   {
@@ -109,24 +93,18 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIc",
    "name" : "char",
-   "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIc",
    "size" : 1
   },
   {
    "alignment" : 8,
    "linker_set_key" : "_ZTId",
    "name" : "double",
-   "referenced_type" : "_ZTId",
-   "self_type" : "_ZTId",
    "size" : 8
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIf",
    "name" : "float",
-   "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIf",
    "size" : 4
   },
   {
@@ -135,8 +113,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIh",
    "name" : "unsigned char",
-   "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIh",
    "size" : 1
   },
   {
@@ -144,8 +120,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIi",
    "name" : "int",
-   "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIi",
    "size" : 4
   },
   {
@@ -154,8 +128,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIj",
    "name" : "unsigned int",
-   "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIj",
    "size" : 4
   },
   {
@@ -163,8 +135,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIl",
    "name" : "long",
-   "referenced_type" : "_ZTIl",
-   "self_type" : "_ZTIl",
    "size" : 4
   },
   {
@@ -173,8 +143,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIm",
    "name" : "unsigned long",
-   "referenced_type" : "_ZTIm",
-   "self_type" : "_ZTIm",
    "size" : 4
   },
   {
@@ -182,8 +150,6 @@
    "is_integral" : true,
    "linker_set_key" : "_ZTIs",
    "name" : "short",
-   "referenced_type" : "_ZTIs",
-   "self_type" : "_ZTIs",
    "size" : 2
   },
   {
@@ -192,23 +158,17 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIt",
    "name" : "unsigned short",
-   "referenced_type" : "_ZTIt",
-   "self_type" : "_ZTIt",
    "size" : 2
   },
   {
    "linker_set_key" : "_ZTIv",
-   "name" : "void",
-   "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIv"
+   "name" : "void"
   },
   {
    "alignment" : 8,
    "is_integral" : true,
    "linker_set_key" : "_ZTIx",
    "name" : "long long",
-   "referenced_type" : "_ZTIx",
-   "self_type" : "_ZTIx",
    "size" : 8
   },
   {
@@ -217,8 +177,6 @@
    "is_unsigned" : true,
    "linker_set_key" : "_ZTIy",
    "name" : "unsigned long long",
-   "referenced_type" : "_ZTIy",
-   "self_type" : "_ZTIy",
    "size" : 8
   }
  ],
@@ -497,10 +455,22 @@
   },
   {
    "binding" : "weak",
+   "name" : "_ZN7android2spINS_14LooperCallbackEEaSERKS2_"
+  },
+  {
+   "binding" : "weak",
+   "name" : "_ZN7android2spINS_6LooperEED2Ev"
+  },
+  {
+   "binding" : "weak",
    "name" : "_ZN7android2spINS_6LooperEEaSEOS2_"
   },
   {
    "binding" : "weak",
+   "name" : "_ZN7android2spINS_6LooperEEaSERKS2_"
+  },
+  {
+   "binding" : "weak",
    "name" : "_ZN7android2spINS_6ThreadEE5clearEv"
   },
   {
@@ -529,6 +499,9 @@
    "name" : "_ZN7android6Looper14removeMessagesERKNS_2spINS_14MessageHandlerEEEi"
   },
   {
+   "name" : "_ZN7android6Looper15getFdStateDebugEiPiS1_PNS_2spINS_14LooperCallbackEEEPPv"
+  },
+  {
    "name" : "_ZN7android6Looper17sendMessageAtTimeExRKNS_2spINS_14MessageHandlerEEERKNS_7MessageE"
   },
   {
@@ -1202,71 +1175,43 @@
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE14__erase_uniqueIiEEjRKT_"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEENS_8equal_toIiEELb1EEENS_21__unordered_map_equalIiS2_S7_S5_Lb1EEENS_9allocatorIS2_EEE11__do_rehashILb1EEEvj"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRiRKyEEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEEbEERKT_DpOT0_"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEENS_8equal_toIiEELb1EEENS_21__unordered_map_equalIiS2_S7_S5_Lb1EEENS_9allocatorIS2_EEE14__erase_uniqueIiEEjRKT_"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE4findIiEENS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEERKT_"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEENS_8equal_toIiEELb1EEENS_21__unordered_map_equalIiS2_S7_S5_Lb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRiRKyEEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEEbEERKT_DpOT0_"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE5eraseENS_21__hash_const_iteratorIPNS_11__hash_nodeIS2_PvEEEE"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEENS_8equal_toIiEELb1EEENS_21__unordered_map_equalIiS2_S7_S5_Lb1EEENS_9allocatorIS2_EEE4findIiEENS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEERKT_"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6rehashEj"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEENS_8equal_toIiEELb1EEENS_21__unordered_map_equalIiS2_S7_S5_Lb1EEENS_9allocatorIS2_EEE8__rehashILb1EEEvj"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS2_PvEEEE"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEENS_8equal_toIyEELb1EEENS_21__unordered_map_equalIyS5_SA_S8_Lb1EEENS_9allocatorIS5_EEE11__do_rehashILb1EEEvj"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE8__rehashEj"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEENS_8equal_toIyEELb1EEENS_21__unordered_map_equalIyS5_SA_S8_Lb1EEENS_9allocatorIS5_EEE14__erase_uniqueIyEEjRKT_"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIiyEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEED2Ev"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEENS_8equal_toIyEELb1EEENS_21__unordered_map_equalIyS5_SA_S8_Lb1EEENS_9allocatorIS5_EEE25__emplace_unique_key_argsIyJRKyRS4_EEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS5_PvEEEEbEERKT_DpOT0_"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE14__erase_uniqueIyEEjRKT_"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEENS_8equal_toIyEELb1EEENS_21__unordered_map_equalIyS5_SA_S8_Lb1EEENS_9allocatorIS5_EEE4findIyEENS_15__hash_iteratorIPNS_11__hash_nodeIS5_PvEEEERKT_"
   },
   {
    "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE17__deallocate_nodeEPNS_16__hash_node_baseIPNS_11__hash_nodeIS5_PvEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE25__emplace_unique_key_argsIyJRKyRS4_EEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS5_PvEEEEbEERKT_DpOT0_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE4findIyEENS_15__hash_iteratorIPNS_11__hash_nodeIS5_PvEEEERKT_"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE5eraseENS_21__hash_const_iteratorIPNS_11__hash_nodeIS5_PvEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE6rehashEj"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS5_PvEEEE"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEE8__rehashEj"
-  },
-  {
-   "binding" : "weak",
-   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEELb1EEENS_21__unordered_map_equalIyS5_NS_8equal_toIyEELb1EEENS_9allocatorIS5_EEED2Ev"
+   "name" : "_ZNSt3__112__hash_tableINS_17__hash_value_typeIyN7android6Looper7RequestEEENS_22__unordered_map_hasherIyS5_NS_4hashIyEENS_8equal_toIyEELb1EEENS_21__unordered_map_equalIyS5_SA_S8_Lb1EEENS_9allocatorIS5_EEE8__rehashILb1EEEvj"
   },
   {
    "name" : "_ZTv0_n12_N7android14LooperCallbackD0Ev"
@@ -1466,67 +1411,6 @@
    "enum_fields" :
    [
     {
-     "enum_field_value" : -1,
-     "name" : "SP_DEFAULT"
-    },
-    {
-     "enum_field_value" : 0,
-     "name" : "SP_BACKGROUND"
-    },
-    {
-     "enum_field_value" : 1,
-     "name" : "SP_FOREGROUND"
-    },
-    {
-     "enum_field_value" : 2,
-     "name" : "SP_SYSTEM"
-    },
-    {
-     "enum_field_value" : 3,
-     "name" : "SP_AUDIO_APP"
-    },
-    {
-     "enum_field_value" : 4,
-     "name" : "SP_AUDIO_SYS"
-    },
-    {
-     "enum_field_value" : 5,
-     "name" : "SP_TOP_APP"
-    },
-    {
-     "enum_field_value" : 6,
-     "name" : "SP_RT_APP"
-    },
-    {
-     "enum_field_value" : 7,
-     "name" : "SP_RESTRICTED"
-    },
-    {
-     "enum_field_value" : 8,
-     "name" : "SP_CNT"
-    },
-    {
-     "enum_field_value" : 7,
-     "name" : "SP_MAX"
-    },
-    {
-     "enum_field_value" : 1,
-     "name" : "SP_SYSTEM_DEFAULT"
-    }
-   ],
-   "linker_set_key" : "_ZTI11SchedPolicy",
-   "name" : "SchedPolicy",
-   "referenced_type" : "_ZTI11SchedPolicy",
-   "self_type" : "_ZTI11SchedPolicy",
-   "size" : 4,
-   "source_file" : "system/core/libprocessgroup/include/processgroup/sched_policy.h",
-   "underlying_type" : "_ZTIi"
-  },
-  {
-   "alignment" : 4,
-   "enum_fields" :
-   [
-    {
      "enum_field_value" : 1,
      "name" : "HAL_HDR_DOLBY_VISION"
     },
@@ -1541,8 +1425,6 @@
    ],
    "linker_set_key" : "_ZTI13android_hdr_t",
    "name" : "android_hdr_t",
-   "referenced_type" : "_ZTI13android_hdr_t",
-   "self_type" : "_ZTI13android_hdr_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -1558,8 +1440,6 @@
    ],
    "linker_set_key" : "_ZTI18android_hdr_v1_2_t",
    "name" : "android_hdr_v1_2_t",
-   "referenced_type" : "_ZTI18android_hdr_v1_2_t",
-   "self_type" : "_ZTI18android_hdr_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -1607,8 +1487,6 @@
    ],
    "linker_set_key" : "_ZTI19android_LogPriority",
    "name" : "android_LogPriority",
-   "referenced_type" : "_ZTI19android_LogPriority",
-   "self_type" : "_ZTI19android_LogPriority",
    "size" : 4,
    "source_file" : "system/logging/liblog/include_vndk/android/log.h",
    "underlying_type" : "_ZTIj"
@@ -1848,8 +1726,6 @@
    ],
    "linker_set_key" : "_ZTI19android_dataspace_t",
    "name" : "android_dataspace_t",
-   "referenced_type" : "_ZTI19android_dataspace_t",
-   "self_type" : "_ZTI19android_dataspace_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -1885,8 +1761,6 @@
    ],
    "linker_set_key" : "_ZTI19android_flex_format",
    "name" : "android_flex_format",
-   "referenced_type" : "_ZTI19android_flex_format",
-   "self_type" : "_ZTI19android_flex_format",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics.h",
    "underlying_type" : "_ZTIj"
@@ -1918,8 +1792,6 @@
    ],
    "linker_set_key" : "_ZTI19android_transform_t",
    "name" : "android_transform_t",
-   "referenced_type" : "_ZTI19android_transform_t",
-   "self_type" : "_ZTI19android_transform_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -1971,8 +1843,6 @@
    ],
    "linker_set_key" : "_ZTI20android_color_mode_t",
    "name" : "android_color_mode_t",
-   "referenced_type" : "_ZTI20android_color_mode_t",
-   "self_type" : "_ZTI20android_color_mode_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -2004,8 +1874,6 @@
    ],
    "linker_set_key" : "_ZTI21$SYSTEM_TIME_BOOTTIME",
    "name" : "(unnamed)",
-   "referenced_type" : "_ZTI21$SYSTEM_TIME_BOOTTIME",
-   "self_type" : "_ZTI21$SYSTEM_TIME_BOOTTIME",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Timers.h",
    "underlying_type" : "_ZTIj"
@@ -2045,8 +1913,6 @@
    ],
    "linker_set_key" : "_ZTI22android_flex_component",
    "name" : "android_flex_component",
-   "referenced_type" : "_ZTI22android_flex_component",
-   "self_type" : "_ZTI22android_flex_component",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics.h",
    "underlying_type" : "_ZTIj"
@@ -2138,8 +2004,6 @@
    ],
    "linker_set_key" : "_ZTI22android_pixel_format_t",
    "name" : "android_pixel_format_t",
-   "referenced_type" : "_ZTI22android_pixel_format_t",
-   "self_type" : "_ZTI22android_pixel_format_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -2203,8 +2067,6 @@
    ],
    "linker_set_key" : "_ZTI23$ANDROID_PRIORITY_AUDIO",
    "name" : "(unnamed)",
-   "referenced_type" : "_ZTI23$ANDROID_PRIORITY_AUDIO",
-   "self_type" : "_ZTI23$ANDROID_PRIORITY_AUDIO",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/thread_defs.h",
    "underlying_type" : "_ZTIi"
@@ -2232,8 +2094,6 @@
    ],
    "linker_set_key" : "_ZTI24android_dataspace_v1_1_t",
    "name" : "android_dataspace_v1_1_t",
-   "referenced_type" : "_ZTI24android_dataspace_v1_1_t",
-   "self_type" : "_ZTI24android_dataspace_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2261,8 +2121,6 @@
    ],
    "linker_set_key" : "_ZTI24android_dataspace_v1_2_t",
    "name" : "android_dataspace_v1_2_t",
-   "referenced_type" : "_ZTI24android_dataspace_v1_2_t",
-   "self_type" : "_ZTI24android_dataspace_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -2286,8 +2144,6 @@
    ],
    "linker_set_key" : "_ZTI25android_color_mode_v1_1_t",
    "name" : "android_color_mode_v1_1_t",
-   "referenced_type" : "_ZTI25android_color_mode_v1_1_t",
-   "self_type" : "_ZTI25android_color_mode_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2303,8 +2159,6 @@
    ],
    "linker_set_key" : "_ZTI25android_color_mode_v1_2_t",
    "name" : "android_color_mode_v1_2_t",
-   "referenced_type" : "_ZTI25android_color_mode_v1_2_t",
-   "self_type" : "_ZTI25android_color_mode_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -2344,8 +2198,6 @@
    ],
    "linker_set_key" : "_ZTI25android_color_transform_t",
    "name" : "android_color_transform_t",
-   "referenced_type" : "_ZTI25android_color_transform_t",
-   "self_type" : "_ZTI25android_color_transform_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.0.h",
    "underlying_type" : "_ZTIj"
@@ -2373,8 +2225,6 @@
    ],
    "linker_set_key" : "_ZTI25android_pixel_format_sw_t",
    "name" : "android_pixel_format_sw_t",
-   "referenced_type" : "_ZTI25android_pixel_format_sw_t",
-   "self_type" : "_ZTI25android_pixel_format_sw_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-sw.h",
    "underlying_type" : "_ZTIj"
@@ -2414,8 +2264,6 @@
    ],
    "linker_set_key" : "_ZTI27android_pixel_format_v1_1_t",
    "name" : "android_pixel_format_v1_1_t",
-   "referenced_type" : "_ZTI27android_pixel_format_v1_1_t",
-   "self_type" : "_ZTI27android_pixel_format_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2431,8 +2279,6 @@
    ],
    "linker_set_key" : "_ZTI27android_pixel_format_v1_2_t",
    "name" : "android_pixel_format_v1_2_t",
-   "referenced_type" : "_ZTI27android_pixel_format_v1_2_t",
-   "self_type" : "_ZTI27android_pixel_format_v1_2_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.2.h",
    "underlying_type" : "_ZTIj"
@@ -2460,8 +2306,6 @@
    ],
    "linker_set_key" : "_ZTI28android_render_intent_v1_1_t",
    "name" : "android_render_intent_v1_1_t",
-   "referenced_type" : "_ZTI28android_render_intent_v1_1_t",
-   "self_type" : "_ZTI28android_render_intent_v1_1_t",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics-base-v1.1.h",
    "underlying_type" : "_ZTIj"
@@ -2517,8 +2361,6 @@
    ],
    "linker_set_key" : "_ZTI6log_id",
    "name" : "log_id",
-   "referenced_type" : "_ZTI6log_id",
-   "self_type" : "_ZTI6log_id",
    "size" : 4,
    "source_file" : "system/logging/liblog/include_vndk/android/log.h",
    "underlying_type" : "_ZTIj"
@@ -2542,8 +2384,6 @@
    ],
    "linker_set_key" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
    "name" : "android::VectorImpl::(unnamed)",
-   "referenced_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
-   "self_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h",
    "underlying_type" : "_ZTIj"
@@ -2567,8 +2407,7 @@
    ],
    "linker_set_key" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE",
    "name" : "android::VectorImpl::(unnamed)",
-   "referenced_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android10VectorImpl17$HAS_TRIVIAL_COPYE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h",
    "underlying_type" : "_ZTIj"
@@ -2584,8 +2423,6 @@
    ],
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_pointer<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2601,8 +2438,6 @@
    ],
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_pointer<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2618,8 +2453,6 @@
    ],
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_pointer<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2711,8 +2544,6 @@
    ],
    "linker_set_key" : "_ZTIN7android15$ALREADY_EXISTSE",
    "name" : "android::(unnamed)",
-   "referenced_type" : "_ZTIN7android15$ALREADY_EXISTSE",
-   "self_type" : "_ZTIN7android15$ALREADY_EXISTSE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Errors.h",
    "underlying_type" : "_ZTIi"
@@ -2804,8 +2635,7 @@
    ],
    "linker_set_key" : "_ZTIN7android15$ALREADY_EXISTSE",
    "name" : "android::(unnamed)",
-   "referenced_type" : "_ZTIN7android15$ALREADY_EXISTSE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/Errors.sdump",
-   "self_type" : "_ZTIN7android15$ALREADY_EXISTSE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/Errors.sdump",
+   "self_type" : "_ZTIN7android15$ALREADY_EXISTSE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/Errors.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/Errors.h",
    "underlying_type" : "_ZTIi"
@@ -2865,8 +2695,6 @@
    ],
    "linker_set_key" : "_ZTIN7android15$PRIORITY_AUDIOE",
    "name" : "android::(unnamed)",
-   "referenced_type" : "_ZTIN7android15$PRIORITY_AUDIOE",
-   "self_type" : "_ZTIN7android15$PRIORITY_AUDIOE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/ThreadDefs.h",
    "underlying_type" : "_ZTIi"
@@ -2882,8 +2710,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_copy<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2899,8 +2725,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_copy<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2916,8 +2740,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_copy<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2933,8 +2755,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
    "name" : "android::trait_trivial_copy<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2950,8 +2770,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbE6$valueE",
    "name" : "android::trait_trivial_copy<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2967,8 +2786,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
    "name" : "android::trait_trivial_copy<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -2984,8 +2801,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcE6$valueE",
    "name" : "android::trait_trivial_copy<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3001,8 +2817,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
    "name" : "android::trait_trivial_copy<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3018,8 +2832,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdE6$valueE",
    "name" : "android::trait_trivial_copy<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3035,8 +2848,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
    "name" : "android::trait_trivial_copy<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3052,8 +2863,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfE6$valueE",
    "name" : "android::trait_trivial_copy<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3069,8 +2879,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3086,8 +2894,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3103,8 +2910,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
    "name" : "android::trait_trivial_copy<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3120,8 +2925,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiE6$valueE",
    "name" : "android::trait_trivial_copy<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3137,8 +2941,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3154,8 +2956,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3171,8 +2972,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
    "name" : "android::trait_trivial_copy<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3188,8 +2987,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlE6$valueE",
    "name" : "android::trait_trivial_copy<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3205,8 +3003,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3222,8 +3018,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3239,8 +3034,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
    "name" : "android::trait_trivial_copy<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3256,8 +3049,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsE6$valueE",
    "name" : "android::trait_trivial_copy<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3273,8 +3065,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3290,8 +3080,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3307,8 +3096,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
    "name" : "android::trait_trivial_copy<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3324,8 +3111,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvE6$valueE",
    "name" : "android::trait_trivial_copy<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3341,8 +3127,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
    "name" : "android::trait_trivial_copy<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3358,8 +3142,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxE6$valueE",
    "name" : "android::trait_trivial_copy<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3375,8 +3158,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3392,8 +3173,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyE6$valueE",
    "name" : "android::trait_trivial_copy<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3409,8 +3189,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_ctor<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3426,8 +3204,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_ctor<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3443,8 +3219,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_ctor<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3460,8 +3234,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
    "name" : "android::trait_trivial_ctor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3477,8 +3249,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE",
    "name" : "android::trait_trivial_ctor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3494,8 +3265,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
    "name" : "android::trait_trivial_ctor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3511,8 +3280,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE",
    "name" : "android::trait_trivial_ctor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3528,8 +3296,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
    "name" : "android::trait_trivial_ctor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3545,8 +3311,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE",
    "name" : "android::trait_trivial_ctor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3562,8 +3327,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
    "name" : "android::trait_trivial_ctor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3579,8 +3342,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE",
    "name" : "android::trait_trivial_ctor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3596,8 +3358,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3613,8 +3373,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3630,8 +3389,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
    "name" : "android::trait_trivial_ctor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3647,8 +3404,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE",
    "name" : "android::trait_trivial_ctor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3664,8 +3420,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3681,8 +3435,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3698,8 +3451,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
    "name" : "android::trait_trivial_ctor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3715,8 +3466,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE",
    "name" : "android::trait_trivial_ctor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3732,8 +3482,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3749,8 +3497,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3766,8 +3513,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
    "name" : "android::trait_trivial_ctor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3783,8 +3528,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE",
    "name" : "android::trait_trivial_ctor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3800,8 +3544,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3817,8 +3559,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3834,8 +3575,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
    "name" : "android::trait_trivial_ctor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3851,8 +3590,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE",
    "name" : "android::trait_trivial_ctor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3868,8 +3606,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
    "name" : "android::trait_trivial_ctor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3885,8 +3621,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE",
    "name" : "android::trait_trivial_ctor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3902,8 +3637,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3919,8 +3652,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE",
    "name" : "android::trait_trivial_ctor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3936,8 +3668,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_dtor<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3953,8 +3683,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_dtor<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3970,8 +3698,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_dtor<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -3987,8 +3713,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
    "name" : "android::trait_trivial_dtor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4004,8 +3728,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE",
    "name" : "android::trait_trivial_dtor<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4021,8 +3744,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
    "name" : "android::trait_trivial_dtor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4038,8 +3759,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE",
    "name" : "android::trait_trivial_dtor<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4055,8 +3775,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
    "name" : "android::trait_trivial_dtor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4072,8 +3790,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE",
    "name" : "android::trait_trivial_dtor<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4089,8 +3806,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
    "name" : "android::trait_trivial_dtor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4106,8 +3821,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE",
    "name" : "android::trait_trivial_dtor<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4123,8 +3837,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4140,8 +3852,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4157,8 +3868,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
    "name" : "android::trait_trivial_dtor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4174,8 +3883,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE",
    "name" : "android::trait_trivial_dtor<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4191,8 +3899,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4208,8 +3914,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4225,8 +3930,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
    "name" : "android::trait_trivial_dtor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4242,8 +3945,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE",
    "name" : "android::trait_trivial_dtor<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4259,8 +3961,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4276,8 +3976,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4293,8 +3992,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
    "name" : "android::trait_trivial_dtor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4310,8 +4007,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE",
    "name" : "android::trait_trivial_dtor<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4327,8 +4023,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4344,8 +4038,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4361,8 +4054,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
    "name" : "android::trait_trivial_dtor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4378,8 +4069,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE",
    "name" : "android::trait_trivial_dtor<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4395,8 +4085,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
    "name" : "android::trait_trivial_dtor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4412,8 +4100,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE",
    "name" : "android::trait_trivial_dtor<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4429,8 +4116,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4446,8 +4131,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE",
    "name" : "android::trait_trivial_dtor<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4463,8 +4147,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEE6$valueE",
    "name" : "android::trait_trivial_move<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4480,8 +4162,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEE6$valueE",
    "name" : "android::trait_trivial_move<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4497,8 +4177,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEE6$valueE",
    "name" : "android::trait_trivial_move<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4514,8 +4192,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
    "name" : "android::trait_trivial_move<android::String8>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/String8.h",
    "underlying_type" : "_ZTIj"
@@ -4531,8 +4207,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE",
    "name" : "android::trait_trivial_move<android::String8>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h",
    "underlying_type" : "_ZTIj"
@@ -4548,8 +4223,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_8String16EE6$valueE",
    "name" : "android::trait_trivial_move<android::String16>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h",
    "underlying_type" : "_ZTIj"
@@ -4565,8 +4238,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
    "name" : "android::trait_trivial_move<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4582,8 +4253,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbE6$valueE",
    "name" : "android::trait_trivial_move<bool>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIbE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4599,8 +4269,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
    "name" : "android::trait_trivial_move<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4616,8 +4284,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcE6$valueE",
    "name" : "android::trait_trivial_move<char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIcE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4633,8 +4300,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
    "name" : "android::trait_trivial_move<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4650,8 +4315,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdE6$valueE",
    "name" : "android::trait_trivial_move<double>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIdE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4667,8 +4331,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
    "name" : "android::trait_trivial_move<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4684,8 +4346,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfE6$valueE",
    "name" : "android::trait_trivial_move<float>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIfE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4701,8 +4362,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
    "name" : "android::trait_trivial_move<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4718,8 +4377,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhE6$valueE",
    "name" : "android::trait_trivial_move<unsigned char>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIhE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4735,8 +4393,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
    "name" : "android::trait_trivial_move<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4752,8 +4408,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiE6$valueE",
    "name" : "android::trait_trivial_move<int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIiE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4769,8 +4424,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
    "name" : "android::trait_trivial_move<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4786,8 +4439,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjE6$valueE",
    "name" : "android::trait_trivial_move<unsigned int>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIjE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4803,8 +4455,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
    "name" : "android::trait_trivial_move<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4820,8 +4470,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlE6$valueE",
    "name" : "android::trait_trivial_move<long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIlE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4837,8 +4486,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4854,8 +4501,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveImE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4871,8 +4517,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
    "name" : "android::trait_trivial_move<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4888,8 +4532,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsE6$valueE",
    "name" : "android::trait_trivial_move<short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIsE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4905,8 +4548,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
    "name" : "android::trait_trivial_move<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4922,8 +4563,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItE6$valueE",
    "name" : "android::trait_trivial_move<unsigned short>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveItE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4939,8 +4579,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
    "name" : "android::trait_trivial_move<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4956,8 +4594,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvE6$valueE",
    "name" : "android::trait_trivial_move<void>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIvE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4973,8 +4610,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
    "name" : "android::trait_trivial_move<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -4990,8 +4625,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxE6$valueE",
    "name" : "android::trait_trivial_move<long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIxE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5007,8 +4641,6 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5024,8 +4656,7 @@
    ],
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyE6$valueE",
    "name" : "android::trait_trivial_move<unsigned long long>::(unnamed)",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIyE6$valueE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5045,8 +4676,6 @@
    ],
    "linker_set_key" : "_ZTIN7android5Mutex8$PRIVATEE",
    "name" : "android::Mutex::(unnamed)",
-   "referenced_type" : "_ZTIN7android5Mutex8$PRIVATEE",
-   "self_type" : "_ZTIN7android5Mutex8$PRIVATEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Mutex.h",
    "underlying_type" : "_ZTIj"
@@ -5078,8 +4707,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper12$EVENT_ERRORE",
    "name" : "android::Looper::(unnamed)",
-   "referenced_type" : "_ZTIN7android6Looper12$EVENT_ERRORE",
-   "self_type" : "_ZTIN7android6Looper12$EVENT_ERRORE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "underlying_type" : "_ZTIj"
@@ -5107,8 +4734,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper14$POLL_CALLBACKE",
    "name" : "android::Looper::(unnamed)",
-   "referenced_type" : "_ZTIN7android6Looper14$POLL_CALLBACKE",
-   "self_type" : "_ZTIN7android6Looper14$POLL_CALLBACKE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "underlying_type" : "_ZTIi"
@@ -5124,8 +4749,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper28$PREPARE_ALLOW_NON_CALLBACKSE",
    "name" : "android::Looper::(unnamed)",
-   "referenced_type" : "_ZTIN7android6Looper28$PREPARE_ALLOW_NON_CALLBACKSE",
-   "self_type" : "_ZTIN7android6Looper28$PREPARE_ALLOW_NON_CALLBACKSE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "underlying_type" : "_ZTIj"
@@ -5145,8 +4768,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6RWLock8$PRIVATEE",
    "name" : "android::RWLock::(unnamed)",
-   "referenced_type" : "_ZTIN7android6RWLock8$PRIVATEE",
-   "self_type" : "_ZTIN7android6RWLock8$PRIVATEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h",
    "underlying_type" : "_ZTIj"
@@ -5178,8 +4799,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEE17$has_trivial_copyE",
    "name" : "android::traits<android::sysprop_change_callback_info>::(unnamed)",
-   "referenced_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEE17$has_trivial_copyE",
-   "self_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEE17$has_trivial_copyE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5211,8 +4830,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEE17$has_trivial_copyE",
    "name" : "android::traits<android::Looper::MessageEnvelope>::(unnamed)",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEE17$has_trivial_copyE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEE17$has_trivial_copyE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5244,8 +4861,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper8ResponseEE17$has_trivial_copyE",
    "name" : "android::traits<android::Looper::Response>::(unnamed)",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEE17$has_trivial_copyE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEE17$has_trivial_copyE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "underlying_type" : "_ZTIj"
@@ -5277,8 +4892,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7FileMap9MapAdviceE",
    "name" : "android::FileMap::MapAdvice",
-   "referenced_type" : "_ZTIN7android7FileMap9MapAdviceE",
-   "self_type" : "_ZTIN7android7FileMap9MapAdviceE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h",
    "underlying_type" : "_ZTIj"
@@ -5295,8 +4908,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
-   "self_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5313,8 +4924,7 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBase17$FIRST_INC_STRONGE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5339,8 +4949,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
-   "self_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5365,8 +4973,7 @@
    ],
    "linker_set_key" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE",
    "name" : "android::RefBase::(unnamed)",
-   "referenced_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBase21$OBJECT_LIFETIME_MASKE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "underlying_type" : "_ZTIj"
@@ -5386,8 +4993,6 @@
    ],
    "linker_set_key" : "_ZTIN7android9Condition10WakeUpTypeE",
    "name" : "android::Condition::WakeUpType",
-   "referenced_type" : "_ZTIN7android9Condition10WakeUpTypeE",
-   "self_type" : "_ZTIN7android9Condition10WakeUpTypeE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Condition.h",
    "underlying_type" : "_ZTIj"
@@ -5407,8 +5012,6 @@
    ],
    "linker_set_key" : "_ZTIN7android9Condition8$PRIVATEE",
    "name" : "android::Condition::(unnamed)",
-   "referenced_type" : "_ZTIN7android9Condition8$PRIVATEE",
-   "self_type" : "_ZTIN7android9Condition8$PRIVATEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Condition.h",
    "underlying_type" : "_ZTIj"
@@ -5425,8 +5028,6 @@
    ],
    "linker_set_key" : "_ZTIN7android9FdPrinter18$MAX_FORMAT_STRINGE",
    "name" : "android::FdPrinter::(unnamed)",
-   "referenced_type" : "_ZTIN7android9FdPrinter18$MAX_FORMAT_STRINGE",
-   "self_type" : "_ZTIN7android9FdPrinter18$MAX_FORMAT_STRINGE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "underlying_type" : "_ZTIj"
@@ -5459,9 +5060,7 @@
      "referenced_type" : "_ZTIPPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPFiPvES_PKcijPS_E",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPFiPvES_PKcijPS_E",
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
   {
@@ -5477,9 +5076,7 @@
      "referenced_type" : "_ZTIPKv"
     }
    ],
-   "referenced_type" : "_ZTIFiPKvS0_E",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPKvS0_E",
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
   {
@@ -5498,9 +5095,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPKvS0_PvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPKvS0_PvE",
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
   {
@@ -5513,9 +5108,7 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiPvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiPvE",
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
   {
@@ -5534,18 +5127,14 @@
      "referenced_type" : "_ZTIPv"
     }
    ],
-   "referenced_type" : "_ZTIFiiiPvE",
    "return_type" : "_ZTIi",
-   "self_type" : "_ZTIFiiiPvE",
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIFvvE",
    "name" : "void ()",
-   "referenced_type" : "_ZTIFvvE",
    "return_type" : "_ZTIv",
-   "self_type" : "_ZTIFvvE",
    "source_file" : "system/core/libutils/include/utils/misc.h"
   }
  ],
@@ -6887,6 +6476,35 @@
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
   {
+   "function_name" : "android::sp<android::LooperCallback>::operator=",
+   "linker_set_key" : "_ZN7android2spINS_14LooperCallbackEEaSERKS2_",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "_ZTIPN7android2spINS_14LooperCallbackEEE"
+    },
+    {
+     "referenced_type" : "_ZTIRKN7android2spINS_14LooperCallbackEEE"
+    }
+   ],
+   "return_type" : "_ZTIRN7android2spINS_14LooperCallbackEEE",
+   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
+  },
+  {
+   "function_name" : "android::sp<android::Looper>::~sp",
+   "linker_set_key" : "_ZN7android2spINS_6LooperEED2Ev",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "_ZTIPN7android2spINS_6LooperEEE"
+    }
+   ],
+   "return_type" : "_ZTIv",
+   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
+  },
+  {
    "function_name" : "android::sp<android::Looper>::operator=",
    "linker_set_key" : "_ZN7android2spINS_6LooperEEaSEOS2_",
    "parameters" :
@@ -6903,6 +6521,22 @@
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
   {
+   "function_name" : "android::sp<android::Looper>::operator=",
+   "linker_set_key" : "_ZN7android2spINS_6LooperEEaSERKS2_",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "_ZTIPN7android2spINS_6LooperEEE"
+    },
+    {
+     "referenced_type" : "_ZTIRKN7android2spINS_6LooperEEE"
+    }
+   ],
+   "return_type" : "_ZTIRN7android2spINS_6LooperEEE",
+   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
+  },
+  {
    "function_name" : "android::sp<android::Thread>::clear",
    "linker_set_key" : "_ZN7android2spINS_6ThreadEE5clearEv",
    "parameters" :
@@ -7016,6 +6650,34 @@
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
   {
+   "function_name" : "android::Looper::getFdStateDebug",
+   "linker_set_key" : "_ZN7android6Looper15getFdStateDebugEiPiS1_PNS_2spINS_14LooperCallbackEEEPPv",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "_ZTIPN7android6LooperE"
+    },
+    {
+     "referenced_type" : "_ZTIi"
+    },
+    {
+     "referenced_type" : "_ZTIPi"
+    },
+    {
+     "referenced_type" : "_ZTIPi"
+    },
+    {
+     "referenced_type" : "_ZTIPN7android2spINS_14LooperCallbackEEE"
+    },
+    {
+     "referenced_type" : "_ZTIPPv"
+    }
+   ],
+   "return_type" : "_ZTIb",
+   "source_file" : "system/core/libutils/include/utils/Looper.h"
+  },
+  {
    "function_name" : "android::Looper::sendMessageAtTime",
    "linker_set_key" : "_ZN7android6Looper17sendMessageAtTimeExRKNS_2spINS_14MessageHandlerEEERKNS_7MessageE",
    "parameters" :
@@ -7741,7 +7403,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -7770,7 +7432,7 @@
    "parameters" :
    [
     {
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7789,7 +7451,7 @@
    "parameters" :
    [
     {
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7808,7 +7470,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7824,7 +7486,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7840,7 +7502,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7856,7 +7518,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7872,7 +7534,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7888,7 +7550,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIb"
@@ -7908,7 +7570,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7925,7 +7587,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -7942,7 +7604,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIi"
@@ -7959,7 +7621,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIj"
@@ -7979,7 +7641,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -7993,7 +7655,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8007,7 +7669,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8021,7 +7683,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8035,7 +7697,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8048,7 +7710,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIj"
@@ -8065,7 +7727,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8084,7 +7746,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8100,7 +7762,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIj"
@@ -8116,7 +7778,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8129,7 +7791,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8148,7 +7810,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8161,7 +7823,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8180,7 +7842,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8199,7 +7861,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8215,7 +7877,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8234,10 +7896,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8250,7 +7912,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8266,7 +7928,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8285,10 +7947,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIi",
@@ -8303,7 +7965,7 @@
      "referenced_type" : "_ZTIPKc"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -8318,7 +7980,7 @@
      "referenced_type" : "_ZTISt9__va_list"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -8328,7 +7990,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8341,7 +8003,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8357,7 +8019,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8373,7 +8035,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8392,7 +8054,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8408,7 +8070,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8427,7 +8089,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8443,7 +8105,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8462,7 +8124,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIRKN7android8String16E"
@@ -8478,10 +8140,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8494,7 +8156,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8507,7 +8169,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8523,7 +8185,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDi"
@@ -8542,7 +8204,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8558,7 +8220,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKDs"
@@ -8577,7 +8239,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8593,7 +8255,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -8612,7 +8274,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIRKN7android8String16E"
@@ -8628,10 +8290,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8644,7 +8306,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8657,7 +8319,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -8670,7 +8332,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -9045,7 +8707,7 @@
      "referenced_type" : "_ZTIPN7android8String16E"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -9199,7 +8861,7 @@
      "referenced_type" : "_ZTIPN7android8String16E"
     },
     {
-     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIv",
@@ -9611,7 +9273,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIj"
@@ -9627,7 +9289,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIj",
@@ -9641,7 +9303,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIj",
@@ -10182,13 +9844,13 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
     }
    ],
-   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
   {
@@ -10198,10 +9860,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
-   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
   {
@@ -10227,7 +9889,7 @@
      "referenced_type" : "_ZTIPKN7android7RefBase12weakref_typeE"
     }
    ],
-   "return_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
   {
@@ -10250,7 +9912,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10266,7 +9928,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIi",
@@ -10279,7 +9941,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10295,7 +9957,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10311,7 +9973,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKv"
@@ -10328,10 +9990,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -10342,10 +10004,10 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
-   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "return_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
   {
@@ -10355,7 +10017,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     },
     {
      "referenced_type" : "_ZTIPKc"
@@ -10375,7 +10037,7 @@
    [
     {
      "is_this_ptr" : true,
-     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "return_type" : "_ZTIj",
@@ -10975,7 +10637,6 @@
    "linker_set_key" : "_ZTIRA1_KDs",
    "name" : "const char16_t (&)[1]",
    "referenced_type" : "_ZTIA1_KDs",
-   "self_type" : "_ZTIRA1_KDs",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -10983,8 +10644,7 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIRKN7android10VectorImplE",
    "name" : "const android::VectorImpl &",
-   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRKN7android10VectorImplE",
+   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -10993,7 +10653,6 @@
    "linker_set_key" : "_ZTIRKN7android16ReferenceRenamerE",
    "name" : "const android::ReferenceRenamer &",
    "referenced_type" : "_ZTIKN7android16ReferenceRenamerE",
-   "self_type" : "_ZTIRKN7android16ReferenceRenamerE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -11002,7 +10661,6 @@
    "linker_set_key" : "_ZTIRKN7android16SortedVectorImplE",
    "name" : "const android::SortedVectorImpl &",
    "referenced_type" : "_ZTIKN7android16SortedVectorImplE",
-   "self_type" : "_ZTIRKN7android16SortedVectorImplE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11011,7 +10669,6 @@
    "linker_set_key" : "_ZTIRKN7android28sysprop_change_callback_infoE",
    "name" : "const android::sysprop_change_callback_info &",
    "referenced_type" : "_ZTIKN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIRKN7android28sysprop_change_callback_infoE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11020,7 +10677,6 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_14LooperCallbackEEE",
    "name" : "const android::sp<android::LooperCallback> &",
    "referenced_type" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIRKN7android2spINS_14LooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11029,7 +10685,6 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_14MessageHandlerEEE",
    "name" : "const android::sp<android::MessageHandler> &",
    "referenced_type" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIRKN7android2spINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11038,7 +10693,6 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "const android::sp<android::SimpleLooperCallback> &",
    "referenced_type" : "_ZTIKN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIRKN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11047,16 +10701,14 @@
    "linker_set_key" : "_ZTIRKN7android2spINS_6LooperEEE",
    "name" : "const android::sp<android::Looper> &",
    "referenced_type" : "_ZTIKN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIRKN7android2spINS_6LooperEEE",
    "size" : 4,
-   "source_file" : "system/core/libutils/include/utils/Looper.h"
+   "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
   {
    "alignment" : 4,
    "linker_set_key" : "_ZTIRKN7android2spINS_6ThreadEEE",
    "name" : "const android::sp<android::Thread> &",
    "referenced_type" : "_ZTIKN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIRKN7android2spINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11065,7 +10717,6 @@
    "linker_set_key" : "_ZTIRKN7android2wpINS_14MessageHandlerEEE",
    "name" : "const android::wp<android::MessageHandler> &",
    "referenced_type" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIRKN7android2wpINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11074,7 +10725,6 @@
    "linker_set_key" : "_ZTIRKN7android6Looper15MessageEnvelopeE",
    "name" : "const android::Looper::MessageEnvelope &",
    "referenced_type" : "_ZTIKN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIRKN7android6Looper15MessageEnvelopeE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11083,7 +10733,6 @@
    "linker_set_key" : "_ZTIRKN7android6Looper8ResponseE",
    "name" : "const android::Looper::Response &",
    "referenced_type" : "_ZTIKN7android6Looper8ResponseE",
-   "self_type" : "_ZTIRKN7android6Looper8ResponseE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11092,7 +10741,6 @@
    "linker_set_key" : "_ZTIRKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "const android::Vector<android::sysprop_change_callback_info> &",
    "referenced_type" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIRKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11101,7 +10749,6 @@
    "linker_set_key" : "_ZTIRKN7android7MessageE",
    "name" : "const android::Message &",
    "referenced_type" : "_ZTIKN7android7MessageE",
-   "self_type" : "_ZTIRKN7android7MessageE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -11110,7 +10757,6 @@
    "linker_set_key" : "_ZTIRKN7android7String8E",
    "name" : "const android::String8 &",
    "referenced_type" : "_ZTIKN7android7String8E",
-   "self_type" : "_ZTIRKN7android7String8E",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -11118,8 +10764,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIRKN7android7String8E",
    "name" : "const android::String8 &",
-   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIRKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11128,7 +10774,6 @@
    "linker_set_key" : "_ZTIRKN7android8String1610StaticDataILj1EEE",
    "name" : "const android::String16::StaticData<1> &",
    "referenced_type" : "_ZTIKN7android8String1610StaticDataILj1EEE",
-   "self_type" : "_ZTIRKN7android8String1610StaticDataILj1EEE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11137,7 +10782,6 @@
    "linker_set_key" : "_ZTIRKN7android8String16E",
    "name" : "const android::String16 &",
    "referenced_type" : "_ZTIKN7android8String16E",
-   "self_type" : "_ZTIRKN7android8String16E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11146,7 +10790,6 @@
    "linker_set_key" : "_ZTIRKa",
    "name" : "const signed char &",
    "referenced_type" : "_ZTIKa",
-   "self_type" : "_ZTIRKa",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11155,7 +10798,6 @@
    "linker_set_key" : "_ZTIRKb",
    "name" : "const bool &",
    "referenced_type" : "_ZTIKb",
-   "self_type" : "_ZTIRKb",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11164,7 +10806,6 @@
    "linker_set_key" : "_ZTIRKd",
    "name" : "const double &",
    "referenced_type" : "_ZTIKd",
-   "self_type" : "_ZTIRKd",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11173,7 +10814,6 @@
    "linker_set_key" : "_ZTIRKf",
    "name" : "const float &",
    "referenced_type" : "_ZTIKf",
-   "self_type" : "_ZTIRKf",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11182,7 +10822,6 @@
    "linker_set_key" : "_ZTIRKh",
    "name" : "const unsigned char &",
    "referenced_type" : "_ZTIKh",
-   "self_type" : "_ZTIRKh",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11191,7 +10830,6 @@
    "linker_set_key" : "_ZTIRKi",
    "name" : "const int &",
    "referenced_type" : "_ZTIKi",
-   "self_type" : "_ZTIRKi",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11200,7 +10838,6 @@
    "linker_set_key" : "_ZTIRKj",
    "name" : "const unsigned int &",
    "referenced_type" : "_ZTIKj",
-   "self_type" : "_ZTIRKj",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11209,7 +10846,6 @@
    "linker_set_key" : "_ZTIRKs",
    "name" : "const short &",
    "referenced_type" : "_ZTIKs",
-   "self_type" : "_ZTIRKs",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11218,7 +10854,6 @@
    "linker_set_key" : "_ZTIRKt",
    "name" : "const unsigned short &",
    "referenced_type" : "_ZTIKt",
-   "self_type" : "_ZTIRKt",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11227,7 +10862,6 @@
    "linker_set_key" : "_ZTIRKx",
    "name" : "const long long &",
    "referenced_type" : "_ZTIKx",
-   "self_type" : "_ZTIRKx",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11236,7 +10870,6 @@
    "linker_set_key" : "_ZTIRKy",
    "name" : "const unsigned long long &",
    "referenced_type" : "_ZTIKy",
-   "self_type" : "_ZTIRKy",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11244,8 +10877,7 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIRN7android10VectorImplE",
    "name" : "android::VectorImpl &",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRN7android10VectorImplE",
+   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11253,8 +10885,7 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIRN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl &",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRN7android16SortedVectorImplE",
+   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11263,7 +10894,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_14LooperCallbackEEE",
    "name" : "android::sp<android::LooperCallback> &",
    "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIRN7android2spINS_14LooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11272,7 +10902,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler> &",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIRN7android2spINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11281,7 +10910,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback> &",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIRN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11290,7 +10918,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper> &",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIRN7android2spINS_6LooperEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11299,7 +10926,6 @@
    "linker_set_key" : "_ZTIRN7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread> &",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIRN7android2spINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11308,7 +10934,6 @@
    "linker_set_key" : "_ZTIRN7android5MutexE",
    "name" : "android::Mutex &",
    "referenced_type" : "_ZTIN7android5MutexE",
-   "self_type" : "_ZTIRN7android5MutexE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -11317,7 +10942,6 @@
    "linker_set_key" : "_ZTIRN7android6Looper8ResponseE",
    "name" : "android::Looper::Response &",
    "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIRN7android6Looper8ResponseE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11326,7 +10950,6 @@
    "linker_set_key" : "_ZTIRN7android6RWLockE",
    "name" : "android::RWLock &",
    "referenced_type" : "_ZTIN7android6RWLockE",
-   "self_type" : "_ZTIRN7android6RWLockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -11335,7 +10958,6 @@
    "linker_set_key" : "_ZTIRN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::Vector<android::sysprop_change_callback_info> &",
    "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIRN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11344,7 +10966,6 @@
    "linker_set_key" : "_ZTIRN7android7FileMapE",
    "name" : "android::FileMap &",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIRN7android7FileMapE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -11353,7 +10974,6 @@
    "linker_set_key" : "_ZTIRN7android7PrinterE",
    "name" : "android::Printer &",
    "referenced_type" : "_ZTIN7android7PrinterE",
-   "self_type" : "_ZTIRN7android7PrinterE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11362,7 +10982,6 @@
    "linker_set_key" : "_ZTIRN7android7String8E",
    "name" : "android::String8 &",
    "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIRN7android7String8E",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -11370,8 +10989,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIRN7android7String8E",
    "name" : "android::String8 &",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIRN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIRN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11380,7 +10999,6 @@
    "linker_set_key" : "_ZTIRN7android8String16E",
    "name" : "android::String16 &",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIRN7android8String16E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11389,7 +11007,6 @@
    "linker_set_key" : "_ZTIRP13native_handle",
    "name" : "native_handle *&",
    "referenced_type" : "_ZTIP13native_handle",
-   "self_type" : "_ZTIRP13native_handle",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11398,7 +11015,6 @@
    "linker_set_key" : "_ZTIRPFiiiPvE",
    "name" : "int (*&)(int, int, void *)",
    "referenced_type" : "_ZTIPFiiiPvE",
-   "self_type" : "_ZTIRPFiiiPvE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11407,7 +11023,6 @@
    "linker_set_key" : "_ZTIRb",
    "name" : "bool &",
    "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIRb",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   }
@@ -11419,7 +11034,6 @@
    "linker_set_key" : "_ZTIP13native_handle",
    "name" : "native_handle *",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIP13native_handle",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11428,7 +11042,6 @@
    "linker_set_key" : "_ZTIP18android_flex_plane",
    "name" : "android_flex_plane *",
    "referenced_type" : "_ZTI18android_flex_plane",
-   "self_type" : "_ZTIP18android_flex_plane",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -11437,7 +11050,6 @@
    "linker_set_key" : "_ZTIP3DIR",
    "name" : "DIR *",
    "referenced_type" : "_ZTI3DIR",
-   "self_type" : "_ZTIP3DIR",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11446,7 +11058,6 @@
    "linker_set_key" : "_ZTIP7__sFILE",
    "name" : "__sFILE *",
    "referenced_type" : "_ZTI7__sFILE",
-   "self_type" : "_ZTIP7__sFILE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11455,7 +11066,6 @@
    "linker_set_key" : "_ZTIP7log_msg",
    "name" : "log_msg *",
    "referenced_type" : "_ZTI7log_msg",
-   "self_type" : "_ZTIP7log_msg",
    "size" : 4,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -11464,7 +11074,6 @@
    "linker_set_key" : "_ZTIPDs",
    "name" : "char16_t *",
    "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIPDs",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11473,7 +11082,6 @@
    "linker_set_key" : "_ZTIPFiPFiPvES_PKcijPS_E",
    "name" : "int (*)(int (*)(void *), void *, const char *, int, unsigned int, void **)",
    "referenced_type" : "_ZTIFiPFiPvES_PKcijPS_E",
-   "self_type" : "_ZTIPFiPFiPvES_PKcijPS_E",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
@@ -11482,7 +11090,6 @@
    "linker_set_key" : "_ZTIPFiPKvS0_E",
    "name" : "int (*)(const void *, const void *)",
    "referenced_type" : "_ZTIFiPKvS0_E",
-   "self_type" : "_ZTIPFiPKvS0_E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11491,7 +11098,6 @@
    "linker_set_key" : "_ZTIPFiPKvS0_PvE",
    "name" : "int (*)(const void *, const void *, void *)",
    "referenced_type" : "_ZTIFiPKvS0_PvE",
-   "self_type" : "_ZTIPFiPKvS0_PvE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11500,7 +11106,6 @@
    "linker_set_key" : "_ZTIPFiPvE",
    "name" : "int (*)(void *)",
    "referenced_type" : "_ZTIFiPvE",
-   "self_type" : "_ZTIPFiPvE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
@@ -11509,7 +11114,6 @@
    "linker_set_key" : "_ZTIPFiiiPvE",
    "name" : "int (*)(int, int, void *)",
    "referenced_type" : "_ZTIFiiiPvE",
-   "self_type" : "_ZTIPFiiiPvE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11518,7 +11122,6 @@
    "linker_set_key" : "_ZTIPFvvE",
    "name" : "void (*)()",
    "referenced_type" : "_ZTIFvvE",
-   "self_type" : "_ZTIPFvvE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/misc.h"
   },
@@ -11527,7 +11130,6 @@
    "linker_set_key" : "_ZTIPK13native_handle",
    "name" : "const native_handle *",
    "referenced_type" : "_ZTIK13native_handle",
-   "self_type" : "_ZTIPK13native_handle",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -11536,7 +11138,6 @@
    "linker_set_key" : "_ZTIPK7log_msg",
    "name" : "const log_msg *",
    "referenced_type" : "_ZTIK7log_msg",
-   "self_type" : "_ZTIPK7log_msg",
    "size" : 4,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -11545,7 +11146,6 @@
    "linker_set_key" : "_ZTIPKDi",
    "name" : "const char32_t *",
    "referenced_type" : "_ZTIKDi",
-   "self_type" : "_ZTIPKDi",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11554,7 +11154,6 @@
    "linker_set_key" : "_ZTIPKDs",
    "name" : "const char16_t *",
    "referenced_type" : "_ZTIKDs",
-   "self_type" : "_ZTIPKDs",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11563,7 +11162,6 @@
    "linker_set_key" : "_ZTIPKN7android10VectorImplE",
    "name" : "const android::VectorImpl *",
    "referenced_type" : "_ZTIKN7android10VectorImplE",
-   "self_type" : "_ZTIPKN7android10VectorImplE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h"
   },
@@ -11571,8 +11169,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPKN7android10VectorImplE",
    "name" : "const android::VectorImpl *",
-   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11581,7 +11179,6 @@
    "linker_set_key" : "_ZTIPKN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "const android::LightRefBase<android::NativeHandle> *",
    "referenced_type" : "_ZTIKN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIPKN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -11590,7 +11187,6 @@
    "linker_set_key" : "_ZTIPKN7android12NativeHandleE",
    "name" : "const android::NativeHandle *",
    "referenced_type" : "_ZTIKN7android12NativeHandleE",
-   "self_type" : "_ZTIPKN7android12NativeHandleE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -11599,7 +11195,6 @@
    "linker_set_key" : "_ZTIPKN7android16SortedVectorImplE",
    "name" : "const android::SortedVectorImpl *",
    "referenced_type" : "_ZTIKN7android16SortedVectorImplE",
-   "self_type" : "_ZTIPKN7android16SortedVectorImplE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11608,7 +11203,6 @@
    "linker_set_key" : "_ZTIPKN7android28sysprop_change_callback_infoE",
    "name" : "const android::sysprop_change_callback_info *",
    "referenced_type" : "_ZTIKN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIPKN7android28sysprop_change_callback_infoE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11617,7 +11211,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_14LooperCallbackEEE",
    "name" : "const android::sp<android::LooperCallback> *",
    "referenced_type" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIPKN7android2spINS_14LooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11626,7 +11219,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_14MessageHandlerEEE",
    "name" : "const android::sp<android::MessageHandler> *",
    "referenced_type" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPKN7android2spINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11635,7 +11227,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_6LooperEEE",
    "name" : "const android::sp<android::Looper> *",
    "referenced_type" : "_ZTIKN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIPKN7android2spINS_6LooperEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11644,7 +11235,6 @@
    "linker_set_key" : "_ZTIPKN7android2spINS_6ThreadEEE",
    "name" : "const android::sp<android::Thread> *",
    "referenced_type" : "_ZTIKN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIPKN7android2spINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11653,7 +11243,6 @@
    "linker_set_key" : "_ZTIPKN7android2wpINS_14MessageHandlerEEE",
    "name" : "const android::wp<android::MessageHandler> *",
    "referenced_type" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPKN7android2wpINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11662,7 +11251,6 @@
    "linker_set_key" : "_ZTIPKN7android2wpINS_6ThreadEEE",
    "name" : "const android::wp<android::Thread> *",
    "referenced_type" : "_ZTIKN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIPKN7android2wpINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11671,7 +11259,6 @@
    "linker_set_key" : "_ZTIPKN7android4base11borrowed_fdE",
    "name" : "const android::base::borrowed_fd *",
    "referenced_type" : "_ZTIKN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIPKN7android4base11borrowed_fdE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11680,7 +11267,6 @@
    "linker_set_key" : "_ZTIPKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "const android::base::unique_fd_impl<android::base::DefaultCloser> *",
    "referenced_type" : "_ZTIKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIPKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -11689,7 +11275,6 @@
    "linker_set_key" : "_ZTIPKN7android6Looper15MessageEnvelopeE",
    "name" : "const android::Looper::MessageEnvelope *",
    "referenced_type" : "_ZTIKN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIPKN7android6Looper15MessageEnvelopeE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11698,7 +11283,6 @@
    "linker_set_key" : "_ZTIPKN7android6Looper7RequestE",
    "name" : "const android::Looper::Request *",
    "referenced_type" : "_ZTIKN7android6Looper7RequestE",
-   "self_type" : "_ZTIPKN7android6Looper7RequestE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -11707,7 +11291,6 @@
    "linker_set_key" : "_ZTIPKN7android6Looper8ResponseE",
    "name" : "const android::Looper::Response *",
    "referenced_type" : "_ZTIKN7android6Looper8ResponseE",
-   "self_type" : "_ZTIPKN7android6Looper8ResponseE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -11716,7 +11299,6 @@
    "linker_set_key" : "_ZTIPKN7android6LooperE",
    "name" : "const android::Looper *",
    "referenced_type" : "_ZTIKN7android6LooperE",
-   "self_type" : "_ZTIPKN7android6LooperE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -11725,7 +11307,6 @@
    "linker_set_key" : "_ZTIPKN7android6ThreadE",
    "name" : "const android::Thread *",
    "referenced_type" : "_ZTIKN7android6ThreadE",
-   "self_type" : "_ZTIPKN7android6ThreadE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Thread.h"
   },
@@ -11734,7 +11315,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "const android::Vector<android::sysprop_change_callback_info> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11743,7 +11323,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "const android::Vector<android::Looper::MessageEnvelope> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11752,7 +11331,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "const android::Vector<android::Looper::Response> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -11761,7 +11339,6 @@
    "linker_set_key" : "_ZTIPKN7android6VectorINS_7String8EEE",
    "name" : "const android::Vector<android::String8> *",
    "referenced_type" : "_ZTIKN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIPKN7android6VectorINS_7String8EEE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h"
   },
@@ -11770,7 +11347,6 @@
    "linker_set_key" : "_ZTIPKN7android7FileMapE",
    "name" : "const android::FileMap *",
    "referenced_type" : "_ZTIKN7android7FileMapE",
-   "self_type" : "_ZTIPKN7android7FileMapE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -11779,7 +11355,6 @@
    "linker_set_key" : "_ZTIPKN7android7RefBase12weakref_typeE",
    "name" : "const android::RefBase::weakref_type *",
    "referenced_type" : "_ZTIKN7android7RefBase12weakref_typeE",
-   "self_type" : "_ZTIPKN7android7RefBase12weakref_typeE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -11788,7 +11363,6 @@
    "linker_set_key" : "_ZTIPKN7android7RefBaseE",
    "name" : "const android::RefBase *",
    "referenced_type" : "_ZTIKN7android7RefBaseE",
-   "self_type" : "_ZTIPKN7android7RefBaseE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11796,8 +11370,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPKN7android7RefBaseE",
    "name" : "const android::RefBase *",
-   "referenced_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -11806,7 +11380,6 @@
    "linker_set_key" : "_ZTIPKN7android7String8E",
    "name" : "const android::String8 *",
    "referenced_type" : "_ZTIKN7android7String8E",
-   "self_type" : "_ZTIPKN7android7String8E",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -11814,8 +11387,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPKN7android7String8E",
    "name" : "const android::String8 *",
-   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -11824,7 +11397,6 @@
    "linker_set_key" : "_ZTIPKN7android8String16E",
    "name" : "const android::String16 *",
    "referenced_type" : "_ZTIKN7android8String16E",
-   "self_type" : "_ZTIPKN7android8String16E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11833,7 +11405,6 @@
    "linker_set_key" : "_ZTIPKN7android9StopWatchE",
    "name" : "const android::StopWatch *",
    "referenced_type" : "_ZTIKN7android9StopWatchE",
-   "self_type" : "_ZTIPKN7android9StopWatchE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -11842,7 +11413,6 @@
    "linker_set_key" : "_ZTIPKN7android9TokenizerE",
    "name" : "const android::Tokenizer *",
    "referenced_type" : "_ZTIKN7android9TokenizerE",
-   "self_type" : "_ZTIPKN7android9TokenizerE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -11851,7 +11421,6 @@
    "linker_set_key" : "_ZTIPKc",
    "name" : "const char *",
    "referenced_type" : "_ZTIKc",
-   "self_type" : "_ZTIPKc",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -11860,7 +11429,6 @@
    "linker_set_key" : "_ZTIPKh",
    "name" : "const unsigned char *",
    "referenced_type" : "_ZTIKh",
-   "self_type" : "_ZTIPKh",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/JenkinsHash.h"
   },
@@ -11869,7 +11437,6 @@
    "linker_set_key" : "_ZTIPKt",
    "name" : "const unsigned short *",
    "referenced_type" : "_ZTIKt",
-   "self_type" : "_ZTIPKt",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/JenkinsHash.h"
   },
@@ -11878,7 +11445,6 @@
    "linker_set_key" : "_ZTIPKv",
    "name" : "const void *",
    "referenced_type" : "_ZTIKv",
-   "self_type" : "_ZTIPKv",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -11887,7 +11453,6 @@
    "linker_set_key" : "_ZTIPN7android10LogPrinterE",
    "name" : "android::LogPrinter *",
    "referenced_type" : "_ZTIN7android10LogPrinterE",
-   "self_type" : "_ZTIPN7android10LogPrinterE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11895,8 +11460,7 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPN7android10VectorImplE",
    "name" : "android::VectorImpl *",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android10VectorImplE",
+   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -11905,7 +11469,6 @@
    "linker_set_key" : "_ZTIPN7android11ScopedTraceE",
    "name" : "android::ScopedTrace *",
    "referenced_type" : "_ZTIN7android11ScopedTraceE",
-   "self_type" : "_ZTIPN7android11ScopedTraceE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Trace.h"
   },
@@ -11914,7 +11477,6 @@
    "linker_set_key" : "_ZTIPN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "android::LightRefBase<android::NativeHandle> *",
    "referenced_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIPN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -11923,7 +11485,6 @@
    "linker_set_key" : "_ZTIPN7android12NativeHandleE",
    "name" : "android::NativeHandle *",
    "referenced_type" : "_ZTIN7android12NativeHandleE",
-   "self_type" : "_ZTIPN7android12NativeHandleE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11932,7 +11493,6 @@
    "linker_set_key" : "_ZTIPN7android13PrefixPrinterE",
    "name" : "android::PrefixPrinter *",
    "referenced_type" : "_ZTIN7android13PrefixPrinterE",
-   "self_type" : "_ZTIPN7android13PrefixPrinterE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11941,7 +11501,6 @@
    "linker_set_key" : "_ZTIPN7android14LooperCallbackE",
    "name" : "android::LooperCallback *",
    "referenced_type" : "_ZTIN7android14LooperCallbackE",
-   "self_type" : "_ZTIPN7android14LooperCallbackE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -11950,7 +11509,6 @@
    "linker_set_key" : "_ZTIPN7android14MessageHandlerE",
    "name" : "android::MessageHandler *",
    "referenced_type" : "_ZTIN7android14MessageHandlerE",
-   "self_type" : "_ZTIPN7android14MessageHandlerE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11959,7 +11517,6 @@
    "linker_set_key" : "_ZTIPN7android14StaticString16ILj1EEE",
    "name" : "android::StaticString16<1> *",
    "referenced_type" : "_ZTIN7android14StaticString16ILj1EEE",
-   "self_type" : "_ZTIPN7android14StaticString16ILj1EEE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -11968,7 +11525,6 @@
    "linker_set_key" : "_ZTIPN7android14String8PrinterE",
    "name" : "android::String8Printer *",
    "referenced_type" : "_ZTIN7android14String8PrinterE",
-   "self_type" : "_ZTIPN7android14String8PrinterE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -11977,7 +11533,6 @@
    "linker_set_key" : "_ZTIPN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer *",
    "referenced_type" : "_ZTIN7android16ReferenceRenamerE",
-   "self_type" : "_ZTIPN7android16ReferenceRenamerE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -11985,8 +11540,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer *",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -11994,8 +11549,7 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl *",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android16SortedVectorImplE",
+   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -12004,7 +11558,6 @@
    "linker_set_key" : "_ZTIPN7android18WeakMessageHandlerE",
    "name" : "android::WeakMessageHandler *",
    "referenced_type" : "_ZTIN7android18WeakMessageHandlerE",
-   "self_type" : "_ZTIPN7android18WeakMessageHandlerE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12013,7 +11566,6 @@
    "linker_set_key" : "_ZTIPN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase *",
    "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE",
-   "self_type" : "_ZTIPN7android19VirtualLightRefBaseE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -12021,8 +11573,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase *",
-   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/LightRefBase.h"
   },
@@ -12031,7 +11583,6 @@
    "linker_set_key" : "_ZTIPN7android20SimpleLooperCallbackE",
    "name" : "android::SimpleLooperCallback *",
    "referenced_type" : "_ZTIN7android20SimpleLooperCallbackE",
-   "self_type" : "_ZTIPN7android20SimpleLooperCallbackE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12040,7 +11591,6 @@
    "linker_set_key" : "_ZTIPN7android28sysprop_change_callback_infoE",
    "name" : "android::sysprop_change_callback_info *",
    "referenced_type" : "_ZTIN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIPN7android28sysprop_change_callback_infoE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12049,7 +11599,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_12NativeHandleEEE",
    "name" : "android::sp<android::NativeHandle> *",
    "referenced_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
-   "self_type" : "_ZTIPN7android2spINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12058,7 +11607,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_14LooperCallbackEEE",
    "name" : "android::sp<android::LooperCallback> *",
    "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIPN7android2spINS_14LooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12067,7 +11615,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler> *",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPN7android2spINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12076,7 +11623,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback> *",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIPN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12085,7 +11631,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper> *",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIPN7android2spINS_6LooperEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12094,7 +11639,6 @@
    "linker_set_key" : "_ZTIPN7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread> *",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIPN7android2spINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12103,7 +11647,6 @@
    "linker_set_key" : "_ZTIPN7android2wpINS_14MessageHandlerEEE",
    "name" : "android::wp<android::MessageHandler> *",
    "referenced_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIPN7android2wpINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12112,7 +11655,6 @@
    "linker_set_key" : "_ZTIPN7android2wpINS_6ThreadEEE",
    "name" : "android::wp<android::Thread> *",
    "referenced_type" : "_ZTIN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIPN7android2wpINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12121,7 +11663,6 @@
    "linker_set_key" : "_ZTIPN7android4base11borrowed_fdE",
    "name" : "android::base::borrowed_fd *",
    "referenced_type" : "_ZTIN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIPN7android4base11borrowed_fdE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12130,7 +11671,6 @@
    "linker_set_key" : "_ZTIPN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "android::base::unique_fd_impl<android::base::DefaultCloser> *",
    "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIPN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12139,7 +11679,6 @@
    "linker_set_key" : "_ZTIPN7android5Mutex8AutolockE",
    "name" : "android::Mutex::Autolock *",
    "referenced_type" : "_ZTIN7android5Mutex8AutolockE",
-   "self_type" : "_ZTIPN7android5Mutex8AutolockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -12148,7 +11687,6 @@
    "linker_set_key" : "_ZTIPN7android5MutexE",
    "name" : "android::Mutex *",
    "referenced_type" : "_ZTIN7android5MutexE",
-   "self_type" : "_ZTIPN7android5MutexE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -12157,7 +11695,6 @@
    "linker_set_key" : "_ZTIPN7android6Looper15MessageEnvelopeE",
    "name" : "android::Looper::MessageEnvelope *",
    "referenced_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIPN7android6Looper15MessageEnvelopeE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12166,7 +11703,6 @@
    "linker_set_key" : "_ZTIPN7android6Looper8ResponseE",
    "name" : "android::Looper::Response *",
    "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIPN7android6Looper8ResponseE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12175,7 +11711,6 @@
    "linker_set_key" : "_ZTIPN7android6LooperE",
    "name" : "android::Looper *",
    "referenced_type" : "_ZTIN7android6LooperE",
-   "self_type" : "_ZTIPN7android6LooperE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12184,7 +11719,6 @@
    "linker_set_key" : "_ZTIPN7android6RWLock9AutoRLockE",
    "name" : "android::RWLock::AutoRLock *",
    "referenced_type" : "_ZTIN7android6RWLock9AutoRLockE",
-   "self_type" : "_ZTIPN7android6RWLock9AutoRLockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -12193,7 +11727,6 @@
    "linker_set_key" : "_ZTIPN7android6RWLock9AutoWLockE",
    "name" : "android::RWLock::AutoWLock *",
    "referenced_type" : "_ZTIN7android6RWLock9AutoWLockE",
-   "self_type" : "_ZTIPN7android6RWLock9AutoWLockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -12202,7 +11735,6 @@
    "linker_set_key" : "_ZTIPN7android6RWLockE",
    "name" : "android::RWLock *",
    "referenced_type" : "_ZTIN7android6RWLockE",
-   "self_type" : "_ZTIPN7android6RWLockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -12211,7 +11743,6 @@
    "linker_set_key" : "_ZTIPN7android6ThreadE",
    "name" : "android::Thread *",
    "referenced_type" : "_ZTIN7android6ThreadE",
-   "self_type" : "_ZTIPN7android6ThreadE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12220,7 +11751,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::Vector<android::sysprop_change_callback_info> *",
    "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIPN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12229,7 +11759,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::Vector<android::Looper::MessageEnvelope> *",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIPN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12238,7 +11767,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "android::Vector<android::Looper::Response> *",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIPN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12247,7 +11775,6 @@
    "linker_set_key" : "_ZTIPN7android6VectorINS_7String8EEE",
    "name" : "android::Vector<android::String8> *",
    "referenced_type" : "_ZTIN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIPN7android6VectorINS_7String8EEE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h"
   },
@@ -12256,7 +11783,6 @@
    "linker_set_key" : "_ZTIPN7android7FileMapE",
    "name" : "android::FileMap *",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIPN7android7FileMapE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12265,7 +11791,6 @@
    "linker_set_key" : "_ZTIPN7android7MessageE",
    "name" : "android::Message *",
    "referenced_type" : "_ZTIN7android7MessageE",
-   "self_type" : "_ZTIPN7android7MessageE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12274,7 +11799,6 @@
    "linker_set_key" : "_ZTIPN7android7PrinterE",
    "name" : "android::Printer *",
    "referenced_type" : "_ZTIN7android7PrinterE",
-   "self_type" : "_ZTIPN7android7PrinterE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -12283,7 +11807,6 @@
    "linker_set_key" : "_ZTIPN7android7RefBase12weakref_implE",
    "name" : "android::RefBase::weakref_impl *",
    "referenced_type" : "_ZTIN7android7RefBase12weakref_implE",
-   "self_type" : "_ZTIPN7android7RefBase12weakref_implE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12292,7 +11815,6 @@
    "linker_set_key" : "_ZTIPN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type *",
    "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE",
-   "self_type" : "_ZTIPN7android7RefBase12weakref_typeE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12300,8 +11822,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type *",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12310,7 +11832,6 @@
    "linker_set_key" : "_ZTIPN7android7RefBaseE",
    "name" : "android::RefBase *",
    "referenced_type" : "_ZTIN7android7RefBaseE",
-   "self_type" : "_ZTIPN7android7RefBaseE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12318,8 +11839,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPN7android7RefBaseE",
    "name" : "android::RefBase *",
-   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12328,7 +11849,6 @@
    "linker_set_key" : "_ZTIPN7android7String8E",
    "name" : "android::String8 *",
    "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIPN7android7String8E",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -12336,8 +11856,8 @@
    "alignment" : 4,
    "linker_set_key" : "_ZTIPN7android7String8E",
    "name" : "android::String8 *",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIPN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -12346,7 +11866,6 @@
    "linker_set_key" : "_ZTIPN7android8String1610StaticDataILj1EEE",
    "name" : "android::String16::StaticData<1> *",
    "referenced_type" : "_ZTIN7android8String1610StaticDataILj1EEE",
-   "self_type" : "_ZTIPN7android8String1610StaticDataILj1EEE",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12355,7 +11874,6 @@
    "linker_set_key" : "_ZTIPN7android8String16E",
    "name" : "android::String16 *",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIPN7android8String16E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12364,7 +11882,6 @@
    "linker_set_key" : "_ZTIPN7android9ConditionE",
    "name" : "android::Condition *",
    "referenced_type" : "_ZTIN7android9ConditionE",
-   "self_type" : "_ZTIPN7android9ConditionE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Condition.h"
   },
@@ -12373,7 +11890,6 @@
    "linker_set_key" : "_ZTIPN7android9FdPrinterE",
    "name" : "android::FdPrinter *",
    "referenced_type" : "_ZTIN7android9FdPrinterE",
-   "self_type" : "_ZTIPN7android9FdPrinterE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h"
   },
@@ -12382,7 +11898,6 @@
    "linker_set_key" : "_ZTIPN7android9StopWatchE",
    "name" : "android::StopWatch *",
    "referenced_type" : "_ZTIN7android9StopWatchE",
-   "self_type" : "_ZTIPN7android9StopWatchE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -12391,7 +11906,6 @@
    "linker_set_key" : "_ZTIPN7android9TokenizerE",
    "name" : "android::Tokenizer *",
    "referenced_type" : "_ZTIN7android9TokenizerE",
-   "self_type" : "_ZTIPN7android9TokenizerE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -12400,7 +11914,6 @@
    "linker_set_key" : "_ZTIPPN7android9TokenizerE",
    "name" : "android::Tokenizer **",
    "referenced_type" : "_ZTIPN7android9TokenizerE",
-   "self_type" : "_ZTIPPN7android9TokenizerE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -12409,7 +11922,6 @@
    "linker_set_key" : "_ZTIPPv",
    "name" : "void **",
    "referenced_type" : "_ZTIPv",
-   "self_type" : "_ZTIPPv",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/AndroidThreads.h"
   },
@@ -12418,7 +11930,6 @@
    "linker_set_key" : "_ZTIPc",
    "name" : "char *",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIPc",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12427,7 +11938,6 @@
    "linker_set_key" : "_ZTIPh",
    "name" : "unsigned char *",
    "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIPh",
    "size" : 4,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -12436,7 +11946,6 @@
    "linker_set_key" : "_ZTIPi",
    "name" : "int *",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIPi",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12445,7 +11954,6 @@
    "linker_set_key" : "_ZTIPj",
    "name" : "unsigned int *",
    "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIPj",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/Unicode.h"
   },
@@ -12454,7 +11962,6 @@
    "linker_set_key" : "_ZTIPv",
    "name" : "void *",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIPv",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   }
@@ -12467,7 +11974,6 @@
    "linker_set_key" : "_ZTIA1_KDs",
    "name" : "const char16_t[1]",
    "referenced_type" : "_ZTIA1_Ds",
-   "self_type" : "_ZTIA1_KDs",
    "size" : 2,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12477,7 +11983,6 @@
    "linker_set_key" : "_ZTIK13native_handle",
    "name" : "const native_handle",
    "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTIK13native_handle",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -12487,7 +11992,6 @@
    "linker_set_key" : "_ZTIK7log_msg",
    "name" : "const log_msg",
    "referenced_type" : "_ZTI7log_msg",
-   "self_type" : "_ZTIK7log_msg",
    "size" : 5124,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -12497,7 +12001,6 @@
    "linker_set_key" : "_ZTIKDi",
    "name" : "const char32_t",
    "referenced_type" : "_ZTIDi",
-   "self_type" : "_ZTIKDi",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -12507,7 +12010,6 @@
    "linker_set_key" : "_ZTIKDs",
    "name" : "const char16_t",
    "referenced_type" : "_ZTIDs",
-   "self_type" : "_ZTIKDs",
    "size" : 2,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12516,8 +12018,8 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android10VectorImplE",
    "name" : "const android::VectorImpl",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIKN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 20,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -12527,7 +12029,6 @@
    "linker_set_key" : "_ZTIKN7android10VectorImplE",
    "name" : "const android::VectorImpl",
    "referenced_type" : "_ZTIN7android10VectorImplE",
-   "self_type" : "_ZTIKN7android10VectorImplE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h"
   },
@@ -12537,7 +12038,6 @@
    "linker_set_key" : "_ZTIKN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "const android::LightRefBase<android::NativeHandle>",
    "referenced_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIKN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
@@ -12547,7 +12047,6 @@
    "linker_set_key" : "_ZTIKN7android12NativeHandleE",
    "name" : "const android::NativeHandle",
    "referenced_type" : "_ZTIN7android12NativeHandleE",
-   "self_type" : "_ZTIKN7android12NativeHandleE",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -12556,8 +12055,7 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android16ReferenceRenamerE",
    "name" : "const android::ReferenceRenamer",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android16ReferenceRenamerE",
+   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12566,8 +12064,7 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android16SortedVectorImplE",
    "name" : "const android::SortedVectorImpl",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android16SortedVectorImplE",
+   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 20,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h"
   },
@@ -12577,7 +12074,6 @@
    "linker_set_key" : "_ZTIKN7android28sysprop_change_callback_infoE",
    "name" : "const android::sysprop_change_callback_info",
    "referenced_type" : "_ZTIN7android28sysprop_change_callback_infoE",
-   "self_type" : "_ZTIKN7android28sysprop_change_callback_infoE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12587,7 +12083,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
    "name" : "const android::sp<android::LooperCallback>",
    "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIKN7android2spINS_14LooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12597,7 +12092,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
    "name" : "const android::sp<android::MessageHandler>",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIKN7android2spINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12607,7 +12101,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "const android::sp<android::SimpleLooperCallback>",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIKN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12617,7 +12110,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_6LooperEEE",
    "name" : "const android::sp<android::Looper>",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIKN7android2spINS_6LooperEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -12627,7 +12119,6 @@
    "linker_set_key" : "_ZTIKN7android2spINS_6ThreadEEE",
    "name" : "const android::sp<android::Thread>",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIKN7android2spINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12637,7 +12128,6 @@
    "linker_set_key" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
    "name" : "const android::wp<android::MessageHandler>",
    "referenced_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIKN7android2wpINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12647,7 +12137,6 @@
    "linker_set_key" : "_ZTIKN7android2wpINS_6ThreadEEE",
    "name" : "const android::wp<android::Thread>",
    "referenced_type" : "_ZTIN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIKN7android2wpINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12657,7 +12146,6 @@
    "linker_set_key" : "_ZTIKN7android4base11borrowed_fdE",
    "name" : "const android::base::borrowed_fd",
    "referenced_type" : "_ZTIN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIKN7android4base11borrowed_fdE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12667,7 +12155,6 @@
    "linker_set_key" : "_ZTIKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "const android::base::unique_fd_impl<android::base::DefaultCloser>",
    "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIKN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -12677,7 +12164,6 @@
    "linker_set_key" : "_ZTIKN7android6Looper15MessageEnvelopeE",
    "name" : "const android::Looper::MessageEnvelope",
    "referenced_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIKN7android6Looper15MessageEnvelopeE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12687,7 +12173,6 @@
    "linker_set_key" : "_ZTIKN7android6Looper7RequestE",
    "name" : "const android::Looper::Request",
    "referenced_type" : "_ZTIN7android6Looper7RequestE",
-   "self_type" : "_ZTIKN7android6Looper7RequestE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12697,7 +12182,6 @@
    "linker_set_key" : "_ZTIKN7android6Looper8ResponseE",
    "name" : "const android::Looper::Response",
    "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIKN7android6Looper8ResponseE",
    "size" : 32,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12707,7 +12191,6 @@
    "linker_set_key" : "_ZTIKN7android6LooperE",
    "name" : "const android::Looper",
    "referenced_type" : "_ZTIN7android6LooperE",
-   "self_type" : "_ZTIKN7android6LooperE",
    "size" : 136,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12717,7 +12200,6 @@
    "linker_set_key" : "_ZTIKN7android6ThreadE",
    "name" : "const android::Thread",
    "referenced_type" : "_ZTIN7android6ThreadE",
-   "self_type" : "_ZTIKN7android6ThreadE",
    "size" : 44,
    "source_file" : "system/core/libutils/include/utils/Thread.h"
   },
@@ -12727,7 +12209,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "const android::Vector<android::sysprop_change_callback_info>",
    "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIKN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12737,7 +12218,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "const android::Vector<android::Looper::MessageEnvelope>",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIKN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12747,7 +12227,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "const android::Vector<android::Looper::Response>",
    "referenced_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIKN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Vector.h"
   },
@@ -12757,7 +12236,6 @@
    "linker_set_key" : "_ZTIKN7android6VectorINS_7String8EEE",
    "name" : "const android::Vector<android::String8>",
    "referenced_type" : "_ZTIN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIKN7android6VectorINS_7String8EEE",
    "size" : 20,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h"
   },
@@ -12767,7 +12245,6 @@
    "linker_set_key" : "_ZTIKN7android7FileMapE",
    "name" : "const android::FileMap",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIKN7android7FileMapE",
    "size" : 32,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12777,7 +12254,6 @@
    "linker_set_key" : "_ZTIKN7android7MessageE",
    "name" : "const android::Message",
    "referenced_type" : "_ZTIN7android7MessageE",
-   "self_type" : "_ZTIKN7android7MessageE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -12786,8 +12262,7 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android7RefBase12weakref_typeE",
    "name" : "const android::RefBase::weakref_type",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android7RefBase12weakref_typeE",
+   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12796,8 +12271,8 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android7RefBaseE",
    "name" : "const android::RefBase",
-   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIKN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -12807,7 +12282,6 @@
    "linker_set_key" : "_ZTIKN7android7RefBaseE",
    "name" : "const android::RefBase",
    "referenced_type" : "_ZTIN7android7RefBaseE",
-   "self_type" : "_ZTIKN7android7RefBaseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12816,8 +12290,8 @@
    "is_const" : true,
    "linker_set_key" : "_ZTIKN7android7String8E",
    "name" : "const android::String8",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIKN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -12827,7 +12301,6 @@
    "linker_set_key" : "_ZTIKN7android7String8E",
    "name" : "const android::String8",
    "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIKN7android7String8E",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -12837,7 +12310,6 @@
    "linker_set_key" : "_ZTIKN7android8String1610StaticDataILj1EEE",
    "name" : "const android::String16::StaticData<1>",
    "referenced_type" : "_ZTIN7android8String1610StaticDataILj1EEE",
-   "self_type" : "_ZTIKN7android8String1610StaticDataILj1EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12847,7 +12319,6 @@
    "linker_set_key" : "_ZTIKN7android8String16E",
    "name" : "const android::String16",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIKN7android8String16E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -12857,7 +12328,6 @@
    "linker_set_key" : "_ZTIKN7android9StopWatchE",
    "name" : "const android::StopWatch",
    "referenced_type" : "_ZTIN7android9StopWatchE",
-   "self_type" : "_ZTIKN7android9StopWatchE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -12867,27 +12337,15 @@
    "linker_set_key" : "_ZTIKN7android9TokenizerE",
    "name" : "const android::Tokenizer",
    "referenced_type" : "_ZTIN7android9TokenizerE",
-   "self_type" : "_ZTIKN7android9TokenizerE",
    "size" : 28,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
   {
    "alignment" : 4,
    "is_const" : true,
-   "linker_set_key" : "_ZTIKPKc",
-   "name" : "const char *const",
-   "referenced_type" : "_ZTIPKc",
-   "self_type" : "_ZTIKPKc",
-   "size" : 4,
-   "source_file" : "system/core/libprocessgroup/include/processgroup/processgroup.h"
-  },
-  {
-   "alignment" : 4,
-   "is_const" : true,
    "linker_set_key" : "_ZTIKPN7android7RefBase12weakref_implE",
    "name" : "android::RefBase::weakref_impl *const",
    "referenced_type" : "_ZTIPN7android7RefBase12weakref_implE",
-   "self_type" : "_ZTIKPN7android7RefBase12weakref_implE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -12897,7 +12355,6 @@
    "linker_set_key" : "_ZTIKa",
    "name" : "const signed char",
    "referenced_type" : "_ZTIa",
-   "self_type" : "_ZTIKa",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12907,7 +12364,6 @@
    "linker_set_key" : "_ZTIKb",
    "name" : "const bool",
    "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIKb",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12917,7 +12373,6 @@
    "linker_set_key" : "_ZTIKc",
    "name" : "const char",
    "referenced_type" : "_ZTIc",
-   "self_type" : "_ZTIKc",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -12927,7 +12382,6 @@
    "linker_set_key" : "_ZTIKd",
    "name" : "const double",
    "referenced_type" : "_ZTId",
-   "self_type" : "_ZTIKd",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12937,7 +12391,6 @@
    "linker_set_key" : "_ZTIKf",
    "name" : "const float",
    "referenced_type" : "_ZTIf",
-   "self_type" : "_ZTIKf",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12947,7 +12400,6 @@
    "linker_set_key" : "_ZTIKh",
    "name" : "const unsigned char",
    "referenced_type" : "_ZTIh",
-   "self_type" : "_ZTIKh",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12957,7 +12409,6 @@
    "linker_set_key" : "_ZTIKi",
    "name" : "const int",
    "referenced_type" : "_ZTIi",
-   "self_type" : "_ZTIKi",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12967,7 +12418,6 @@
    "linker_set_key" : "_ZTIKj",
    "name" : "const unsigned int",
    "referenced_type" : "_ZTIj",
-   "self_type" : "_ZTIKj",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12977,7 +12427,6 @@
    "linker_set_key" : "_ZTIKs",
    "name" : "const short",
    "referenced_type" : "_ZTIs",
-   "self_type" : "_ZTIKs",
    "size" : 2,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12987,7 +12436,6 @@
    "linker_set_key" : "_ZTIKt",
    "name" : "const unsigned short",
    "referenced_type" : "_ZTIt",
-   "self_type" : "_ZTIKt",
    "size" : 2,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -12996,7 +12444,6 @@
    "linker_set_key" : "_ZTIKv",
    "name" : "const void",
    "referenced_type" : "_ZTIv",
-   "self_type" : "_ZTIKv",
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h"
   },
   {
@@ -13005,7 +12452,6 @@
    "linker_set_key" : "_ZTIKx",
    "name" : "const long long",
    "referenced_type" : "_ZTIx",
-   "self_type" : "_ZTIKx",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -13015,7 +12461,6 @@
    "linker_set_key" : "_ZTIKy",
    "name" : "const unsigned long long",
    "referenced_type" : "_ZTIy",
-   "self_type" : "_ZTIKy",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h"
   },
@@ -13025,7 +12470,6 @@
    "linker_set_key" : "_ZTIVb",
    "name" : "volatile bool",
    "referenced_type" : "_ZTIb",
-   "self_type" : "_ZTIVb",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/Thread.h"
   }
@@ -13078,8 +12522,6 @@
    ],
    "linker_set_key" : "_ZTI12logger_entry",
    "name" : "logger_entry",
-   "referenced_type" : "_ZTI12logger_entry",
-   "self_type" : "_ZTI12logger_entry",
    "size" : 28,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -13124,8 +12566,6 @@
    ],
    "linker_set_key" : "_ZTI13android_ycbcr",
    "name" : "android_ycbcr",
-   "referenced_type" : "_ZTI13android_ycbcr",
-   "self_type" : "_ZTI13android_ycbcr",
    "size" : 56,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13155,8 +12595,6 @@
    ],
    "linker_set_key" : "_ZTI13native_handle",
    "name" : "native_handle",
-   "referenced_type" : "_ZTI13native_handle",
-   "self_type" : "_ZTI13native_handle",
    "size" : 12,
    "source_file" : "system/core/libcutils/include_outside_system/cutils/native_handle.h"
   },
@@ -13176,8 +12614,6 @@
    ],
    "linker_set_key" : "_ZTI16android_xy_color",
    "name" : "android_xy_color",
-   "referenced_type" : "_ZTI16android_xy_color",
-   "self_type" : "_ZTI16android_xy_color",
    "size" : 8,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13227,8 +12663,6 @@
    ],
    "linker_set_key" : "_ZTI18android_flex_plane",
    "name" : "android_flex_plane",
-   "referenced_type" : "_ZTI18android_flex_plane",
-   "self_type" : "_ZTI18android_flex_plane",
    "size" : 32,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13253,8 +12687,6 @@
    ],
    "linker_set_key" : "_ZTI19android_flex_layout",
    "name" : "android_flex_layout",
-   "referenced_type" : "_ZTI19android_flex_layout",
-   "self_type" : "_ZTI19android_flex_layout",
    "size" : 12,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13279,8 +12711,6 @@
    ],
    "linker_set_key" : "_ZTI20android_depth_points",
    "name" : "android_depth_points",
-   "referenced_type" : "_ZTI20android_depth_points",
-   "self_type" : "_ZTI20android_depth_points",
    "size" : 36,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13325,8 +12755,6 @@
    ],
    "linker_set_key" : "_ZTI21__android_log_message",
    "name" : "__android_log_message",
-   "referenced_type" : "_ZTI21__android_log_message",
-   "self_type" : "_ZTI21__android_log_message",
    "size" : 28,
    "source_file" : "system/logging/liblog/include_vndk/android/log.h"
   },
@@ -13346,8 +12774,6 @@
    ],
    "linker_set_key" : "_ZTI25android_cta861_3_metadata",
    "name" : "android_cta861_3_metadata",
-   "referenced_type" : "_ZTI25android_cta861_3_metadata",
-   "self_type" : "_ZTI25android_cta861_3_metadata",
    "size" : 8,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13387,8 +12813,6 @@
    ],
    "linker_set_key" : "_ZTI26android_smpte2086_metadata",
    "name" : "android_smpte2086_metadata",
-   "referenced_type" : "_ZTI26android_smpte2086_metadata",
-   "self_type" : "_ZTI26android_smpte2086_metadata",
    "size" : 40,
    "source_file" : "system/core/libsystem/include/system/graphics.h"
   },
@@ -13402,8 +12826,6 @@
    ],
    "linker_set_key" : "_ZTI7log_msg",
    "name" : "log_msg",
-   "referenced_type" : "_ZTI7log_msg",
-   "self_type" : "_ZTI7log_msg",
    "size" : 5124,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   },
@@ -13423,8 +12845,6 @@
    ],
    "linker_set_key" : "_ZTI8log_time",
    "name" : "log_time",
-   "referenced_type" : "_ZTI8log_time",
-   "self_type" : "_ZTI8log_time",
    "size" : 8,
    "source_file" : "system/logging/liblog/include_vndk/log/log_time.h"
   },
@@ -13466,8 +12886,6 @@
    "linker_set_key" : "_ZTIN7android10LogPrinterE",
    "name" : "android::LogPrinter",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android10LogPrinterE",
-   "self_type" : "_ZTIN7android10LogPrinterE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -13527,8 +12945,6 @@
    "linker_set_key" : "_ZTIN7android10VectorImplE",
    "name" : "android::VectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android10VectorImplE",
-   "self_type" : "_ZTIN7android10VectorImplE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -13606,8 +13022,7 @@
    "linker_set_key" : "_ZTIN7android10VectorImplE",
    "name" : "android::VectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 20,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -13666,8 +13081,6 @@
    "linker_set_key" : "_ZTIN7android11ScopedTraceE",
    "name" : "android::ScopedTrace",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android11ScopedTraceE",
-   "self_type" : "_ZTIN7android11ScopedTraceE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/Trace.h"
   },
@@ -13684,8 +13097,6 @@
    "linker_set_key" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
    "name" : "android::LightRefBase<android::NativeHandle>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
-   "self_type" : "_ZTIN7android12LightRefBaseINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h",
    "template_args" :
@@ -13706,8 +13117,6 @@
    "linker_set_key" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
    "name" : "android::LightRefBase<android::VirtualLightRefBase>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
-   "self_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h",
    "template_args" :
@@ -13728,13 +13137,12 @@
    "linker_set_key" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE",
    "name" : "android::LightRefBase<android::VirtualLightRefBase>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/LightRefBase.h",
    "template_args" :
    [
-    "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+    "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
    ]
   },
   {
@@ -13763,8 +13171,6 @@
    "linker_set_key" : "_ZTIN7android12NativeHandleE",
    "name" : "android::NativeHandle",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android12NativeHandleE",
-   "self_type" : "_ZTIN7android12NativeHandleE",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/NativeHandle.h"
   },
@@ -13794,8 +13200,6 @@
    "linker_set_key" : "_ZTIN7android13PrefixPrinterE",
    "name" : "android::PrefixPrinter",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android13PrefixPrinterE",
-   "self_type" : "_ZTIN7android13PrefixPrinterE",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -13827,8 +13231,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_pointer<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -13840,8 +13242,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_pointer<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -13853,8 +13253,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEEE",
    "name" : "android::trait_pointer<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android13trait_pointerINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -13874,8 +13272,6 @@
    "linker_set_key" : "_ZTIN7android14LooperCallbackE",
    "name" : "android::LooperCallback",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14LooperCallbackE",
-   "self_type" : "_ZTIN7android14LooperCallbackE",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -13961,8 +13357,6 @@
    "linker_set_key" : "_ZTIN7android14MessageHandlerE",
    "name" : "android::MessageHandler",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14MessageHandlerE",
-   "self_type" : "_ZTIN7android14MessageHandlerE",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -14041,8 +13435,6 @@
    "linker_set_key" : "_ZTIN7android14ReferenceMoverE",
    "name" : "android::ReferenceMover",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14ReferenceMoverE",
-   "self_type" : "_ZTIN7android14ReferenceMoverE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -14051,8 +13443,7 @@
    "linker_set_key" : "_ZTIN7android14ReferenceMoverE",
    "name" : "android::ReferenceMover",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14ReferenceMoverE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android14ReferenceMoverE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android14ReferenceMoverE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -14076,8 +13467,6 @@
    "linker_set_key" : "_ZTIN7android14StaticString16ILj1EEE",
    "name" : "android::StaticString16<1>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14StaticString16ILj1EEE",
-   "self_type" : "_ZTIN7android14StaticString16ILj1EEE",
    "size" : 12,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -14107,8 +13496,6 @@
    "linker_set_key" : "_ZTIN7android14String8PrinterE",
    "name" : "android::String8Printer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android14String8PrinterE",
-   "self_type" : "_ZTIN7android14String8PrinterE",
    "size" : 12,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -14141,8 +13528,6 @@
    "linker_set_key" : "_ZTIN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE",
-   "self_type" : "_ZTIN7android16ReferenceRenamerE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "vtable_components" :
@@ -14165,8 +13550,7 @@
    "linker_set_key" : "_ZTIN7android16ReferenceRenamerE",
    "name" : "android::ReferenceRenamer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android16ReferenceRenamerE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "vtable_components" :
@@ -14195,8 +13579,6 @@
    "linker_set_key" : "_ZTIN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE",
-   "self_type" : "_ZTIN7android16SortedVectorImplE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -14251,14 +13633,13 @@
    "base_specifiers" :
    [
     {
-     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "linker_set_key" : "_ZTIN7android16SortedVectorImplE",
    "name" : "android::SortedVectorImpl",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android16SortedVectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 20,
    "source_file" : "system/core/libutils/binder/include/utils/VectorImpl.h",
    "vtable_components" :
@@ -14318,8 +13699,6 @@
    ],
    "linker_set_key" : "_ZTIN7android16use_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "name" : "android::use_trivial_move<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android16use_trivial_moveINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android16use_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14337,8 +13716,6 @@
    ],
    "linker_set_key" : "_ZTIN7android16use_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::use_trivial_move<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android16use_trivial_moveINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android16use_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14356,8 +13733,6 @@
    ],
    "linker_set_key" : "_ZTIN7android16use_trivial_moveINS_6Looper8ResponseEEE",
    "name" : "android::use_trivial_move<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android16use_trivial_moveINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android16use_trivial_moveINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14385,8 +13760,6 @@
    "linker_set_key" : "_ZTIN7android18WeakMessageHandlerE",
    "name" : "android::WeakMessageHandler",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android18WeakMessageHandlerE",
-   "self_type" : "_ZTIN7android18WeakMessageHandlerE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -14463,8 +13836,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_copy<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14476,8 +13847,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_copy<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14489,8 +13858,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_copy<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14502,8 +13869,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbEE",
    "name" : "android::trait_trivial_copy<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14515,8 +13880,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIbEE",
    "name" : "android::trait_trivial_copy<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14528,8 +13892,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcEE",
    "name" : "android::trait_trivial_copy<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14541,8 +13903,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIcEE",
    "name" : "android::trait_trivial_copy<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14554,8 +13915,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdEE",
    "name" : "android::trait_trivial_copy<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14567,8 +13926,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIdEE",
    "name" : "android::trait_trivial_copy<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14580,8 +13938,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfEE",
    "name" : "android::trait_trivial_copy<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14593,8 +13949,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIfEE",
    "name" : "android::trait_trivial_copy<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14606,8 +13961,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhEE",
    "name" : "android::trait_trivial_copy<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14619,8 +13972,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIhEE",
    "name" : "android::trait_trivial_copy<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14632,8 +13984,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiEE",
    "name" : "android::trait_trivial_copy<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14645,8 +13995,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIiEE",
    "name" : "android::trait_trivial_copy<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14658,8 +14007,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjEE",
    "name" : "android::trait_trivial_copy<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14671,8 +14018,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIjEE",
    "name" : "android::trait_trivial_copy<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14684,8 +14030,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlEE",
    "name" : "android::trait_trivial_copy<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14697,8 +14041,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIlEE",
    "name" : "android::trait_trivial_copy<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14710,8 +14053,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImEE",
    "name" : "android::trait_trivial_copy<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14723,8 +14064,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyImEE",
    "name" : "android::trait_trivial_copy<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14736,8 +14076,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsEE",
    "name" : "android::trait_trivial_copy<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14749,8 +14087,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIsEE",
    "name" : "android::trait_trivial_copy<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14762,8 +14099,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItEE",
    "name" : "android::trait_trivial_copy<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14775,8 +14110,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyItEE",
    "name" : "android::trait_trivial_copy<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14788,8 +14122,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvEE",
    "name" : "android::trait_trivial_copy<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14801,8 +14133,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIvEE",
    "name" : "android::trait_trivial_copy<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14814,8 +14145,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxEE",
    "name" : "android::trait_trivial_copy<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14827,8 +14156,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIxEE",
    "name" : "android::trait_trivial_copy<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14840,8 +14168,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyEE",
    "name" : "android::trait_trivial_copy<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14853,8 +14179,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_copyIyEE",
    "name" : "android::trait_trivial_copy<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_copyIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_copyIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_copyIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14866,8 +14191,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_ctor<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14879,8 +14202,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_ctor<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14892,8 +14213,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_ctor<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14905,8 +14224,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbEE",
    "name" : "android::trait_trivial_ctor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14918,8 +14235,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIbEE",
    "name" : "android::trait_trivial_ctor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14931,8 +14247,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcEE",
    "name" : "android::trait_trivial_ctor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14944,8 +14258,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIcEE",
    "name" : "android::trait_trivial_ctor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14957,8 +14270,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdEE",
    "name" : "android::trait_trivial_ctor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14970,8 +14281,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIdEE",
    "name" : "android::trait_trivial_ctor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14983,8 +14293,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfEE",
    "name" : "android::trait_trivial_ctor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -14996,8 +14304,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIfEE",
    "name" : "android::trait_trivial_ctor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15009,8 +14316,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhEE",
    "name" : "android::trait_trivial_ctor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15022,8 +14327,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIhEE",
    "name" : "android::trait_trivial_ctor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15035,8 +14339,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiEE",
    "name" : "android::trait_trivial_ctor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15048,8 +14350,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIiEE",
    "name" : "android::trait_trivial_ctor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15061,8 +14362,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjEE",
    "name" : "android::trait_trivial_ctor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15074,8 +14373,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIjEE",
    "name" : "android::trait_trivial_ctor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15087,8 +14385,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlEE",
    "name" : "android::trait_trivial_ctor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15100,8 +14396,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIlEE",
    "name" : "android::trait_trivial_ctor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15113,8 +14408,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImEE",
    "name" : "android::trait_trivial_ctor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15126,8 +14419,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorImEE",
    "name" : "android::trait_trivial_ctor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15139,8 +14431,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsEE",
    "name" : "android::trait_trivial_ctor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15152,8 +14442,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIsEE",
    "name" : "android::trait_trivial_ctor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15165,8 +14454,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItEE",
    "name" : "android::trait_trivial_ctor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15178,8 +14465,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorItEE",
    "name" : "android::trait_trivial_ctor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15191,8 +14477,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvEE",
    "name" : "android::trait_trivial_ctor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15204,8 +14488,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIvEE",
    "name" : "android::trait_trivial_ctor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15217,8 +14500,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxEE",
    "name" : "android::trait_trivial_ctor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15230,8 +14511,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIxEE",
    "name" : "android::trait_trivial_ctor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15243,8 +14523,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyEE",
    "name" : "android::trait_trivial_ctor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15256,8 +14534,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_ctorIyEE",
    "name" : "android::trait_trivial_ctor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_ctorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_ctorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_ctorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15269,8 +14546,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_dtor<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15282,8 +14557,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_dtor<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15295,8 +14568,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_dtor<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15308,8 +14579,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbEE",
    "name" : "android::trait_trivial_dtor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15321,8 +14590,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIbEE",
    "name" : "android::trait_trivial_dtor<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15334,8 +14602,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcEE",
    "name" : "android::trait_trivial_dtor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15347,8 +14613,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIcEE",
    "name" : "android::trait_trivial_dtor<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15360,8 +14625,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdEE",
    "name" : "android::trait_trivial_dtor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15373,8 +14636,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIdEE",
    "name" : "android::trait_trivial_dtor<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15386,8 +14648,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfEE",
    "name" : "android::trait_trivial_dtor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15399,8 +14659,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIfEE",
    "name" : "android::trait_trivial_dtor<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15412,8 +14671,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhEE",
    "name" : "android::trait_trivial_dtor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15425,8 +14682,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIhEE",
    "name" : "android::trait_trivial_dtor<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15438,8 +14694,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiEE",
    "name" : "android::trait_trivial_dtor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15451,8 +14705,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIiEE",
    "name" : "android::trait_trivial_dtor<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15464,8 +14717,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjEE",
    "name" : "android::trait_trivial_dtor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15477,8 +14728,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIjEE",
    "name" : "android::trait_trivial_dtor<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15490,8 +14740,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlEE",
    "name" : "android::trait_trivial_dtor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15503,8 +14751,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIlEE",
    "name" : "android::trait_trivial_dtor<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15516,8 +14763,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImEE",
    "name" : "android::trait_trivial_dtor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15529,8 +14774,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorImEE",
    "name" : "android::trait_trivial_dtor<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15542,8 +14786,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsEE",
    "name" : "android::trait_trivial_dtor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15555,8 +14797,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIsEE",
    "name" : "android::trait_trivial_dtor<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15568,8 +14809,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItEE",
    "name" : "android::trait_trivial_dtor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15581,8 +14820,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorItEE",
    "name" : "android::trait_trivial_dtor<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15594,8 +14832,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvEE",
    "name" : "android::trait_trivial_dtor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15607,8 +14843,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIvEE",
    "name" : "android::trait_trivial_dtor<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15620,8 +14855,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxEE",
    "name" : "android::trait_trivial_dtor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15633,8 +14866,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIxEE",
    "name" : "android::trait_trivial_dtor<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15646,8 +14878,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyEE",
    "name" : "android::trait_trivial_dtor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15659,8 +14889,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_dtorIyEE",
    "name" : "android::trait_trivial_dtor<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_dtorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_dtorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_dtorIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15672,8 +14901,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "name" : "android::trait_trivial_move<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15685,8 +14912,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::trait_trivial_move<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15698,8 +14923,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEEE",
    "name" : "android::trait_trivial_move<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15711,8 +14934,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
    "name" : "android::trait_trivial_move<android::String8>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/String8.h",
    "template_args" :
@@ -15724,21 +14945,18 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE",
    "name" : "android::trait_trivial_move<android::String8>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveINS_7String8EEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h",
    "template_args" :
    [
-    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
    ]
   },
   {
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveINS_8String16EEE",
    "name" : "android::trait_trivial_move<android::String16>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveINS_8String16EEE",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h",
    "template_args" :
@@ -15750,8 +14968,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbEE",
    "name" : "android::trait_trivial_move<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15763,8 +14979,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIbEE",
    "name" : "android::trait_trivial_move<bool>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIbEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15776,8 +14991,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcEE",
    "name" : "android::trait_trivial_move<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15789,8 +15002,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIcEE",
    "name" : "android::trait_trivial_move<char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIcEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15802,8 +15014,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdEE",
    "name" : "android::trait_trivial_move<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15815,8 +15025,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIdEE",
    "name" : "android::trait_trivial_move<double>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIdEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15828,8 +15037,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfEE",
    "name" : "android::trait_trivial_move<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15841,8 +15048,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIfEE",
    "name" : "android::trait_trivial_move<float>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIfEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15854,8 +15060,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhEE",
    "name" : "android::trait_trivial_move<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15867,8 +15071,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIhEE",
    "name" : "android::trait_trivial_move<unsigned char>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIhEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15880,8 +15083,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiEE",
    "name" : "android::trait_trivial_move<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15893,8 +15094,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIiEE",
    "name" : "android::trait_trivial_move<int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIiEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15906,8 +15106,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjEE",
    "name" : "android::trait_trivial_move<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15919,8 +15117,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIjEE",
    "name" : "android::trait_trivial_move<unsigned int>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIjEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15932,8 +15129,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlEE",
    "name" : "android::trait_trivial_move<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15945,8 +15140,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIlEE",
    "name" : "android::trait_trivial_move<long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIlEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15958,8 +15152,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImEE",
    "name" : "android::trait_trivial_move<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15971,8 +15163,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveImEE",
    "name" : "android::trait_trivial_move<unsigned long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveImEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15984,8 +15175,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsEE",
    "name" : "android::trait_trivial_move<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -15997,8 +15186,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIsEE",
    "name" : "android::trait_trivial_move<short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIsEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16010,8 +15198,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItEE",
    "name" : "android::trait_trivial_move<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16023,8 +15209,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveItEE",
    "name" : "android::trait_trivial_move<unsigned short>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveItEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16036,8 +15221,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvEE",
    "name" : "android::trait_trivial_move<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16049,8 +15232,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIvEE",
    "name" : "android::trait_trivial_move<void>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIvEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16062,8 +15244,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxEE",
    "name" : "android::trait_trivial_move<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16075,8 +15255,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIxEE",
    "name" : "android::trait_trivial_move<long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIxEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16088,8 +15267,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyEE",
    "name" : "android::trait_trivial_move<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyEE",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16101,8 +15278,7 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android18trait_trivial_moveIyEE",
    "name" : "android::trait_trivial_move<unsigned long long>",
-   "referenced_type" : "_ZTIN7android18trait_trivial_moveIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android18trait_trivial_moveIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android18trait_trivial_moveIyEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/TypeHelpers.h",
    "template_args" :
@@ -16121,8 +15297,6 @@
    "linker_set_key" : "_ZTIN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE",
-   "self_type" : "_ZTIN7android19VirtualLightRefBaseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/LightRefBase.h",
    "vtable_components" :
@@ -16149,14 +15323,13 @@
    "base_specifiers" :
    [
     {
-     "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIN7android12LightRefBaseINS_19VirtualLightRefBaseEEE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "linker_set_key" : "_ZTIN7android19VirtualLightRefBaseE",
    "name" : "android::VirtualLightRefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android19VirtualLightRefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/LightRefBase.h",
    "vtable_components" :
@@ -16198,8 +15371,6 @@
    "linker_set_key" : "_ZTIN7android20SimpleLooperCallbackE",
    "name" : "android::SimpleLooperCallback",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android20SimpleLooperCallbackE",
-   "self_type" : "_ZTIN7android20SimpleLooperCallbackE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -16285,8 +15456,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_12NativeHandleEEE",
    "name" : "android::sp<android::NativeHandle>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
-   "self_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16307,8 +15476,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_14LooperCallbackEEE",
    "name" : "android::sp<android::LooperCallback>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
-   "self_type" : "_ZTIN7android2spINS_14LooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16329,8 +15496,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16351,8 +15516,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16373,8 +15536,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTIN7android2spINS_6LooperEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16395,8 +15556,6 @@
    "linker_set_key" : "_ZTIN7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTIN7android2spINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h",
    "template_args" :
@@ -16423,8 +15582,6 @@
    "linker_set_key" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
    "name" : "android::wp<android::MessageHandler>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
-   "self_type" : "_ZTIN7android2wpINS_14MessageHandlerEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "template_args" :
@@ -16451,8 +15608,6 @@
    "linker_set_key" : "_ZTIN7android2wpINS_6ThreadEEE",
    "name" : "android::wp<android::Thread>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android2wpINS_6ThreadEEE",
-   "self_type" : "_ZTIN7android2wpINS_6ThreadEEE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "template_args" :
@@ -16472,8 +15627,6 @@
    ],
    "linker_set_key" : "_ZTIN7android4base11borrowed_fdE",
    "name" : "android::base::borrowed_fd",
-   "referenced_type" : "_ZTIN7android4base11borrowed_fdE",
-   "self_type" : "_ZTIN7android4base11borrowed_fdE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -16481,8 +15634,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android4base13DefaultCloserE",
    "name" : "android::base::DefaultCloser",
-   "referenced_type" : "_ZTIN7android4base13DefaultCloserE",
-   "self_type" : "_ZTIN7android4base13DefaultCloserE",
    "size" : 1,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -16499,8 +15650,6 @@
    "linker_set_key" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "android::base::unique_fd_impl<android::base::DefaultCloser>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h",
    "template_args" :
@@ -16521,8 +15670,6 @@
    "linker_set_key" : "_ZTIN7android5Mutex8AutolockE",
    "name" : "android::Mutex::Autolock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android5Mutex8AutolockE",
-   "self_type" : "_ZTIN7android5Mutex8AutolockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -16539,8 +15686,6 @@
    "linker_set_key" : "_ZTIN7android5MutexE",
    "name" : "android::Mutex",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android5MutexE",
-   "self_type" : "_ZTIN7android5MutexE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Mutex.h"
   },
@@ -16566,8 +15711,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper15MessageEnvelopeE",
    "name" : "android::Looper::MessageEnvelope",
-   "referenced_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
-   "self_type" : "_ZTIN7android6Looper15MessageEnvelopeE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -16603,8 +15746,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper7RequestE",
    "name" : "android::Looper::Request",
-   "referenced_type" : "_ZTIN7android6Looper7RequestE",
-   "self_type" : "_ZTIN7android6Looper7RequestE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -16630,8 +15771,6 @@
    ],
    "linker_set_key" : "_ZTIN7android6Looper8ResponseE",
    "name" : "android::Looper::Response",
-   "referenced_type" : "_ZTIN7android6Looper8ResponseE",
-   "self_type" : "_ZTIN7android6Looper8ResponseE",
    "size" : 32,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -16733,8 +15872,6 @@
    "linker_set_key" : "_ZTIN7android6LooperE",
    "name" : "android::Looper",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6LooperE",
-   "self_type" : "_ZTIN7android6LooperE",
    "size" : 136,
    "source_file" : "system/core/libutils/include/utils/Looper.h",
    "vtable_components" :
@@ -16781,8 +15918,6 @@
    "linker_set_key" : "_ZTIN7android6RWLock9AutoRLockE",
    "name" : "android::RWLock::AutoRLock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6RWLock9AutoRLockE",
-   "self_type" : "_ZTIN7android6RWLock9AutoRLockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -16799,8 +15934,6 @@
    "linker_set_key" : "_ZTIN7android6RWLock9AutoWLockE",
    "name" : "android::RWLock::AutoWLock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6RWLock9AutoWLockE",
-   "self_type" : "_ZTIN7android6RWLock9AutoWLockE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -16817,8 +15950,6 @@
    "linker_set_key" : "_ZTIN7android6RWLockE",
    "name" : "android::RWLock",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6RWLockE",
-   "self_type" : "_ZTIN7android6RWLockE",
    "size" : 40,
    "source_file" : "system/core/libutils/include/utils/RWLock.h"
   },
@@ -16891,8 +16022,6 @@
    "linker_set_key" : "_ZTIN7android6ThreadE",
    "name" : "android::Thread",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6ThreadE",
-   "self_type" : "_ZTIN7android6ThreadE",
    "size" : 44,
    "source_file" : "system/core/libutils/include/utils/Thread.h",
    "vtable_components" :
@@ -16987,8 +16116,6 @@
    "linker_set_key" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "name" : "android::Vector<android::sysprop_change_callback_info>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android6VectorINS_28sysprop_change_callback_infoEEE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Vector.h",
    "template_args" :
@@ -17044,8 +16171,6 @@
    "linker_set_key" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::Vector<android::Looper::MessageEnvelope>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android6VectorINS_6Looper15MessageEnvelopeEEE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Vector.h",
    "template_args" :
@@ -17101,8 +16226,6 @@
    "linker_set_key" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
    "name" : "android::Vector<android::Looper::Response>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android6VectorINS_6Looper8ResponseEEE",
    "size" : 20,
    "source_file" : "system/core/libutils/include/utils/Vector.h",
    "template_args" :
@@ -17152,19 +16275,17 @@
    [
     {
      "access" : "private",
-     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+     "referenced_type" : "_ZTIN7android10VectorImplE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
     }
    ],
    "linker_set_key" : "_ZTIN7android6VectorINS_7String8EEE",
    "name" : "android::Vector<android::String8>",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android6VectorINS_7String8EEE",
-   "self_type" : "_ZTIN7android6VectorINS_7String8EEE",
    "size" : 20,
    "source_file" : "system/core/libutils/binder/include/utils/Vector.h",
    "template_args" :
    [
-    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump"
+    "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump"
    ],
    "vtable_components" :
    [
@@ -17207,8 +16328,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEEE",
    "name" : "android::traits<android::sysprop_change_callback_info>",
-   "referenced_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEEE",
-   "self_type" : "_ZTIN7android6traitsINS_28sysprop_change_callback_infoEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -17220,8 +16339,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEEE",
    "name" : "android::traits<android::Looper::MessageEnvelope>",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEEE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper15MessageEnvelopeEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -17233,8 +16350,6 @@
    "alignment" : 1,
    "linker_set_key" : "_ZTIN7android6traitsINS_6Looper8ResponseEEE",
    "name" : "android::traits<android::Looper::Response>",
-   "referenced_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEEE",
-   "self_type" : "_ZTIN7android6traitsINS_6Looper8ResponseEEE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/TypeHelpers.h",
    "template_args" :
@@ -17285,8 +16400,6 @@
    "linker_set_key" : "_ZTIN7android7FileMapE",
    "name" : "android::FileMap",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTIN7android7FileMapE",
    "size" : 32,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -17301,8 +16414,6 @@
    ],
    "linker_set_key" : "_ZTIN7android7MessageE",
    "name" : "android::Message",
-   "referenced_type" : "_ZTIN7android7MessageE",
-   "self_type" : "_ZTIN7android7MessageE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Looper.h"
   },
@@ -17311,8 +16422,6 @@
    "linker_set_key" : "_ZTIN7android7PrinterE",
    "name" : "android::Printer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7PrinterE",
-   "self_type" : "_ZTIN7android7PrinterE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -17346,8 +16455,6 @@
    "linker_set_key" : "_ZTIN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE",
-   "self_type" : "_ZTIN7android7RefBase12weakref_typeE",
    "size" : 1,
    "source_file" : "system/core/libutils/include/utils/RefBase.h"
   },
@@ -17356,8 +16463,7 @@
    "linker_set_key" : "_ZTIN7android7RefBase12weakref_typeE",
    "name" : "android::RefBase::weakref_type",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBase12weakref_typeE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 1,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h"
   },
@@ -17375,8 +16481,6 @@
    "linker_set_key" : "_ZTIN7android7RefBaseE",
    "name" : "android::RefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBaseE",
-   "self_type" : "_ZTIN7android7RefBaseE",
    "size" : 8,
    "source_file" : "system/core/libutils/include/utils/RefBase.h",
    "vtable_components" :
@@ -17424,8 +16528,7 @@
    "linker_set_key" : "_ZTIN7android7RefBaseE",
    "name" : "android::RefBase",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7RefBaseE#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/RefBase.h",
    "vtable_components" :
@@ -17472,8 +16575,6 @@
    "linker_set_key" : "_ZTIN7android7String8E",
    "name" : "android::String8",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7String8E",
-   "self_type" : "_ZTIN7android7String8E",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/String8.h"
   },
@@ -17490,8 +16591,7 @@
    "linker_set_key" : "_ZTIN7android7String8E",
    "name" : "android::String8",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
-   "self_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor.VanillaIceCream_arm_armv8-a_static_afdo-libutils/e560d7b19ebf7276b3e850d3d346dec8/obj/system/core/libutils/binder/RefBase.sdump",
+   "self_type" : "_ZTIN7android7String8E#ODR:out/soong/.intermediates/system/core/libutils/binder/libutils_binder/android_vendor_arm_armv8-a_cortex-a53_static_afdo-libutils/obj/system/core/libutils/binder/RefBase.sdump",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String8.h"
   },
@@ -17511,8 +16611,6 @@
    ],
    "linker_set_key" : "_ZTIN7android8String1610StaticDataILj1EEE",
    "name" : "android::String16::StaticData<1>",
-   "referenced_type" : "_ZTIN7android8String1610StaticDataILj1EEE",
-   "self_type" : "_ZTIN7android8String1610StaticDataILj1EEE",
    "size" : 8,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -17529,8 +16627,6 @@
    "linker_set_key" : "_ZTIN7android8String16E",
    "name" : "android::String16",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTIN7android8String16E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   },
@@ -17547,8 +16643,6 @@
    "linker_set_key" : "_ZTIN7android9ConditionE",
    "name" : "android::Condition",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9ConditionE",
-   "self_type" : "_ZTIN7android9ConditionE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/Condition.h"
   },
@@ -17590,8 +16684,6 @@
    "linker_set_key" : "_ZTIN7android9FdPrinterE",
    "name" : "android::FdPrinter",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9FdPrinterE",
-   "self_type" : "_ZTIN7android9FdPrinterE",
    "size" : 36,
    "source_file" : "system/core/libutils/include/utils/Printer.h",
    "vtable_components" :
@@ -17644,8 +16736,6 @@
    "linker_set_key" : "_ZTIN7android9StopWatchE",
    "name" : "android::StopWatch",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9StopWatchE",
-   "self_type" : "_ZTIN7android9StopWatchE",
    "size" : 16,
    "source_file" : "system/core/libutils/include/utils/StopWatch.h"
   },
@@ -17698,8 +16788,6 @@
    "linker_set_key" : "_ZTIN7android9TokenizerE",
    "name" : "android::Tokenizer",
    "record_kind" : "class",
-   "referenced_type" : "_ZTIN7android9TokenizerE",
-   "self_type" : "_ZTIN7android9TokenizerE",
    "size" : 28,
    "source_file" : "system/core/libutils/include/utils/Tokenizer.h"
   },
@@ -17720,8 +16808,6 @@
    "linker_set_key" : "_ZTIN7log_msgUt_E",
    "name" : "log_msg::(anonymous)",
    "record_kind" : "union",
-   "referenced_type" : "_ZTIN7log_msgUt_E",
-   "self_type" : "_ZTIN7log_msgUt_E",
    "size" : 5124,
    "source_file" : "system/logging/liblog/include_vndk/log/log_read.h"
   }
@@ -17733,7 +16819,6 @@
    "linker_set_key" : "_ZTION7android2spINS_12NativeHandleEEE",
    "name" : "android::sp<android::NativeHandle> &&",
    "referenced_type" : "_ZTIN7android2spINS_12NativeHandleEEE",
-   "self_type" : "_ZTION7android2spINS_12NativeHandleEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17742,7 +16827,6 @@
    "linker_set_key" : "_ZTION7android2spINS_14MessageHandlerEEE",
    "name" : "android::sp<android::MessageHandler> &&",
    "referenced_type" : "_ZTIN7android2spINS_14MessageHandlerEEE",
-   "self_type" : "_ZTION7android2spINS_14MessageHandlerEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17751,7 +16835,6 @@
    "linker_set_key" : "_ZTION7android2spINS_20SimpleLooperCallbackEEE",
    "name" : "android::sp<android::SimpleLooperCallback> &&",
    "referenced_type" : "_ZTIN7android2spINS_20SimpleLooperCallbackEEE",
-   "self_type" : "_ZTION7android2spINS_20SimpleLooperCallbackEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17760,7 +16843,6 @@
    "linker_set_key" : "_ZTION7android2spINS_6LooperEEE",
    "name" : "android::sp<android::Looper> &&",
    "referenced_type" : "_ZTIN7android2spINS_6LooperEEE",
-   "self_type" : "_ZTION7android2spINS_6LooperEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17769,7 +16851,6 @@
    "linker_set_key" : "_ZTION7android2spINS_6ThreadEEE",
    "name" : "android::sp<android::Thread> &&",
    "referenced_type" : "_ZTIN7android2spINS_6ThreadEEE",
-   "self_type" : "_ZTION7android2spINS_6ThreadEEE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/StrongPointer.h"
   },
@@ -17778,7 +16859,6 @@
    "linker_set_key" : "_ZTION7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "name" : "android::base::unique_fd_impl<android::base::DefaultCloser> &&",
    "referenced_type" : "_ZTIN7android4base14unique_fd_implINS0_13DefaultCloserEEE",
-   "self_type" : "_ZTION7android4base14unique_fd_implINS0_13DefaultCloserEEE",
    "size" : 4,
    "source_file" : "system/libbase/include/android-base/unique_fd.h"
   },
@@ -17787,7 +16867,6 @@
    "linker_set_key" : "_ZTION7android7FileMapE",
    "name" : "android::FileMap &&",
    "referenced_type" : "_ZTIN7android7FileMapE",
-   "self_type" : "_ZTION7android7FileMapE",
    "size" : 4,
    "source_file" : "system/core/libutils/include/utils/FileMap.h"
   },
@@ -17796,7 +16875,6 @@
    "linker_set_key" : "_ZTION7android8String16E",
    "name" : "android::String16 &&",
    "referenced_type" : "_ZTIN7android8String16E",
-   "self_type" : "_ZTION7android8String16E",
    "size" : 4,
    "source_file" : "system/core/libutils/binder/include/utils/String16.h"
   }
diff --git a/libutils/binder/RefBase.cpp b/libutils/binder/RefBase.cpp
index 2d2e40b..4291f1e 100644
--- a/libutils/binder/RefBase.cpp
+++ b/libutils/binder/RefBase.cpp
@@ -787,7 +787,7 @@
             // sp<T>(T*) constructor, assuming that if the object is around, it is already
             // owned by an sp<>.
             ALOGW("RefBase: Explicit destruction, weak count = %d (in %p). Use sp<> to manage this "
-                  "object.",
+                  "object. Note - if weak count is 0, this leaks mRefs (weakref_impl).",
                   mRefs->mWeak.load(), this);
 
 #if ANDROID_UTILS_CALLSTACK_ENABLED
diff --git a/libutils/binder/VectorImpl.cpp b/libutils/binder/VectorImpl.cpp
index d951b8b..a62664f 100644
--- a/libutils/binder/VectorImpl.cpp
+++ b/libutils/binder/VectorImpl.cpp
@@ -463,7 +463,8 @@
     size_t new_size;
     LOG_ALWAYS_FATAL_IF(__builtin_sub_overflow(mCount, amount, &new_size));
 
-    if (new_size < (capacity() / 2)) {
+    const size_t prev_capacity = capacity();
+    if (new_size < (prev_capacity / 2) && prev_capacity > kMinVectorCapacity) {
         // NOTE: (new_size * 2) is safe because capacity didn't overflow and
         // new_size < (capacity / 2)).
         const size_t new_capacity = max(kMinVectorCapacity, new_size * 2);
diff --git a/libutils/include/utils/Looper.h b/libutils/include/utils/Looper.h
index a02280b..eea348e 100644
--- a/libutils/include/utils/Looper.h
+++ b/libutils/include/utils/Looper.h
@@ -323,6 +323,12 @@
     int addFd(int fd, int ident, int events, const sp<LooperCallback>& callback, void* data);
 
     /**
+     * May be useful for testing, instead of executing a looper on another thread for code expecting
+     * a looper, you can call callbacks directly.
+     */
+    bool getFdStateDebug(int fd, int* ident, int* events, sp<LooperCallback>* cb, void** data);
+
+    /**
      * Removes a previously added file descriptor from the looper.
      *
      * When this method returns, it is safe to close the file descriptor since the looper
diff --git a/libutils/include/utils/Trace.h b/libutils/include/utils/Trace.h
index 9986bf5..1809100 100644
--- a/libutils/include/utils/Trace.h
+++ b/libutils/include/utils/Trace.h
@@ -17,13 +17,6 @@
 #ifndef ANDROID_TRACE_H
 #define ANDROID_TRACE_H
 
-#if defined(_WIN32)
-
-#define ATRACE_NAME(...)
-#define ATRACE_CALL()
-
-#else  // !_WIN32
-
 #include <stdint.h>
 
 #include <cutils/trace.h>
@@ -56,6 +49,4 @@
 
 }  // namespace android
 
-#endif  // _WIN32
-
 #endif // ANDROID_TRACE_H
diff --git a/libvendorsupport/Android.bp b/libvendorsupport/Android.bp
index a22737c..f9a889b 100644
--- a/libvendorsupport/Android.bp
+++ b/libvendorsupport/Android.bp
@@ -35,32 +35,3 @@
         "libbase",
     ],
 }
-
-cc_library_headers {
-    name: "libvendorsupport_llndk_headers",
-    host_supported: true,
-    vendor_available: true,
-    recovery_available: true,
-    ramdisk_available: true,
-    vendor_ramdisk_available: true,
-    native_bridge_supported: true,
-
-    export_include_dirs: ["include_llndk"],
-    llndk: {
-        llndk_headers: true,
-    },
-
-    apex_available: [
-        "//apex_available:platform",
-        "//apex_available:anyapex",
-    ],
-    min_sdk_version: "apex_inherit",
-
-    system_shared_libs: [],
-    stl: "none",
-
-    // This header library is used for libc and must be available to any sdk
-    // versions.
-    // Setting sdk_version to the lowest version allows the dependencies.
-    sdk_version: "1",
-}
diff --git a/libvendorsupport/include_llndk/android/llndk-versioning.h b/libvendorsupport/include_llndk/android/llndk-versioning.h
deleted file mode 100644
index cf82fb7..0000000
--- a/libvendorsupport/include_llndk/android/llndk-versioning.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2024 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma once
-
-// LLNDK (https://source.android.com/docs/core/architecture/vndk/build-system#ll-ndk) is similar to
-// NDK, but uses its own versioning of YYYYMM format for vendor builds. The LLNDK symbols are
-// enabled when the vendor api level is equal to or newer than the ro.board.api_level. These symbols
-// must be annotated in map.txt files with the `# llndk=YYYYMM` annotation. They also must be marked
-// with `__INTRODUCED_IN_LLNDK(YYYYMM)` in the header files. It leaves a no-op annotation for ABI
-// analysis.
-#if !defined(__INTRODUCED_IN_LLNDK)
-#define __INTRODUCED_IN_LLNDK(vendor_api_level) \
-    __attribute__((annotate("introduced_in_llndk=" #vendor_api_level)))
-#endif
-
-#if defined(__ANDROID_VENDOR__)
-
-// Use this macro as an `if` statement to call an API that are available to both NDK and LLNDK.
-// This returns true for the vendor modules if the vendor_api_level is less than or equal to the
-// ro.board.api_level.
-#define API_LEVEL_AT_LEAST(sdk_api_level, vendor_api_level) \
-    constexpr(__ANDROID_VENDOR_API__ >= vendor_api_level)
-
-#else  // __ANDROID_VENDOR__
-
-// For non-vendor modules, API_LEVEL_AT_LEAST is replaced with __builtin_available(sdk_api_level) to
-// guard the API for __INTRODUCED_IN.
-#if !defined(API_LEVEL_AT_LEAST)
-#define API_LEVEL_AT_LEAST(sdk_api_level, vendor_api_level) \
-    (__builtin_available(android sdk_api_level, *))
-#endif
-
-#endif  // __ANDROID_VENDOR__
diff --git a/mkbootfs/Android.bp b/mkbootfs/Android.bp
index cd2a624..e0191f0 100644
--- a/mkbootfs/Android.bp
+++ b/mkbootfs/Android.bp
@@ -6,7 +6,7 @@
 
 cc_binary_host {
     name: "mkbootfs",
-    srcs: ["mkbootfs.c"],
+    srcs: ["mkbootfs.cpp"],
     cflags: ["-Werror"],
     static_libs: [
         "libbase",
diff --git a/mkbootfs/mkbootfs.c b/mkbootfs/mkbootfs.cpp
similarity index 93%
rename from mkbootfs/mkbootfs.c
rename to mkbootfs/mkbootfs.cpp
index 84a0a4e..a45c6a2 100644
--- a/mkbootfs/mkbootfs.c
+++ b/mkbootfs/mkbootfs.cpp
@@ -19,6 +19,9 @@
 #include <private/android_filesystem_config.h>
 #include <private/fs_config.h>
 
+#include <android-base/file.h>
+#include <string>
+
 /* NOTES
 **
 ** - see https://www.kernel.org/doc/Documentation/early-userspace/buffer-format.txt
@@ -75,7 +78,7 @@
     }
 }
 
-static void _eject(struct stat *s, char *out, int olen, char *data, unsigned datasize)
+static void _eject(struct stat *s, const char *out, int olen, char *data, unsigned datasize)
 {
     // Nothing is special about this value, just picked something in the
     // approximate range that was being used already, and avoiding small
@@ -151,9 +154,10 @@
     DIR* d = opendir(in);
     if (d == NULL) err(1, "cannot open directory '%s'", in);
 
+    // TODO: switch to std::vector
     int size = 32;
     int entries = 0;
-    char** names = malloc(size * sizeof(char*));
+    char** names = (char**) malloc(size * sizeof(char*));
     if (names == NULL) {
       errx(1, "failed to allocate dir names array (size %d)", size);
     }
@@ -167,7 +171,7 @@
 
         if (entries >= size) {
           size *= 2;
-          names = realloc(names, size * sizeof(char*));
+          names = (char**) realloc(names, size * sizeof(char*));
           if (names == NULL) {
             errx(1, "failed to reallocate dir names array (size %d)", size);
           }
@@ -211,20 +215,12 @@
     if(lstat(in, &s)) err(1, "could not stat '%s'", in);
 
     if(S_ISREG(s.st_mode)){
-        int fd = open(in, O_RDONLY);
-        if(fd < 0) err(1, "cannot open '%s' for read", in);
-
-        char* tmp = (char*) malloc(s.st_size);
-        if(tmp == 0) errx(1, "cannot allocate %zd bytes", s.st_size);
-
-        if(read(fd, tmp, s.st_size) != s.st_size) {
-            err(1, "cannot read %zd bytes", s.st_size);
+        std::string content;
+        if (!android::base::ReadFileToString(in, &content)) {
+            err(1, "cannot read '%s'", in);
         }
 
-        _eject(&s, out, olen, tmp, s.st_size);
-
-        free(tmp);
-        close(fd);
+        _eject(&s, out, olen, content.data(), content.size());
     } else if(S_ISDIR(s.st_mode)) {
         _eject(&s, out, olen, 0, 0);
         _archive_dir(in, out, ilen, olen);
@@ -445,15 +441,12 @@
     int num_dirs = argc - optind;
     argv += optind;
 
-    while(num_dirs-- > 0){
+    while (num_dirs-- > 0){
         char *x = strchr(*argv, '=');
-        if(x != 0) {
-            *x++ = 0;
-        } else {
-            x = "";
+        if (x != nullptr) {
+            *x++ = '\0';
         }
-
-        archive(*argv, x);
+        archive(*argv, x ?: "");
 
         argv++;
     }
diff --git a/property_service/libpropertyinfoserializer/property_info_serializer_test.cpp b/property_service/libpropertyinfoserializer/property_info_serializer_test.cpp
index a484441..bed4a73 100644
--- a/property_service/libpropertyinfoserializer/property_info_serializer_test.cpp
+++ b/property_service/libpropertyinfoserializer/property_info_serializer_test.cpp
@@ -729,7 +729,6 @@
       {"sys.ims.QMI_DAEMON_STATUS", "u:object_r:qcom_ims_prop:s0"},
       {"sys.listeners.registered", "u:object_r:qseecomtee_prop:s0"},
       {"sys.logbootcomplete", "u:object_r:system_prop:s0"},
-      {"sys.oem_unlock_allowed", "u:object_r:system_prop:s0"},
       {"sys.qcom.devup", "u:object_r:system_prop:s0"},
       {"sys.sysctl.extra_free_kbytes", "u:object_r:system_prop:s0"},
       {"sys.usb.config", "u:object_r:system_radio_prop:s0"},
diff --git a/rootdir/Android.bp b/rootdir/Android.bp
index e8f7627..44acbba 100644
--- a/rootdir/Android.bp
+++ b/rootdir/Android.bp
@@ -50,10 +50,15 @@
     recovery_available: true,
 }
 
+filegroup {
+    name: "system_linker_config_json_file",
+    srcs: ["etc/linker.config.json"],
+}
+
 // TODO(b/147210213) Generate list of libraries during build and fill in at build time
 linker_config {
     name: "system_linker_config",
-    src: "etc/linker.config.json",
+    src: ":system_linker_config_json_file",
     installable: false,
 }
 
@@ -114,10 +119,84 @@
     sub_dir: "init",
 }
 
+prebuilt_etc {
+    name: "asan.options",
+    src: "asan.options",
+}
+
+sh_binary {
+    name: "asan_extract",
+    src: "asan_extract.sh",
+    init_rc: ["asan_extract.rc"],
+    // We need bzip2 on device for extraction.
+    required: ["bzip2"],
+}
+
 llndk_libraries_txt {
     name: "llndk.libraries.txt",
 }
 
 sanitizer_libraries_txt {
     name: "sanitizer.libraries.txt",
-}
\ No newline at end of file
+}
+
+EXPORT_GLOBAL_ASAN_OPTIONS = select(soong_config_variable("ANDROID", "ASAN_ENABLED"), {
+    true: "export ASAN_OPTIONS include=/system/asan.options",
+    default: "",
+})
+
+EXPORT_GLOBAL_HWASAN_OPTIONS = select(soong_config_variable("ANDROID", "HWASAN_ENABLED"), {
+    true: "export HWASAN_OPTIONS heap_history_size=1023,stack_history_size=512,export_memory_stats=0,max_malloc_fill_size=131072,malloc_fill_byte=0",
+    default: "",
+})
+
+EXPORT_GLOBAL_GCOV_OPTIONS = select(soong_config_variable("ANDROID", "GCOV_COVERAGE"), {
+    true: "export GCOV_PREFIX /data/misc/trace",
+    default: "",
+})
+
+EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS = select((soong_config_variable("ANDROID", "CLANG_COVERAGE"), soong_config_variable("ANDROID", "CLANG_COVERAGE_CONTINUOUS_MODE")), {
+    (true, true): "export LLVM_PROFILE_FILE /data/misc/trace/clang%c-%20m.profraw",
+    (true, default): "export LLVM_PROFILE_FILE /data/misc/trace/clang-%20m.profraw",
+    (default, default): "",
+})
+
+EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE = select(soong_config_variable("ANDROID", "SCUDO_ALLOCATION_RING_BUFFER_SIZE"), {
+    "": "",
+    any @ size: "export SCUDO_ALLOCATION_RING_BUFFER_SIZE " + size,
+    default: "",
+})
+
+genrule {
+    name: "init.environ.rc.gen",
+    srcs: ["init.environ.rc.in"],
+    out: ["init.environ.rc"],
+    cmd: "cp -f $(in) $(out) && " +
+        "echo '    " + EXPORT_GLOBAL_ASAN_OPTIONS + "' >> $(out) && " +
+        "echo '    " + EXPORT_GLOBAL_GCOV_OPTIONS + "' >> $(out) && " +
+        "echo '    " + EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS + "' >> $(out) && " +
+        "echo '    " + EXPORT_GLOBAL_HWASAN_OPTIONS + "' >> $(out) && " +
+        "echo '    " + EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE + "' >> $(out)",
+}
+
+prebuilt_root {
+    name: "init.environ.rc-soong",
+    src: ":init.environ.rc.gen",
+    filename: "init.environ.rc",
+    install_in_root: true,
+    no_full_install: true,
+    required: select((soong_config_variable("ANDROID", "ASAN_ENABLED"), soong_config_variable("ANDROID", "SANITIZE_TARGET_SYSTEM_ENABLED")), {
+        (true, true): [
+            "asan.options",
+            "asan_extract",
+        ],
+        (true, default): ["asan.options"],
+        (default, default): [],
+    }),
+}
+
+filegroup {
+    name: "ramdisk_node_list",
+    srcs: ["ramdisk_node_list"],
+    export_to_make_var: "RAMDISK_NODE_LIST",
+}
diff --git a/rootdir/avb/Android.bp b/rootdir/avb/Android.bp
new file mode 100644
index 0000000..a584e3e
--- /dev/null
+++ b/rootdir/avb/Android.bp
@@ -0,0 +1,71 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+soong_config_module_type {
+    name: "avb_keys_prebuilt_avb",
+    module_type: "prebuilt_avb",
+    config_namespace: "ANDROID",
+    bool_variables: [
+        "BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT",
+    ],
+    properties: [
+        "ramdisk",
+        "vendor_ramdisk",
+    ],
+}
+
+avb_keys_prebuilt_avb {
+    name: "q-developer-gsi.avbpubkey",
+    src: "q-developer-gsi.avbpubkey",
+    soong_config_variables: {
+        BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT: {
+            ramdisk: false,
+            vendor_ramdisk: true,
+            conditions_default: {
+                ramdisk: true,
+                vendor_ramdisk: false,
+            },
+        },
+    },
+}
+
+avb_keys_prebuilt_avb {
+    name: "r-developer-gsi.avbpubkey",
+    src: "r-developer-gsi.avbpubkey",
+    soong_config_variables: {
+        BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT: {
+            ramdisk: false,
+            vendor_ramdisk: true,
+            conditions_default: {
+                ramdisk: true,
+                vendor_ramdisk: false,
+            },
+        },
+    },
+}
+
+avb_keys_prebuilt_avb {
+    name: "s-developer-gsi.avbpubkey",
+    src: "s-developer-gsi.avbpubkey",
+    soong_config_variables: {
+        BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT: {
+            ramdisk: false,
+            vendor_ramdisk: true,
+            conditions_default: {
+                ramdisk: true,
+                vendor_ramdisk: false,
+            },
+        },
+    },
+}
diff --git a/rootdir/avb/Android.mk b/rootdir/avb/Android.mk
deleted file mode 100644
index 8cf3172..0000000
--- a/rootdir/avb/Android.mk
+++ /dev/null
@@ -1,56 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-ifeq ($(BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT),true) # AVB keys are installed to vendor ramdisk
-  ifeq ($(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT),true) # no dedicated recovery partition
-    my_gsi_avb_keys_path := $(TARGET_VENDOR_RAMDISK_OUT)/first_stage_ramdisk/avb
-  else # device has a dedicated recovery partition
-    my_gsi_avb_keys_path := $(TARGET_VENDOR_RAMDISK_OUT)/avb
-  endif
-else
-  ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) # no dedicated recovery partition
-    my_gsi_avb_keys_path := $(TARGET_RECOVERY_ROOT_OUT)/first_stage_ramdisk/avb
-  else # device has a dedicated recovery partition
-    my_gsi_avb_keys_path := $(TARGET_RAMDISK_OUT)/avb
-  endif
-endif
-
-#######################################
-# q-developer-gsi.avbpubkey
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := q-developer-gsi.avbpubkey
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_PATH := $(my_gsi_avb_keys_path)
-
-include $(BUILD_PREBUILT)
-
-#######################################
-# r-developer-gsi.avbpubkey
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := r-developer-gsi.avbpubkey
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_PATH := $(my_gsi_avb_keys_path)
-
-include $(BUILD_PREBUILT)
-
-#######################################
-# s-developer-gsi.avbpubkey
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := s-developer-gsi.avbpubkey
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_PATH := $(my_gsi_avb_keys_path)
-
-include $(BUILD_PREBUILT)
-
-my_gsi_avb_keys_path :=
diff --git a/rootdir/Android.mk b/rootdir/create_root_structure.mk
similarity index 67%
rename from rootdir/Android.mk
rename to rootdir/create_root_structure.mk
index 4c1f2e4..1daf239 100644
--- a/rootdir/Android.mk
+++ b/rootdir/create_root_structure.mk
@@ -1,43 +1,15 @@
 LOCAL_PATH:= $(call my-dir)
 
-$(eval $(call declare-1p-copy-files,system/core/rootdir,))
-
 #######################################
-# asan.options
 ifneq ($(filter address,$(SANITIZE_TARGET)),)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := asan.options
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_PATH := $(TARGET_OUT)
-
-include $(BUILD_PREBUILT)
-
-# ASAN extration.
 ASAN_EXTRACT_FILES :=
 ifeq ($(SANITIZE_TARGET_SYSTEM),true)
-include $(CLEAR_VARS)
-LOCAL_MODULE:= asan_extract
-LOCAL_LICENSE_KINDS:= SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS:= notice
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_SRC_FILES := asan_extract.sh
-LOCAL_INIT_RC := asan_extract.rc
-# We need bzip2 on device for extraction.
-LOCAL_REQUIRED_MODULES := bzip2
-include $(BUILD_PREBUILT)
 ASAN_EXTRACT_FILES := asan_extract
 endif
-
 endif
-
 #######################################
 # init.environ.rc
+# TODO(b/353429422): move LOCAL_POST_INSTALL_CMD to other rules and remove Android.mk module.
 
 include $(CLEAR_VARS)
 LOCAL_MODULE_CLASS := ETC
@@ -46,36 +18,8 @@
 LOCAL_LICENSE_CONDITIONS := notice
 LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
 
-EXPORT_GLOBAL_ASAN_OPTIONS :=
 ifneq ($(filter address,$(SANITIZE_TARGET)),)
-  EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options
-  LOCAL_REQUIRED_MODULES := asan.options $(ASAN_OPTIONS_FILES) $(ASAN_EXTRACT_FILES)
-endif
-
-EXPORT_GLOBAL_HWASAN_OPTIONS :=
-ifneq ($(filter hwaddress,$(SANITIZE_TARGET)),)
-  ifneq ($(HWADDRESS_SANITIZER_GLOBAL_OPTIONS),)
-    EXPORT_GLOBAL_HWASAN_OPTIONS := export HWASAN_OPTIONS $(HWADDRESS_SANITIZER_GLOBAL_OPTIONS)
-  endif
-endif
-
-EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE :=
-ifneq ($(PRODUCT_SCUDO_ALLOCATION_RING_BUFFER_SIZE),)
-  EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE := export SCUDO_ALLOCATION_RING_BUFFER_SIZE $(PRODUCT_SCUDO_ALLOCATION_RING_BUFFER_SIZE)
-endif
-
-EXPORT_GLOBAL_GCOV_OPTIONS :=
-ifeq ($(NATIVE_COVERAGE),true)
-  EXPORT_GLOBAL_GCOV_OPTIONS := export GCOV_PREFIX /data/misc/trace
-endif
-
-EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS :=
-ifeq ($(CLANG_COVERAGE),true)
-  ifeq ($(CLANG_COVERAGE_CONTINUOUS_MODE),true)
-    EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := export LLVM_PROFILE_FILE /data/misc/trace/clang%c-%20m.profraw
-  else
-    EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := export LLVM_PROFILE_FILE /data/misc/trace/clang-%20m.profraw
-  endif
+  LOCAL_REQUIRED_MODULES := asan.options $(ASAN_EXTRACT_FILES)
 endif
 
 # Put it here instead of in init.rc module definition,
@@ -89,7 +33,8 @@
     ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \
     ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \
     ln -sfn /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \
-    ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard
+    ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard; \
+    ln -sf /product/etc/security/adb_keys $(TARGET_ROOT_OUT)/adb_keys
 
 ALL_ROOTDIR_SYMLINKS := \
   $(TARGET_ROOT_OUT)/bin \
@@ -200,27 +145,7 @@
 include $(BUILD_SYSTEM)/base_rules.mk
 
 $(ALL_ROOTDIR_SYMLINKS): $(LOCAL_BUILT_MODULE)
-$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in
-	@echo "Generate: $< -> $@"
-	@mkdir -p $(dir $@)
-	$(hide) cp $< $@
-	$(hide) sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?$(EXPORT_GLOBAL_ASAN_OPTIONS)?g' $@
-	$(hide) sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?$(EXPORT_GLOBAL_GCOV_OPTIONS)?g' $@
-	$(hide) sed -i -e 's?%EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%?$(EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS)?g' $@
-	$(hide) sed -i -e 's?%EXPORT_GLOBAL_HWASAN_OPTIONS%?$(EXPORT_GLOBAL_HWASAN_OPTIONS)?g' $@
-	$(hide) sed -i -e 's?%EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE%?$(EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE)?g' $@
 
-#######################################
-# ramdisk_node_list
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := ramdisk_node_list
-LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)
-
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-include $(BUILD_PREBUILT)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+init.environ.rc-soong := $(call intermediates-dir-for,ETC,init.environ.rc-soong)/init.environ.rc-soong
+$(eval $(call copy-one-file,$(init.environ.rc-soong),$(LOCAL_BUILT_MODULE)))
+init.environ.rc-soong :=
diff --git a/rootdir/init.environ.rc.in b/rootdir/init.environ.rc.in
index 7ba1f46..9249270 100644
--- a/rootdir/init.environ.rc.in
+++ b/rootdir/init.environ.rc.in
@@ -10,8 +10,5 @@
     export ANDROID_TZDATA_ROOT /apex/com.android.tzdata
     export EXTERNAL_STORAGE /sdcard
     export ASEC_MOUNTPOINT /mnt/asec
-    %EXPORT_GLOBAL_ASAN_OPTIONS%
-    %EXPORT_GLOBAL_GCOV_OPTIONS%
-    %EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%
-    %EXPORT_GLOBAL_HWASAN_OPTIONS%
-    %EXPORT_GLOBAL_SCUDO_ALLOCATION_RING_BUFFER_SIZE%
+    # Additional environment variables will be appended here during build (see Android.bp).
+    # DO NOT ADD additional sections like 'on <event>' here.
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 2443b7c..1986374 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -70,6 +70,9 @@
 
     start ueventd
 
+    # Mount tracefs (with GID=AID_READTRACEFS)
+    mount tracefs tracefs /sys/kernel/tracing gid=3012
+
     # Run apexd-bootstrap so that APEXes that provide critical libraries
     # become available. Note that this is executed as exec_start to ensure that
     # the libraries are available to the processes started after this statement.
@@ -80,9 +83,6 @@
     mkdir /dev/boringssl 0755 root root
     mkdir /dev/boringssl/selftest 0755 root root
 
-    # Mount tracefs (with GID=AID_READTRACEFS)
-    mount tracefs tracefs /sys/kernel/tracing gid=3012
-
     # create sys dirctory
     mkdir /dev/sys 0755 system system
     mkdir /dev/sys/fs 0755 system system
@@ -103,7 +103,7 @@
 
     # Mix device-specific information into the entropy pool
     copy /proc/cmdline /dev/urandom
-    copy /system/etc/prop.default /dev/urandom
+    copy /proc/bootconfig /dev/urandom
 
     symlink /proc/self/fd/0 /dev/stdin
     symlink /proc/self/fd/1 /dev/stdout
@@ -112,39 +112,9 @@
     # Create socket dir for ot-daemon
     mkdir /dev/socket/ot-daemon 0770 thread_network thread_network
 
-    # Create energy-aware scheduler tuning nodes
-    mkdir /dev/stune/foreground
-    mkdir /dev/stune/background
-    mkdir /dev/stune/top-app
-    mkdir /dev/stune/rt
-    chown system system /dev/stune
-    chown system system /dev/stune/foreground
-    chown system system /dev/stune/background
-    chown system system /dev/stune/top-app
-    chown system system /dev/stune/rt
-    chown system system /dev/stune/tasks
-    chown system system /dev/stune/foreground/tasks
-    chown system system /dev/stune/background/tasks
-    chown system system /dev/stune/top-app/tasks
-    chown system system /dev/stune/rt/tasks
-    chown system system /dev/stune/cgroup.procs
-    chown system system /dev/stune/foreground/cgroup.procs
-    chown system system /dev/stune/background/cgroup.procs
-    chown system system /dev/stune/top-app/cgroup.procs
-    chown system system /dev/stune/rt/cgroup.procs
-    chmod 0664 /dev/stune/tasks
-    chmod 0664 /dev/stune/foreground/tasks
-    chmod 0664 /dev/stune/background/tasks
-    chmod 0664 /dev/stune/top-app/tasks
-    chmod 0664 /dev/stune/rt/tasks
-    chmod 0664 /dev/stune/cgroup.procs
-    chmod 0664 /dev/stune/foreground/cgroup.procs
-    chmod 0664 /dev/stune/background/cgroup.procs
-    chmod 0664 /dev/stune/top-app/cgroup.procs
-    chmod 0664 /dev/stune/rt/cgroup.procs
-
     # cpuctl hierarchy for devices using utilclamp
     mkdir /dev/cpuctl/foreground
+    mkdir /dev/cpuctl/foreground_window
     mkdir /dev/cpuctl/background
     mkdir /dev/cpuctl/top-app
     mkdir /dev/cpuctl/rt
@@ -153,6 +123,7 @@
     mkdir /dev/cpuctl/dex2oat
     chown system system /dev/cpuctl
     chown system system /dev/cpuctl/foreground
+    chown system system /dev/cpuctl/foreground_window
     chown system system /dev/cpuctl/background
     chown system system /dev/cpuctl/top-app
     chown system system /dev/cpuctl/rt
@@ -161,6 +132,7 @@
     chown system system /dev/cpuctl/dex2oat
     chown system system /dev/cpuctl/tasks
     chown system system /dev/cpuctl/foreground/tasks
+    chown system system /dev/cpuctl/foreground_window/tasks
     chown system system /dev/cpuctl/background/tasks
     chown system system /dev/cpuctl/top-app/tasks
     chown system system /dev/cpuctl/rt/tasks
@@ -169,6 +141,7 @@
     chown system system /dev/cpuctl/dex2oat/tasks
     chown system system /dev/cpuctl/cgroup.procs
     chown system system /dev/cpuctl/foreground/cgroup.procs
+    chown system system /dev/cpuctl/foreground_window/cgroup.procs
     chown system system /dev/cpuctl/background/cgroup.procs
     chown system system /dev/cpuctl/top-app/cgroup.procs
     chown system system /dev/cpuctl/rt/cgroup.procs
@@ -177,6 +150,7 @@
     chown system system /dev/cpuctl/dex2oat/cgroup.procs
     chmod 0664 /dev/cpuctl/tasks
     chmod 0664 /dev/cpuctl/foreground/tasks
+    chmod 0664 /dev/cpuctl/foreground_window/tasks
     chmod 0664 /dev/cpuctl/background/tasks
     chmod 0664 /dev/cpuctl/top-app/tasks
     chmod 0664 /dev/cpuctl/rt/tasks
@@ -185,6 +159,7 @@
     chmod 0664 /dev/cpuctl/dex2oat/tasks
     chmod 0664 /dev/cpuctl/cgroup.procs
     chmod 0664 /dev/cpuctl/foreground/cgroup.procs
+    chmod 0664 /dev/cpuctl/foreground_window/cgroup.procs
     chmod 0664 /dev/cpuctl/background/cgroup.procs
     chmod 0664 /dev/cpuctl/top-app/cgroup.procs
     chmod 0664 /dev/cpuctl/rt/cgroup.procs
@@ -210,24 +185,6 @@
     chmod 0664 /dev/cpuctl/camera-daemon/tasks
     chmod 0664 /dev/cpuctl/camera-daemon/cgroup.procs
 
-    # Create an stune group for camera-specific processes
-    mkdir /dev/stune/camera-daemon
-    chown system system /dev/stune/camera-daemon
-    chown system system /dev/stune/camera-daemon/tasks
-    chown system system /dev/stune/camera-daemon/cgroup.procs
-    chmod 0664 /dev/stune/camera-daemon/tasks
-    chmod 0664 /dev/stune/camera-daemon/cgroup.procs
-
-    # Create an stune group for NNAPI HAL processes
-    mkdir /dev/stune/nnapi-hal
-    chown system system /dev/stune/nnapi-hal
-    chown system system /dev/stune/nnapi-hal/tasks
-    chown system system /dev/stune/nnapi-hal/cgroup.procs
-    chmod 0664 /dev/stune/nnapi-hal/tasks
-    chmod 0664 /dev/stune/nnapi-hal/cgroup.procs
-    write /dev/stune/nnapi-hal/schedtune.boost 1
-    write /dev/stune/nnapi-hal/schedtune.prefer_idle 1
-
     # Create blkio group and apply initial settings.
     # This feature needs kernel to support it, and the
     # device's init.rc must actually set the correct values.
@@ -354,6 +311,9 @@
     mkdir /dev/cpuset/foreground
     copy /dev/cpuset/cpus /dev/cpuset/foreground/cpus
     copy /dev/cpuset/mems /dev/cpuset/foreground/mems
+    mkdir /dev/cpuset/foreground_window
+    copy /dev/cpuset/cpus /dev/cpuset/foreground_window/cpus
+    copy /dev/cpuset/mems /dev/cpuset/foreground_window/mems
     mkdir /dev/cpuset/background
     copy /dev/cpuset/cpus /dev/cpuset/background/cpus
     copy /dev/cpuset/mems /dev/cpuset/background/mems
@@ -382,6 +342,7 @@
     # change permissions for all cpusets we'll touch at runtime
     chown system system /dev/cpuset
     chown system system /dev/cpuset/foreground
+    chown system system /dev/cpuset/foreground_window
     chown system system /dev/cpuset/background
     chown system system /dev/cpuset/system-background
     chown system system /dev/cpuset/top-app
@@ -389,6 +350,7 @@
     chown system system /dev/cpuset/camera-daemon
     chown system system /dev/cpuset/tasks
     chown system system /dev/cpuset/foreground/tasks
+    chown system system /dev/cpuset/foreground_window/tasks
     chown system system /dev/cpuset/background/tasks
     chown system system /dev/cpuset/system-background/tasks
     chown system system /dev/cpuset/top-app/tasks
@@ -396,6 +358,7 @@
     chown system system /dev/cpuset/camera-daemon/tasks
     chown system system /dev/cpuset/cgroup.procs
     chown system system /dev/cpuset/foreground/cgroup.procs
+    chown system system /dev/cpuset/foreground_window/cgroup.procs
     chown system system /dev/cpuset/background/cgroup.procs
     chown system system /dev/cpuset/system-background/cgroup.procs
     chown system system /dev/cpuset/top-app/cgroup.procs
@@ -406,6 +369,7 @@
     chmod 0775 /dev/cpuset/system-background
 
     chmod 0664 /dev/cpuset/foreground/tasks
+    chmod 0664 /dev/cpuset/foreground_window/tasks
     chmod 0664 /dev/cpuset/background/tasks
     chmod 0664 /dev/cpuset/system-background/tasks
     chmod 0664 /dev/cpuset/top-app/tasks
@@ -413,6 +377,7 @@
     chmod 0664 /dev/cpuset/tasks
     chmod 0664 /dev/cpuset/camera-daemon/tasks
     chmod 0664 /dev/cpuset/foreground/cgroup.procs
+    chmod 0664 /dev/cpuset/foreground_window/cgroup.procs
     chmod 0664 /dev/cpuset/background/cgroup.procs
     chmod 0664 /dev/cpuset/system-background/cgroup.procs
     chmod 0664 /dev/cpuset/top-app/cgroup.procs
@@ -481,6 +446,14 @@
     start hwservicemanager
     start vndservicemanager
 
+    # Mount /mnt/vm ASAP to allow early VMs to run.
+    mkdir /mnt/vm 0755 root root
+    mount tmpfs tmpfs /mnt/vm nosuid nodev noexec rw
+    restorecon /mnt/vm
+    chown system system /mnt/vm
+    chmod 0770 /mnt/vm
+    mkdir /mnt/vm/early 0770 system system
+
 # Run boringssl self test for each ABI.  Any failures trigger reboot to firmware.
 import /system/etc/init/hw/init.boringssl.${ro.zygote}.rc
 
@@ -545,7 +518,8 @@
     trigger post-fs-data
 
     # Should be before netd, but after apex, properties and logging is available.
-    trigger load_bpf_programs
+    trigger load-bpf-programs
+    trigger bpf-progs-loaded
 
     # Now we can start zygote.
     trigger zygote-start
@@ -620,8 +594,9 @@
     mkdir /metadata/bootstat 0750 system log
     mkdir /metadata/ota 0750 root system
     mkdir /metadata/ota/snapshots 0750 root system
-    mkdir /metadata/userspacereboot 0770 root system
     mkdir /metadata/watchdog 0770 root system
+    mkdir /metadata/tradeinmode 0770 root system
+    mkdir /metadata/prefetch 0770 root system
 
     mkdir /metadata/apex 0700 root system
     mkdir /metadata/apex/sessions 0700 root system
@@ -634,14 +609,6 @@
 
     mkdir /metadata/staged-install 0770 root system
 
-    mkdir /metadata/aconfig 0775 root system
-    mkdir /metadata/aconfig/flags 0770 root system
-    mkdir /metadata/aconfig/maps 0775 root system
-    mkdir /metadata/aconfig/boot 0775 root system
-
-    mkdir /metadata/aconfig_test_missions 0775 root system
-    exec_start aconfigd-platform-init
-
 on late-fs
     # Ensure that tracefs has the correct permissions.
     # This does not work correctly if it is called in post-fs.
@@ -675,8 +642,6 @@
 
 on post-fs-data
 
-    mark_post_data
-
     # Start checkpoint before we touch data
     exec - system system -- /system/bin/vdc checkpoint prepareCheckpoint
 
@@ -760,7 +725,6 @@
     mkdir /data/apex/active 0755 root system
     mkdir /data/apex/backup 0700 root system
     mkdir /data/apex/decompressed 0755 root system encryption=Require
-    mkdir /data/apex/hashtree 0700 root system
     mkdir /data/apex/sessions 0700 root system
     mkdir /data/app-staging 0751 system system encryption=DeleteIfNecessary
     mkdir /data/apex/ota_reserved 0700 root system encryption=Require
@@ -806,6 +770,8 @@
     mkdir /data/misc/shared_relro 0771 shared_relro shared_relro
     mkdir /data/misc/systemkeys 0700 system system
     mkdir /data/misc/wifi 0770 wifi wifi
+    mkdir /data/misc/wifi/mainline_supplicant 0770 wifi wifi
+    mkdir /data/misc/wifi/mainline_supplicant/sockets 0770 wifi wifi
     mkdir /data/misc/wifi/sockets 0770 wifi wifi
     mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi
     mkdir /data/misc/ethernet 0770 system system
@@ -1030,7 +996,16 @@
     # Wait for apexd to finish activating APEXes before starting more processes.
     wait_for_prop apexd.status activated
     perform_apex_config
+
+    # See flag enable_system_aconfigd_rust, which toggles these processes.
     exec_start aconfigd-mainline-init
+    exec_start system_aconfigd_mainline_init
+
+    # system_aconfigd_socket_service is replacing aconfigd:
+    #   - A flag (enable_system_aconfigd_rust) toggles which socket executes.
+    #   - When enabled, aconfigd is a no-op, system_aconfigd_socket_service executes.
+    #   - Conversely, when disabled, aconfigd executes, and system_aconfigd_socket_service is a no-op.
+    start system_aconfigd_socket_service
     start aconfigd
 
     # Create directories for boot animation.
@@ -1087,6 +1062,25 @@
     # Update dm-verity state and set partition.*.verified properties.
     verity_update_state
 
+on property:vold.checkpoint_committed=1
+    trigger post-fs-data-checkpointed
+
+# It is important that we start bpfloader after:
+#   - /sys/fs/bpf is already mounted,
+#   - apex (incl. rollback) is initialized (so that we can load bpf
+#     programs shipped as part of apex mainline modules)
+#   - logd is ready for us to log stuff
+#
+# At the same time we want to be as early as possible to reduce races and thus
+# failures (before memory is fragmented, and cpu is busy running tons of other
+# stuff) and we absolutely want to be before netd and the system boot slot is
+# considered to have booted successfully.
+on load-bpf-programs
+    exec_start bpfloader
+
+on bpf-progs-loaded
+    start netd
+
 # It is recommended to put unnecessary data/ initialization from post-fs-data
 # to start-zygote in device's init.rc to unblock zygote start.
 on zygote-start
@@ -1094,7 +1088,6 @@
     # A/B update verifier that marks a successful boot.
     exec_start update_verifier
     start statsd
-    start netd
     start zygote
     start zygote_secondary
 
@@ -1123,9 +1116,9 @@
 
     # System server manages zram writeback
     chown root system /sys/block/zram0/idle
-    chmod 0664 /sys/block/zram0/idle
+    chmod 0220 /sys/block/zram0/idle
     chown root system /sys/block/zram0/writeback
-    chmod 0664 /sys/block/zram0/writeback
+    chmod 0220 /sys/block/zram0/writeback
 
     # to access F2FS sysfs on dm-<num> directly
     mkdir /dev/sys/fs/by-name 0755 system system
@@ -1205,6 +1198,9 @@
     chown system system /sys/kernel/ipv4/tcp_rmem_min
     chown system system /sys/kernel/ipv4/tcp_rmem_def
     chown system system /sys/kernel/ipv4/tcp_rmem_max
+    chown system system /sys/firmware/acpi/tables
+    chown system system /sys/firmware/acpi/tables/BERT
+    chown system system /sys/firmware/acpi/tables/data/BERT
     chown root radio /proc/cmdline
     chown root system /proc/bootconfig
 
@@ -1255,7 +1251,7 @@
 # controlling access. On older kernels, the paranoid value is the only means of
 # controlling access. It is normally 3 (allow only root), but the shell user
 # can lower it to 1 (allowing thread-scoped pofiling) via security.perf_harden.
-on load_bpf_programs && property:sys.init.perf_lsm_hooks=1
+on load-bpf-programs && property:sys.init.perf_lsm_hooks=1
     write /proc/sys/kernel/perf_event_paranoid -1
 on property:security.perf_harden=0 && property:sys.init.perf_lsm_hooks=""
     write /proc/sys/kernel/perf_event_paranoid 1
@@ -1320,46 +1316,6 @@
 on init && property:ro.debuggable=1
     start console
 
-on userspace-reboot-requested
-  # TODO(b/135984674): reset all necessary properties here.
-  setprop sys.boot_completed ""
-  setprop dev.bootcomplete ""
-  setprop sys.init.updatable_crashing ""
-  setprop sys.init.updatable_crashing_process_name ""
-  setprop sys.user.0.ce_available ""
-  setprop sys.shutdown.requested ""
-  setprop service.bootanim.exit ""
-  setprop service.bootanim.progress ""
-
-on userspace-reboot-fs-remount
-  # Make sure that vold is running.
-  # This is mostly a precaution measure in case vold for some reason wasn't running when
-  # userspace reboot was initiated.
-  start vold
-  exec - system system -- /system/bin/vdc checkpoint resetCheckpoint
-  exec - system system -- /system/bin/vdc checkpoint markBootAttempt
-  # Unmount /data_mirror mounts in the reverse order of corresponding mounts.
-  umount /data_mirror/data_ce/null/0
-  umount /data_mirror/data_ce/null
-  umount /data_mirror/data_de/null
-  umount /data_mirror/storage_area/0
-  umount /data_mirror/storage_area
-  umount /data_mirror/cur_profiles
-  umount /data_mirror/ref_profiles
-  umount /data_mirror
-  remount_userdata
-  start bootanim
-
-on userspace-reboot-resume
-  trigger userspace-reboot-fs-remount
-  trigger post-fs-data
-  trigger zygote-start
-  trigger early-boot
-  trigger boot
-
-on property:sys.boot_completed=1 && property:sys.init.userspace_reboot.in_progress=1
-  setprop sys.init.userspace_reboot.in_progress ""
-
 # Multi-Gen LRU Experiment
 on property:persist.device_config.mglru_native.lru_gen_config=none
   write /sys/kernel/mm/lru_gen/enabled 0
diff --git a/rootdir/init.usb.rc b/rootdir/init.usb.rc
index dde784e..b30d6d0 100644
--- a/rootdir/init.usb.rc
+++ b/rootdir/init.usb.rc
@@ -139,7 +139,3 @@
 on property:sys.usb.typec.power_role=sink
     write /sys/class/dual_role_usb/otg_default/power_role ${sys.usb.typec.power_role}
     setprop sys.usb.typec.state ${sys.usb.typec.power_role}
-
-on userspace-reboot-requested
-  setprop sys.usb.config ""
-  setprop sys.usb.state ""
diff --git a/shell_and_utilities/Android.bp b/shell_and_utilities/Android.bp
index d85f6ed..1f5c179 100644
--- a/shell_and_utilities/Android.bp
+++ b/shell_and_utilities/Android.bp
@@ -18,6 +18,7 @@
         "awk",
         "bc",
         "bzip2",
+        "cpu-target-features",
         "fsck.exfat",
         "ldd",
         "logwrapper",
@@ -57,6 +58,7 @@
         "toolbox_vendor",
         "toybox_vendor",
     ],
+    vendor: true,
 }
 
 // shell and utilities for first stage console. The list of binaries are
diff --git a/trusty/gatekeeper/android.hardware.gatekeeper-service.trusty.rc b/trusty/gatekeeper/android.hardware.gatekeeper-service.trusty.rc
index 66ecbd1..2c9bd83 100644
--- a/trusty/gatekeeper/android.hardware.gatekeeper-service.trusty.rc
+++ b/trusty/gatekeeper/android.hardware.gatekeeper-service.trusty.rc
@@ -1,4 +1,5 @@
-service vendor.gatekeeper_default /vendor/bin/hw/android.hardware.gatekeeper-service.trusty
+service vendor.gatekeeper_default /vendor/bin/hw/android.hardware.gatekeeper-service.trusty \
+                                          --dev ${ro.hardware.trusty_ipc_dev.gatekeeper:-/dev/trusty-ipc-dev0}
     class hal
     user system
     group system
diff --git a/trusty/gatekeeper/service.cpp b/trusty/gatekeeper/service.cpp
index d09804f..59366b8 100644
--- a/trusty/gatekeeper/service.cpp
+++ b/trusty/gatekeeper/service.cpp
@@ -18,12 +18,66 @@
 #include <android-base/logging.h>
 #include <android/binder_manager.h>
 #include <android/binder_process.h>
+#include <getopt.h>
 
 #include "trusty_gatekeeper.h"
+#include "trusty_gatekeeper_ipc.h"
 
 using aidl::android::hardware::gatekeeper::TrustyGateKeeperDevice;
 
-int main() {
+static const char* _sopts = "hD:";
+static const struct option _lopts[] = {
+        {"help", no_argument, 0, 'h'},
+        {"dev", required_argument, 0, 'D'},
+        {0, 0, 0, 0},
+};
+
+static const char* usage =
+        "Usage: %s [options]\n"
+        "\n"
+        "options:\n"
+        "  -h, --help            prints this message and exit\n"
+        "  -D, --dev name        Trusty device name\n"
+        "\n";
+
+static const char* usage_long = "\n";
+
+static void print_usage_and_exit(const char* prog, int code, bool verbose) {
+    fprintf(stderr, usage, prog);
+    if (verbose) {
+        fprintf(stderr, "%s", usage_long);
+    }
+    exit(code);
+}
+
+static void parse_options(int argc, char** argv) {
+    int c;
+    int oidx = 0;
+
+    while (1) {
+        c = getopt_long(argc, argv, _sopts, _lopts, &oidx);
+        if (c == -1) {
+            break; /* done */
+        }
+
+        switch (c) {
+            case 'D':
+                trusty_gatekeeper_set_dev_name(optarg);
+                break;
+
+            case 'h':
+                print_usage_and_exit(argv[0], EXIT_SUCCESS, true);
+                break;
+
+            default:
+                print_usage_and_exit(argv[0], EXIT_FAILURE, false);
+        }
+    }
+}
+
+int main(int argc, char** argv) {
+    parse_options(argc, argv);
+
     ABinderProcess_setThreadPoolMaxThreadCount(0);
 
     std::shared_ptr<TrustyGateKeeperDevice> gatekeeper =
diff --git a/trusty/gatekeeper/trusty_gatekeeper_ipc.c b/trusty/gatekeeper/trusty_gatekeeper_ipc.c
index f67944b..5ca951c 100644
--- a/trusty/gatekeeper/trusty_gatekeeper_ipc.c
+++ b/trusty/gatekeeper/trusty_gatekeeper_ipc.c
@@ -28,12 +28,15 @@
 #include "trusty_gatekeeper_ipc.h"
 #include "gatekeeper_ipc.h"
 
-#define TRUSTY_DEVICE_NAME "/dev/trusty-ipc-dev0"
-
+static const char* trusty_device_name = "/dev/trusty-ipc-dev0";
 static int handle_ = 0;
 
+void trusty_gatekeeper_set_dev_name(const char* device_name) {
+    trusty_device_name = device_name;
+}
+
 int trusty_gatekeeper_connect() {
-    int rc = tipc_connect(TRUSTY_DEVICE_NAME, GATEKEEPER_PORT);
+    int rc = tipc_connect(trusty_device_name, GATEKEEPER_PORT);
     if (rc < 0) {
         return rc;
     }
diff --git a/trusty/gatekeeper/trusty_gatekeeper_ipc.h b/trusty/gatekeeper/trusty_gatekeeper_ipc.h
index f8de7f8..47ba33b 100644
--- a/trusty/gatekeeper/trusty_gatekeeper_ipc.h
+++ b/trusty/gatekeeper/trusty_gatekeeper_ipc.h
@@ -16,6 +16,7 @@
 
 __BEGIN_DECLS
 
+void trusty_gatekeeper_set_dev_name(const char* device_name);
 int trusty_gatekeeper_connect();
 int trusty_gatekeeper_call(uint32_t cmd, void *in, uint32_t in_size, uint8_t *out,
                            uint32_t *out_size);
diff --git a/trusty/keymaster/Android.bp b/trusty/keymaster/Android.bp
index b249013..5a1e420 100644
--- a/trusty/keymaster/Android.bp
+++ b/trusty/keymaster/Android.bp
@@ -44,7 +44,7 @@
         "libtrusty",
         "libkeymaster_messages",
         "libkeymaster3device",
-        "android.hardware.keymaster@3.0"
+        "android.hardware.keymaster@3.0",
     ],
 }
 
@@ -74,7 +74,7 @@
         "libtrusty",
         "libkeymaster_messages",
         "libkeymaster4",
-        "android.hardware.keymaster@4.0"
+        "android.hardware.keymaster@4.0",
     ],
 
     vintf_fragments: ["4.0/android.hardware.keymaster@4.0-service.trusty.xml"],
@@ -105,25 +105,23 @@
         "keymint/TrustySharedSecret.cpp",
         "keymint/service.cpp",
     ],
-    defaults: [
-        "keymint_use_latest_hal_aidl_ndk_shared",
-    ],
     shared_libs: [
+        "android.hardware.security.keymint-V3-ndk",
         "android.hardware.security.rkp-V3-ndk",
         "android.hardware.security.secureclock-V1-ndk",
         "android.hardware.security.sharedsecret-V1-ndk",
-        "lib_android_keymaster_keymint_utils",
+        "lib_android_keymaster_keymint_utils_V3",
         "libbase",
         "libbinder_ndk",
         "libhardware",
         "libkeymaster_messages",
-        "libkeymint",
+        "libkeymasterconfig",
         "liblog",
         "libtrusty",
         "libutils",
     ],
     required: [
-        "android.hardware.hardware_keystore.xml",
+        "android.hardware.hardware_keystore_V3.xml",
     ],
 }
 
@@ -208,3 +206,36 @@
         "-Werror",
     ],
 }
+
+prebuilt_etc {
+    name: "rkp_uds_cert_test.xml",
+    vendor: true,
+    src: "set_uds_certs/rkp_uds_cert_test.xml",
+}
+
+cc_binary {
+    name: "trusty_rkp_set_uds_cert",
+    vendor: true,
+
+    srcs: [
+        "set_uds_certs/set_uds_certificates.cpp",
+        "ipc/trusty_keymaster_ipc.cpp",
+    ],
+
+    local_include_dirs: ["include"],
+
+    shared_libs: [
+        "libc",
+        "libcrypto",
+        "liblog",
+        "libtrusty",
+        "libhardware",
+        "libkeymaster_messages",
+        "libutils",
+        "libxml2",
+    ],
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+}
diff --git a/trusty/keymaster/include/trusty_keymaster/ipc/keymaster_ipc.h b/trusty/keymaster/include/trusty_keymaster/ipc/keymaster_ipc.h
index 09f696b..822e933 100644
--- a/trusty/keymaster/include/trusty_keymaster/ipc/keymaster_ipc.h
+++ b/trusty/keymaster/include/trusty_keymaster/ipc/keymaster_ipc.h
@@ -78,6 +78,8 @@
     KM_SET_ATTESTATION_IDS = (0xc000 << KEYMASTER_REQ_SHIFT),
     KM_SET_ATTESTATION_IDS_KM3 = (0xc001 << KEYMASTER_REQ_SHIFT),
     KM_CONFIGURE_BOOT_PATCHLEVEL = (0xd000 << KEYMASTER_REQ_SHIFT),
+    KM_APPEND_UDS_CERT_CHAIN = (0xe0000 << KEYMASTER_REQ_SHIFT),
+    KM_CLEAR_UDS_CERT_CHAIN = (0xe0001 << KEYMASTER_REQ_SHIFT),
 };
 
 #ifdef __ANDROID__
diff --git a/trusty/keymaster/include/trusty_keymaster/ipc/trusty_keymaster_ipc.h b/trusty/keymaster/include/trusty_keymaster/ipc/trusty_keymaster_ipc.h
index efad254..15241f4 100644
--- a/trusty/keymaster/include/trusty_keymaster/ipc/trusty_keymaster_ipc.h
+++ b/trusty/keymaster/include/trusty_keymaster/ipc/trusty_keymaster_ipc.h
@@ -26,6 +26,7 @@
 const uint32_t TRUSTY_KEYMASTER_SEND_BUF_SIZE =
         (4096 - sizeof(struct keymaster_message) - 16 /* tipc header */);
 
+void trusty_keymaster_set_dev_name(const char* device_name);
 int trusty_keymaster_connect(void);
 int trusty_keymaster_call(uint32_t cmd, void* in, uint32_t in_size, uint8_t* out,
                           uint32_t* out_size);
diff --git a/trusty/keymaster/ipc/trusty_keymaster_ipc.cpp b/trusty/keymaster/ipc/trusty_keymaster_ipc.cpp
index db1a9f4..c01877f 100644
--- a/trusty/keymaster/ipc/trusty_keymaster_ipc.cpp
+++ b/trusty/keymaster/ipc/trusty_keymaster_ipc.cpp
@@ -36,15 +36,18 @@
 #include <trusty_keymaster/ipc/trusty_keymaster_ipc.h>
 #include <utils/Timers.h>
 
-#define TRUSTY_DEVICE_NAME "/dev/trusty-ipc-dev0"
+static const char* trusty_device_name = "/dev/trusty-ipc-dev0";
 
 static int handle_ = -1;
 
 static const int timeout_ms = 10 * 1000;
 static const int max_timeout_ms = 60 * 1000;
 
+void trusty_keymaster_set_dev_name(const char* device_name) {
+    trusty_device_name = device_name;
+}
 int trusty_keymaster_connect() {
-    int rc = tipc_connect(TRUSTY_DEVICE_NAME, KEYMASTER_PORT);
+    int rc = tipc_connect(trusty_device_name, KEYMASTER_PORT);
     if (rc < 0) {
         return rc;
     }
diff --git a/trusty/keymaster/keymint/android.hardware.security.keymint-service.trusty.rc b/trusty/keymaster/keymint/android.hardware.security.keymint-service.trusty.rc
index 389af41..0ceb584 100644
--- a/trusty/keymaster/keymint/android.hardware.security.keymint-service.trusty.rc
+++ b/trusty/keymaster/keymint/android.hardware.security.keymint-service.trusty.rc
@@ -1,4 +1,5 @@
-service vendor.keymint-trusty /vendor/bin/hw/android.hardware.security.keymint-service.trusty
+service vendor.keymint-trusty /vendor/bin/hw/android.hardware.security.keymint-service.trusty \
+                                          --dev ${ro.hardware.trusty_ipc_dev.keymint:-/dev/trusty-ipc-dev0}
     class early_hal
     user nobody
     group drmrpc
diff --git a/trusty/keymaster/keymint/service.cpp b/trusty/keymaster/keymint/service.cpp
index 14549d2..583d840 100644
--- a/trusty/keymaster/keymint/service.cpp
+++ b/trusty/keymaster/keymint/service.cpp
@@ -18,11 +18,13 @@
 #include <android-base/logging.h>
 #include <android/binder_manager.h>
 #include <android/binder_process.h>
+#include <getopt.h>
 
 #include <trusty_keymaster/TrustyKeyMintDevice.h>
 #include <trusty_keymaster/TrustyRemotelyProvisionedComponentDevice.h>
 #include <trusty_keymaster/TrustySecureClock.h>
 #include <trusty_keymaster/TrustySharedSecret.h>
+#include <trusty_keymaster/ipc/trusty_keymaster_ipc.h>
 
 using aidl::android::hardware::security::keymint::trusty::TrustyKeyMintDevice;
 using aidl::android::hardware::security::keymint::trusty::TrustyRemotelyProvisionedComponentDevice;
@@ -39,7 +41,58 @@
     return service;
 }
 
-int main() {
+static const char* _sopts = "hD:";
+static const struct option _lopts[] = {
+        {"help", no_argument, 0, 'h'},
+        {"dev", required_argument, 0, 'D'},
+        {0, 0, 0, 0},
+};
+
+static const char* usage =
+        "Usage: %s [options]\n"
+        "\n"
+        "options:\n"
+        "  -h, --help            prints this message and exit\n"
+        "  -D, --dev name        Trusty device name\n"
+        "\n";
+
+static const char* usage_long = "\n";
+
+static void print_usage_and_exit(const char* prog, int code, bool verbose) {
+    fprintf(stderr, usage, prog);
+    if (verbose) {
+        fprintf(stderr, "%s", usage_long);
+    }
+    exit(code);
+}
+
+static void parse_options(int argc, char** argv) {
+    int c;
+    int oidx = 0;
+
+    while (1) {
+        c = getopt_long(argc, argv, _sopts, _lopts, &oidx);
+        if (c == -1) {
+            break; /* done */
+        }
+
+        switch (c) {
+            case 'D':
+                trusty_keymaster_set_dev_name(optarg);
+                break;
+
+            case 'h':
+                print_usage_and_exit(argv[0], EXIT_SUCCESS, true);
+                break;
+
+            default:
+                print_usage_and_exit(argv[0], EXIT_FAILURE, false);
+        }
+    }
+}
+
+int main(int argc, char** argv) {
+    parse_options(argc, argv);
     auto trustyKeymaster = std::make_shared<keymaster::TrustyKeymaster>();
     int err = trustyKeymaster->Initialize(keymaster::KmVersion::KEYMINT_3);
     if (err != 0) {
diff --git a/trusty/keymaster/set_uds_certs/rkp_uds_cert_test.xml b/trusty/keymaster/set_uds_certs/rkp_uds_cert_test.xml
new file mode 100644
index 0000000..73b7b4c
--- /dev/null
+++ b/trusty/keymaster/set_uds_certs/rkp_uds_cert_test.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<PixelUdsCertificates>
+  <CertificateChain>
+    <NumberOfCertificates>3</NumberOfCertificates>
+    <Certificate format="pem">
+-----BEGIN CERTIFICATE-----
+MIIBWTCB3qADAgECAgUA3q2+7zAMBggqhkjOPQQDAwUAMBIxEDAOBgNVBAMMB0dT
+TUkxLjAwIhgPMjAyNDAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowEjEQMA4G
+A1UEAwwHR1NNSTEuMDB2MBAGByqGSM49AgEGBSuBBAAiA2IABFsNPdsPmx2NKNiT
+7oReF36HTXjftRfGffYgPf/vEhrT7XLJ7dThkcb+OFYWYlOckdk3DRgqTNWQXsot
+UsZhwRveU8huEjOBO5+dwDiWPs+s9jSRAn5inlTqJ0YGAmdHRzAMBggqhkjOPQQD
+AwUAA2gAMGUCMQCuiJwmRWOgfWbqdSlnXfhCbphjdWc6sHelLkkM21vxQ3RZkhC2
+ERh90RA1rxB+XTgCMHZrYG3leS0PEoz5hUviv27LbBHBU6GeOzrS2e0VH0BMSNXN
+iP9Wnit+mJw58niEGw==
+-----END CERTIFICATE-----
+    </Certificate>
+    <Certificate format="pem">
+-----BEGIN CERTIFICATE-----
+MIIBWTCB3qADAgECAgUA3q2+7zAMBggqhkjOPQQDAwUAMBIxEDAOBgNVBAMMB0dT
+TUkxLjAwIhgPMjAyNDAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowEjEQMA4G
+A1UEAwwHR1NNSTEuMDB2MBAGByqGSM49AgEGBSuBBAAiA2IABFsNPdsPmx2NKNiT
+7oReF36HTXjftRfGffYgPf/vEhrT7XLJ7dThkcb+OFYWYlOckdk3DRgqTNWQXsot
+UsZhwRveU8huEjOBO5+dwDiWPs+s9jSRAn5inlTqJ0YGAmdHRzAMBggqhkjOPQQD
+AwUAA2gAMGUCMQCuiJwmRWOgfWbqdSlnXfhCbphjdWc6sHelLkkM21vxQ3RZkhC2
+ERh90RA1rxB+XTgCMHZrYG3leS0PEoz5hUviv27LbBHBU6GeOzrS2e0VH0BMSNXN
+iP9Wnit+mJw58niEGw==
+-----END CERTIFICATE-----
+    </Certificate>
+    <Certificate format="pem">
+-----BEGIN CERTIFICATE-----
+MIIBWTCB3qADAgECAgUA3q2+7zAMBggqhkjOPQQDAwUAMBIxEDAOBgNVBAMMB0dT
+TUkxLjAwIhgPMjAyNDAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowEjEQMA4G
+A1UEAwwHR1NNSTEuMDB2MBAGByqGSM49AgEGBSuBBAAiA2IABFsNPdsPmx2NKNiT
+7oReF36HTXjftRfGffYgPf/vEhrT7XLJ7dThkcb+OFYWYlOckdk3DRgqTNWQXsot
+UsZhwRveU8huEjOBO5+dwDiWPs+s9jSRAn5inlTqJ0YGAmdHRzAMBggqhkjOPQQD
+AwUAA2gAMGUCMQCuiJwmRWOgfWbqdSlnXfhCbphjdWc6sHelLkkM21vxQ3RZkhC2
+ERh90RA1rxB+XTgCMHZrYG3leS0PEoz5hUviv27LbBHBU6GeOzrS2e0VH0BMSNXN
+iP9Wnit+mJw58niEGw==
+-----END CERTIFICATE-----
+    </Certificate>
+  </CertificateChain>
+</PixelUdsCertificates>
diff --git a/trusty/keymaster/set_uds_certs/set_uds_certificates.cpp b/trusty/keymaster/set_uds_certs/set_uds_certificates.cpp
new file mode 100644
index 0000000..13356a9
--- /dev/null
+++ b/trusty/keymaster/set_uds_certs/set_uds_certificates.cpp
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <errno.h>
+#include <getopt.h>
+#include <libxml/xmlreader.h>
+#include <openssl/pem.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/uio.h>
+#include <unistd.h>
+#include <string>
+
+#include <trusty_keymaster/ipc/trusty_keymaster_ipc.h>
+
+static const char* _sopts = "h";
+static const struct option _lopts[] = {
+        {"help", no_argument, 0, 'h'},
+        {0, 0, 0, 0},
+};
+
+static const char* usage =
+        "Usage: %s [options] xml-file\n"
+        "\n"
+        "options:\n"
+        "  -h, --help            prints this message and exit\n"
+        "\n";
+
+static void print_usage_and_exit(const char* prog, int code) {
+    fprintf(stderr, usage, prog);
+    exit(code);
+}
+
+static void parse_options(int argc, char** argv) {
+    int c;
+    int oidx = 0;
+
+    while (1) {
+        c = getopt_long(argc, argv, _sopts, _lopts, &oidx);
+        if (c == -1) {
+            break; /* done */
+        }
+
+        switch (c) {
+            case 'h':
+                print_usage_and_exit(argv[0], EXIT_SUCCESS);
+                break;
+
+            default:
+                print_usage_and_exit(argv[0], EXIT_FAILURE);
+        }
+    }
+}
+
+struct AppendUdsCertificateRequest : public keymaster::KeymasterMessage {
+    explicit AppendUdsCertificateRequest(int32_t ver = keymaster::kDefaultMessageVersion)
+        : KeymasterMessage(ver) {}
+
+    size_t SerializedSize() const override { return cert_data.SerializedSize(); }
+    uint8_t* Serialize(uint8_t* buf, const uint8_t* end) const override {
+        return cert_data.Serialize(buf, end);
+    }
+    bool Deserialize(const uint8_t** buf_ptr, const uint8_t* end) override {
+        return cert_data.Deserialize(buf_ptr, end);
+    }
+
+    keymaster::Buffer cert_data;
+};
+
+struct ClearUdsCertificateRequest : public keymaster::KeymasterMessage {
+    explicit ClearUdsCertificateRequest(int32_t ver = keymaster::kDefaultMessageVersion)
+        : KeymasterMessage(ver) {}
+
+    size_t SerializedSize() const override { return 0; }
+    uint8_t* Serialize(uint8_t* buf, const uint8_t*) const override { return buf; }
+    bool Deserialize(const uint8_t**, const uint8_t*) override { return true; };
+};
+
+struct KeymasterNoResponse : public keymaster::KeymasterResponse{
+    explicit KeymasterNoResponse(int32_t ver = keymaster::kDefaultMessageVersion)
+        : keymaster::KeymasterResponse(ver) {}
+
+    size_t NonErrorSerializedSize() const override { return 0; }
+    uint8_t* NonErrorSerialize(uint8_t* buf, const uint8_t*) const override { return buf; }
+    bool NonErrorDeserialize(const uint8_t**, const uint8_t*) override { return true; }
+};
+
+struct AppendUdsCertificateResponse : public KeymasterNoResponse {};
+struct ClearUdsCertificateResponse : public KeymasterNoResponse {};
+
+static int set_uds_cert_bin(uint32_t cmd, const void* cert_data, size_t cert_data_size) {
+    int ret;
+
+    AppendUdsCertificateRequest req;
+    req.cert_data.Reinitialize(cert_data, cert_data_size);
+    AppendUdsCertificateResponse rsp;
+
+    ret = trusty_keymaster_send(cmd, req, &rsp);
+    if (ret) {
+        fprintf(stderr, "trusty_keymaster_send cmd 0x%x failed %d\n", cmd, ret);
+        return ret;
+    }
+
+    return 0;
+}
+
+static int set_uds_cert_pem(uint32_t cmd, const xmlChar* pemkey) {
+    int ret;
+    int sslret;
+
+    /* Convert from pem to binary */
+    BIO* bio = BIO_new_mem_buf(pemkey, xmlStrlen(pemkey));
+    if (!bio) {
+        fprintf(stderr, "BIO_new_mem_buf failed\n");
+        ERR_print_errors_fp(stderr);
+        return -1;
+    }
+
+    char* key_name;
+    char* key_header;
+    uint8_t* key;
+    long keylen;
+    sslret = PEM_read_bio(bio, &key_name, &key_header, &key, &keylen);
+    BIO_free(bio);
+
+    if (!sslret) {
+        fprintf(stderr, "PEM_read_bio failed\n");
+        ERR_print_errors_fp(stderr);
+        return -1;
+    }
+
+    /* Send key in binary format to trusty */
+    ret = set_uds_cert_bin(cmd, key, keylen);
+
+    OPENSSL_free(key_name);
+    OPENSSL_free(key_header);
+    OPENSSL_free(key);
+
+    return ret;
+}
+
+static int set_uds_cert(uint32_t cmd, const xmlChar* format, const xmlChar* str) {
+    int ret;
+
+    if (xmlStrEqual(format, BAD_CAST "pem")) {
+        ret = set_uds_cert_pem(cmd, str);
+    } else {
+        printf("unsupported key/cert format: %s\n", format);
+        return -1;
+    }
+    return ret;
+}
+
+// TODO: Guard by Production Mode
+static int clear_cert_chain() {
+    int ret;
+    ClearUdsCertificateRequest req;
+    ClearUdsCertificateResponse rsp;
+
+    ret = trusty_keymaster_send(KM_CLEAR_UDS_CERT_CHAIN, req, &rsp);
+    if (ret) {
+        fprintf(stderr, "%s: trusty_keymaster_send failed %d\n", __func__, ret);
+        return ret;
+    }
+    return 0;
+}
+
+static int process_xml(xmlTextReaderPtr xml) {
+    int ret;
+    const xmlChar* element = NULL;
+    const xmlChar* element_format = NULL;
+    bool isPixelUdsCert = false;
+
+    while ((ret = xmlTextReaderRead(xml)) == 1) {
+        int nodetype = xmlTextReaderNodeType(xml);
+        const xmlChar *name, *value;
+        name = xmlTextReaderConstName(xml);
+        switch (nodetype) {
+            case XML_READER_TYPE_ELEMENT:
+                element = name;
+                element_format = xmlTextReaderGetAttribute(xml, BAD_CAST "format");
+                if (isPixelUdsCert || xmlStrEqual(name, BAD_CAST "PixelUdsCertificates")) {
+                    // The first element name must be "PixelUdsCertificates"
+                    isPixelUdsCert = true;
+                } else {
+                    fprintf(stderr, "Not a PixelUdsCertificates: \"%s\"\n", name);
+                    return -1;
+                }
+                if (xmlStrEqual(name, BAD_CAST "CertificateChain")) {
+                    ret = clear_cert_chain();
+                    if (ret) {
+                        fprintf(stderr, "%s: Clear cert chain cmd failed, %d\n", element, ret);
+                        return ret;
+                    }
+                    printf("%s: Clear cert chain cmd done\n", element);
+                }
+                break;
+            case XML_READER_TYPE_TEXT:
+                value = xmlTextReaderConstValue(xml);
+                uint32_t cmd;
+                if (xmlStrEqual(element, BAD_CAST "Certificate")) {
+                    cmd = KM_APPEND_UDS_CERT_CHAIN;
+                } else {
+                    break;
+                }
+
+                ret = set_uds_cert(cmd, element_format, value);
+                if (ret) {
+                    fprintf(stderr, "%s, format %s: Cmd 0x%x failed, %d\n", element, element_format,
+                            cmd, ret);
+                    return ret;
+                }
+                printf("%s, format %s: Cmd 0x%x done\n", element, element_format, cmd);
+                break;
+            case XML_READER_TYPE_END_ELEMENT:
+                element = NULL;
+                break;
+        }
+    }
+    return ret;
+}
+
+static int parse_and_provision_xml_file(const char* filename) {
+    int ret;
+    xmlTextReaderPtr xml = xmlReaderForFile(filename, NULL, 0);
+    if (!xml) {
+        fprintf(stderr, "failed to open %s\n", filename);
+        return -1;
+    }
+
+    ret = process_xml(xml);
+
+    xmlFreeTextReader(xml);
+    if (ret != 0) {
+        fprintf(stderr, "Failed to parse or process %s\n", filename);
+        return -1;
+    }
+
+    return 0;
+}
+
+int main(int argc, char** argv) {
+    int ret = 0;
+
+    parse_options(argc, argv);
+    if (optind + 1 != argc) {
+        print_usage_and_exit(argv[0], EXIT_FAILURE);
+    }
+
+    ret = trusty_keymaster_connect();
+    if (ret) {
+        fprintf(stderr, "trusty_keymaster_connect failed %d\n", ret);
+        return EXIT_FAILURE;
+    }
+
+    ret = parse_and_provision_xml_file(argv[optind]);
+    if (ret) {
+        fprintf(stderr, "parse_and_provision_xml_file failed %d\n", ret);
+        trusty_keymaster_disconnect();
+        return EXIT_FAILURE;
+    }
+
+    return EXIT_SUCCESS;
+}
diff --git a/trusty/keymint/Android.bp b/trusty/keymint/Android.bp
index 19dcc98..36efb1b 100644
--- a/trusty/keymint/Android.bp
+++ b/trusty/keymint/Android.bp
@@ -17,18 +17,16 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-rust_binary {
-    name: "android.hardware.security.keymint-service.rust.trusty",
+rust_defaults {
+    name: "android.hardware.security.keymint-service.rust.trusty.default",
     relative_install_path: "hw",
-    vendor: true,
-    init_rc: ["android.hardware.security.keymint-service.rust.trusty.rc"],
-    vintf_fragments: ["android.hardware.security.keymint-service.rust.trusty.xml"],
     srcs: [
-        "src/keymint_hal_main.rs"
+        "src/keymint_hal_main.rs",
     ],
     rustlibs: [
         "libandroid_logger",
         "libbinder_rs",
+        "libclap",
         "libkmr_wire",
         "libkmr_hal",
         "libtrusty-rs",
@@ -36,7 +34,27 @@
         "liblog_rust",
     ],
     prefer_rlib: true,
-    required: [
-        "android.hardware.hardware_keystore.xml",
+}
+
+rust_binary {
+    name: "android.hardware.security.keymint-service.rust.trusty",
+    vendor: true,
+    defaults: ["android.hardware.security.keymint-service.rust.trusty.default"],
+    init_rc: ["android.hardware.security.keymint-service.rust.trusty.rc"],
+    vintf_fragments: ["android.hardware.security.keymint-service.rust.trusty.xml"],
+    required: select(release_flag("RELEASE_AIDL_USE_UNFROZEN"), {
+        true: ["android.hardware.hardware_keystore.xml"],
+        default: ["android.hardware.hardware_keystore_V3.xml"],
+    }),
+}
+
+rust_binary {
+    name: "android.hardware.security.keymint-service.rust.trusty.system.nonsecure",
+    system_ext_specific: true,
+    defaults: ["android.hardware.security.keymint-service.rust.trusty.default"],
+    init_rc: ["android.hardware.security.keymint-service.rust.trusty.system.nonsecure.rc"],
+    features: ["nonsecure"],
+    rustlibs: [
+        "libkmr_hal_nonsecure",
     ],
 }
diff --git a/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.rc b/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.rc
index e3d94c6..3e3f2a5 100644
--- a/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.rc
+++ b/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.rc
@@ -1,7 +1,8 @@
-service vendor.keymint.rust-trusty /vendor/bin/hw/android.hardware.security.keymint-service.rust.trusty
+service vendor.keymint.rust-trusty /vendor/bin/hw/android.hardware.security.keymint-service.rust.trusty \
+                                          --dev ${ro.hardware.trusty_ipc_dev.keymint:-/dev/trusty-ipc-dev0}
     class early_hal
     user nobody
     group drmrpc
     # The keymint service is not allowed to restart.
     # If it crashes, a device restart is required.
-    oneshot
\ No newline at end of file
+    oneshot
diff --git a/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.system.nonsecure.rc b/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.system.nonsecure.rc
new file mode 100644
index 0000000..e580651
--- /dev/null
+++ b/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.system.nonsecure.rc
@@ -0,0 +1,17 @@
+service system.keymint.rust-trusty.nonsecure \
+  /system_ext/bin/hw/android.hardware.security.keymint-service.rust.trusty.system.nonsecure \
+  --dev ${system.keymint.trusty_ipc_dev:-/dev/trusty-ipc-dev0}
+    disabled
+    user nobody
+    group drmrpc
+    # The keymint service is not allowed to restart.
+    # If it crashes, a device restart is required.
+    oneshot
+
+# Only starts the non-secure KeyMint HALs when the KeyMint VM feature is enabled
+# TODO(b/357821690): Start the KeyMint HALs when the KeyMint VM is ready once the Trusty VM
+# has a mechanism to notify the host.
+on late-fs && property:trusty.security_vm.keymint.enabled=1 && \
+   property:trusty.security_vm.vm_cid=*
+    setprop system.keymint.trusty_ipc_dev VSOCK:${trusty.security_vm.vm_cid}:1
+    start system.keymint.rust-trusty.nonsecure
diff --git a/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.xml b/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.xml
index 3dc9c88..f74d212 100644
--- a/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.xml
+++ b/trusty/keymint/android.hardware.security.keymint-service.rust.trusty.xml
@@ -1,7 +1,7 @@
 <manifest version="1.0" type="device">
     <hal format="aidl">
         <name>android.hardware.security.keymint</name>
-        <version>3</version>
+        <version>4</version>
         <fqname>IKeyMintDevice/default</fqname>
     </hal>
     <hal format="aidl">
diff --git a/trusty/keymint/src/keymint_hal_main.rs b/trusty/keymint/src/keymint_hal_main.rs
index ef0c598..a0b1d79 100644
--- a/trusty/keymint/src/keymint_hal_main.rs
+++ b/trusty/keymint/src/keymint_hal_main.rs
@@ -14,10 +14,11 @@
 // limitations under the License.
 
 //! This module implements the HAL service for Keymint (Rust) in Trusty.
+use clap::Parser;
 use kmr_hal::{
     extract_rsp, keymint, rpc, secureclock, send_hal_info, sharedsecret, SerializedChannel,
 };
-use log::{error, info};
+use log::{error, info, warn};
 use std::{
     ffi::CString,
     ops::DerefMut,
@@ -81,6 +82,13 @@
     }
 }
 
+#[derive(Parser, Debug)]
+struct Args {
+    /// Tipc device path
+    #[arg(short, long, default_value_t = DEFAULT_DEVICE.to_string())]
+    dev: String,
+}
+
 fn main() {
     if let Err(HalServiceError(e)) = inner_main() {
         panic!("HAL service failed: {:?}", e);
@@ -88,6 +96,7 @@
 }
 
 fn inner_main() -> Result<(), HalServiceError> {
+    let args = Args::parse();
     // Initialize Android logging.
     android_logger::init_once(
         android_logger::Config::default()
@@ -100,18 +109,50 @@
         error!("{}", panic_info);
     }));
 
-    info!("Trusty KM HAL service is starting.");
+    if cfg!(feature = "nonsecure") {
+        warn!("Non-secure Trusty KM HAL service is starting.");
+    } else {
+        info!("Trusty KM HAL service is starting.");
+    }
 
     info!("Starting thread pool now.");
     binder::ProcessState::start_thread_pool();
 
     // Create connection to the TA
-    let connection = trusty::TipcChannel::connect(DEFAULT_DEVICE, TRUSTY_KEYMINT_RUST_SERVICE_NAME)
-        .map_err(|e| {
-            HalServiceError(format!("Failed to connect to Trusty Keymint TA because of {:?}.", e))
-        })?;
+    let connection =
+        trusty::TipcChannel::connect(args.dev.as_str(), TRUSTY_KEYMINT_RUST_SERVICE_NAME).map_err(
+            |e| {
+                HalServiceError(format!(
+                    "Failed to connect to Trusty Keymint TA at {} because of {:?}.",
+                    args.dev, e
+                ))
+            },
+        )?;
     let tipc_channel = Arc::new(Mutex::new(TipcChannel(connection)));
 
+    #[cfg(feature = "nonsecure")]
+    {
+        // When the non-secure feature is enabled, retrieve root-of-trust information
+        // (with the exception of the verified boot key hash) from Android properties, and
+        // populate the TA with this information. On a real device, the bootloader should
+        // provide this data to the TA directly.
+        let boot_req = kmr_hal_nonsecure::get_boot_info();
+        info!("boot/HAL->TA: boot info is {:?}", boot_req);
+        kmr_hal::send_boot_info(tipc_channel.lock().unwrap().deref_mut(), boot_req)
+            .map_err(|e| HalServiceError(format!("Failed to send boot info: {:?}", e)))?;
+        // When the non-secure feature is enabled, also retrieve device ID information
+        // (except for IMEI/MEID values) from Android properties and populate the TA with
+        // this information. On a real device, a factory provisioning process would populate
+        // this information.
+        let attest_ids = kmr_hal_nonsecure::attestation_id_info();
+        if let Err(e) =
+            kmr_hal::send_attest_ids(tipc_channel.lock().unwrap().deref_mut(), attest_ids)
+        {
+            error!("Failed to send attestation ID info: {:?}", e);
+        }
+        info!("Successfully sent non-secure boot info and attestation IDs to the TA.");
+    }
+
     // Register the Keymint service
     let km_service = keymint::Device::new_as_binder(tipc_channel.clone());
     let km_service_name = format!("{}/{}", KM_SERVICE_NAME, SERVICE_INSTANCE);
diff --git a/trusty/keymint/trusty-keymint.mk b/trusty/keymint/trusty-keymint.mk
new file mode 100644
index 0000000..d5791ea
--- /dev/null
+++ b/trusty/keymint/trusty-keymint.mk
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2024 The Android Open-Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# This makefile should be included by devices that use Trusty TEE
+# to pull in a set of Trusty KeyMint specific modules.
+#
+# Allow KeyMint HAL service implementation selection at build time. This must be
+# synchronized with the TA implementation included in Trusty. Possible values:
+#
+# - Rust implementation for Trusty VM (requires Trusty VM support):
+#   export TRUSTY_KEYMINT_IMPL=rust
+#   export TRUSTY_SYSTEM_VM=nonsecure
+# - Rust implementation for Trusty TEE (no Trusty VM support):
+#   export TRUSTY_KEYMINT_IMPL=rust
+# - C++ implementation (default): (any other value or unset TRUSTY_KEYMINT_IMPL)
+
+ifeq ($(TRUSTY_KEYMINT_IMPL),rust)
+    ifeq ($(TRUSTY_SYSTEM_VM),nonsecure)
+        LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service.rust.trusty.system.nonsecure
+    else
+        LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service.rust.trusty
+    endif
+else
+    # Default to the C++ implementation
+    LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service.trusty
+endif
+
+PRODUCT_PACKAGES += \
+    $(LOCAL_KEYMINT_PRODUCT_PACKAGE) \
diff --git a/trusty/libtrusty-rs/Android.bp b/trusty/libtrusty-rs/Android.bp
index 4fc162b..e289005 100644
--- a/trusty/libtrusty-rs/Android.bp
+++ b/trusty/libtrusty-rs/Android.bp
@@ -21,9 +21,10 @@
     crate_name: "trusty",
     vendor_available: true,
     srcs: [
-        "src/lib.rs"
+        "src/lib.rs",
     ],
     rustlibs: [
+        "liblog_rust",
         "libnix",
         "liblibc",
     ],
@@ -36,5 +37,5 @@
     rustlibs: [
         "libtrusty-rs",
         "liblibc",
-    ]
+    ],
 }
diff --git a/trusty/libtrusty-rs/src/lib.rs b/trusty/libtrusty-rs/src/lib.rs
index 22b894a..9237c8b 100644
--- a/trusty/libtrusty-rs/src/lib.rs
+++ b/trusty/libtrusty-rs/src/lib.rs
@@ -61,12 +61,18 @@
 //! ```
 
 use crate::sys::tipc_connect;
+use log::{trace, warn};
+use nix::sys::socket;
+use std::convert::From;
 use std::ffi::CString;
 use std::fs::File;
+use std::io;
 use std::io::prelude::*;
 use std::io::{ErrorKind, Result};
 use std::os::unix::prelude::AsRawFd;
 use std::path::Path;
+use std::thread;
+use std::time;
 
 mod sys;
 
@@ -98,7 +104,89 @@
     /// bytes. This is handled with a panic because the service names are all
     /// hard-coded constants, and so such an error should always be indicative of a
     /// bug in the calling code.
-    pub fn connect(device: impl AsRef<Path>, service: &str) -> Result<Self> {
+    pub fn connect(device: &str, service: &str) -> Result<Self> {
+        if let Some(cid_port_str) = device.strip_prefix("VSOCK:") {
+            Self::connect_vsock(cid_port_str, service)
+        } else {
+            Self::connect_tipc(device, service)
+        }
+    }
+
+    fn connect_vsock(type_cid_port_str: &str, service: &str) -> Result<Self> {
+        let cid_port_str;
+        let socket_type;
+        if let Some(stream_cid_port_str) = type_cid_port_str.strip_prefix("STREAM:") {
+            socket_type = socket::SockType::Stream;
+            cid_port_str = stream_cid_port_str;
+        } else if let Some(seqpacket_cid_port_str) = type_cid_port_str.strip_prefix("SEQPACKET:") {
+            socket_type = socket::SockType::SeqPacket;
+            cid_port_str = seqpacket_cid_port_str;
+        } else {
+            /*
+             * Default to SOCK_STREAM if neither type is specified.
+             *
+             * TODO: use SOCK_SEQPACKET by default instead of SOCK_STREAM when SOCK_SEQPACKET is fully
+             * supported since it matches tipc better. At the moment SOCK_SEQPACKET is not supported by
+             * crosvm. It is also significantly slower since the Linux kernel implementation (as of
+             * v6.7-rc1) sends credit update packets every time it receives a data packet while the
+             * SOCK_STREAM version skips these unless the remaining buffer space is "low".
+             */
+            socket_type = socket::SockType::Stream;
+            cid_port_str = type_cid_port_str;
+        }
+
+        let [cid, port]: [u32; 2] = cid_port_str
+            .split(':')
+            .map(|v| v.parse::<u32>().map_err(|e| io::Error::new(io::ErrorKind::InvalidInput, e)))
+            .collect::<Result<Vec<u32>>>()?
+            .try_into()
+            .map_err(|e| {
+                io::Error::new(io::ErrorKind::InvalidInput, format!("Wrong number of args: {e:?}"))
+            })?;
+
+        trace!("got cid, port: {cid}, {port}");
+        let s = socket::socket(
+            socket::AddressFamily::Vsock,
+            socket_type,
+            socket::SockFlag::SOCK_CLOEXEC,
+            None,
+        )?;
+        trace!("got socket");
+        let sa = socket::VsockAddr::new(cid, port);
+        trace!("got sa");
+
+        //let connect_timeout = libc::timeval {tv_sec: 60, tv_usec: 0};
+        // TODO: Set AF_VSOCK/SO_VM_SOCKETS_CONNECT_TIMEOUT sockopt.
+
+        let mut retry = 10;
+        loop {
+            let res = socket::connect(s.as_raw_fd(), &sa);
+            if res.is_ok() || retry <= 0 {
+                res?;
+                break;
+            }
+            warn!("vsock:{cid}:{port} connect failed {res:?}, {retry} retries remaining");
+            retry -= 1;
+            thread::sleep(time::Duration::from_secs(5));
+        }
+        trace!("connected");
+        // TODO: Current vsock tipc bridge in trusty expects a port name in the
+        // first packet. We need to replace this with a protocol that also does DICE
+        // based authentication.
+        // `s` is a valid file descriptor because it came from socket::socket.
+        let mut channel = Self(File::from(s));
+        channel.send(service.as_bytes())?;
+        trace!("sent tipc port name");
+
+        // Work around lack of seq packet support. Read a status byte to prevent
+        // the caller from sending more data until srv_name has been read.
+        let mut status = [0; 1];
+        channel.recv_no_alloc(&mut status)?;
+        trace!("got status byte: {status:?}");
+        Ok(channel)
+    }
+
+    fn connect_tipc(device: impl AsRef<Path>, service: &str) -> Result<Self> {
         let file = File::options().read(true).write(true).open(device)?;
 
         let srv_name = CString::new(service).expect("Service name contained null bytes");
@@ -108,7 +196,7 @@
             tipc_connect(file.as_raw_fd(), srv_name.as_ptr())?;
         }
 
-        Ok(TipcChannel(file))
+        Ok(Self(file))
     }
 
     /// Sends a message to the connected service.
diff --git a/trusty/libtrusty/tipc-test/tipc_test.c b/trusty/libtrusty/tipc-test/tipc_test.c
index 3cf0c05..121837d 100644
--- a/trusty/libtrusty/tipc-test/tipc_test.c
+++ b/trusty/libtrusty/tipc-test/tipc_test.c
@@ -67,7 +67,7 @@
 static const char* receiver_name = "com.android.trusty.memref.receiver";
 static const size_t memref_chunk_size = 4096;
 
-static const char* _sopts = "hsvDS:t:r:m:b:B:";
+static const char* _sopts = "hsvD:S:t:r:m:b:B:";
 /* clang-format off */
 static const struct option _lopts[] =  {
     {"help",    no_argument,       0, 'h'},
diff --git a/trusty/libtrusty/trusty.c b/trusty/libtrusty/trusty.c
index f44f8b4..63262a0 100644
--- a/trusty/libtrusty/trusty.c
+++ b/trusty/libtrusty/trusty.c
@@ -23,16 +23,161 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
 #include <unistd.h>
 
+#include <linux/vm_sockets.h> /* must be after sys/socket.h */
 #include <log/log.h>
 
 #include <trusty/ipc.h>
 
+static const char* strip_prefix(const char* str, const char* prefix) {
+    size_t prefix_len = strlen(prefix);
+    if (strncmp(str, prefix, prefix_len) == 0) {
+        return str + prefix_len;
+    } else {
+        return NULL;
+    }
+}
+
+static bool use_vsock_connection = false;
+static int tipc_vsock_connect(const char* type_cid_port_str, const char* srv_name) {
+    int ret;
+    const char* cid_port_str;
+    char* port_str;
+    char* end_str;
+    int socket_type;
+    if ((cid_port_str = strip_prefix(type_cid_port_str, "STREAM:"))) {
+        socket_type = SOCK_STREAM;
+    } else if ((cid_port_str = strip_prefix(type_cid_port_str, "SEQPACKET:"))) {
+        socket_type = SOCK_SEQPACKET;
+    } else {
+        /*
+         * Default to SOCK_STREAM if neither type is specified.
+         *
+         * TODO: use SOCK_SEQPACKET by default instead of SOCK_STREAM when SOCK_SEQPACKET is fully
+         * supported since it matches tipc better. At the moment SOCK_SEQPACKET is not supported by
+         * crosvm. It is also significantly slower since the Linux kernel implementation (as of
+         * v6.7-rc1) sends credit update packets every time it receives a data packet while the
+         * SOCK_STREAM version skips these unless the remaining buffer space is "low".
+         */
+        socket_type = SOCK_STREAM;
+        cid_port_str = type_cid_port_str;
+    }
+    long cid = strtol(cid_port_str, &port_str, 0);
+    if (port_str[0] != ':') {
+        ALOGE("%s: invalid VSOCK str, \"%s\", need cid:port missing : after cid\n", __func__,
+              cid_port_str);
+        return -EINVAL;
+    }
+    long port = strtol(port_str + 1, &end_str, 0);
+    if (end_str[0] != '\0') {
+        ALOGE("%s: invalid VSOCK str, \"%s\", need cid:port got %ld:%ld\n", __func__, cid_port_str,
+              cid, port);
+        return -EINVAL;
+    }
+    int fd = socket(AF_VSOCK, socket_type, 0);
+    if (fd < 0) {
+        ret = -errno;
+        ALOGE("%s: can't get vsock %ld:%ld socket for tipc service \"%s\" (err=%d)\n", __func__,
+              cid, port, srv_name, errno);
+        return ret < 0 ? ret : -1;
+    }
+    struct timeval connect_timeout = {.tv_sec = 60, .tv_usec = 0};
+    ret = setsockopt(fd, AF_VSOCK, SO_VM_SOCKETS_CONNECT_TIMEOUT, &connect_timeout,
+                     sizeof(connect_timeout));
+    if (ret) {
+        ALOGE("%s: vsock %ld:%ld: Failed to set connect timeout (err=%d)\n", __func__, cid, port,
+              errno);
+        /* failed to set longer timeout, but try to connect anyway */
+    }
+    struct sockaddr_vm sa = {
+            .svm_family = AF_VSOCK,
+            .svm_port = port,
+            .svm_cid = cid,
+    };
+    int retry = 10;
+    do {
+        ret = TEMP_FAILURE_RETRY(connect(fd, (struct sockaddr*)&sa, sizeof(sa)));
+        if (ret && (errno == ENODEV || errno == ESOCKTNOSUPPORT) && --retry) {
+            /*
+             * The kernel returns ESOCKTNOSUPPORT instead of ENODEV if the socket type is
+             * SOCK_SEQPACKET and the guest CID we are trying to connect to is not ready yet.
+             */
+            ALOGE("%s: Can't connect to vsock %ld:%ld for tipc service \"%s\" (err=%d) %d retries "
+                  "remaining\n",
+                  __func__, cid, port, srv_name, errno, retry);
+            sleep(1);
+        } else {
+            retry = 0;
+        }
+    } while (retry);
+    if (ret) {
+        ret = -errno;
+        ALOGE("%s: Can't connect to vsock %ld:%ld for tipc service \"%s\" (err=%d)\n", __func__,
+              cid, port, srv_name, errno);
+        close(fd);
+        return ret < 0 ? ret : -1;
+    }
+    /*
+     * TODO: Current vsock tipc bridge in trusty expects a port name in the
+     * first packet. We need to replace this with a protocol that also does DICE
+     * based authentication.
+     */
+    ret = TEMP_FAILURE_RETRY(write(fd, srv_name, strlen(srv_name)));
+    if (ret != strlen(srv_name)) {
+        ret = -errno;
+        ALOGE("%s: vsock %ld:%ld: failed to send tipc service name \"%s\" (err=%d)\n", __func__,
+              cid, port, srv_name, errno);
+        close(fd);
+        return ret < 0 ? ret : -1;
+    }
+    /*
+     * Work around lack of seq packet support. Read a status byte to prevent
+     * the caller from sending more data until srv_name has been read.
+     */
+    int8_t status;
+    ret = TEMP_FAILURE_RETRY(read(fd, &status, sizeof(status)));
+    if (ret != sizeof(status)) {
+        ALOGE("%s: vsock %ld:%ld: failed to read status byte for connect to tipc service name "
+              "\"%s\" (err=%d)\n",
+              __func__, cid, port, srv_name, errno);
+        close(fd);
+        return ret < 0 ? ret : -1;
+    }
+    use_vsock_connection = true;
+    return fd;
+}
+
+static size_t tipc_vsock_send(int fd, const struct iovec* iov, int iovcnt, struct trusty_shm* shms,
+                              int shmcnt) {
+    int ret;
+
+    (void)shms;
+    if (shmcnt != 0) {
+        ALOGE("%s: vsock does not yet support passing fds\n", __func__);
+        return -ENOTSUP;
+    }
+    ret = TEMP_FAILURE_RETRY(writev(fd, iov, iovcnt));
+    if (ret < 0) {
+        ret = -errno;
+        ALOGE("%s: failed to send message (err=%d)\n", __func__, errno);
+        return ret < 0 ? ret : -1;
+    }
+
+    return ret;
+}
+
 int tipc_connect(const char* dev_name, const char* srv_name) {
     int fd;
     int rc;
 
+    const char* type_cid_port_str = strip_prefix(dev_name, "VSOCK:");
+    if (type_cid_port_str) {
+        return tipc_vsock_connect(type_cid_port_str, srv_name);
+    }
+
     fd = TEMP_FAILURE_RETRY(open(dev_name, O_RDWR));
     if (fd < 0) {
         rc = -errno;
@@ -54,6 +199,9 @@
 
 ssize_t tipc_send(int fd, const struct iovec* iov, int iovcnt, struct trusty_shm* shms,
                   int shmcnt) {
+    if (use_vsock_connection) {
+        return tipc_vsock_send(fd, iov, iovcnt, shms, shmcnt);
+    }
     struct tipc_send_msg_req req;
     req.iov = (__u64)iov;
     req.iov_cnt = (__u64)iovcnt;
diff --git a/trusty/metrics/include/trusty/metrics/tipc.h b/trusty/metrics/include/trusty/metrics/tipc.h
index b4428d5..4c4d37d 100644
--- a/trusty/metrics/include/trusty/metrics/tipc.h
+++ b/trusty/metrics/include/trusty/metrics/tipc.h
@@ -43,6 +43,8 @@
 
 #define UUID_STR_SIZE (37)
 
+#define HASH_SIZE_BYTES 64
+
 /**
  * enum metrics_cmd - command identifiers for metrics interface
  * @METRICS_CMD_RESP_BIT:             message is a response
@@ -112,10 +114,22 @@
  *          "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  * @crash_reason: architecture-specific code representing the reason for the
  *                crash
+ * @far: Fault Address Register corresponding to the crash. It is set to 0 and
+ *       not always revealed
+ * @far_hash: Fault Address Register obfuscated, always revealed
+ * @elr: Exception Link Register corresponding to the crash. It is set to 0 and
+ *       not always revealed
+ * @elr_hash: Exception Link Register obfuscated, always revealed
+ * @is_hash: Boolean value indicating whether far and elr have been ob
  */
 struct metrics_report_crash_req {
     char app_id[UUID_STR_SIZE];
     uint32_t crash_reason;
+    uint64_t far;
+    uint8_t far_hash[HASH_SIZE_BYTES];
+    uint64_t elr;
+    uint8_t elr_hash[HASH_SIZE_BYTES];
+    bool is_hash;
 } __attribute__((__packed__));
 
 enum TrustyStorageErrorType {
diff --git a/trusty/storage/interface/Android.bp b/trusty/storage/interface/Android.bp
index d031b0c..769f53d 100644
--- a/trusty/storage/interface/Android.bp
+++ b/trusty/storage/interface/Android.bp
@@ -20,6 +20,7 @@
 
 cc_library_static {
     name: "libtrustystorageinterface",
-    vendor: true,
+    vendor_available: true,
+    system_ext_specific: true,
     export_include_dirs: ["include"],
 }
diff --git a/trusty/storage/proxy/Android.bp b/trusty/storage/proxy/Android.bp
index e362b8b..f32188a 100644
--- a/trusty/storage/proxy/Android.bp
+++ b/trusty/storage/proxy/Android.bp
@@ -18,10 +18,8 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-cc_binary {
-    name: "storageproxyd",
-    vendor: true,
-
+cc_defaults {
+    name: "storageproxyd.defaults",
     srcs: [
         "checkpoint_handling.cpp",
         "ipc.c",
@@ -47,9 +45,22 @@
         "libtrustystorageinterface",
         "libtrusty",
     ],
-
     cflags: [
         "-Wall",
         "-Werror",
     ],
 }
+
+cc_binary {
+    name: "storageproxyd",
+    defaults: ["storageproxyd.defaults"],
+    vendor: true,
+    // vendor variant requires this flag
+    cflags: ["-DVENDOR_FS_READY_PROPERTY"],
+}
+
+cc_binary {
+    name: "storageproxyd.system",
+    defaults: ["storageproxyd.defaults"],
+    system_ext_specific: true,
+}
diff --git a/trusty/storage/proxy/storage.c b/trusty/storage/proxy/storage.c
index 6d0c616..72c4e93 100644
--- a/trusty/storage/proxy/storage.c
+++ b/trusty/storage/proxy/storage.c
@@ -54,8 +54,10 @@
 /* List head for storage mapping, elements added at init, and never removed */
 static struct storage_mapping_node* storage_mapping_head;
 
+#ifdef VENDOR_FS_READY_PROPERTY
+
 /*
- * Property set to 1 after we have opened a file under ssdir_name. The backing
+ * Properties set to 1 after we have opened a file under ssdir_name. The backing
  * files for both TD and TDP are currently located under /data/vendor/ss and can
  * only be opened once userdata is mounted. This storageproxyd service is
  * restarted when userdata is available, which causes the Trusty storage service
@@ -64,11 +66,29 @@
  * ports will be available (although they may block if still being initialized),
  * and connections will not be reset after this point (assuming the
  * storageproxyd service stays running).
+ *
+ * fs_ready - secure storage is read-only (due to checkpointing after upgrade)
+ * fs_ready_rw - secure storage is readable and writable
  */
 #define FS_READY_PROPERTY "ro.vendor.trusty.storage.fs_ready"
+#define FS_READY_RW_PROPERTY "ro.vendor.trusty.storage.fs_ready_rw"
 
 /* has FS_READY_PROPERTY been set? */
-static bool fs_ready_initialized = false;
+static bool fs_ready_set = false;
+static bool fs_ready_rw_set = false;
+
+static bool property_set_helper(const char* prop) {
+    int rc = property_set(prop, "1");
+    if (rc == 0) {
+        ALOGI("Set property %s\n", prop);
+    } else {
+        ALOGE("Could not set property %s, rc: %d\n", prop, rc);
+    }
+
+    return rc == 0;
+}
+
+#endif  // #ifdef VENDOR_FS_READY_PROPERTY
 
 static enum sync_state fs_state;
 static enum sync_state fd_state[FD_TBL_SIZE];
@@ -76,9 +96,9 @@
 static bool alternate_mode;
 
 static struct {
-   struct storage_file_read_resp hdr;
-   uint8_t data[MAX_READ_SIZE];
-}  read_rsp;
+    struct storage_file_read_resp hdr;
+    uint8_t data[MAX_READ_SIZE];
+} read_rsp;
 
 static uint32_t insert_fd(int open_flags, int fd, struct storage_mapping_node* node) {
     uint32_t handle = fd;
@@ -519,15 +539,25 @@
     free(path);
     path = NULL;
 
+#ifdef VENDOR_FS_READY_PROPERTY
     /* a backing file has been opened, notify any waiting init steps */
-    if (!fs_ready_initialized) {
-        rc = property_set(FS_READY_PROPERTY, "1");
-        if (rc == 0) {
-            fs_ready_initialized = true;
+    if (!fs_ready_set || !fs_ready_rw_set) {
+        bool is_checkpoint_active = false;
+
+        rc = is_data_checkpoint_active(&is_checkpoint_active);
+        if (rc != 0) {
+            ALOGE("is_data_checkpoint_active() failed (%d)\n", rc);
         } else {
-            ALOGE("Could not set property %s, rc: %d\n", FS_READY_PROPERTY, rc);
+            if (!fs_ready_rw_set && !is_checkpoint_active) {
+                fs_ready_rw_set = property_set_helper(FS_READY_RW_PROPERTY);
+            }
+
+            if (!fs_ready_set) {
+                fs_ready_set = property_set_helper(FS_READY_PROPERTY);
+            }
         }
     }
+#endif  // #ifdef VENDOR_FS_READY_PROPERTY
 
     return ipc_respond(msg, &resp, sizeof(resp));
 
diff --git a/trusty/trusty-base.mk b/trusty/trusty-base.mk
index b21eca6..9d810dc 100644
--- a/trusty/trusty-base.mk
+++ b/trusty/trusty-base.mk
@@ -22,18 +22,7 @@
 # For gatekeeper, we include the generic -service and -impl to use legacy
 # HAL loading of gatekeeper.trusty.
 
-# Allow the KeyMint HAL service implementation to be selected at build time.  This needs to be
-# done in sync with the TA implementation included in Trusty.  Possible values are:
-#
-# - Rust implementation:   export TRUSTY_KEYMINT_IMPL=rust
-# - C++ implementation:    (any other value of TRUSTY_KEYMINT_IMPL)
-
-ifeq ($(TRUSTY_KEYMINT_IMPL),rust)
-    LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service.rust.trusty
-else
-    # Default to the C++ implementation
-    LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service.trusty
-endif
+$(call inherit-product, system/core/trusty/keymint/trusty-keymint.mk)
 
 ifeq ($(SECRETKEEPER_ENABLED),true)
     LOCAL_SECRETKEEPER_PRODUCT_PACKAGE := android.hardware.security.secretkeeper.trusty
@@ -42,7 +31,6 @@
 endif
 
 PRODUCT_PACKAGES += \
-	$(LOCAL_KEYMINT_PRODUCT_PACKAGE) \
 	$(LOCAL_SECRETKEEPER_PRODUCT_PACKAGE) \
 	android.hardware.gatekeeper-service.trusty \
 	trusty_apploader \
diff --git a/fastboot/Android.mk b/trusty/trusty-storage-cf.mk
similarity index 61%
rename from fastboot/Android.mk
rename to trusty/trusty-storage-cf.mk
index cde0cb2..3b46445 100644
--- a/fastboot/Android.mk
+++ b/trusty/trusty-storage-cf.mk
@@ -1,4 +1,5 @@
-# Copyright (C) 2007 Google Inc.
+#
+# Copyright (C) 2024 The Android Open-Source Project
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -11,15 +12,14 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
-LOCAL_PATH:= $(call my-dir)
-
-#
-# Package fastboot-related executables.
 #
 
-my_dist_files := $(HOST_OUT_EXECUTABLES)/mke2fs
-my_dist_files += $(HOST_OUT_EXECUTABLES)/make_f2fs
-my_dist_files += $(HOST_OUT_EXECUTABLES)/make_f2fs_casefold
-$(call dist-for-goals,dist_files sdk,$(my_dist_files))
-my_dist_files :=
+#
+# This makefile should be included by the cuttlefish device
+# when enabling the Trusty VM to pull in the baseline set
+# of storage specific modules
+
+PRODUCT_PACKAGES += \
+	storageproxyd.system \
+	rpmb_dev.system \
+
diff --git a/trusty/utils/rpmb_dev/Android.bp b/trusty/utils/rpmb_dev/Android.bp
index 5e9caaf..ef23cc5 100644
--- a/trusty/utils/rpmb_dev/Android.bp
+++ b/trusty/utils/rpmb_dev/Android.bp
@@ -15,15 +15,12 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-cc_binary {
-    name: "rpmb_dev",
-    vendor: true,
-
+cc_defaults {
+    name: "rpmb_dev.cc_defaults",
     srcs: [
         "rpmb_dev.c",
     ],
     shared_libs: [
-        "libc",
         "libcutils",
         "liblog",
         "libcrypto",
@@ -32,7 +29,32 @@
         "-Wall",
         "-Werror",
     ],
+}
+
+cc_binary {
+    name: "rpmb_dev",
+    defaults: ["rpmb_dev.cc_defaults"],
+    vendor: true,
+    host_supported: true,
     init_rc: [
         "rpmb_dev.rc",
     ],
 }
+
+cc_binary {
+    name: "rpmb_dev.system",
+    defaults: ["rpmb_dev.cc_defaults"],
+    system_ext_specific: true,
+    init_rc: [
+        "rpmb_dev.system.rc",
+    ],
+}
+
+cc_binary {
+    name: "rpmb_dev.wv.system",
+    defaults: ["rpmb_dev.cc_defaults"],
+    system_ext_specific: true,
+    init_rc: [
+        "rpmb_dev.wv.system.rc",
+    ],
+}
diff --git a/trusty/utils/rpmb_dev/rpmb_dev.system.rc b/trusty/utils/rpmb_dev/rpmb_dev.system.rc
new file mode 100644
index 0000000..52419ed
--- /dev/null
+++ b/trusty/utils/rpmb_dev/rpmb_dev.system.rc
@@ -0,0 +1,64 @@
+service storageproxyd_system /system_ext/bin/storageproxyd.system \
+        -d ${storageproxyd_system.trusty_ipc_dev:-/dev/trusty-ipc-dev0} \
+        -r /dev/socket/rpmb_mock_system \
+        -p /data/secure_storage_system \
+        -t sock
+    disabled
+    user system
+    group system
+
+service rpmb_mock_init_system /system_ext/bin/rpmb_dev.system \
+        --dev /mnt/secure_storage_rpmb_system/persist/RPMB_DATA --init --size 2048
+    disabled
+    user system
+    group system
+    oneshot
+
+service rpmb_mock_system /system_ext/bin/rpmb_dev.system \
+        --dev /mnt/secure_storage_rpmb_system/persist/RPMB_DATA \
+        --sock rpmb_mock_system
+    disabled
+    user system
+    group system
+    socket rpmb_mock_system stream 660 system system
+
+# storageproxyd
+on late-fs && \
+    property:trusty.security_vm.nonsecure_vm_ready=1 && \
+    property:storageproxyd_system.trusty_ipc_dev=*
+    wait /dev/socket/rpmb_mock_system
+    start storageproxyd_system
+
+
+# RPMB Mock
+on post-fs && \
+    property:trusty.security_vm.nonsecure_vm_ready=1 && \
+    property:trusty.security_vm.vm_cid=*
+    # Create a persistent location for the RPMB data
+    # (work around lack of RPMb block device on CF).
+    # file contexts secure_storage_rpmb_system_file
+    # (only used on Cuttlefish as this is non secure)
+    mkdir /metadata/secure_storage_rpmb_system 0770 system system
+    mkdir /mnt/secure_storage_rpmb_system 0770 system system
+    symlink /metadata/secure_storage_rpmb_system \
+            /mnt/secure_storage_rpmb_system/persist
+    # Create a system persist directory in /metadata
+    # (work around lack of dedicated system persist partition).
+    # file contexts secure_storage_persist_system_file
+    mkdir /metadata/secure_storage_persist_system 0770 system system
+    mkdir /mnt/secure_storage_persist_system 0770 system system
+    symlink /metadata/secure_storage_persist_system \
+            /mnt/secure_storage_persist_system/persist
+    setprop storageproxyd_system.trusty_ipc_dev VSOCK:${trusty.security_vm.vm_cid}:1
+    exec_start rpmb_mock_init_system
+    start rpmb_mock_system
+
+on post-fs-data && \
+    property:trusty.security_vm.nonsecure_vm_ready=1 && \
+    property:storageproxyd_system.trusty_ipc_dev=*
+    # file contexts secure_storage_system_file
+    mkdir /data/secure_storage_system 0770 root system
+    symlink /mnt/secure_storage_persist_system/persist \
+            /data/secure_storage_system/persist
+    chown root system /data/secure_storage_system/persist
+    restart storageproxyd_system
diff --git a/trusty/utils/rpmb_dev/rpmb_dev.wv.system.rc b/trusty/utils/rpmb_dev/rpmb_dev.wv.system.rc
new file mode 100644
index 0000000..3e7f8b4
--- /dev/null
+++ b/trusty/utils/rpmb_dev/rpmb_dev.wv.system.rc
@@ -0,0 +1,62 @@
+service storageproxyd_wv_system /system_ext/bin/storageproxyd.system \
+        -d ${storageproxyd_wv_system.trusty_ipc_dev:-/dev/trusty-ipc-dev0} \
+        -r /dev/socket/rpmb_mock_wv_system \
+        -p /data/secure_storage_wv_system \
+        -t sock
+    disabled
+    class hal
+    user system
+    group system
+
+service rpmb_mock_init_wv_system /system_ext/bin/rpmb_dev.wv.system \
+        --dev /mnt/secure_storage_rpmb_wv_system/persist/RPMB_DATA --init --size 2048
+    disabled
+    user system
+    group system
+    oneshot
+
+service rpmb_mock_wv_system /system_ext/bin/rpmb_dev.wv.system \
+        --dev /mnt/secure_storage_rpmb_wv_system/persist/RPMB_DATA \
+        --sock rpmb_mock_wv_system
+    disabled
+    user system
+    group system
+    socket rpmb_mock_wv_system stream 660 system system
+
+# storageproxyd
+on boot && \
+    property:trusty.widevine_vm.nonsecure_vm_ready=1 && \
+    property:storageproxyd_wv_system.trusty_ipc_dev=*
+    wait /dev/socket/rpmb_mock_wv_system
+    enable storageproxyd_wv_system
+
+
+# RPMB Mock
+on early-boot && \
+    property:ro.hardware.security.trusty.widevine_vm.system=1 && \
+    property:trusty.widevine_vm.vm_cid=* && \
+    property:ro.boot.vendor.apex.com.android.services.widevine=\
+com.android.services.widevine.cf_guest_trusty_nonsecure
+    # Create a persistent location for the RPMB data
+    # (work around lack of RPMb block device on CF).
+    # file contexts secure_storage_rpmb_system_file
+    # (only used on Cuttlefish as this is non secure)
+    mkdir /metadata/secure_storage_rpmb_wv_system 0770 system system
+    mkdir /mnt/secure_storage_rpmb_wv_system 0770 system system
+    symlink /metadata/secure_storage_rpmb_wv_system \
+            /mnt/secure_storage_rpmb_wv_system/persist
+    # Create a system persist directory in /metadata
+    # (work around lack of dedicated system persist partition).
+    # file contexts secure_storage_persist_system_file
+    mkdir /metadata/secure_storage_persist_wv_system 0770 system system
+    mkdir /mnt/secure_storage_persist_wv_system 0770 system system
+    symlink /metadata/secure_storage_persist_wv_system \
+            /mnt/secure_storage_persist_wv_system/persist
+    # file contexts secure_storage_system_file
+    mkdir /data/secure_storage_wv_system 0770 root system
+    symlink /mnt/secure_storage_persist_wv_system/persist \
+            /data/secure_storage_wv_system/persist
+    chown root system /data/secure_storage_wv_system/persist
+    setprop storageproxyd_wv_system.trusty_ipc_dev VSOCK:${trusty.widevine_vm.vm_cid}:1
+    exec_start rpmb_mock_init_wv_system
+    start rpmb_mock_wv_system
diff --git a/trusty/utils/trusty-ut-ctrl/Android.bp b/trusty/utils/trusty-ut-ctrl/Android.bp
index 6fc2a48..c255614 100644
--- a/trusty/utils/trusty-ut-ctrl/Android.bp
+++ b/trusty/utils/trusty-ut-ctrl/Android.bp
@@ -16,9 +16,8 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-cc_binary {
-    name: "trusty-ut-ctrl",
-    vendor: true,
+cc_defaults {
+    name: "trusty-ut-ctrl.defaults",
 
     srcs: ["ut-ctrl.c"],
     shared_libs: [
@@ -33,3 +32,15 @@
         "-Werror",
     ],
 }
+
+cc_binary {
+    name: "trusty-ut-ctrl",
+    defaults: ["trusty-ut-ctrl.defaults"],
+    vendor: true,
+}
+
+cc_binary {
+    name: "trusty-ut-ctrl.system",
+    defaults: ["trusty-ut-ctrl.defaults"],
+    system_ext_specific: true,
+}
diff --git a/trusty/utils/trusty-ut-ctrl/ut-ctrl.c b/trusty/utils/trusty-ut-ctrl/ut-ctrl.c
index 6cc6670..31cfd4c 100644
--- a/trusty/utils/trusty-ut-ctrl/ut-ctrl.c
+++ b/trusty/utils/trusty-ut-ctrl/ut-ctrl.c
@@ -95,12 +95,26 @@
     TEST_FAILED = 1,
     TEST_MESSAGE = 2,
     TEST_TEXT = 3,
+    TEST_OPCODE_COUNT,
 };
 
+static int get_msg_len(const char* buf, int max_buf_len) {
+    int buf_len;
+    for (buf_len = 0; buf_len < max_buf_len; buf_len++) {
+        if ((unsigned char)buf[buf_len] < TEST_OPCODE_COUNT) {
+            break;
+        }
+    }
+    return buf_len;
+}
+
 static int run_trusty_unitest(const char* utapp) {
     int fd;
-    int rc;
-    char rx_buf[1024];
+    char read_buf[1024];
+    int read_len;
+    char* rx_buf;
+    int rx_buf_len;
+    int cmd = -1;
 
     /* connect to unitest app */
     fd = tipc_connect(dev_name, utapp);
@@ -110,22 +124,39 @@
     }
 
     /* wait for test to complete */
+    rx_buf_len = 0;
     for (;;) {
-        rc = read(fd, rx_buf, sizeof(rx_buf));
-        if (rc <= 0 || rc >= (int)sizeof(rx_buf)) {
-            fprintf(stderr, "%s: Read failed: %d\n", __func__, rc);
-            tipc_close(fd);
-            return -1;
+        if (rx_buf_len == 0) {
+            read_len = read(fd, read_buf, sizeof(read_buf));
+            if (read_len <= 0 || read_len > (int)sizeof(read_buf)) {
+                fprintf(stderr, "%s: Read failed: %d, %s\n", __func__, read_len,
+                        read_len < 0 ? strerror(errno) : "");
+                tipc_close(fd);
+                return -1;
+            }
+            rx_buf = read_buf;
+            rx_buf_len = read_len;
         }
 
-        if (rx_buf[0] == TEST_PASSED) {
+        int msg_len = get_msg_len(rx_buf, rx_buf_len);
+        if (msg_len == 0) {
+            cmd = rx_buf[0];
+            rx_buf++;
+            rx_buf_len--;
+        }
+
+        if (cmd == TEST_PASSED) {
             break;
-        } else if (rx_buf[0] == TEST_FAILED) {
+        } else if (cmd == TEST_FAILED) {
             break;
-        } else if (rx_buf[0] == TEST_MESSAGE || rx_buf[0] == TEST_TEXT) {
-            write(STDOUT_FILENO, rx_buf + 1, rc - 1);
+        } else if (cmd == TEST_MESSAGE || cmd == TEST_TEXT) {
+            if (msg_len) {
+                write(STDOUT_FILENO, rx_buf, msg_len);
+                rx_buf += msg_len;
+                rx_buf_len -= msg_len;
+            }
         } else {
-            fprintf(stderr, "%s: Bad message header: %d\n", __func__, rx_buf[0]);
+            fprintf(stderr, "%s: Bad message header: %d\n", __func__, cmd);
             break;
         }
     }
@@ -133,7 +164,7 @@
     /* close connection to unitest app */
     tipc_close(fd);
 
-    return rx_buf[0] == TEST_PASSED ? 0 : -1;
+    return cmd == TEST_PASSED ? 0 : -1;
 }
 
 int main(int argc, char** argv) {