[vmkit-commits] [vmkit] r61925 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaUpcalls.cpp JnjvmClassLoader.cpp JnjvmClassLoader.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Jan 8 07:33:41 PST 2009
Author: geoffray
Date: Thu Jan 8 09:33:39 2009
New Revision: 61925
URL: http://llvm.org/viewvc/llvm-project?rev=61925&view=rev
Log:
Temporary hack to take into account llvm's inlining.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=61925&r1=61924&r2=61925&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Thu Jan 8 09:33:39 2009
@@ -293,8 +293,13 @@
BEGIN_NATIVE_EXCEPTION(0)
JavaThread* th = JavaThread::get();
- UserClass* cl = th->getCallingClassLevel(index - 1);
- if (cl) res = cl->getClassDelegatee(th->getJVM());
+ Jnjvm* vm = th->getJVM();
+ // Temporary hack because we know llvm inlines a call in the call stack
+ // to this function. And this function is called only in places that
+ // we know.
+ index = vm->bootstrapLoader->nativeHandle ? index - 2 : index - 1;
+ UserClass* cl = th->getCallingClassLevel(index);
+ if (cl) res = cl->getClassDelegatee(vm);
END_NATIVE_EXCEPTION
return res;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=61925&r1=61924&r2=61925&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Thu Jan 8 09:33:39 2009
@@ -162,10 +162,10 @@
// Now that native types have been loaded, try to find if we have a
// pre-compiled rt.jar
- void* handle = dlopen(BOOTLIBNAME, RTLD_LAZY | RTLD_GLOBAL);
- if (handle) {
+ nativeHandle = dlopen(BOOTLIBNAME, RTLD_LAZY | RTLD_GLOBAL);
+ if (nativeHandle) {
// Found it!
- SuperArray = (Class*)dlsym(handle, "java.lang.Object");
+ SuperArray = (Class*)dlsym(nativeHandle, "java.lang.Object");
if (SuperArray) {
ClassArray::SuperArray = (Class*)SuperArray->getInternal();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=61925&r1=61924&r2=61925&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.h Thu Jan 8 09:33:39 2009
@@ -332,6 +332,10 @@
virtual JavaString* UTF8ToStr(const UTF8* utf8);
+ /// nativeHandle - Non-null handle if boot classes were static compiled in
+ /// a dynamic library
+ ///
+ void* nativeHandle;
/// upcalls - Upcall classes, fields and methods so that C++ code can call
/// Java code.
More information about the vmkit-commits
mailing list