[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