Move finalizer registration into managed code
Also move Object.getClass into managed code.
Change-Id: If32674ac496116aaa82c461d8e6196e27fa7b591
diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc
index eb2c06b..cbf5867 100644
--- a/src/compiler/codegen/arm/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc
@@ -780,22 +780,6 @@
oatLockCallTemps(cUnit);
uint32_t dexMethodIdx = mir->dalvikInsn.vB;
- // Is this the special "Ljava/lang/Object;.<init>:()V" case?
- if (direct && !range) {
- Method* target = cUnit->dex_cache->GetResolvedMethods()->Get(dexMethodIdx);
- if (target) {
- if (PrettyMethod(target) == "java.lang.Object.<init>()V") {
- RegLocation rlArg = oatGetSrc(cUnit, mir, 0);
- loadValueDirectFixed(cUnit, rlArg, r0);
- loadWordDisp(cUnit, rSELF,
- OFFSETOF_MEMBER(Thread, pObjectInit), rLR);
- genNullCheck(cUnit, oatSSASrc(mir,0), r0, mir);
- opReg(cUnit, kOpBlx, rLR);
- oatClobberCalleeSave(cUnit);
- return;
- }
- }
- }
if (range) {
callState = genDalvikArgsRange(cUnit, mir, dInsn, callState, pNullCk,
diff --git a/src/java_lang_Object.cc b/src/java_lang_Object.cc
index 30d8223..7c72604 100644
--- a/src/java_lang_Object.cc
+++ b/src/java_lang_Object.cc
@@ -23,12 +23,6 @@
namespace {
-jclass Object_getClass(JNIEnv* env, jobject javaThis) {
- // TODO: we can just share the Object::class_ field with Java and use field access instead.
- Object* o = Decode<Object*>(env, javaThis);
- return AddLocalReference<jclass>(env, o->GetClass());
-}
-
jobject Object_internalClone(JNIEnv* env, jobject javaThis) {
ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
Object* o = Decode<Object*>(env, javaThis);
@@ -51,7 +45,6 @@
}
JNINativeMethod gMethods[] = {
- NATIVE_METHOD(Object, getClass, "()Ljava/lang/Class;"),
NATIVE_METHOD(Object, internalClone, "(Ljava/lang/Cloneable;)Ljava/lang/Object;"),
NATIVE_METHOD(Object, notify, "()V"),
NATIVE_METHOD(Object, notifyAll, "()V"),
diff --git a/src/jni_internal_test.cc b/src/jni_internal_test.cc
index d492deb..ee801be 100644
--- a/src/jni_internal_test.cc
+++ b/src/jni_internal_test.cc
@@ -313,7 +313,7 @@
// Check that registering native methods is successful
{
- JNINativeMethod methods[] = {{"getClass", "()Ljava/lang/Class;", reinterpret_cast<void*>(BogusMethod)}};
+ JNINativeMethod methods[] = {{"notify", "()V", reinterpret_cast<void*>(BogusMethod)}};
env_->RegisterNatives(jlobject, methods, 1);
}
EXPECT_FALSE(env_->ExceptionCheck());
diff --git a/src/runtime_support.cc b/src/runtime_support.cc
index 1ac92fd..14b14e0 100644
--- a/src/runtime_support.cc
+++ b/src/runtime_support.cc
@@ -119,20 +119,6 @@
LOG(INFO) << "Info: " << info;
}
-extern "C" uint32_t artObjectInitFromCode(Object* o, Thread* self, Method** sp) {
- FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
- Class* c = o->GetClass();
- if (UNLIKELY(c->IsFinalizable())) {
- Heap::AddFinalizerReference(self, o);
- }
- /*
- * NOTE: once debugger/profiler support is added, we'll need to check
- * here and branch to actual compiled object.<init> to handle any
- * breakpoint/logging activities if either is active.
- */
- return self->IsExceptionPending() ? -1 : 0;
-}
-
// Return value helper for jobject return types
extern Object* DecodeJObjectInThread(Thread* thread, jobject obj) {
if (thread->IsExceptionPending()) {
diff --git a/src/runtime_support.h b/src/runtime_support.h
index c8db48c..954c362 100644
--- a/src/runtime_support.h
+++ b/src/runtime_support.h
@@ -74,7 +74,6 @@
extern "C" void art_invoke_super_trampoline_with_access_check(uint32_t, void*);
extern "C" void art_invoke_virtual_trampoline_with_access_check(uint32_t, void*);
extern "C" void art_lock_object_from_code(void*);
- extern "C" void art_object_init_from_code(void*);
extern "C" void art_test_suspend();
extern "C" void art_throw_array_bounds_from_code(int32_t index, int32_t limit);
extern "C" void art_throw_div_zero_from_code();
diff --git a/src/runtime_support_arm.S b/src/runtime_support_arm.S
index 8113b5b..7456853 100644
--- a/src/runtime_support_arm.S
+++ b/src/runtime_support_arm.S
@@ -609,23 +609,6 @@
bxne lr @ return on success
DELIVER_PENDING_EXCEPTION
- .global art_object_init_from_code
- .extern artObjectInitFromCode
- /*
- * Entry from managed code to perform Object.<init> string. R0 holds the object to initialize.
- * On success, 0 is returned. Otherwise there is a pending exception to deliver.
- */
-art_object_init_from_code:
- SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
- mov r1, r9 @ pass Thread::Current
- mov r2, sp @ pass SP
- @ artObjectInitFromCode(Object* o, Thread*, SP)
- bl artObjectInitFromCode
- RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
- cmp r0, #0 @ success if result is zero
- bxeq lr @ return on success
- DELIVER_PENDING_EXCEPTION
-
.global art_alloc_object_from_code
.extern artAllocObjectFromCode
/*
diff --git a/src/thread.cc b/src/thread.cc
index 8592bd3..67702cd 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -120,7 +120,6 @@
pInvokeSuperTrampolineWithAccessCheck = art_invoke_super_trampoline_with_access_check;
pInvokeVirtualTrampolineWithAccessCheck = art_invoke_virtual_trampoline_with_access_check;
pLockObjectFromCode = art_lock_object_from_code;
- pObjectInit = art_object_init_from_code;
pResolveStringFromCode = art_resolve_string_from_code;
pSet32Instance = art_set32_instance_from_code;
pSet64Instance = art_set64_instance_from_code;
diff --git a/src/thread.h b/src/thread.h
index b21af96..4bfc5cf 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -624,7 +624,6 @@
void* (*pInitializeTypeFromCode)(uint32_t, void*);
void* (*pInitializeTypeAndVerifyAccessFromCode)(uint32_t, void*);
void (*pLockObjectFromCode)(void*);
- void (*pObjectInit)(void*);
void* (*pResolveMethodFromCode)(void*, uint32_t, bool);
void* (*pResolveStringFromCode)(void*, uint32_t);
int (*pSet32Instance)(uint32_t, void*, int32_t); // field_idx, obj, src