Merge "LLVMLongName should preserve the return type." into ics-mr1-plus-art
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 6fac6f8..07a9816 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -543,9 +543,9 @@
struct ClassLoaderOffsets : public CheckOffsets<ClassLoader> {
ClassLoaderOffsets() : CheckOffsets<ClassLoader>(false, "Ljava/lang/ClassLoader;") {
// alphabetical references
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(ClassLoader, packages_), "packages"));
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(ClassLoader, parent_), "parent"));
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(ClassLoader, proxyCache_), "proxyCache"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(ClassLoader, packages_), "packages"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(ClassLoader, parent_), "parent"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(ClassLoader, proxyCache_), "proxyCache"));
};
};
@@ -553,8 +553,9 @@
BaseDexClassLoaderOffsets()
: CheckOffsets<BaseDexClassLoader>(false, "Ldalvik/system/BaseDexClassLoader;") {
// alphabetical references
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(BaseDexClassLoader, original_path_), "originalPath"));
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(BaseDexClassLoader, path_list_), "pathList"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(BaseDexClassLoader, original_library_path_), "originalLibraryPath"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(BaseDexClassLoader, original_path_), "originalPath"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(BaseDexClassLoader, path_list_), "pathList"));
};
};
diff --git a/src/class_loader.h b/src/class_loader.h
index 8d1c696..0e1148d 100644
--- a/src/class_loader.h
+++ b/src/class_loader.h
@@ -40,6 +40,7 @@
class MANAGED BaseDexClassLoader : public ClassLoader {
private:
// Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
+ String* original_library_path_;
String* original_path_;
Object* path_list_;
diff --git a/src/oat/runtime/arm/runtime_support_arm.S b/src/oat/runtime/arm/runtime_support_arm.S
index 045feac..6163b3e 100644
--- a/src/oat/runtime/arm/runtime_support_arm.S
+++ b/src/oat/runtime/arm/runtime_support_arm.S
@@ -504,13 +504,16 @@
DELIVER_PENDING_EXCEPTION
.global art_set64_static_from_code
- .extern artSet32StaticFromCode
+ .extern artSet64StaticFromCode
/*
* Called by managed code to resolve a static field and store a 64-bit primitive value.
+ * On entry r0 holds field index, r1:r2 hold new_val
*/
ALIGN_FUNCTION_ENTRY
art_set64_static_from_code:
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
+ mov r3, r2 @ pass one half of wide argument
+ mov r2, r1 @ pass other half of wide argument
ldr r1, [sp, #32] @ pass referrer
mov r12, sp @ save SP
sub sp, #8 @ grow frame for alignment with stack args
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++) {