blob: b0417388f69f33bb923d692020df8947bb160ff9 [file] [log] [blame]
//===--------------------- 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* jnjvmStringLookup(UserClass* cl, 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 jnjvmEndJNI();
extern "C" void* jnjvmStartJNI();
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_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
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) jnjvmEndJNI();
(void) jnjvmStartJNI();
(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);
(void) jnjvmStringLookup(0, 0);
#ifdef SERVICE
(void) jnjvmServiceCallStart(0, 0);
(void) jnjvmServiceCallStop(0, 0);
#endif
#ifdef ISOLATE_SHARING
(void) jnjvmEnveloppeLookup(0, 0);
(void) jnjvmStaticCtpLookup(0, 0);
(void) jnjvmSpecialCtpLookup(0, 0, 0);
#endif
}
} ForcePassLinking; // Force link by creating a global definition.
}
#endif //JNJVM_LINK_JAVA_RUNTIME_H