[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