[vmkit-commits] [vmkit] r198555 - Implement more openjdk or jni functions, add the javavm interface.

Gael Thomas gael.thomas at lip6.fr
Sun Jan 5 02:30:20 PST 2014


Author: gthomas
Date: Sun Jan  5 04:30:20 2014
New Revision: 198555

URL: http://llvm.org/viewvc/llvm-project?rev=198555&view=rev
Log:
Implement more openjdk or jni functions, add the javavm interface.

Added:
    vmkit/branches/mcjit/lib/j3/vm/j3javavm.cc
Modified:
    vmkit/branches/mcjit/include/j3/j3jni.h
    vmkit/branches/mcjit/include/j3/j3thread.h
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
    vmkit/branches/mcjit/lib/j3/vm/j3thread.cc

Modified: vmkit/branches/mcjit/include/j3/j3jni.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3jni.h?rev=198555&r1=198554&r2=198555&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3jni.h (original)
+++ vmkit/branches/mcjit/include/j3/j3jni.h Sun Jan  5 04:30:20 2014
@@ -5,6 +5,7 @@
 
 namespace j3 {
 	extern struct JNINativeInterface_ jniEnvTable;
+	extern struct JNIInvokeInterface_ javaVMTable;
 }
 
 #endif

Modified: vmkit/branches/mcjit/include/j3/j3thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3thread.h?rev=198555&r1=198554&r2=198555&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3thread.h (original)
+++ vmkit/branches/mcjit/include/j3/j3thread.h Sun Jan  5 04:30:20 2014
@@ -22,6 +22,7 @@ namespace j3 {
 
 		vmkit::BumpAllocator*      _allocator;
 		JNIEnv                     _jniEnv;
+		JavaVM                     _javaVM;
 		J3LocalReferences          _localReferences;
 		J3ObjectHandle*            _pendingException;
 		J3ObjectHandle             _javaThread;
@@ -54,6 +55,7 @@ namespace j3 {
 		J3* vm() { return (J3*)Thread::vm(); }
 
 		JNIEnv* jniEnv() { return &_jniEnv; }
+		JavaVM* javaVM() { return &_javaVM; }
 
 		static J3Thread* get();
 		static J3Thread* get(void* ptr);

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198555&r1=198554&r2=198555&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Jan  5 04:30:20 2014
@@ -25,7 +25,9 @@ using namespace j3;
  PART 0
  ************************************************************************/
 
-jint JNICALL JVM_GetInterfaceVersion(void) { enterJVM(); NYI(); leaveJVM(); }
+jint JNICALL JVM_GetInterfaceVersion(void) { 
+  return JVM_INTERFACE_VERSION;
+}
 
 /*************************************************************************
  PART 1: Functions for Native Libraries
@@ -292,7 +294,13 @@ void * JNICALL JVM_FindLibraryEntry(void
 	return res;
 }
 
-jboolean JNICALL JVM_IsSupportedJNIVersion(jint version) { enterJVM(); NYI(); leaveJVM(); }
+jboolean JNICALL JVM_IsSupportedJNIVersion(jint version) { 
+  return version == JNI_VERSION_1_1 ||
+         version == JNI_VERSION_1_2 ||
+         version == JNI_VERSION_1_4 ||
+         version == JNI_VERSION_1_6 ||
+         version == JNI_VERSION_1_8;
+}
 
 /*
  * java.lang.Float and java.lang.Double
@@ -787,7 +795,31 @@ jobject JNICALL JVM_GetStackAccessContro
 
 void * JNICALL JVM_RegisterSignal(jint sig, void *handler) { enterJVM(); NYI(); leaveJVM(); }
 jboolean JNICALL JVM_RaiseSignal(jint sig) { enterJVM(); NYI(); leaveJVM(); }
-jint JNICALL JVM_FindSignal(const char *name) { enterJVM(); NYI(); leaveJVM(); }
+jint JNICALL JVM_FindSignal(const char *name) { 
+	jint res = 0;
+
+	enterJVM(); 
+
+  static struct {
+    const char * name;
+    int num;
+  } SignalMap[] =
+			{
+				{ "TERM", SIGTERM },
+				{ "HUP", SIGHUP },
+				{ "INT", SIGINT }
+			};
+  static uint32_t signal_count = sizeof(SignalMap)/sizeof(SignalMap[0]);
+
+  for(uint32_t i = 0; i < signal_count; ++i) {
+    if (!strcmp(name, SignalMap[i].name))
+      res = SignalMap[i].num;
+  }
+
+	leaveJVM(); 
+	
+	return res;
+}
 
 /*
  * Retrieve the assertion directives for the specified class.

Added: vmkit/branches/mcjit/lib/j3/vm/j3javavm.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3javavm.cc?rev=198555&view=auto
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3javavm.cc (added)
+++ vmkit/branches/mcjit/lib/j3/vm/j3javavm.cc Sun Jan  5 04:30:20 2014
@@ -0,0 +1,30 @@
+#include "j3/j3jni.h"
+#include "j3/j3thread.h"
+#include "j3/j3.h"
+
+namespace j3 {
+
+#define enterJVM() try {
+#define leaveJVM() } catch(void* e) { J3Thread::get()->setPendingException(J3Thread::get()->push((J3Object*)e)); }
+
+#define NYI() { J3Thread::get()->vm()->internalError("not yet implemented: '%s'", __PRETTY_FUNCTION__); }
+
+jint DestroyJavaVM(JavaVM *vm) { enterJVM(); leaveJVM(); NYI(); }
+jint AttachCurrentThread(JavaVM *vm, void **penv, void *args) { enterJVM(); leaveJVM(); NYI(); }
+jint DetachCurrentThread(JavaVM *vm) { enterJVM(); leaveJVM(); NYI(); }
+jint GetEnv(JavaVM *vm, void **penv, jint version) { enterJVM(); leaveJVM(); NYI(); }
+jint AttachCurrentThreadAsDaemon(JavaVM *vm, void **penv, void *args) { enterJVM(); leaveJVM(); NYI(); }
+
+struct JNIInvokeInterface_ javaVMTable = {
+	0,
+	0,
+	0,
+	DestroyJavaVM,
+	AttachCurrentThread,
+	DetachCurrentThread,
+	GetEnv,
+	AttachCurrentThreadAsDaemon,
+};
+
+}
+

Modified: vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3jni.cc?rev=198555&r1=198554&r2=198555&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Sun Jan  5 04:30:20 2014
@@ -15,7 +15,9 @@
 
 namespace j3 {
 
-jint JNICALL GetVersion(JNIEnv* env) { enterJVM(); leaveJVM(); NYI(); }
+jint JNICALL GetVersion(JNIEnv* env) { 
+	return JNI_VERSION_1_8;
+}
 
 jclass JNICALL DefineClass(JNIEnv* env, const char* name, jobject loader, const jbyte* buf, jsize len) { enterJVM(); leaveJVM(); NYI(); }
 jclass JNICALL FindClass(JNIEnv* env, const char* name) { 
@@ -517,7 +519,10 @@ jint JNICALL UnregisterNatives(JNIEnv* e
 jint JNICALL MonitorEnter(JNIEnv* env, jobject obj) { enterJVM(); leaveJVM(); NYI(); }
 jint JNICALL MonitorExit(JNIEnv* env, jobject obj) { enterJVM(); leaveJVM(); NYI(); }
 
-jint JNICALL GetJavaVM(JNIEnv* env, JavaVM** vm) { enterJVM(); leaveJVM(); NYI(); }
+jint JNICALL GetJavaVM(JNIEnv* env, JavaVM** vm) { 
+	*vm = J3Thread::get()->javaVM();
+	return 0;
+}
 
 void JNICALL GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, jchar* buf) { 
 	enterJVM(); 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3thread.cc?rev=198555&r1=198554&r2=198555&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3thread.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3thread.cc Sun Jan  5 04:30:20 2014
@@ -13,6 +13,7 @@ J3Thread::J3Thread(J3* vm) :
 	_allocator(vmkit::BumpAllocator::create()),
 	_localReferences(_allocator) {
 	_jniEnv.functions = &jniEnvTable;
+	_javaVM.functions = &javaVMTable;
 }
 
 J3Thread::~J3Thread() {





More information about the vmkit-commits mailing list