[llvm-commits] [vmkit] r51245 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaConstantPool.cpp JavaConstantPool.h JavaIsolate.cpp JavaJIT.cpp JavaMetaJIT.cpp Jni.cpp Jnjvm.h JnjvmModule.cpp JnjvmModule.h JnjvmModuleProvider.cpp JnjvmModuleProvider.h LockedMap.h NativeUtil.cpp NativeUtil.h ServiceDomain.cpp ServiceDomain.h VirtualTables.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon May 19 04:56:17 PDT 2008


Author: geoffray
Date: Mon May 19 06:56:16 2008
New Revision: 51245

URL: http://llvm.org/viewvc/llvm-project?rev=51245&view=rev
Log:
Remove LLVM dependencies in some core JnJVM files.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h
    vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
    vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp
    vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.h
    vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
    vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Mon May 19 06:56:16 2008
@@ -11,10 +11,6 @@
 
 #include <string.h>
 
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-
-
 #include "mvm/JIT.h"
 #include "types.h"
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Mon May 19 06:56:16 2008
@@ -12,8 +12,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "llvm/GlobalValue.h"
-
 #include "debug.h"
 
 #include "JavaAccess.h"
@@ -398,11 +396,10 @@
   cl = resolveClassName(entry >> 16);
 }
 
-llvm::Function* JavaCtpInfo::infoOfStaticOrSpecialMethod( 
-                                                uint32 index, 
-                                                uint32 access,
-                                                Signdef*& sign,
-                                                JavaMethod*& meth) {
+void* JavaCtpInfo::infoOfStaticOrSpecialMethod(uint32 index, 
+                                               uint32 access,
+                                               Signdef*& sign,
+                                               JavaMethod*& meth) {
   uint8 id = typeAt(index);
   if (id != ConstantMethodref && id != ConstantInterfaceMethodref)
     JavaThread::get()->isolate->error(Jnjvm::ClassFormatError,
@@ -418,8 +415,7 @@
     meth = cl->lookupMethodDontThrow(utf8, sign->keyName, isStatic(access), false);
     if (meth) { // don't throw if no meth, the exception will be thrown just in time  
       JnjvmModule* M = classDef->isolate->module;
-      LLVMMethodInfo* LMI = M->getMethodInfo(meth);
-      llvm::Function* F = LMI->getMethod();
+      void* F = M->getMethod(meth);
       ctpRes[index] = (void*)F;
       return F;
     }
@@ -427,25 +423,14 @@
   
   // Must be a callback
   if (ctpRes[index]) {
-    return (llvm::Function*)ctpRes[index];
+    return ctpRes[index];
   } else {
-    // Create the callback
-    const llvm::FunctionType* type = 0;
-    JnjvmModule* M = classDef->isolate->module;
-    LLVMSignatureInfo* LSI = M->getSignatureInfo(sign);
-    if (isStatic(access)) {
-      type = LSI->getStaticType();
-    } else {
-      type = LSI->getVirtualType();
-    }
-    llvm::Function* func = llvm::Function::Create(type, 
-                                                llvm::GlobalValue::GhostLinkage,
-                                                "callback",
-                                                classDef->isolate->module);
-    classDef->isolate->TheModuleProvider->functions->hash(func, 
-                  new std::pair<Class*, uint32>(classDef, index));
-    ctpRes[index] = func;
-    return func;
+    void* val =
+      classDef->isolate->TheModuleProvider->addCallback(classDef, index, sign,
+                                                        isStatic(access));
+        
+    ctpRes[index] = val;
+    return val;
   }
 }
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.h Mon May 19 06:56:16 2008
@@ -14,8 +14,6 @@
 
 #include "types.h"
 
-#include "llvm/Function.h"
-
 namespace jnjvm {
 
 class Class;
@@ -108,10 +106,10 @@
   Typedef* resolveNameAndType(uint32 index);
   Typedef* infoOfField(uint32 index);
   Signdef* infoOfInterfaceOrVirtualMethod(uint32 index);
-  llvm::Function* infoOfStaticOrSpecialMethod(uint32 index,
-                                              uint32 access,
-                                              Signdef*& sign,
-                                              JavaMethod*& meth);
+  void* infoOfStaticOrSpecialMethod(uint32 index,
+                                    uint32 access,
+                                    Signdef*& sign,
+                                    JavaMethod*& meth);
 
   void nameOfStaticOrSpecialMethod(uint32 index, const UTF8*& cl, 
                                    const UTF8*& name, Signdef*& sign);

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaIsolate.cpp Mon May 19 06:56:16 2008
@@ -447,16 +447,12 @@
   
   isolate->analyseClasspathEnv(isolate->bootClasspathEnv);
 
-  isolate->functions = vm_new(isolate, FunctionMap)();
-  isolate->functionDefs = vm_new(isolate, FunctionDefMap)();
   isolate->module = new JnjvmModule("Isolate JnJVM");
   std::string str = 
     mvm::jit::executionEngine->getTargetData()->getStringRepresentation();
   isolate->module->setDataLayout(str);
   isolate->protectModule = mvm::Lock::allocNormal();
-  isolate->TheModuleProvider = new JnjvmModuleProvider(isolate->module, 
-                                                       isolate->functions,
-                                                       isolate->functionDefs);
+  isolate->TheModuleProvider = new JnjvmModuleProvider(isolate->module);
   mvm::jit::protectEngine->lock();
   mvm::jit::executionEngine->addModuleProvider(isolate->TheModuleProvider);
   mvm::jit::protectEngine->unlock();
@@ -519,16 +515,12 @@
   
   isolate->analyseClasspathEnv(isolate->bootClasspathEnv);
   
-  isolate->functions = vm_new(isolate, FunctionMap)();
-  isolate->functionDefs = vm_new(isolate, FunctionDefMap)();
   isolate->protectModule = mvm::Lock::allocNormal();
   isolate->module = new JnjvmModule("Bootstrap JnJVM");
   std::string str = 
     mvm::jit::executionEngine->getTargetData()->getStringRepresentation();
   isolate->module->setDataLayout(str);
-  isolate->TheModuleProvider = new JnjvmModuleProvider(isolate->module, 
-                                                       isolate->functions,
-                                                       isolate->functionDefs); 
+  isolate->TheModuleProvider = new JnjvmModuleProvider(isolate->module);
   mvm::jit::protectEngine->lock();
   mvm::jit::executionEngine->addModuleProvider(isolate->TheModuleProvider);
   mvm::jit::protectEngine->unlock();

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Mon May 19 06:56:16 2008
@@ -232,7 +232,8 @@
   } else {
     JavaObject* loader = compilingClass->classLoader;
     ServiceDomain* vm = ServiceDomain::getDomainFromLoader(loader);
-    isolateLocal = new LoadInst(vm->llvmDelegatee(), "", currentBlock);
+    LLVMServiceInfo* LSI = module->getServiceInfo(vm);
+    isolateLocal = LSI->getDelegatee(this);
     Value* cmp = new ICmpInst(ICmpInst::ICMP_NE, lastArg, 
                               isolateLocal, "", currentBlock);
     BasicBlock* ifTrue = createBasicBlock("true service call");
@@ -471,7 +472,8 @@
   } else {
     JavaObject* loader = compilingClass->classLoader;
     ServiceDomain* vm = ServiceDomain::getDomainFromLoader(loader);
-    isolateLocal = new LoadInst(vm->llvmDelegatee(), "", currentBlock);
+    LLVMServiceInfo* LSI = module->getServiceInfo(vm);
+    isolateLocal = LSI->getDelegatee(this);
     Value* cmp = new ICmpInst(ICmpInst::ICMP_NE, args[args.size() - 1], 
                               isolateLocal, "", currentBlock);
     BasicBlock* ifTrue = createBasicBlock("true service call");
@@ -635,7 +637,8 @@
   } else {
     JavaObject* loader = compilingClass->classLoader;
     ServiceDomain* vm = ServiceDomain::getDomainFromLoader(loader);
-    isolateLocal = new LoadInst(vm->llvmDelegatee(), "", currentBlock);
+    LLVMServiceInfo* LSI = module->getServiceInfo(vm);
+    isolateLocal = LSI->getDelegatee(this);
     Value* cmp = new ICmpInst(ICmpInst::ICMP_NE, i, isolateLocal, "",
                               currentBlock);
     BasicBlock* ifTrue = createBasicBlock("true service call");
@@ -1420,8 +1423,9 @@
 
 
   if (!val) {
-    Function* func = ctpInfo->infoOfStaticOrSpecialMethod(index, ACC_VIRTUAL,
-                                                          signature, meth);
+    Function* func = 
+      (Function*)ctpInfo->infoOfStaticOrSpecialMethod(index, ACC_VIRTUAL,
+                                                      signature, meth);
 
     if (meth && meth->canBeInlined && meth != compilingMethod && 
         inlineMethods[meth] == 0) {
@@ -1463,8 +1467,9 @@
   }
 
   if (!val) {
-    Function* func = ctpInfo->infoOfStaticOrSpecialMethod(index, ACC_STATIC,
-                                                          signature, meth);
+    Function* func = (Function*)
+      ctpInfo->infoOfStaticOrSpecialMethod(index, ACC_STATIC,
+                                           signature, meth);
     
 #ifdef MULTIPLE_VM
     

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaMetaJIT.cpp Mon May 19 06:56:16 2008
@@ -10,9 +10,6 @@
 #include <stdarg.h>
 #include <string.h>
 
-#include <llvm/Type.h>
-#include "llvm/ExecutionEngine/GenericValue.h"
-
 #include "mvm/JIT.h"
 #include "mvm/Method.h"
 
@@ -27,7 +24,6 @@
 #include "JnjvmModule.h"
 
 using namespace jnjvm;
-using namespace llvm;
 
 void JavaJIT::invokeOnceVoid(Jnjvm* vm, JavaObject* loader,
                              char const* className, char const* func,

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Mon May 19 06:56:16 2008
@@ -9,8 +9,6 @@
 
 #include <jni.h>
 
-#include "llvm/ExecutionEngine/GenericValue.h"
-
 #include "JavaArray.h"
 #include "JavaClass.h"
 #include "JavaJIT.h"

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Mon May 19 06:56:16 2008
@@ -264,8 +264,6 @@
   mvm::Lock* protectModule;
   JnjvmModule* module;
   JnjvmModuleProvider* TheModuleProvider;
-  FunctionMap* functions;
-  FunctionDefMap* functionDefs;
 
 #ifndef MULTIPLE_GC
   void* allocateObject(unsigned int sz, VirtualTable* VT) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Mon May 19 06:56:16 2008
@@ -18,6 +18,7 @@
 #include "JavaTypes.h"
 #include "Jnjvm.h"
 #include "JnjvmModule.h"
+#include "JnjvmModuleProvider.h"
 #include "LockedMap.h"
 
 
@@ -468,7 +469,7 @@
                                       GlobalValue::GhostLinkage,
                                       methodDef->printString(),
                                       vm->module);
-    vm->functionDefs->hash(methodFunction, methodDef);
+    vm->TheModuleProvider->addFunction(methodFunction, methodDef);
   }
   return methodFunction;
 }
@@ -835,6 +836,33 @@
   }
 }
 
+#ifdef SERVICE_VM
+LLVMServiceInfo* JnjvmModule::getServiceInfo(ServiceDomain* S) {
+  service_iterator SI = serviceMap.find(S);
+  if (SI != serviceMap.end()) {
+    return SI->second;
+  } else {
+    LLVMServiceInfo* LSI = new LLVMServiceInfo(sign);
+    serviceMap.insert(std::make_pair(S, LSI));
+    return LSI;
+  }
+}
+
+Value* LLVMServiceInfo::getDelegatee(JavaJIT* jit) {
+  if (!delegateeGV) {
+    Constant* cons = 
+      ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, uint64(vm)),
+                                mvm::jit::ptrType);
+    delegateeGV = new GlobalVariable(mvm::jit::ptrType, true,
+                                    GlobalValue::ExternalLinkage,
+                                    cons, "",
+                                    vm->module);
+  }
+  return new LoadInst(delegateeGV, "", jit->currentBlock);
+}
+
+#endif
+
 
 #include "LLVMRuntime.cpp"
 
@@ -1028,3 +1056,7 @@
   func->setName(name);
   func->setLinkage(llvm::GlobalValue::ExternalLinkage);
 }
+
+void* JnjvmModule::getMethod(JavaMethod* meth) {
+  return getMethodInfo(meth)->getMethod();
+}

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Mon May 19 06:56:16 2008
@@ -194,6 +194,17 @@
 
 };
 
+#ifdef SERVICE_VM
+class LLVMServiceInfo {
+private:
+  ServiceDomain* vm;
+  llvm::GlobalVariable* delegateeGV;
+
+public:
+  llvm::Value* getDelegatee(JavaJIT* jit);
+};
+#endif
+
 class JnjvmModule : public llvm::Module {
   friend class LLVMClassInfo;
 private:
@@ -201,6 +212,12 @@
   std::map<const Signdef*, LLVMSignatureInfo*> signatureMap;
   std::map<const JavaField*, LLVMFieldInfo*> fieldMap;
   std::map<const JavaMethod*, LLVMMethodInfo*> methodMap;
+
+#ifdef SERVICE_VM
+  std::map<const ServiceDomain*, LLVMServiceInfo*> serviceMap;
+  typedef std::map<const ServiceDomain*, LLVMServiceInfo*>::iterator
+    class_iterator;
+#endif
   
   typedef std::map<const CommonClass*, LLVMCommonClassInfo*>::iterator
     class_iterator;  
@@ -318,11 +335,15 @@
   void resolveVirtualClass(Class* cl);
   void resolveStaticClass(Class* cl);
   void setMethod(JavaMethod* meth, const char* name);
+  void* getMethod(JavaMethod* meth);
 
   LLVMSignatureInfo* getSignatureInfo(Signdef*);
   LLVMCommonClassInfo* getClassInfo(CommonClass*);
   LLVMFieldInfo* getFieldInfo(JavaField*);
   LLVMMethodInfo* getMethodInfo(JavaMethod*);
+#ifdef SERVICE_VM
+  LLVMServiceInfo* getServiceInfo(ServiceDomain*);
+#endif
 
   explicit JnjvmModule(const std::string &ModuleID) : llvm::Module(ModuleID) {}
   void initialise();

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Mon May 19 06:56:16 2008
@@ -43,6 +43,26 @@
   return meth;
 }
 
+bool JnjvmModuleProvider::lookupCallback(Function* F, std::pair<Class*, uint32>& res) {
+  callback_iterator CI = callbacks.find(F);
+  if (CI != callbacks.end()) {
+    res.first = CI->second.first;
+    res.second = CI->second.second;
+    return true;
+  } else {
+    return false;
+  }
+}
+
+bool JnjvmModuleProvider::lookupFunction(Function* F, JavaMethod*& meth) {
+  function_iterator CI = functions.find(F);
+  if (CI != functions.end()) {
+    meth = CI->second;
+    return true;
+  } else {
+    return false;
+  }
+}
 
 bool JnjvmModuleProvider::materializeFunction(Function *F, 
                                               std::string *ErrInfo) {
@@ -53,12 +73,14 @@
   if (!(F->hasNotBeenReadFromBitcode())) 
     return false;
   
-  JavaMethod* meth = functionDefs->lookup(F);
+  JavaMethod* meth = 0;
+  lookupFunction(F, meth);
   
   if (!meth) {
     // It's a callback
-    std::pair<Class*, uint32> * p = functions->lookup(F);
-    meth = staticLookup(p->first, p->second); 
+    std::pair<Class*, uint32> p;
+    lookupCallback(F, p);
+    meth = staticLookup(p.first, p.second); 
   }
   
   void* val = meth->compiledPtr();
@@ -94,3 +116,27 @@
   
   return mvm::jit::executionEngine->getPointerToGlobal(func);
 }
+
+llvm::Function* JnjvmModuleProvider::addCallback(Class* cl, uint32 index,
+                                                 Signdef* sign, bool stat) {
+  const llvm::FunctionType* type = 0;
+  JnjvmModule* M = cl->isolate->module;
+  LLVMSignatureInfo* LSI = M->getSignatureInfo(sign);
+  
+  if (stat) {
+    type = LSI->getStaticType();
+  } else {
+    type = LSI->getVirtualType();
+  }
+  Function* func = llvm::Function::Create(type, 
+                                          llvm::GlobalValue::GhostLinkage,
+                                          "callback",
+                                          cl->isolate->module);
+
+  callbacks.insert(std::make_pair(func, std::make_pair(cl, index)));
+  return func;
+}
+
+void JnjvmModuleProvider::addFunction(Function* F, JavaMethod* meth) {
+  functions.insert(std::make_pair(F, meth));
+}

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.h Mon May 19 06:56:16 2008
@@ -20,19 +20,59 @@
 
 class JnjvmModule;
 
+class FunctionMap :
+    public LockedMap<llvm::Function*, std::pair<Class*, uint32>*,
+                     std::less<llvm::Function*> > { 
+public:
+  static VirtualTable* VT; 
+  
+  FunctionMap() {
+    lock = mvm::Lock::allocNormal();
+  }
+
+  virtual void TRACER;
+};
+
+class FunctionDefMap :
+    public LockedMap<llvm::Function*, JavaMethod*,
+                     std::less<llvm::Function*> > { 
+public:
+  static VirtualTable* VT; 
+  
+  FunctionDefMap() {
+    lock = mvm::Lock::allocNormal();
+  }
+
+  virtual void TRACER;
+};
+
+
 class JnjvmModuleProvider : public ModuleProvider {
 private:
   JavaMethod* staticLookup(Class* caller, uint32 index);
+  
+  std::map<llvm::Function*, JavaMethod*> functions;
+  std::map<llvm::Function*, std::pair<Class*, uint32> > callbacks;
+  
+  bool lookupCallback(llvm::Function*, std::pair<Class*, uint32>&);
+  bool lookupFunction(llvm::Function*, JavaMethod*& meth);
+
+  typedef std::map<llvm::Function*, JavaMethod*>::iterator
+    function_iterator;  
+  
+  typedef std::map<llvm::Function*, std::pair<Class*, uint32> >::iterator
+    callback_iterator;  
+
 
 public:
-  FunctionMap* functions;
-  FunctionDefMap* functionDefs;
-  JnjvmModuleProvider(JnjvmModule *m, FunctionMap* fm, FunctionDefMap* fdm) {
+  
+  JnjvmModuleProvider(JnjvmModule *m) {
     TheModule = (Module*)m;
-    functions = fm;
-    functionDefs= fdm;
   }
   
+  llvm::Function* addCallback(Class* cl, uint32 index, Signdef* sign,
+                              bool stat);
+  void addFunction(llvm::Function* F, JavaMethod* meth);
 
   bool materializeFunction(Function *F, std::string *ErrInfo = 0);
   void* materializeFunction(JavaMethod* meth); 

Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Mon May 19 06:56:16 2008
@@ -221,30 +221,6 @@
   virtual void TRACER;
 };
 
-class FunctionMap :
-    public LockedMap<llvm::Function*, std::pair<Class*, uint32>*, std::less<llvm::Function*> > { 
-public:
-  static VirtualTable* VT; 
-  
-  FunctionMap() {
-    lock = mvm::Lock::allocNormal();
-  }
-
-  virtual void TRACER;
-};
-
-class FunctionDefMap :
-    public LockedMap<llvm::Function*, JavaMethod*, std::less<llvm::Function*> > { 
-public:
-  static VirtualTable* VT; 
-  
-  FunctionDefMap() {
-    lock = mvm::Lock::allocNormal();
-  }
-
-  virtual void TRACER;
-};
-
 class TypeMap :
     public LockedMap<const UTF8*, Typedef*, ltutf8 > {
 public:

Modified: vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.cpp Mon May 19 06:56:16 2008
@@ -7,8 +7,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "llvm/ExecutionEngine/GenericValue.h"
-
 #include <dlfcn.h>
 #include <stdlib.h>
 #include <string.h>

Modified: vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.h?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/NativeUtil.h Mon May 19 06:56:16 2008
@@ -12,9 +12,6 @@
 
 #include <jni.h>
 
-#include "llvm/ExecutionEngine/ExecutionEngine.h"
-
-
 namespace jnjvm {
 
 class ArrayObject;

Modified: vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp Mon May 19 06:56:16 2008
@@ -15,18 +15,12 @@
 #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;
 
-llvm::Function* ServiceDomain::serviceCallStartLLVM;
-llvm::Function* ServiceDomain::serviceCallStopLLVM;
-
 JavaMethod* ServiceDomain::ServiceErrorInit;
 Class* ServiceDomain::ServiceErrorClass;
 ServiceDomain* ServiceDomain::bootstrapDomain;
@@ -36,31 +30,6 @@
 JavaMethod* ServiceDomain::uninstallBundle;
 
 
-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) {
   Jnjvm::destroyer(sz);
   delete lock;
@@ -85,7 +54,7 @@
   service->bootClasspath = callingVM->bootClasspath;
   service->functions = vm_new(service, FunctionMap)();
   service->functionDefs = vm_new(service, FunctionDefMap)();
-  service->module = new llvm::Module("Service Domain");
+  service->module = new JnjvmModule("Service Domain");
   std::string str = 
     mvm::jit::executionEngine->getTargetData()->getStringRepresentation();
   service->module->setDataLayout(str);

Modified: vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h Mon May 19 06:56:16 2008
@@ -17,11 +17,6 @@
 
 #include "JavaIsolate.h"
 
-namespace llvm {
-  class GlobalVariable;
-  class Function;
-}
-
 namespace mvm {
   class Lock;
 }
@@ -35,8 +30,6 @@
 }DomainState;
 
 class ServiceDomain : public JavaIsolate {
-private:
-  llvm::GlobalVariable* _llvmDelegatee;
 public:
   static VirtualTable* VT;
 
@@ -44,7 +37,6 @@
   virtual void TRACER;
   virtual void destroyer(size_t sz);
   static ServiceDomain* allocateService(JavaIsolate* callingVM);
-  llvm::GlobalVariable* llvmDelegatee();
   static void serviceError(ServiceDomain* error, const char* str);
    
   mvm::Lock* lock;

Modified: vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp?rev=51245&r1=51244&r2=51245&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Mon May 19 06:56:16 2008
@@ -69,8 +69,6 @@
   INIT(StringMap);
   INIT(TypeMap);
   INIT(StaticInstanceMap);
-  INIT(FunctionMap);
-  INIT(FunctionDefMap);
   INIT(JavaIsolate);
   INIT(JavaString);
   INIT(CacheNode);
@@ -214,14 +212,10 @@
   loadedFields->MARK_AND_TRACE;
   javaTypes->MARK_AND_TRACE;
   TRACE_VECTOR(JavaObject*, gc_allocator, globalRefs);
-  //globalRefsLock->MARK_AND_TRACE;
-  functions->MARK_AND_TRACE;
-  functionDefs->MARK_AND_TRACE;
 #ifdef MULTIPLE_VM
   statics->MARK_AND_TRACE;
   delegatees->MARK_AND_TRACE;
 #endif
-  //protectModule->MARK_AND_TRACE;
 }
 
 void Reader::TRACER {
@@ -294,18 +288,6 @@
   }
 }
 
-void FunctionMap::TRACER {
-  for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
-    i->second->first->MARK_AND_TRACE;
-  }
-}
-
-void FunctionDefMap::TRACER {
-  for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
-    i->second->MARK_AND_TRACE;
-  }
-}
-
 void TypeMap::TRACER {
   for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
     i->second->MARK_AND_TRACE;





More information about the llvm-commits mailing list