[vmkit-commits] [vmkit] r198215 - Add a compiler lock, but it's not enough. LLVMContext is definitly not thread safe...
Gael Thomas
gael.thomas at lip6.fr
Mon Dec 30 08:31:27 PST 2013
Author: gthomas
Date: Mon Dec 30 10:31:27 2013
New Revision: 198215
URL: http://llvm.org/viewvc/llvm-project?rev=198215&view=rev
Log:
Add a compiler lock, but it's not enough. LLVMContext is definitly not thread safe...
Modified:
vmkit/branches/mcjit/include/j3/j3.h
vmkit/branches/mcjit/include/vmkit/vmkit.h
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/vmkit/vmkit.cc
Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Mon Dec 30 10:31:27 2013
@@ -70,6 +70,8 @@ namespace j3 {
J3Field* threadVMData;
J3Method* threadRun;
+ J3Class* fieldClass;
+
const vmkit::Name* codeAttr;
const vmkit::Name* constantValueAttr;
const vmkit::Name* initName;
Modified: vmkit/branches/mcjit/include/vmkit/vmkit.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/vmkit.h?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/vmkit.h (original)
+++ vmkit/branches/mcjit/include/vmkit/vmkit.h Mon Dec 30 10:31:27 2013
@@ -29,6 +29,7 @@ namespace vmkit {
llvm::Module* _self;
llvm::DataLayout* _dataLayout;
void* ptrTypeInfo;
+ pthread_mutex_t _compilerLock;
void addSymbol(llvm::GlobalValue* gv);
@@ -41,6 +42,9 @@ namespace vmkit {
VMKit(BumpAllocator* allocator);
+ void lockCompiler();
+ void unlockCompiler();
+
const char* selfBitCodePath() { return _selfBitCodePath; }
void addSafepoint(Safepoint* sf);
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=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Mon Dec 30 10:31:27 2013
@@ -384,7 +384,14 @@ jbyteArray JNICALL JVM_GetClassTypeAnnot
*/
jobjectArray JNICALL JVM_GetClassDeclaredMethods(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
-jobjectArray JNICALL JVM_GetClassDeclaredFields(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
+jobjectArray JNICALL JVM_GetClassDeclaredFields(JNIEnv* env, jclass ofClass, jboolean publicOnly) {
+ enterJVM();
+ J3ObjectType* type = J3ObjectType::nativeClass(ofClass);
+
+ NYI();
+ leaveJVM();
+}
+
jobjectArray JNICALL JVM_GetClassDeclaredConstructors(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
/* Differs from JVM_GetClassModifiers in treatment of inner classes.
Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Mon Dec 30 10:31:27 2013
@@ -111,6 +111,8 @@ void J3::run() {
->findVirtualField(names()->get(L"eetop"), typeLong);
threadRun = initialClassLoader->method(0, L"java/lang/Thread", L"run", L"()V");
+ fieldClass = initialClassLoader->loadClass(names()->get("java/lang/reflect/Field"));
+
J3Lib::bootstrap(this);
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Mon Dec 30 10:31:27 2013
@@ -107,7 +107,9 @@ void J3CodeGen::operator delete(void* pt
void J3CodeGen::translate(J3Method* method, llvm::Function* llvmFunction) {
vmkit::BumpAllocator* allocator = vmkit::BumpAllocator::create();
+ method->cl()->loader()->vm()->lockCompiler();
delete new(allocator) J3CodeGen(allocator, method, llvmFunction);
+ method->cl()->loader()->vm()->unlockCompiler();
vmkit::BumpAllocator::destroy(allocator);
}
Modified: vmkit/branches/mcjit/lib/vmkit/vmkit.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/vmkit.cc?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/vmkit.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/vmkit.cc Mon Dec 30 10:31:27 2013
@@ -37,6 +37,7 @@ VMKit::VMKit(vmkit::BumpAllocator* alloc
llvm::llvm_start_multithreaded();
_allocator = allocator;
pthread_mutex_init(&safepointMapLock, 0);
+ pthread_mutex_init(&_compilerLock, 0);
}
void* VMKit::operator new(size_t n, vmkit::BumpAllocator* allocator) {
@@ -47,6 +48,14 @@ void VMKit::destroy(VMKit* vm) {
vmkit::BumpAllocator::destroy(vm->allocator());
}
+void VMKit::lockCompiler() {
+ pthread_mutex_lock(&_compilerLock);
+}
+
+void VMKit::unlockCompiler() {
+ pthread_mutex_unlock(&_compilerLock);
+}
+
void VMKit::addSafepoint(Safepoint* sf) {
pthread_mutex_lock(&safepointMapLock);
safepointMap[sf->addr()] = sf;
More information about the vmkit-commits
mailing list