[vmkit-commits] [vmkit] r73764 - /vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Fri Jun 19 01:29:43 PDT 2009


Author: geoffray
Date: Fri Jun 19 03:29:18 2009
New Revision: 73764

URL: http://llvm.org/viewvc/llvm-project?rev=73764&view=rev
Log:
Forgot that file from the previous commit.


Added:
    vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h

Added: vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h?rev=73764&view=auto

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h (added)
+++ vmkit/trunk/lib/JnJVM/VMCore/LinkJavaRuntime.h Fri Jun 19 03:29:18 2009
@@ -0,0 +1,143 @@
+//===--------------------- LinkJavaRuntime.h ------------------------------===//
+//=== ------------- Reference all runtime functions -----------------------===//
+//
+//                              JnJVM
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef JNJVM_LINK_JAVA_RUNTIME_H
+#define JNJVM_LINK_JAVA_RUNTIME_H
+
+
+namespace jnjvm {
+  class CacheNode;
+  class JavaObject;
+  class UserClass;
+  class UserClassArray;
+  class UserCommonClass;
+  class UserConstantPool;
+  class JavaVirtualTable;
+  class JavaMethod;
+  class Jnjvm;
+}
+
+using namespace jnjvm;
+
+extern "C" void* jnjvmInterfaceLookup(CacheNode* cache, JavaObject *obj);
+extern "C" void* jnjvmVirtualFieldLookup(UserClass* caller, uint32 index);
+extern "C" void* jnjvmStaticFieldLookup(UserClass* caller, uint32 index);
+extern "C" void* jnjvmVirtualTableLookup(UserClass* caller, uint32 index, ...);
+extern "C" void* jnjvmClassLookup(UserClass* caller, uint32 index);
+extern "C" UserCommonClass* jnjvmRuntimeInitialiseClass(UserClass* cl);
+extern "C" JavaObject* jnjvmRuntimeDelegatee(UserCommonClass* cl);
+extern "C" JavaArray* jnjvmMultiCallNew(UserClassArray* cl, uint32 len, ...);
+extern "C" UserClassArray* jnjvmGetArrayClass(UserCommonClass*,
+                                              UserClassArray**);
+extern "C" void jnjvmJNIProceedPendingException();
+extern "C" void* jnjvmGetSJLJBuffer();
+extern "C" void jnjvmJavaObjectAquire(JavaObject* obj);
+extern "C" void jnjvmJavaObjectRelease(JavaObject* obj);
+extern "C" void jnjvmThrowException(JavaObject* obj);
+extern "C" void jnjvmOverflowThinLock(JavaObject* obj);
+extern "C" JavaObject* jnjvmNullPointerException();
+extern "C" JavaObject* jnjvmNegativeArraySizeException(sint32 val);
+extern "C" JavaObject* jnjvmOutOfMemoryError(sint32 val);
+extern "C" JavaObject* jnjvmStackOverflowError();
+extern "C" JavaObject* jnjvmArithmeticException();
+extern "C" JavaObject* jnjvmClassCastException(JavaObject* obj,
+                                               UserCommonClass* cl);
+extern "C" JavaObject* jnjvmIndexOutOfBoundsException(JavaObject* obj,
+                                                      sint32 index);
+extern "C" JavaObject* jnjvmArrayStoreException(JavaVirtualTable* VT);
+extern "C" void jnjvmThrowExceptionFromJIT();
+extern "C" void jnjvmPrintMethodStart(JavaMethod* meth);
+extern "C" void jnjvmPrintMethodEnd(JavaMethod* meth);
+extern "C" void jnjvmPrintExecution(uint32 opcode, uint32 index,
+                                    JavaMethod* meth);
+
+
+#ifdef SERVICE
+extern "C" void jnjvmServiceCallStart(Jnjvm* OldService,
+                                      Jnjvm* NewService);
+extern "C" void jnjvmServiceCallStop(Jnjvm* OldService,
+                                     Jnjvm* NewService);
+#endif
+
+
+
+#ifdef ISOLATE
+extern "C" void* jnjvmStringLookup(UserClass* cl, uint32 index);
+
+#ifdef ISOLATE_SHARING
+extern "C" void* jnjvmEnveloppeLookup(UserClass* cl, uint32 index);
+extern "C" void* jnjvmStaticCtpLookup(UserClass* cl, uint32 index);
+extern "C" UserConstantPool* jnjvmSpecialCtpLookup(UserConstantPool* ctpInfo,
+                                                   uint32 index,
+                                                   UserConstantPool** res);
+#endif
+
+#endif
+
+
+namespace {
+  struct ForceRuntimeLinking {
+    ForceRuntimeLinking() {
+      // We must reference the passes in such a way that compilers will not
+      // delete it all as dead code, even with whole program optimization,
+      // yet is effectively a NO-OP. As the compiler isn't smart enough
+      // to know that getenv() never returns -1, this will do the job.
+      if (std::getenv("bar") != (char*) -1) 
+        return;
+      
+      (void) jnjvmInterfaceLookup(0, 0);
+      (void) jnjvmVirtualFieldLookup(0, 0);
+      (void) jnjvmStaticFieldLookup(0, 0);
+      (void) jnjvmVirtualTableLookup(0, 0);
+      (void) jnjvmClassLookup(0, 0);
+      (void) jnjvmRuntimeInitialiseClass(0);
+      (void) jnjvmRuntimeDelegatee(0);
+      (void) jnjvmMultiCallNew(0, 0);
+      (void) jnjvmGetArrayClass(0, 0);
+      (void) jnjvmJNIProceedPendingException();
+      (void) jnjvmGetSJLJBuffer();
+      (void) jnjvmJavaObjectAquire(0);
+      (void) jnjvmJavaObjectRelease(0);
+      (void) jnjvmThrowException(0);
+      (void) jnjvmOverflowThinLock(0);
+      (void) jnjvmNullPointerException();
+      (void) jnjvmNegativeArraySizeException(0);
+      (void) jnjvmOutOfMemoryError(0);
+      (void) jnjvmStackOverflowError();
+      (void) jnjvmArithmeticException();
+      (void) jnjvmClassCastException(0, 0);
+      (void) jnjvmIndexOutOfBoundsException(0, 0);
+      (void) jnjvmArrayStoreException(0);
+      (void) jnjvmThrowExceptionFromJIT();
+      (void) jnjvmPrintMethodStart(0);
+      (void) jnjvmPrintMethodEnd(0);
+      (void) jnjvmPrintExecution(0, 0, 0);
+#ifdef SERVICE
+      (void) jnjvmServiceCallStart(0, 0);
+      (void) jnjvmServiceCallStop(0, 0);
+#endif
+
+#ifdef ISOLATE
+      (void) jnjvmStringLookup(0, 0);
+
+#ifdef ISOLATE_SHARING
+      (void) jnjvmEnveloppeLookup(0, 0);
+      (void) jnjvmStaticCtpLookup(0, 0);
+      (void) jnjvmSpecialCtpLookup(0, 0, 0);
+#endif
+
+#endif
+    }
+  } ForcePassLinking; // Force link by creating a global definition.
+}
+  
+
+
+#endif //JNJVM_LINK_JAVA_RUNTIME_H





More information about the vmkit-commits mailing list