[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