[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