[vmkit-commits] [vmkit] r120019 - in /vmkit/branches/multi-vm: include/mvm/Threads/Thread.h lib/J3/VMCore/JavaRuntimeJIT.cpp lib/J3/VMCore/JavaThread.cpp lib/J3/VMCore/JavaThread.h lib/J3/VMCore/Jni.cpp lib/J3/VMCore/Jnjvm.cpp
Gael Thomas
gael.thomas at lip6.fr
Tue Nov 23 03:44:37 PST 2010
Author: gthomas
Date: Tue Nov 23 05:44:37 2010
New Revision: 120019
URL: http://llvm.org/viewvc/llvm-project?rev=120019&view=rev
Log:
split the JavaThread and the mvm::Thread (in progress)
Modified:
vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h
vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
Modified: vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/include/mvm/Threads/Thread.h?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/Threads/Thread.h (original)
+++ vmkit/branches/multi-vm/include/mvm/Threads/Thread.h Tue Nov 23 05:44:37 2010
@@ -141,6 +141,7 @@
class VMThreadData {
public:
+ /// mut - The associated thread mutator
Thread* mut;
VMThreadData(Thread* m) {
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp Tue Nov 23 05:44:37 2010
@@ -355,12 +355,13 @@
extern "C" void* j3StartJNI(uint32* localReferencesNumber,
uint32** oldLocalReferencesNumber,
mvm::KnownFrame* Frame) {
-
- JavaThread* th = JavaThread::get();
+
+ mvm::Thread* mut = mvm::Thread::get();
+ JavaThread* th = JavaThread::j3Thread(mut);
*oldLocalReferencesNumber = th->currentAddedReferences;
th->currentAddedReferences = localReferencesNumber;
- th->startKnownFrame(*Frame);
+ mut->startKnownFrame(*Frame);
th->startJNI(1);
@@ -600,14 +601,14 @@
extern "C" void* j3ResolveVirtualStub(JavaObject* obj) {
llvm_gcroot(obj, 0);
- JavaThread *th = JavaThread::get();
+ mvm::Thread *mut = mvm::Thread::get();
UserCommonClass* cl = JavaObject::getClass(obj);
void* result = NULL;
BEGIN_NATIVE_EXCEPTION(1)
// Lookup the caller of this class.
- mvm::StackWalker Walker(th);
+ mvm::StackWalker Walker(mut);
while (Walker.get()->MethodType != 1) ++Walker;
mvm::MethodInfo* MI = Walker.get();
JavaMethod* meth = (JavaMethod*)MI->getMetaInfo();
@@ -666,13 +667,13 @@
}
extern "C" void* j3ResolveStaticStub() {
- JavaThread *th = JavaThread::get();
+ mvm::Thread *mut = mvm::Thread::get();
void* result = NULL;
BEGIN_NATIVE_EXCEPTION(1)
// Lookup the caller of this class.
- mvm::StackWalker Walker(th);
+ mvm::StackWalker Walker(mut);
while (Walker.get()->MethodType != 1) ++Walker;
mvm::MethodInfo* MI = Walker.get();
assert(MI->MethodType == 1 && "Wrong call to stub");
@@ -704,13 +705,13 @@
}
extern "C" void* j3ResolveSpecialStub() {
- JavaThread *th = JavaThread::get();
+ mvm::Thread *mut = mvm::Thread::get();
void* result = NULL;
BEGIN_NATIVE_EXCEPTION(1)
// Lookup the caller of this class.
- mvm::StackWalker Walker(th);
+ mvm::StackWalker Walker(mut);
while (Walker.get()->MethodType != 1) ++Walker;
mvm::MethodInfo* MI = Walker.get();
assert(MI->MethodType == 1 && "Wrong call to stub");
@@ -732,7 +733,7 @@
lookup->lookupSpecialMethodDontThrow(utf8, sign->keyName, caller->classDef);
if (!callee) {
- th->getJVM()->noSuchMethodError(lookup, utf8);
+ JavaThread::j3Thread(mut)->getJVM()->noSuchMethodError(lookup, utf8);
}
// Compile the found method.
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp Tue Nov 23 05:44:37 2010
@@ -53,8 +53,9 @@
}
mvm::Thread *JavaThread::create(JavaObject* thread, JavaObject* vmth, Jnjvm* isolate) {
- mvm::MutatorThread *res = (mvm::MutatorThread*)new JavaThread(thread, vmth, isolate);
+ JavaThread *res = new JavaThread(thread, vmth, isolate);
res->vmData = (mvm::VMThreadData*)res;
+ res->mut = res;
return res;
}
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h Tue Nov 23 05:44:37 2010
@@ -28,37 +28,37 @@
class Jnjvm;
-#define BEGIN_NATIVE_EXCEPTION(level) \
- JavaThread* __th = JavaThread::get(); \
+#define BEGIN_NATIVE_EXCEPTION(level) \
+ JavaThread* __th = JavaThread::get(); \
TRY {
-#define END_NATIVE_EXCEPTION \
- } CATCH { \
- __th->throwFromNative(); \
+#define END_NATIVE_EXCEPTION \
+ } CATCH { \
+ __th->throwFromNative(); \
} END_CATCH;
-#define BEGIN_JNI_EXCEPTION \
- JavaThread* th = JavaThread::get(); \
- void* SP = th->getLastSP(); \
- th->leaveUncooperativeCode(); \
- mvm::KnownFrame Frame; \
- th->startKnownFrame(Frame); \
+#define BEGIN_JNI_EXCEPTION \
+ mvm::Thread* mut = mvm::Thread::get(); \
+ void* SP = mut->getLastSP(); \
+ mut->leaveUncooperativeCode(); \
+ mvm::KnownFrame Frame; \
+ mut->startKnownFrame(Frame); \
TRY {
-#define END_JNI_EXCEPTION \
- } CATCH { \
- th->throwFromJNI(SP); \
+#define END_JNI_EXCEPTION \
+ } CATCH { \
+ JavaThread::j3Thread(mut)->throwFromJNI(SP); \
} END_CATCH;
-#define RETURN_FROM_JNI(a) {\
- th->endKnownFrame(); \
- th->enterUncooperativeCode(SP); \
- return (a); } \
-
-#define RETURN_VOID_FROM_JNI {\
- th->endKnownFrame(); \
- th->enterUncooperativeCode(SP); \
- return; } \
+#define RETURN_FROM_JNI(a) { \
+ mut->endKnownFrame(); \
+ mut->enterUncooperativeCode(SP); \
+ return (a); } \
+
+#define RETURN_VOID_FROM_JNI { \
+ mut->endKnownFrame(); \
+ mut->enterUncooperativeCode(SP); \
+ return; } \
/// JavaThread - This class is the internal representation of a Java thread.
@@ -80,6 +80,9 @@
///
JavaObject* javaThread;
+ /// mut - The associated mutator. Should be removed
+ mvm::Thread* mut;
+
/// vmThread - The VMThread object of this thread.
///
JavaObject* vmThread;
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp Tue Nov 23 05:44:37 2010
@@ -173,7 +173,7 @@
false, true, 0);
str = vm->asciizToStr(msg);
init->invokeIntSpecial(vm, realCl, res, &str);
- th->pendingException = res;
+ JavaThread::j3Thread(mut)->pendingException = res;
RETURN_FROM_JNI(1);
@@ -190,7 +190,7 @@
JavaObject* obj = JavaThread::get()->pendingException;
llvm_gcroot(obj, 0);
if (obj == NULL) RETURN_FROM_JNI(NULL);
- jthrowable res = (jthrowable)th->pushJNIRef(obj);
+ jthrowable res = (jthrowable)JavaThread::j3Thread(mut)->pushJNIRef(obj);
RETURN_FROM_JNI(res);
END_JNI_EXCEPTION
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Tue Nov 23 05:44:37 2010
@@ -79,14 +79,14 @@
// current thread can obtain the lock for that object
// (Java specification §8.13).
acquire();
- JavaThread* self = JavaThread::get();
+ mvm::Thread* mut = mvm::Thread::get();
if (getInitializationState() == inClinit) {
// 2. If initialization by some other thread is in progress for the
// class or interface, then wait on this Class object (which
// temporarily releases the lock). When the current thread awakens
// from the wait, repeat this step.
- if (getOwnerClass() != self) {
+ if (getOwnerClass() != mut) {
while (getOwnerClass()) {
waitClass();
}
@@ -119,7 +119,7 @@
// 6. Otherwise, record the fact that initialization of the Class object is
// now in progress by the current thread and release the lock on the
// Class object.
- setOwnerClass(self);
+ setOwnerClass(mut);
bool vmjced = (getInitializationState() == vmjc);
setInitializationState(inClinit);
UserClass* cl = (UserClass*)this;
@@ -155,8 +155,10 @@
broadcastClass();
release();
} END_CATCH;
- if (self->pendingException != NULL) {
- self->throwPendingException();
+
+ JavaThread* th = JavaThread::get();
+ if (th->pendingException != NULL) {
+ th->throwPendingException();
return;
}
}
@@ -195,9 +197,9 @@
TRY {
meth->invokeIntStatic(vm, cl);
} CATCH {
- exc = self->getJavaException();
+ exc = JavaThread::get()->getJavaException();
assert(exc && "no exception?");
- self->clearException();
+ mvm::Thread::get()->clearException();
} END_CATCH;
}
#ifdef SERVICE
@@ -224,10 +226,11 @@
// ExceptionInInitializerError cannot be created because an
// OutOfMemoryError occurs, then instead use an OutOfMemoryError object
// in place of E in the following step.
+ JavaThread* th = JavaThread::get();
if (JavaObject::getClass(exc)->isAssignableFrom(vm->upcalls->newException)) {
Classpath* upcalls = classLoader->bootstrapLoader->upcalls;
UserClass* clExcp = upcalls->ExceptionInInitializerError;
- Jnjvm* vm = self->getJVM();
+ Jnjvm* vm = th->getJVM();
obj = clExcp->doNew(vm);
if (obj == NULL) {
fprintf(stderr, "implement me");
@@ -246,7 +249,7 @@
setOwnerClass(0);
broadcastClass();
release();
- self->throwException(exc);
+ th->throwException(exc);
return;
}
}
@@ -1088,10 +1091,10 @@
JnjvmClassLoader* loader = bootstrapLoader;
// First create system threads.
- finalizerThread = JavaThread::j3Thread(JavaThread::create(0, 0, this));
+ finalizerThread = JavaThread::create(0, 0, this);
finalizerThread->start(finalizerStart);
- enqueueThread = JavaThread::j3Thread(JavaThread::create(0, 0, this));
+ enqueueThread = JavaThread::create(0, 0, this);
enqueueThread->start(enqueueStart);
// Initialise the bootstrap class loader if it's not
@@ -1236,8 +1239,9 @@
exc = JavaThread::get()->pendingException;
if (exc != NULL) {
- JavaThread* th = JavaThread::get();
- th->clearException();
+ mvm::Thread* mut = mvm::Thread::get();
+ mut->clearException();
+ JavaThread* th = JavaThread::j3Thread(mut);
obj = th->currentThread();
group = upcalls->group->getInstanceObjectField(obj);
TRY {
More information about the vmkit-commits
mailing list