[vmkit-commits] [vmkit] r61502 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMStackWalker.cpp Classpath/ClasspathVMSystemProperties.cpp VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaJIT.cpp VMCore/JavaUpcalls.cpp VMCore/JnjvmModule.cpp VMCore/JnjvmModule.h VMCore/JnjvmModuleProvider.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Dec 30 10:46:53 PST 2008


Author: geoffray
Date: Tue Dec 30 12:46:51 2008
New Revision: 61502

URL: http://llvm.org/viewvc/llvm-project?rev=61502&view=rev
Log:
Tell that a method has a method pointer directly to the method instead
of the module. The method is responsible for inserting the pointer to
the map.


Modified:
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp?rev=61502&r1=61501&r2=61502&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMStackWalker.cpp Tue Dec 30 12:46:51 2008
@@ -79,32 +79,4 @@
   return res;
 }
 
-extern "C" JavaObject* getCallingClass() {
-  
-  JavaObject* res = 0;
-
-  BEGIN_NATIVE_EXCEPTION(0)
-
-  JavaThread* th = JavaThread::get();
-  UserClass* cl = th->getCallingClass();
-  if (cl) res = cl->getClassDelegatee(th->getJVM());
-
-  END_NATIVE_EXCEPTION
-
-  return res;
-}
-
-extern "C" JavaObject* getCallingClassLoader() {
-  
-  JavaObject *res = 0;
-  
-  BEGIN_NATIVE_EXCEPTION(0)
-  JavaThread* th = JavaThread::get();
-  UserClass* cl = th->getCallingClass();
-  res = cl->classLoader->getJavaClassLoader();  
-  END_NATIVE_EXCEPTION
-
-  return res;
-}
-
 }

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp?rev=61502&r1=61501&r2=61502&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMSystemProperties.cpp Tue Dec 30 12:46:51 2008
@@ -123,7 +123,7 @@
   END_NATIVE_EXCEPTION
 }
 
-extern "C" void propertiesPostInit(JavaObject* prop) {
+extern "C" void nativePropertiesPostInit(JavaObject* prop) {
 
   BEGIN_NATIVE_EXCEPTION(0)
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Tue Dec 30 12:46:51 2008
@@ -9,10 +9,6 @@
 
 #define JNJVM_LOAD 0
 
-#include <vector>
-
-#include <cstring>
-
 #include "debug.h"
 #include "types.h"
 
@@ -31,6 +27,9 @@
 #include "LockedMap.h"
 #include "Reader.h"
 
+#include <cstring>
+#include <vector>
+
 using namespace jnjvm;
 
 const UTF8* Attribut::codeAttribut = 0;
@@ -372,12 +371,24 @@
     if (code == 0) {
       code = 
         classDef->classLoader->getModuleProvider()->materializeFunction(this);
+      Jnjvm* vm = JavaThread::get()->getJVM();
+      vm->addMethodInFunctionMap(this, code);
     }
     classDef->release();
     return code;
   }
 }
 
+void JavaMethod::setCompiledPtr(void* ptr) {
+  classDef->acquire();
+  assert(code == 0 && "Code of Java method already set!");
+  code = ptr;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  vm->addMethodInFunctionMap(this, code);
+  classDef->classLoader->getModule()->setMethod(this, ptr);
+  classDef->release();
+}
+
 const char* JavaMethod::printString() const {
   mvm::PrintBuffer *buf= mvm::PrintBuffer::alloc();
   buf->write("JavaMethod<");

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue Dec 30 12:46:51 2008
@@ -944,6 +944,10 @@
   ///
   void* compiledPtr();
 
+  /// setCompiledPtr - Set the pointer function to the method.
+  ///
+  void setCompiledPtr(void*);
+  
   /// JavaMethod - Delete the method as well as the cache enveloppes and
   /// attributes of the method.
   ///
@@ -958,7 +962,7 @@
   Attribut* attributs;
   uint16 nbAttributs;
 
-  /// caches - List of caches in this method. For all invokeinterface bytecode
+  /// enveloppes - List of caches in this method. For all invokeinterface bytecode
   /// there is a corresponding cache.
   ///
   Enveloppe* enveloppes;

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Tue Dec 30 12:46:51 2008
@@ -198,7 +198,7 @@
   
   Function* func = llvmFunction;
   if (jnjvm) {
-    module->executionEngine->addGlobalMapping(func, (void*)natPtr);
+    compilingMethod->setCompiledPtr((void*)natPtr);
     return llvmFunction;
   }
   

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Tue Dec 30 12:46:51 2008
@@ -242,6 +242,48 @@
   finaliseCreateInitialThread->invokeIntStatic(vm, inheritableThreadLocal, th);
 }
 
+extern "C" JavaString* nativeInternString(JavaString* obj) {
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  const UTF8* utf8 = obj->strToUTF8(vm);
+  return vm->UTF8ToStr(utf8);
+}
+
+extern "C" uint8 nativeIsArray(JavaObject* klass) {
+  UserCommonClass* cl = ((JavaObjectClass*)klass)->getClass();  
+  return (uint8)cl->isArray();
+}
+
+extern "C" JavaObject* nativeGetCallingClass() {
+  
+  JavaObject* res = 0;
+
+  BEGIN_NATIVE_EXCEPTION(0)
+
+  JavaThread* th = JavaThread::get();
+  UserClass* cl = th->getCallingClass();
+  if (cl) res = cl->getClassDelegatee(th->getJVM());
+
+  END_NATIVE_EXCEPTION
+
+  return res;
+}
+
+extern "C" JavaObject* nativeGetCallingClassLoader() {
+  
+  JavaObject *res = 0;
+  
+  BEGIN_NATIVE_EXCEPTION(0)
+  JavaThread* th = JavaThread::get();
+  UserClass* cl = th->getCallingClass();
+  res = cl->classLoader->getJavaClassLoader();  
+  END_NATIVE_EXCEPTION
+
+  return res;
+}
+
+extern "C" void nativePropertiesPostInit(JavaObject* prop);
+
+
 void Classpath::initialiseClasspath(JnjvmClassLoader* loader) {
 
   newClassLoader = 
@@ -427,11 +469,11 @@
   JavaMethod* internString =
     UPCALL_METHOD(loader, "java/lang/VMString", "intern",
                   "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC); 
-  loader->getModule()->setMethod(internString, "internString");
+  internString->setCompiledPtr((void*)(intptr_t)nativeInternString);
   
   JavaMethod* isArray =
     UPCALL_METHOD(loader, "java/lang/Class", "isArray", "()Z", ACC_VIRTUAL);
-  loader->getModule()->setMethod(isArray, "isArray");
+  isArray->setCompiledPtr((void*)(intptr_t)nativeIsArray);
 
 
   UPCALL_REFLECT_CLASS_EXCEPTION(loader, InvocationTargetException);
@@ -591,26 +633,17 @@
   JavaMethod* getCallingClass =
     UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClass",
                   "()Ljava/lang/Class;", ACC_STATIC);
-  loader->getModule()->setMethod(getCallingClass, "getCallingClass");
+  getCallingClass->setCompiledPtr((void*)(intptr_t)nativeGetCallingClass);
   
   JavaMethod* getCallingClassLoader =
     UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClassLoader",
                   "()Ljava/lang/ClassLoader;", ACC_STATIC);
-  loader->getModule()->setMethod(getCallingClassLoader, "getCallingClassLoader");
+  getCallingClassLoader->setCompiledPtr((void*)(intptr_t)
+                                        nativeGetCallingClassLoader);
   
   JavaMethod* postProperties =
     UPCALL_METHOD(loader, "gnu/classpath/VMSystemProperties", "postInit",
                   "(Ljava/util/Properties;)V", ACC_STATIC);
-  loader->getModule()->setMethod(postProperties, "propertiesPostInit");
+  postProperties->setCompiledPtr((void*)(intptr_t)nativePropertiesPostInit);
 }
 
-extern "C" JavaString* internString(JavaString* obj) {
-  Jnjvm* vm = JavaThread::get()->getJVM();
-  const UTF8* utf8 = obj->strToUTF8(vm);
-  return vm->UTF8ToStr(utf8);
-}
-
-extern "C" uint8 isArray(JavaObject* klass) {
-  UserCommonClass* cl = ((JavaObjectClass*)klass)->getClass();  
-  return (uint8)cl->isArray();
-}

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Tue Dec 30 12:46:51 2008
@@ -1819,10 +1819,11 @@
   return PrimitiveArrayVT;
 }
 
-void JnjvmModule::setMethod(JavaMethod* meth, const char* name) {
-  llvm::Function* func = getMethodInfo(meth)->getMethod();
-  func->setName(name);
-  func->setLinkage(llvm::GlobalValue::ExternalLinkage);
+void JnjvmModule::setMethod(JavaMethod* meth, void* ptr) {
+  Function* func = getMethodInfo(meth)->getMethod();
+  assert(ptr && "No value given");
+  executionEngine->addGlobalMapping(func, ptr);
+  func->setLinkage(GlobalValue::ExternalLinkage);
 }
 
 void JnjvmModule::printStats() {
@@ -1846,7 +1847,7 @@
 }
 
 
-void* JnjvmModule::getMethod(JavaMethod* meth) {
+Function* 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=61502&r1=61501&r2=61502&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Tue Dec 30 12:46:51 2008
@@ -367,8 +367,8 @@
 
   static void resolveVirtualClass(Class* cl);
   static void resolveStaticClass(Class* cl);
-  static void setMethod(JavaMethod* meth, const char* name);
-  static void* getMethod(JavaMethod* meth);
+  static void setMethod(JavaMethod* meth, void* ptr);
+  static llvm::Function* getMethod(JavaMethod* meth);
 
   static LLVMSignatureInfo* getSignatureInfo(Signdef* sign) {
     return sign->getInfo<LLVMSignatureInfo>();

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Tue Dec 30 12:46:51 2008
@@ -108,9 +108,6 @@
   
   void* res = mvm::MvmModule::executionEngine->getPointerToGlobal(func);
   func->deleteBody();
-  
-  Jnjvm* vm = JavaThread::get()->getJVM();
-  vm->addMethodInFunctionMap(meth, res);
 
   return res;
 }





More information about the vmkit-commits mailing list