[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