Add thread entry point offsets to oatdump
Change-Id: I77f66228c31ba9fe84e372ca29c0c63eeaa1bbda
diff --git a/src/oatdump.cc b/src/oatdump.cc
index 52763c6..2f0197c 100644
--- a/src/oatdump.cc
+++ b/src/oatdump.cc
@@ -136,6 +136,113 @@
os << "END:\n";
os << reinterpret_cast<const void*>(oat_file_.End()) << "\n\n";
+ os << "THREAD ENTRY POINTS:\n";
+ uintptr_t start_offset = OFFSETOF_MEMBER(Thread, entrypoints_);
+ uintptr_t last_offset = start_offset - sizeof(uintptr_t);
+
+#define DUMP_ENTRY_POINT(x) { \
+ uintptr_t offset = ENTRYPOINT_OFFSET(x); \
+ CHECK_EQ(last_offset + sizeof(uintptr_t), offset); \
+ os << #x << ": " << offset << "\n"; \
+ last_offset = offset; \
+ }
+
+ DUMP_ENTRY_POINT(pAllocArrayFromCode);
+ DUMP_ENTRY_POINT(pAllocArrayFromCodeWithAccessCheck);
+ DUMP_ENTRY_POINT(pAllocObjectFromCode);
+ DUMP_ENTRY_POINT(pAllocObjectFromCodeWithAccessCheck);
+ DUMP_ENTRY_POINT(pCheckAndAllocArrayFromCode);
+ DUMP_ENTRY_POINT(pCheckAndAllocArrayFromCodeWithAccessCheck);
+ DUMP_ENTRY_POINT(pInstanceofNonTrivialFromCode);
+ DUMP_ENTRY_POINT(pCanPutArrayElementFromCode);
+ DUMP_ENTRY_POINT(pCheckCastFromCode);
+ DUMP_ENTRY_POINT(pDebugMe);
+ DUMP_ENTRY_POINT(pUpdateDebuggerFromCode);
+ DUMP_ENTRY_POINT(pInitializeStaticStorage);
+ DUMP_ENTRY_POINT(pInitializeTypeAndVerifyAccessFromCode);
+ DUMP_ENTRY_POINT(pInitializeTypeFromCode);
+ DUMP_ENTRY_POINT(pResolveStringFromCode);
+ DUMP_ENTRY_POINT(pSet32Instance);
+ DUMP_ENTRY_POINT(pSet32Static);
+ DUMP_ENTRY_POINT(pSet64Instance);
+ DUMP_ENTRY_POINT(pSet64Static);
+ DUMP_ENTRY_POINT(pSetObjInstance);
+ DUMP_ENTRY_POINT(pSetObjStatic);
+ DUMP_ENTRY_POINT(pGet32Instance);
+ DUMP_ENTRY_POINT(pGet32Static);
+ DUMP_ENTRY_POINT(pGet64Instance);
+ DUMP_ENTRY_POINT(pGet64Static);
+ DUMP_ENTRY_POINT(pGetObjInstance);
+ DUMP_ENTRY_POINT(pGetObjStatic);
+ DUMP_ENTRY_POINT(pHandleFillArrayDataFromCode);
+ DUMP_ENTRY_POINT(pDecodeJObjectInThread);
+ DUMP_ENTRY_POINT(pFindNativeMethod);
+ DUMP_ENTRY_POINT(pLockObjectFromCode);
+ DUMP_ENTRY_POINT(pUnlockObjectFromCode);
+ DUMP_ENTRY_POINT(pCmpgDouble);
+ DUMP_ENTRY_POINT(pCmpgFloat);
+ DUMP_ENTRY_POINT(pCmplDouble);
+ DUMP_ENTRY_POINT(pCmplFloat);
+ DUMP_ENTRY_POINT(pDadd);
+ DUMP_ENTRY_POINT(pDdiv);
+ DUMP_ENTRY_POINT(pDmul);
+ DUMP_ENTRY_POINT(pDsub);
+ DUMP_ENTRY_POINT(pF2d);
+ DUMP_ENTRY_POINT(pFmod);
+ DUMP_ENTRY_POINT(pI2d);
+ DUMP_ENTRY_POINT(pL2d);
+ DUMP_ENTRY_POINT(pD2f);
+ DUMP_ENTRY_POINT(pFadd);
+ DUMP_ENTRY_POINT(pFdiv);
+ DUMP_ENTRY_POINT(pFmodf);
+ DUMP_ENTRY_POINT(pFmul);
+ DUMP_ENTRY_POINT(pFsub);
+ DUMP_ENTRY_POINT(pI2f);
+ DUMP_ENTRY_POINT(pL2f);
+ DUMP_ENTRY_POINT(pD2iz);
+ DUMP_ENTRY_POINT(pF2iz);
+ DUMP_ENTRY_POINT(pIdiv);
+ DUMP_ENTRY_POINT(pIdivmod);
+ DUMP_ENTRY_POINT(pD2l);
+ DUMP_ENTRY_POINT(pF2l);
+ DUMP_ENTRY_POINT(pLadd);
+ DUMP_ENTRY_POINT(pLand);
+ DUMP_ENTRY_POINT(pLdivmod);
+ DUMP_ENTRY_POINT(pLmul);
+ DUMP_ENTRY_POINT(pLor);
+ DUMP_ENTRY_POINT(pLsub);
+ DUMP_ENTRY_POINT(pLxor);
+ DUMP_ENTRY_POINT(pShlLong);
+ DUMP_ENTRY_POINT(pShrLong);
+ DUMP_ENTRY_POINT(pUshrLong);
+ DUMP_ENTRY_POINT(pIndexOf);
+ DUMP_ENTRY_POINT(pMemcmp16);
+ DUMP_ENTRY_POINT(pStringCompareTo);
+ DUMP_ENTRY_POINT(pMemcpy);
+ DUMP_ENTRY_POINT(pFindInterfaceMethodInCache);
+ DUMP_ENTRY_POINT(pUnresolvedDirectMethodTrampolineFromCode);
+ DUMP_ENTRY_POINT(pInvokeDirectTrampolineWithAccessCheck);
+ DUMP_ENTRY_POINT(pInvokeInterfaceTrampoline);
+ DUMP_ENTRY_POINT(pInvokeInterfaceTrampolineWithAccessCheck);
+ DUMP_ENTRY_POINT(pInvokeStaticTrampolineWithAccessCheck);
+ DUMP_ENTRY_POINT(pInvokeSuperTrampolineWithAccessCheck);
+ DUMP_ENTRY_POINT(pInvokeVirtualTrampolineWithAccessCheck);
+ DUMP_ENTRY_POINT(pCheckSuspendFromCode);
+ DUMP_ENTRY_POINT(pTestSuspendFromCode);
+ DUMP_ENTRY_POINT(pDeliverException);
+ DUMP_ENTRY_POINT(pThrowAbstractMethodErrorFromCode);
+ DUMP_ENTRY_POINT(pThrowArrayBoundsFromCode);
+ DUMP_ENTRY_POINT(pThrowDivZeroFromCode);
+ DUMP_ENTRY_POINT(pThrowNoSuchMethodFromCode);
+ DUMP_ENTRY_POINT(pThrowNullPointerFromCode);
+ DUMP_ENTRY_POINT(pThrowStackOverflowFromCode);
+ DUMP_ENTRY_POINT(pThrowVerificationErrorFromCode);
+
+#undef DUMP_ENTRY_POINT
+
+ CHECK_EQ(start_offset + sizeof(EntryPoints), last_offset + sizeof(uintptr_t));
+ os << "\n";
+
os << std::flush;
for (size_t i = 0; i < oat_dex_files_.size(); i++) {