[llvm-commits] [vmkit] r49490 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaJIT.cpp ServiceDomain.cpp ServiceDomain.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Apr 10 10:17:12 PDT 2008
Author: geoffray
Date: Thu Apr 10 12:17:12 2008
New Revision: 49490
URL: http://llvm.org/viewvc/llvm-project?rev=49490&view=rev
Log:
Give the virtual machine as a parameter to all functions if compiled with MULTIPLE_VM
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=49490&r1=49489&r2=49490&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Thu Apr 10 12:17:12 2008
@@ -43,6 +43,10 @@
#include "Reader.h"
#include "Zip.h"
+#ifdef SERVICE_VM
+#include "ServiceDomain.h"
+#endif
+
using namespace jnjvm;
using namespace llvm;
Modified: vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp?rev=49490&r1=49489&r2=49490&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp Thu Apr 10 12:17:12 2008
@@ -13,11 +13,40 @@
#include "JnjvmModuleProvider.h"
#include "ServiceDomain.h"
+#include <llvm/GlobalVariable.h>
+#include <llvm/Instructions.h>
+
extern "C" struct JNINativeInterface JNI_JNIEnvTable;
extern "C" const struct JNIInvokeInterface JNI_JavaVMTable;
using namespace jnjvm;
+
+GlobalVariable* ServiceDomain::llvmDelegatee() {
+ if (!_llvmDelegatee) {
+ lock->lock();
+ if (!_llvmDelegatee) {
+ const Type* pty = mvm::jit::ptrType;
+
+ mvm::jit::protectConstants();//->lock();
+ Constant* cons =
+ ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, uint64(this)),
+ pty);
+ mvm::jit::unprotectConstants();//->unlock();
+
+ this->protectModule->lock();
+ _llvmDelegatee = new GlobalVariable(pty, true,
+ GlobalValue::ExternalLinkage,
+ cons, "",
+ this->module);
+ this->protectModule->unlock();
+ }
+ lock->unlock();
+ }
+ return _llvmDelegatee;
+}
+
+
void ServiceDomain::destroyer(size_t sz) {
mvm::jit::protectEngine->lock();
mvm::jit::executionEngine->removeModuleProvider(TheModuleProvider);
@@ -70,6 +99,7 @@
service->numThreads = 0;
service->loadBootstrap();
+ service->lock = mvm::Lock::allocNormal();
return service;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h?rev=49490&r1=49489&r2=49490&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h Thu Apr 10 12:17:12 2008
@@ -14,11 +14,22 @@
#include "Jnjvm.h"
+namespace llvm {
+ class GlobalVariable;
+}
+
+namespace mvm {
+ class Lock;
+}
+
namespace jnjvm {
class ClassMap;
class ServiceDomain : public Jnjvm {
+private:
+ llvm::GlobalVariable* _llvmDelegatee;
+ mvm::Lock* lock;
public:
static VirtualTable* VT;
@@ -27,7 +38,8 @@
virtual void destroyer(size_t sz);
void loadBootstrap();
static ServiceDomain* allocateService(Jnjvm* callingVM);
-
+ llvm::GlobalVariable* llvmDelegatee();
+
ClassMap* classes;
time_t started;
uint64 executionTime;
More information about the llvm-commits
mailing list