diff options
-rw-r--r-- | runtime/interpreter/unstarted_runtime.cc | 19 | ||||
-rw-r--r-- | runtime/interpreter/unstarted_runtime_list.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/runtime/interpreter/unstarted_runtime.cc b/runtime/interpreter/unstarted_runtime.cc index eaea01d2f0..30733b57b9 100644 --- a/runtime/interpreter/unstarted_runtime.cc +++ b/runtime/interpreter/unstarted_runtime.cc @@ -444,6 +444,12 @@ void UnstartedRuntime::UnstartedSystemArraycopyInt( UnstartedRuntime::UnstartedSystemArraycopy(self, shadow_frame, result, arg_offset); } +void UnstartedRuntime::UnstartedSystemGetSecurityManager( + Thread* self ATTRIBUTE_UNUSED, ShadowFrame* shadow_frame ATTRIBUTE_UNUSED, + JValue* result, size_t arg_offset ATTRIBUTE_UNUSED) { + result->SetL(nullptr); +} + void UnstartedRuntime::UnstartedThreadLocalGet( Thread* self, ShadowFrame* shadow_frame, JValue* result, size_t arg_offset ATTRIBUTE_UNUSED) { std::string caller(PrettyMethod(shadow_frame->GetLink()->GetMethod())); @@ -1234,6 +1240,19 @@ void UnstartedRuntime::UnstartedJNIUnsafeCompareAndSwapInt( result->SetZ(success ? JNI_TRUE : JNI_FALSE); } +void UnstartedRuntime::UnstartedJNIUnsafeGetIntVolatile( + Thread* self, ArtMethod* method ATTRIBUTE_UNUSED, mirror::Object* receiver ATTRIBUTE_UNUSED, + uint32_t* args, JValue* result) { + mirror::Object* obj = reinterpret_cast<mirror::Object*>(args[0]); + if (obj == nullptr) { + AbortTransactionOrFail(self, "Cannot access null object, retry at runtime."); + return; + } + + jlong offset = (static_cast<uint64_t>(args[2]) << 32) | args[1]; + result->SetI(obj->GetField32Volatile(MemberOffset(offset))); +} + void UnstartedRuntime::UnstartedJNIUnsafePutObject( Thread* self ATTRIBUTE_UNUSED, ArtMethod* method ATTRIBUTE_UNUSED, mirror::Object* receiver ATTRIBUTE_UNUSED, uint32_t* args, JValue* result ATTRIBUTE_UNUSED) { diff --git a/runtime/interpreter/unstarted_runtime_list.h b/runtime/interpreter/unstarted_runtime_list.h index 29f2197a03..d669b757d2 100644 --- a/runtime/interpreter/unstarted_runtime_list.h +++ b/runtime/interpreter/unstarted_runtime_list.h @@ -31,6 +31,7 @@ V(SystemArraycopy, "void java.lang.System.arraycopy(java.lang.Object, int, java.lang.Object, int, int)") \ V(SystemArraycopyChar, "void java.lang.System.arraycopy(char[], int, char[], int, int)") \ V(SystemArraycopyInt, "void java.lang.System.arraycopy(int[], int, int[], int, int)") \ + V(SystemGetSecurityManager, "java.lang.SecurityManager java.lang.System.getSecurityManager()") \ V(ThreadLocalGet, "java.lang.Object java.lang.ThreadLocal.get()") \ V(MathCeil, "double java.lang.Math.ceil(double)") \ V(ObjectHashCode, "int java.lang.Object.hashCode()") \ @@ -79,6 +80,7 @@ V(SystemIdentityHashCode, "int java.lang.System.identityHashCode(java.lang.Object)") \ V(ByteOrderIsLittleEndian, "boolean java.nio.ByteOrder.isLittleEndian()") \ V(UnsafeCompareAndSwapInt, "boolean sun.misc.Unsafe.compareAndSwapInt(java.lang.Object, long, int, int)") \ + V(UnsafeGetIntVolatile, "int sun.misc.Unsafe.getIntVolatile(java.lang.Object, long)") \ V(UnsafePutObject, "void sun.misc.Unsafe.putObject(java.lang.Object, long, java.lang.Object)") \ V(UnsafeGetArrayBaseOffsetForComponentType, "int sun.misc.Unsafe.getArrayBaseOffsetForComponentType(java.lang.Class)") \ V(UnsafeGetArrayIndexScaleForComponentType, "int sun.misc.Unsafe.getArrayIndexScaleForComponentType(java.lang.Class)") |