[vmkit-commits] [vmkit] r142969 - in /vmkit/trunk/lib/J3/VMCore: Jni.cpp JniClasspath.inc JniOpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Tue Oct 25 13:43:58 PDT 2011
Author: wdietz2
Date: Tue Oct 25 15:43:58 2011
New Revision: 142969
URL: http://llvm.org/viewvc/llvm-project?rev=142969&view=rev
Log:
Jni: Refactor implementation-specific code to separate files.
Added:
vmkit/trunk/lib/J3/VMCore/JniClasspath.inc
vmkit/trunk/lib/J3/VMCore/JniOpenJDK.inc
Modified:
vmkit/trunk/lib/J3/VMCore/Jni.cpp
Modified: vmkit/trunk/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jni.cpp?rev=142969&r1=142968&r2=142969&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jni.cpp Tue Oct 25 15:43:58 2011
@@ -4034,70 +4034,6 @@
}
-jobject NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity) {
-
- BEGIN_JNI_EXCEPTION
-
- JavaObject* res = 0;
- JavaObject* p = 0;
- llvm_gcroot(res, 0);
- llvm_gcroot(p, 0);
-
- JavaThread* th = JavaThread::get();
- Jnjvm* myvm = th->getJVM();
- UserClass* BB = myvm->upcalls->newDirectByteBuffer;
-
- res = BB->doNew(myvm);
-
-#if ARCH_32
- UserClass* PP = myvm->upcalls->newPointer32;
- p = PP->doNew(myvm);
- myvm->upcalls->dataPointer32->setInstanceInt32Field(p, (uint32)address);
-#elif ARCH_64
- UserClass* PP = myvm->upcalls->newPointer64;
- p = PP->doNew(myvm);
- myvm->upcalls->dataPointer64->setInstanceLongField(p, (jlong)address);
-#endif
-
- myvm->upcalls->InitDirectByteBuffer->invokeIntSpecial(myvm, BB, res, 0, &p,
- (uint32)capacity,
- (uint32)capacity, 0);
-
- jobject ret = (jobject)th->pushJNIRef(res);
- RETURN_FROM_JNI(ret);
-
- END_JNI_EXCEPTION
-
- RETURN_FROM_JNI(0);
-}
-
-
-void *GetDirectBufferAddress(JNIEnv *env, jobject _buf) {
-
- BEGIN_JNI_EXCEPTION
-
- // Local object references.
- JavaObject* buf = *(JavaObject**)_buf;
- JavaObject* address = 0;
- llvm_gcroot(buf, 0);
- llvm_gcroot(address, 0);
-
- Jnjvm* vm = myVM(env);
- address = vm->upcalls->bufferAddress->getInstanceObjectField(buf);
- if (address != 0) {
-#if (__WORDSIZE == 32)
- int res = vm->upcalls->dataPointer32->getInstanceInt32Field(address);
-#else
- jlong res = vm->upcalls->dataPointer64->getInstanceLongField(address);
-#endif
- RETURN_FROM_JNI((void*)res);
- } else {
- RETURN_FROM_JNI(0);
- }
-
- END_JNI_EXCEPTION
- RETURN_FROM_JNI(0);
-}
jlong GetDirectBufferCapacity(JNIEnv* env, jobject buf) {
@@ -4164,6 +4100,12 @@
return 0;
}
+// Pull in implementation-specific JNI methods
+#ifdef USE_OPENJDK
+#include "JniOpenJDK.inc"
+#else
+#include "JniClasspath.inc"
+#endif
const struct JNIInvokeInterface_ JNI_JavaVMTable = {
NULL,
Added: vmkit/trunk/lib/J3/VMCore/JniClasspath.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JniClasspath.inc?rev=142969&view=auto
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JniClasspath.inc (added)
+++ vmkit/trunk/lib/J3/VMCore/JniClasspath.inc Tue Oct 25 15:43:58 2011
@@ -0,0 +1,65 @@
+// GNUClasspath-specific JNI implementation
+
+jobject NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity) {
+
+ BEGIN_JNI_EXCEPTION
+
+ JavaObject* res = 0;
+ JavaObject* p = 0;
+ llvm_gcroot(res, 0);
+ llvm_gcroot(p, 0);
+
+ JavaThread* th = JavaThread::get();
+ Jnjvm* myvm = th->getJVM();
+ UserClass* BB = myvm->upcalls->newDirectByteBuffer;
+
+ res = BB->doNew(myvm);
+
+#if ARCH_32
+ UserClass* PP = myvm->upcalls->newPointer32;
+ p = PP->doNew(myvm);
+ myvm->upcalls->dataPointer32->setInstanceInt32Field(p, (uint32)address);
+#elif ARCH_64
+ UserClass* PP = myvm->upcalls->newPointer64;
+ p = PP->doNew(myvm);
+ myvm->upcalls->dataPointer64->setInstanceLongField(p, (jlong)address);
+#endif
+
+ myvm->upcalls->InitDirectByteBuffer->invokeIntSpecial(myvm, BB, res, 0, &p,
+ (uint32)capacity,
+ (uint32)capacity, 0);
+
+ jobject ret = (jobject)th->pushJNIRef(res);
+ RETURN_FROM_JNI(ret);
+ END_JNI_EXCEPTION
+
+ RETURN_FROM_JNI(0);
+}
+
+
+void *GetDirectBufferAddress(JNIEnv *env, jobject _buf) {
+
+ BEGIN_JNI_EXCEPTION
+
+ // Local object references.
+ JavaObject* buf = *(JavaObject**)_buf;
+ JavaObject* address = 0;
+ llvm_gcroot(buf, 0);
+ llvm_gcroot(address, 0);
+
+ Jnjvm* vm = myVM(env);
+ address = vm->upcalls->bufferAddress->getInstanceObjectField(buf);
+ if (address != 0) {
+#if (__WORDSIZE == 32)
+ int res = vm->upcalls->dataPointer32->getInstanceInt32Field(address);
+#else
+ jlong res = vm->upcalls->dataPointer64->getInstanceLongField(address);
+#endif
+ RETURN_FROM_JNI((void*)res);
+ } else {
+ RETURN_FROM_JNI(0);
+ }
+
+ END_JNI_EXCEPTION
+ RETURN_FROM_JNI(0);
+}
Added: vmkit/trunk/lib/J3/VMCore/JniOpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JniOpenJDK.inc?rev=142969&view=auto
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JniOpenJDK.inc (added)
+++ vmkit/trunk/lib/J3/VMCore/JniOpenJDK.inc Tue Oct 25 15:43:58 2011
@@ -0,0 +1,14 @@
+// OpenJDK-specific JNI implementation
+
+// We don't support DirectBuffer calls yet. TODO: Implement these!
+jobject NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity) {
+ NYI();
+ abort();
+ return NULL;
+}
+
+void *GetDirectBufferAddress(JNIEnv *env, jobject _buf) {
+ NYI();
+ abort();
+ return NULL;
+}
More information about the vmkit-commits
mailing list