[vmkit-commits] [vmkit] r145150 - in /vmkit/trunk/lib/j3: Compiler/JavaJIT.cpp VMCore/JavaThread.cpp VMCore/Jni.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Nov 26 13:13:43 PST 2011
Author: geoffray
Date: Sat Nov 26 15:13:43 2011
New Revision: 145150
URL: http://llvm.org/viewvc/llvm-project?rev=145150&view=rev
Log:
Revert r145140, caused too many crashes.
Modified:
vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
vmkit/trunk/lib/j3/VMCore/Jni.cpp
Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=145150&r1=145149&r2=145150&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Sat Nov 26 15:13:43 2011
@@ -2332,7 +2332,16 @@
BranchInst::Create(ifNormal, currentBlock);
currentBlock = ifException;
- CallInst::Create(intrinsics->UnregisterSetjmpFunction, jmpBuffer, "", currentBlock);
+ CallInst::Create(intrinsics->UnregisterSetjmpFunction, jmpBuffer, "", currentBlock);
+
+ if (!currentExceptionBlock->empty()) {
+ // Get the Java exception.
+ Value* javaExceptionPtr = getJavaExceptionPtr(getJavaThreadPtr(getMutatorThreadPtr()));
+ Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock);
+ Instruction* insn = currentExceptionBlock->begin();
+ PHINode* node = dyn_cast<PHINode>(insn);
+ if (node) node->addIncoming(obj, currentBlock);
+ }
BranchInst::Create(currentExceptionBlock, currentBlock);
currentBlock = ifNormal;
}
Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=145150&r1=145149&r2=145150&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Sat Nov 26 15:13:43 2011
@@ -32,8 +32,8 @@
void JavaThread::initialise(JavaObject* thread, JavaObject* vmth) {
llvm_gcroot(thread, 0);
llvm_gcroot(vmth, 0);
- vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&javaThread, (gc*)thread);
- vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&vmThread, (gc*)vmth);
+ javaThread = thread;
+ vmThread = vmth;
}
JavaThread::~JavaThread() {
@@ -42,14 +42,16 @@
void JavaThread::throwException(JavaObject* obj) {
llvm_gcroot(obj, 0);
- assert(pendingException == 0 && "pending exception already there?");
- vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&pendingException, (gc*)obj);
- internalThrowException();
+ JavaThread* th = JavaThread::get();
+ assert(th->pendingException == 0 && "pending exception already there?");
+ th->pendingException = obj;
+ th->internalThrowException();
}
void JavaThread::throwPendingException() {
- assert(pendingException);
- internalThrowException();
+ JavaThread* th = JavaThread::get();
+ assert(th->pendingException);
+ th->internalThrowException();
}
void JavaThread::startJNI() {
@@ -141,8 +143,7 @@
next->prev = this;
return next->addJNIReference(th, obj);
} else {
- vmkit::Collector::objectReferenceNonHeapWriteBarrier(
- (gc**)&(localReferences[length]), (gc*)obj);
+ localReferences[length] = obj;
return &localReferences[length++];
}
}
Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=145150&r1=145149&r2=145150&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Sat Nov 26 15:13:43 2011
@@ -177,11 +177,7 @@
jint Throw(JNIEnv *env, jthrowable obj) {
BEGIN_JNI_EXCEPTION
- JavaObject* excp = *(JavaObject**)obj;
- llvm_gcroot(excp, 0);
- JavaThread* th = JavaThread::get();
- vmkit::Collector::objectReferenceNonHeapWriteBarrier(
- (gc**)&(th->pendingException), (gc*)excp);
+ JavaThread::get()->pendingException = *(JavaObject**)obj;
RETURN_FROM_JNI(0);
@@ -216,8 +212,7 @@
false, true, 0);
str = vm->asciizToStr(msg);
init->invokeIntSpecial(vm, realCl, res, &str);
- vmkit::Collector::objectReferenceNonHeapWriteBarrier(
- (gc**)&(th->pendingException), (gc*)res);
+ th->pendingException = res;
RETURN_FROM_JNI(0);
More information about the vmkit-commits
mailing list