[vmkit-commits] [vmkit] r145151 - 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:38:06 PST 2011
Author: geoffray
Date: Sat Nov 26 15:38:05 2011
New Revision: 145151
URL: http://llvm.org/viewvc/llvm-project?rev=145151&view=rev
Log:
Put a barrier on pendingException writes.
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=145151&r1=145150&r2=145151&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Sat Nov 26 15:38:05 2011
@@ -2333,15 +2333,6 @@
currentBlock = ifException;
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=145151&r1=145150&r2=145151&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Sat Nov 26 15:38:05 2011
@@ -44,7 +44,7 @@
llvm_gcroot(obj, 0);
JavaThread* th = JavaThread::get();
assert(th->pendingException == 0 && "pending exception already there?");
- th->pendingException = obj;
+ vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&(th->pendingException), (gc*)obj);
th->internalThrowException();
}
Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=145151&r1=145150&r2=145151&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Sat Nov 26 15:38:05 2011
@@ -177,7 +177,8 @@
jint Throw(JNIEnv *env, jthrowable obj) {
BEGIN_JNI_EXCEPTION
- JavaThread::get()->pendingException = *(JavaObject**)obj;
+ JavaThread* th = JavaThread::get();
+ vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&(th->pendingException), *(gc**)obj);
RETURN_FROM_JNI(0);
@@ -212,7 +213,7 @@
false, true, 0);
str = vm->asciizToStr(msg);
init->invokeIntSpecial(vm, realCl, res, &str);
- th->pendingException = res;
+ vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&(th->pendingException), (gc*)res);
RETURN_FROM_JNI(0);
More information about the vmkit-commits
mailing list