summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSijie Chen <sijiec@google.com>2023-12-07 18:31:19 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-12-07 18:31:19 +0000
commitc757c434338900a1dd6320ee22d2021208831629 (patch)
tree2efea52eeb47a9e4874ff454cfd7533b2b765dcb
parent29fae20fa33df8312f348af48be7569be57c274c (diff)
parent07c3a5ea320a4ef874ea346197f08ddeae311502 (diff)
downloadnative_bridge_support-c757c434338900a1dd6320ee22d2021208831629.tar.gz
Merge "[Berberis] Add libbinder_ndk library" into main am: e9b287f875 am: 07c3a5ea32
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/native_bridge_support/+/2844253 Change-Id: Ia1f24ed335df20ea305725f75eec9c69f48b3ce3 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--libbinder_ndk/Android.bp7
-rw-r--r--libbinder_ndk/proxy/libbinder_ndk_trampolines.cc50
-rw-r--r--libbinder_ndk/proxy/trampolines_arm64_to_x86_64-inl.h151
-rw-r--r--libbinder_ndk/proxy/trampolines_arm_to_x86-inl.h151
-rw-r--r--libbinder_ndk/proxy/trampolines_riscv64_to_x86_64-inl.h151
5 files changed, 510 insertions, 0 deletions
diff --git a/libbinder_ndk/Android.bp b/libbinder_ndk/Android.bp
index 9fc977d..87b44b7 100644
--- a/libbinder_ndk/Android.bp
+++ b/libbinder_ndk/Android.bp
@@ -39,3 +39,10 @@ cc_library {
"libutils",
],
}
+
+filegroup {
+ name: "native_bridge_proxy_libbinder_ndk_files",
+ srcs: [
+ "proxy/libbinder_ndk_trampolines.cc",
+ ],
+}
diff --git a/libbinder_ndk/proxy/libbinder_ndk_trampolines.cc b/libbinder_ndk/proxy/libbinder_ndk_trampolines.cc
new file mode 100644
index 0000000..0eb0eb9
--- /dev/null
+++ b/libbinder_ndk/proxy/libbinder_ndk_trampolines.cc
@@ -0,0 +1,50 @@
+/*
+* Copyright (C) 2023 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 <dlfcn.h>
+
+#include <android/binder_ibinder.h>
+
+#include "berberis/guest_abi/function_wrappers.h"
+#include "berberis/proxy_loader/proxy_library_builder.h"
+
+namespace berberis {
+
+namespace {
+
+#if defined(NATIVE_BRIDGE_GUEST_ARCH_ARM) && defined(__i386__)
+
+#include "trampolines_arm_to_x86-inl.h" // generated file NOLINT [build/include]
+
+#elif defined(NATIVE_BRIDGE_GUEST_ARCH_ARM64) && defined(__x86_64__)
+
+#include "trampolines_arm64_to_x86_64-inl.h" // generated file NOLINT [build/include]
+
+#elif defined(NATIVE_BRIDGE_GUEST_ARCH_RISCV64) && defined(__x86_64__)
+
+#include "trampolines_riscv64_to_x86_64-inl.h" // generated file NOLINT [build/include]
+
+#else
+
+#error "Unknown guest/host arch combination"
+
+#endif
+
+DEFINE_INIT_PROXY_LIBRARY("libbinder_ndk.so")
+
+} // namespace
+
+} // namespace berberis
diff --git a/libbinder_ndk/proxy/trampolines_arm64_to_x86_64-inl.h b/libbinder_ndk/proxy/trampolines_arm64_to_x86_64-inl.h
new file mode 100644
index 0000000..6e728ca
--- /dev/null
+++ b/libbinder_ndk/proxy/trampolines_arm64_to_x86_64-inl.h
@@ -0,0 +1,151 @@
+// clang-format off
+const KnownTrampoline kKnownTrampolines[] = {
+{"ABinderProcess_handlePolledCommands", GetTrampolineFunc<auto(void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_isThreadPoolStarted", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_joinThreadPool", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_setThreadPoolMaxThreadCount", GetTrampolineFunc<auto(uint32_t) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_setupPolling", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_startThreadPool", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_define", GetTrampolineFunc<auto(void*, auto(*)(void*) -> void*, auto(*)(void*) -> void, auto(*)(void*, uint32_t, void*, void*) -> int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_disableInterfaceTokenHeader", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_getDescriptor", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_setHandleShellCommand", GetTrampolineFunc<auto(void*, auto(*)(void*, int32_t, int32_t, int32_t, void*, uint32_t) -> int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_setOnDump", GetTrampolineFunc<auto(void*, auto(*)(void*, int32_t, void*, uint32_t) -> int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_new", GetTrampolineFunc<auto(auto(*)(void*) -> void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_setOnUnlinked", GetTrampolineFunc<auto(void*, auto(*)(void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_clone", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_lt", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_new", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_promote", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_associateClass", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_debugGetRefCount", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_decStrong", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_dump", GetTrampolineFunc<auto(void*, int32_t, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_forceDowngradeToSystemStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_forceDowngradeToVendorStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_fromJavaBinder", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingPid", GetTrampolineFunc<auto(void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingSid", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingUid", GetTrampolineFunc<auto(void) -> uint32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getClass", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getExtension", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getUserData", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_incStrong", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isAlive", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isHandlingTransaction", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isRemote", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_linkToDeath", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_lt", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markSystemStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markVendorStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markVintfStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_new", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_ping", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_prepareTransaction", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setExtension", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setInheritRt", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setMinSchedulerPolicy", GetTrampolineFunc<auto(void*, int32_t, int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setRequestingSid", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_toJavaBinder", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_transact", GetTrampolineFunc<auto(void*, uint32_t, void*, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_unlinkToDeath", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_appendFrom", GetTrampolineFunc<auto(void*, void*, int32_t, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_fromJavaParcel", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getAllowFds", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getDataPosition", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getDataSize", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_markSensitive", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_marshal", GetTrampolineFunc<auto(void*, void*, uint64_t, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readBool", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readBoolArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, uint64_t, uint8_t) -> void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readByte", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readByteArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readChar", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readCharArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readDouble", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readDoubleArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readFloat", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readFloatArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt32", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt32Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt64", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt64Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readParcelFileDescriptor", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readParcelableArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, void*, uint64_t) -> int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStatusHeader", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readString", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStringArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, uint64_t, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStrongBinder", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint32", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint32Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint64", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint64Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_reset", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_setDataPosition", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_unmarshal", GetTrampolineFunc<auto(void*, void*, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeBool", GetTrampolineFunc<auto(void*, uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeBoolArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, uint64_t) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeByte", GetTrampolineFunc<auto(void*, int8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeByteArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeChar", GetTrampolineFunc<auto(void*, uint16_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeCharArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeDouble", GetTrampolineFunc<auto(void*, double) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeDoubleArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeFloat", GetTrampolineFunc<auto(void*, float) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeFloatArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt32", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt32Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt64", GetTrampolineFunc<auto(void*, int64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt64Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeParcelFileDescriptor", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeParcelableArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, void*, uint64_t) -> int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStatusHeader", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeString", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStringArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, uint64_t, void*) -> void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStrongBinder", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint32", GetTrampolineFunc<auto(void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint32Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint64", GetTrampolineFunc<auto(void*, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint64Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_NotificationRegistration_delete", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"AServiceManager_addService", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_addServiceWithFlags", GetTrampolineFunc<auto(void*, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_checkService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_forEachDeclaredInstance", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_forceLazyServicesPersist", GetTrampolineFunc<auto(uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_getService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_getUpdatableApexName", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_isDeclared", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_isUpdatableViaApex", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_reRegister", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_registerForServiceNotifications", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"AServiceManager_registerLazyService", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_setActiveServicesCallback", GetTrampolineFunc<auto(auto(*)(uint8_t, void*) -> uint8_t, void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_tryUnregister", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_waitForService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_deleteDescription", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromExceptionCode", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromExceptionCodeWithMessage", GetTrampolineFunc<auto(int32_t, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromServiceSpecificError", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromServiceSpecificErrorWithMessage", GetTrampolineFunc<auto(int32_t, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromStatus", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getDescription", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getExceptionCode", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getMessage", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getServiceSpecificError", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getStatus", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_isOk", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_newOk", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z25AIBinder_toPlatformBinderP8AIBinder", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"_Z26AParcel_viewPlatformParcelP7AParcel", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z26AParcel_viewPlatformParcelPK7AParcel", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z27AIBinder_fromPlatformBinderRKN7android2spINS_7IBinderEEE", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+}; // kKnownTrampolines
+const KnownVariable kKnownVariables[] = {
+}; // kKnownVariables
+// clang-format on
diff --git a/libbinder_ndk/proxy/trampolines_arm_to_x86-inl.h b/libbinder_ndk/proxy/trampolines_arm_to_x86-inl.h
new file mode 100644
index 0000000..1d99397
--- /dev/null
+++ b/libbinder_ndk/proxy/trampolines_arm_to_x86-inl.h
@@ -0,0 +1,151 @@
+// clang-format off
+const KnownTrampoline kKnownTrampolines[] = {
+{"ABinderProcess_handlePolledCommands", GetTrampolineFunc<auto(void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_isThreadPoolStarted", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_joinThreadPool", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_setThreadPoolMaxThreadCount", GetTrampolineFunc<auto(uint32_t) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_setupPolling", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_startThreadPool", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_define", GetTrampolineFunc<auto(void*, auto(*)(void*) -> void*, auto(*)(void*) -> void, auto(*)(void*, uint32_t, void*, void*) -> int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_disableInterfaceTokenHeader", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_getDescriptor", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_setHandleShellCommand", GetTrampolineFunc<auto(void*, auto(*)(void*, int32_t, int32_t, int32_t, void*, uint32_t) -> int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_setOnDump", GetTrampolineFunc<auto(void*, auto(*)(void*, int32_t, void*, uint32_t) -> int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_new", GetTrampolineFunc<auto(auto(*)(void*) -> void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_setOnUnlinked", GetTrampolineFunc<auto(void*, auto(*)(void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_clone", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_lt", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_new", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_promote", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_associateClass", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_debugGetRefCount", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_decStrong", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_dump", GetTrampolineFunc<auto(void*, int32_t, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_forceDowngradeToSystemStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_forceDowngradeToVendorStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_fromJavaBinder", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingPid", GetTrampolineFunc<auto(void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingSid", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingUid", GetTrampolineFunc<auto(void) -> uint32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getClass", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getExtension", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getUserData", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_incStrong", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isAlive", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isHandlingTransaction", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isRemote", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_linkToDeath", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_lt", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markSystemStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markVendorStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markVintfStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_new", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_ping", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_prepareTransaction", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setExtension", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setInheritRt", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setMinSchedulerPolicy", GetTrampolineFunc<auto(void*, int32_t, int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setRequestingSid", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_toJavaBinder", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_transact", GetTrampolineFunc<auto(void*, uint32_t, void*, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_unlinkToDeath", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_appendFrom", GetTrampolineFunc<auto(void*, void*, int32_t, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_fromJavaParcel", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getAllowFds", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getDataPosition", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getDataSize", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_markSensitive", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_marshal", GetTrampolineFunc<auto(void*, void*, uint32_t, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readBool", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readBoolArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, uint32_t, uint8_t) -> void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readByte", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readByteArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readChar", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readCharArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readDouble", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readDoubleArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readFloat", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readFloatArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt32", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt32Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt64", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt64Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readParcelFileDescriptor", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readParcelableArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, void*, uint32_t) -> int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStatusHeader", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readString", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStringArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, uint32_t, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStrongBinder", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint32", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint32Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint64", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint64Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_reset", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_setDataPosition", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_unmarshal", GetTrampolineFunc<auto(void*, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeBool", GetTrampolineFunc<auto(void*, uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeBoolArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, uint32_t) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeByte", GetTrampolineFunc<auto(void*, int8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeByteArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeChar", GetTrampolineFunc<auto(void*, uint16_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeCharArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeDouble", GetTrampolineFunc<auto(void*, double) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeDoubleArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeFloat", GetTrampolineFunc<auto(void*, float) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeFloatArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt32", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt32Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt64", GetTrampolineFunc<auto(void*, int64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt64Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeParcelFileDescriptor", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeParcelableArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, void*, uint32_t) -> int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStatusHeader", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeString", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStringArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, uint32_t, void*) -> void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStrongBinder", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint32", GetTrampolineFunc<auto(void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint32Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint64", GetTrampolineFunc<auto(void*, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint64Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_NotificationRegistration_delete", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"AServiceManager_addService", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_addServiceWithFlags", GetTrampolineFunc<auto(void*, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_checkService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_forEachDeclaredInstance", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_forceLazyServicesPersist", GetTrampolineFunc<auto(uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_getService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_getUpdatableApexName", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_isDeclared", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_isUpdatableViaApex", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_reRegister", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_registerForServiceNotifications", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"AServiceManager_registerLazyService", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_setActiveServicesCallback", GetTrampolineFunc<auto(auto(*)(uint8_t, void*) -> uint8_t, void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_tryUnregister", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_waitForService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_deleteDescription", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromExceptionCode", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromExceptionCodeWithMessage", GetTrampolineFunc<auto(int32_t, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromServiceSpecificError", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromServiceSpecificErrorWithMessage", GetTrampolineFunc<auto(int32_t, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromStatus", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getDescription", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getExceptionCode", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getMessage", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getServiceSpecificError", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getStatus", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_isOk", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_newOk", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z25AIBinder_toPlatformBinderP8AIBinder", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"_Z26AParcel_viewPlatformParcelP7AParcel", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z26AParcel_viewPlatformParcelPK7AParcel", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z27AIBinder_fromPlatformBinderRKN7android2spINS_7IBinderEEE", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+}; // kKnownTrampolines
+const KnownVariable kKnownVariables[] = {
+}; // kKnownVariables
+// clang-format on
diff --git a/libbinder_ndk/proxy/trampolines_riscv64_to_x86_64-inl.h b/libbinder_ndk/proxy/trampolines_riscv64_to_x86_64-inl.h
new file mode 100644
index 0000000..6e728ca
--- /dev/null
+++ b/libbinder_ndk/proxy/trampolines_riscv64_to_x86_64-inl.h
@@ -0,0 +1,151 @@
+// clang-format off
+const KnownTrampoline kKnownTrampolines[] = {
+{"ABinderProcess_handlePolledCommands", GetTrampolineFunc<auto(void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_isThreadPoolStarted", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_joinThreadPool", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_setThreadPoolMaxThreadCount", GetTrampolineFunc<auto(uint32_t) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_setupPolling", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"ABinderProcess_startThreadPool", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_define", GetTrampolineFunc<auto(void*, auto(*)(void*) -> void*, auto(*)(void*) -> void, auto(*)(void*, uint32_t, void*, void*) -> int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_disableInterfaceTokenHeader", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_getDescriptor", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_setHandleShellCommand", GetTrampolineFunc<auto(void*, auto(*)(void*, int32_t, int32_t, int32_t, void*, uint32_t) -> int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Class_setOnDump", GetTrampolineFunc<auto(void*, auto(*)(void*, int32_t, void*, uint32_t) -> int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_new", GetTrampolineFunc<auto(auto(*)(void*) -> void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_DeathRecipient_setOnUnlinked", GetTrampolineFunc<auto(void*, auto(*)(void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_clone", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_lt", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_new", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_Weak_promote", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_associateClass", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_debugGetRefCount", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_decStrong", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_dump", GetTrampolineFunc<auto(void*, int32_t, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_forceDowngradeToSystemStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_forceDowngradeToVendorStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_fromJavaBinder", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingPid", GetTrampolineFunc<auto(void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingSid", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getCallingUid", GetTrampolineFunc<auto(void) -> uint32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getClass", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getExtension", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_getUserData", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_incStrong", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isAlive", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isHandlingTransaction", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_isRemote", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_linkToDeath", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_lt", GetTrampolineFunc<auto(void*, void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markSystemStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markVendorStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_markVintfStability", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_new", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_ping", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_prepareTransaction", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setExtension", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setInheritRt", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setMinSchedulerPolicy", GetTrampolineFunc<auto(void*, int32_t, int32_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_setRequestingSid", GetTrampolineFunc<auto(void*, uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_toJavaBinder", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_transact", GetTrampolineFunc<auto(void*, uint32_t, void*, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AIBinder_unlinkToDeath", GetTrampolineFunc<auto(void*, void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_appendFrom", GetTrampolineFunc<auto(void*, void*, int32_t, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_create", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_fromJavaParcel", GetTrampolineFunc<auto(void*, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getAllowFds", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getDataPosition", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_getDataSize", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_markSensitive", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_marshal", GetTrampolineFunc<auto(void*, void*, uint64_t, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readBool", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readBoolArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, uint64_t, uint8_t) -> void) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readByte", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readByteArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readChar", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readCharArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readDouble", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readDoubleArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readFloat", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readFloatArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt32", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt32Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt64", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readInt64Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readParcelFileDescriptor", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readParcelableArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, void*, uint64_t) -> int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStatusHeader", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readString", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStringArray", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t) -> uint8_t, auto(*)(void*, uint64_t, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readStrongBinder", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint32", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint32Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint64", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_readUint64Array", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, int32_t, void*) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_reset", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_setDataPosition", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_unmarshal", GetTrampolineFunc<auto(void*, void*, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeBool", GetTrampolineFunc<auto(void*, uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeBoolArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, uint64_t) -> uint8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeByte", GetTrampolineFunc<auto(void*, int8_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeByteArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeChar", GetTrampolineFunc<auto(void*, uint16_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeCharArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeDouble", GetTrampolineFunc<auto(void*, double) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeDoubleArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeFloat", GetTrampolineFunc<auto(void*, float) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeFloatArray", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt32", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt32Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt64", GetTrampolineFunc<auto(void*, int64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeInt64Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeParcelFileDescriptor", GetTrampolineFunc<auto(void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeParcelableArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, void*, uint64_t) -> int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStatusHeader", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeString", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStringArray", GetTrampolineFunc<auto(void*, void*, int32_t, auto(*)(void*, uint64_t, void*) -> void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeStrongBinder", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint32", GetTrampolineFunc<auto(void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint32Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint64", GetTrampolineFunc<auto(void*, uint64_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AParcel_writeUint64Array", GetTrampolineFunc<auto(void*, void*, int32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_NotificationRegistration_delete", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"AServiceManager_addService", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_addServiceWithFlags", GetTrampolineFunc<auto(void*, void*, uint32_t) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_checkService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_forEachDeclaredInstance", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_forceLazyServicesPersist", GetTrampolineFunc<auto(uint8_t) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_getService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_getUpdatableApexName", GetTrampolineFunc<auto(void*, void*, auto(*)(void*, void*) -> void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_isDeclared", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_isUpdatableViaApex", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_reRegister", GetTrampolineFunc<auto(void) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_registerForServiceNotifications", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"AServiceManager_registerLazyService", GetTrampolineFunc<auto(void*, void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_setActiveServicesCallback", GetTrampolineFunc<auto(auto(*)(uint8_t, void*) -> uint8_t, void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_tryUnregister", GetTrampolineFunc<auto(void) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AServiceManager_waitForService", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_delete", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_deleteDescription", GetTrampolineFunc<auto(void*) -> void>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromExceptionCode", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromExceptionCodeWithMessage", GetTrampolineFunc<auto(int32_t, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromServiceSpecificError", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromServiceSpecificErrorWithMessage", GetTrampolineFunc<auto(int32_t, void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_fromStatus", GetTrampolineFunc<auto(int32_t) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getDescription", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getExceptionCode", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getMessage", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getServiceSpecificError", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_getStatus", GetTrampolineFunc<auto(void*) -> int32_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_isOk", GetTrampolineFunc<auto(void*) -> uint8_t>(), reinterpret_cast<void*>(NULL)},
+{"AStatus_newOk", GetTrampolineFunc<auto(void) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z25AIBinder_toPlatformBinderP8AIBinder", DoBadTrampoline, reinterpret_cast<void*>(DoBadThunk)},
+{"_Z26AParcel_viewPlatformParcelP7AParcel", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z26AParcel_viewPlatformParcelPK7AParcel", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+{"_Z27AIBinder_fromPlatformBinderRKN7android2spINS_7IBinderEEE", GetTrampolineFunc<auto(void*) -> void*>(), reinterpret_cast<void*>(NULL)},
+}; // kKnownTrampolines
+const KnownVariable kKnownVariables[] = {
+}; // kKnownVariables
+// clang-format on