Looks good!<br><br><div class="gmail_quote">On Tue, Oct 25, 2011 at 11:31 PM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Inlined below, hopefully a good deal clearer.<br>
<br>
I'm not sure why it's not showing up this way (and instead shows as<br>
huge diff), but all the new files in OpenJDK are copies of the same<br>
file from GNUClasspath.<br>
<br>
"Fixes" for JavaUpcalls and ClasspathReflect coming--they're of course<br>
wrong as-is in the OpenJDK version.<br>
<br>
~Will<br>
<br>
>From c34f617a97a90e5a1f3391f99035ef1c349ec19d Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org">w@wdtz.org</a>><br>
Date: Fri, 14 Oct 2011 03:28:58 -0500<br>
Subject: [PATCH 3/3] Move Classpath common to shared, copy impl-specific<br>
files to OpenJDK<br>
<br>
These files need to now be updated for OpenJDK not Classpath.<br>
---<br>
lib/J3/ClassLib/{GNUClasspath => }/Classpath.inc | 0<br>
.../{GNUClasspath => }/ClasspathConstructor.inc | 0<br>
.../ClassLib/{GNUClasspath => }/ClasspathField.inc | 0<br>
.../{GNUClasspath => }/ClasspathMethod.inc | 0<br>
lib/J3/ClassLib/GNUClasspath/Makefile | 3 +-<br>
lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp | 30 +<br>
lib/J3/ClassLib/OpenJDK/ClasspathReflect.h | 222 ++++<br>
lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp | 1067 ++++++++++++++++++++<br>
lib/J3/ClassLib/OpenJDK/JavaUpcalls.h | 283 ++++++<br>
9 files changed, 1604 insertions(+), 1 deletions(-)<br>
rename lib/J3/ClassLib/{GNUClasspath => }/Classpath.inc (97%)<br>
rename lib/J3/ClassLib/{GNUClasspath => }/ClasspathConstructor.inc (97%)<br>
rename lib/J3/ClassLib/{GNUClasspath => }/ClasspathField.inc (99%)<br>
rename lib/J3/ClassLib/{GNUClasspath => }/ClasspathMethod.inc (96%)<br>
create mode 100644 lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
create mode 100644 lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
create mode 100644 lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp<br>
create mode 100644 lib/J3/ClassLib/OpenJDK/JavaUpcalls.h<br>
<br>
diff --git a/lib/J3/ClassLib/GNUClasspath/Classpath.inc<br>
b/lib/J3/ClassLib/Classpath.inc<br>
similarity index 97%<br>
rename from lib/J3/ClassLib/GNUClasspath/Classpath.inc<br>
rename to lib/J3/ClassLib/Classpath.inc<br>
index 792b606..b33a5f6 100644<br>
diff --git a/lib/J3/ClassLib/GNUClasspath/ClasspathConstructor.inc<br>
b/lib/J3/ClassLib/ClasspathConstructor.inc<br>
similarity index 97%<br>
rename from lib/J3/ClassLib/GNUClasspath/ClasspathConstructor.inc<br>
rename to lib/J3/ClassLib/ClasspathConstructor.inc<br>
index 90a315b..8c506f4 100644<br>
diff --git a/lib/J3/ClassLib/GNUClasspath/ClasspathField.inc<br>
b/lib/J3/ClassLib/ClasspathField.inc<br>
similarity index 99%<br>
rename from lib/J3/ClassLib/GNUClasspath/ClasspathField.inc<br>
rename to lib/J3/ClassLib/ClasspathField.inc<br>
index 5082caa..e56c82f 100644<br>
diff --git a/lib/J3/ClassLib/GNUClasspath/ClasspathMethod.inc<br>
b/lib/J3/ClassLib/ClasspathMethod.inc<br>
similarity index 96%<br>
rename from lib/J3/ClassLib/GNUClasspath/ClasspathMethod.inc<br>
rename to lib/J3/ClassLib/ClasspathMethod.inc<br>
index ee5792d..fcfea1c 100644<br>
diff --git a/lib/J3/ClassLib/GNUClasspath/Makefile<br>
b/lib/J3/ClassLib/GNUClasspath/Makefile<br>
index 0f910b5..f7e83cc 100644<br>
--- a/lib/J3/ClassLib/GNUClasspath/Makefile<br>
+++ b/lib/J3/ClassLib/GNUClasspath/Makefile<br>
@@ -20,4 +20,5 @@ MODULE_WITH_GC = Classpath<br>
<br>
include $(LEVEL)/Makefile.common<br>
<br>
-CXX.Flags += -I$(PROJ_SRC_DIR)/../../VMCore -I$(PROJ_SRC_ROOT)/include/j3 -I..<br>
+CXX.Flags += -I$(PROJ_SRC_DIR)/../../VMCore -I$(PROJ_SRC_ROOT)/include/j3<br>
+CXX.Flags += -I$(PROJ_SRC_DIR)/.. -I$(PROJ_OBJ_DIR)/..<br>
diff --git a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
new file mode 100644<br>
index 0000000..3d69fa4<br>
--- /dev/null<br>
+++ b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
@@ -0,0 +1,30 @@<br>
+//===- ClasspathReflect.cpp - Internal representation of core system<br>
classes -//<br>
+//<br>
+// The VMKit project<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#include "ClasspathReflect.h"<br>
+#include "JavaClass.h"<br>
+#include "JavaObject.h"<br>
+#include "JavaThread.h"<br>
+<br>
+namespace j3 {<br>
+<br>
+JavaMethod* JavaObjectConstructor::getInternalMethod(JavaObjectConstructor*<br>
self) {<br>
+ llvm_gcroot(self, 0);<br>
+ UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+ return &(cls->asClass()->virtualMethods[self->slot]);<br>
+}<br>
+<br>
+<br>
+JavaMethod* JavaObjectMethod::getInternalMethod(JavaObjectMethod* self) {<br>
+ llvm_gcroot(self, 0);<br>
+ UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+ return &(cls->asClass()->virtualMethods[self->slot]);<br>
+}<br>
+<br>
+}<br>
diff --git a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
new file mode 100644<br>
index 0000000..494e444<br>
--- /dev/null<br>
+++ b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
@@ -0,0 +1,222 @@<br>
+//===-- ClasspathReflect.h - Internal representation of core system<br>
classes --//<br>
+//<br>
+// The VMKit project<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#ifndef JNJVM_CLASSPATH_REFLECT_H<br>
+#define JNJVM_CLASSPATH_REFLECT_H<br>
+<br>
+#include "MvmGC.h"<br>
+<br>
+#include "JavaClass.h"<br>
+#include "JavaObject.h"<br>
+#include "JavaThread.h"<br>
+<br>
+extern "C" j3::JavaObject* internalFillInStackTrace(j3::JavaObject*);<br>
+<br>
+namespace j3 {<br>
+<br>
+class JavaObjectClass : public JavaObject {<br>
+private:<br>
+ JavaObject* signers;<br>
+ JavaObject* pd;<br>
+ UserCommonClass* vmdata;<br>
+ JavaObject* constructor;<br>
+<br>
+public:<br>
+<br>
+ static UserCommonClass* getClass(JavaObjectClass* cl) {<br>
+ llvm_gcroot(cl, 0);<br>
+ return cl->vmdata;<br>
+ }<br>
+<br>
+ static void setClass(JavaObjectClass* cl, UserCommonClass* vmdata) {<br>
+ llvm_gcroot(cl, 0);<br>
+ cl->vmdata = vmdata;<br>
+ }<br>
+<br>
+ static void setProtectionDomain(JavaObjectClass* cl, JavaObject* pd) {<br>
+ llvm_gcroot(cl, 0);<br>
+ llvm_gcroot(pd, 0);<br>
+ mvm::Collector::objectReferenceWriteBarrier(<br>
+ (gc*)cl, (gc**)&(cl->pd), (gc*)pd);<br>
+ }<br>
+<br>
+ static JavaObject* getProtectionDomain(JavaObjectClass* cl) {<br>
+ llvm_gcroot(cl, 0);<br>
+ return cl->pd;<br>
+ }<br>
+<br>
+ static void staticTracer(JavaObjectClass* obj, word_t closure) {<br>
+ mvm::Collector::markAndTrace(obj, &obj->pd, closure);<br>
+ mvm::Collector::markAndTrace(obj, &obj->signers, closure);<br>
+ mvm::Collector::markAndTrace(obj, &obj->constructor, closure);<br>
+ if (obj->vmdata) {<br>
+ JavaObject** Obj = obj->vmdata->classLoader->getJavaClassLoaderPtr();<br>
+ if (*Obj) mvm::Collector::markAndTraceRoot(Obj, closure);<br>
+ }<br>
+ }<br>
+};<br>
+<br>
+class JavaObjectField : public JavaObject {<br>
+private:<br>
+ uint8 flag;<br>
+ JavaObjectClass* declaringClass;<br>
+ JavaObject* name;<br>
+ uint32 slot;<br>
+<br>
+public:<br>
+<br>
+ static void staticTracer(JavaObjectField* obj, word_t closure) {<br>
+ mvm::Collector::markAndTrace(obj, &obj->name, closure);<br>
+ mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);<br>
+ }<br>
+<br>
+ static JavaField* getInternalField(JavaObjectField* self) {<br>
+ llvm_gcroot(self, 0);<br>
+ UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+ return &(cls->asClass()->virtualFields[self->slot]);<br>
+ }<br>
+<br>
+ static UserClass* getClass(JavaObjectField* self) {<br>
+ llvm_gcroot(self, 0);<br>
+ UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+ return cls->asClass();<br>
+ }<br>
+<br>
+};<br>
+<br>
+class JavaObjectMethod : public JavaObject {<br>
+private:<br>
+ uint8 flag;<br>
+ JavaObjectClass* declaringClass;<br>
+ JavaObject* name;<br>
+ uint32 slot;<br>
+<br>
+public:<br>
+<br>
+ static void staticTracer(JavaObjectMethod* obj, word_t closure) {<br>
+ mvm::Collector::markAndTrace(obj, &obj->name, closure);<br>
+ mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);<br>
+ }<br>
+<br>
+ static JavaMethod* getInternalMethod(JavaObjectMethod* self);<br>
+<br>
+ static UserClass* getClass(JavaObjectMethod* self) {<br>
+ llvm_gcroot(self, 0);<br>
+ UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+ return cls->asClass();<br>
+ }<br>
+<br>
+};<br>
+<br>
+class JavaObjectConstructor : public JavaObject {<br>
+private:<br>
+ uint8 flag;<br>
+ JavaObjectClass* declaringClass;<br>
+ uint32 slot;<br>
+<br>
+public:<br>
+ static void staticTracer(JavaObjectConstructor* obj, word_t closure) {<br>
+ mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);<br>
+ }<br>
+<br>
+ static JavaMethod* getInternalMethod(JavaObjectConstructor* self);<br>
+<br>
+ static UserClass* getClass(JavaObjectConstructor* self) {<br>
+ llvm_gcroot(self, 0);<br>
+ UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+ return cls->asClass();<br>
+ }<br>
+<br>
+};<br>
+<br>
+class JavaObjectVMThread : public JavaObject {<br>
+private:<br>
+ JavaObject* thread;<br>
+ bool running;<br>
+ JavaThread* vmdata;<br>
+<br>
+public:<br>
+ static void staticTracer(JavaObjectVMThread* obj, word_t closure) {<br>
+ mvm::Collector::markAndTrace(obj, &obj->thread, closure);<br>
+ }<br>
+<br>
+ static void setVmdata(JavaObjectVMThread* vmthread,<br>
+ JavaThread* internal_thread) {<br>
+ llvm_gcroot(vmthread, 0);<br>
+ vmthread->vmdata = internal_thread;<br>
+ }<br>
+<br>
+};<br>
+<br>
+<br>
+class JavaObjectThrowable : public JavaObject {<br>
+private:<br>
+ JavaObject* detailedMessage;<br>
+ JavaObject* cause;<br>
+ JavaObject* stackTrace;<br>
+ JavaObject* vmState;<br>
+<br>
+public:<br>
+<br>
+ static void setDetailedMessage(JavaObjectThrowable* self, JavaObject* obj) {<br>
+ llvm_gcroot(self, 0);<br>
+ llvm_gcroot(obj, 0);<br>
+ mvm::Collector::objectReferenceWriteBarrier(<br>
+ (gc*)self, (gc**)&(self->detailedMessage), (gc*)obj);<br>
+ }<br>
+<br>
+ static void fillInStackTrace(JavaObjectThrowable* self) {<br>
+ JavaObject* stackTrace = NULL;<br>
+ llvm_gcroot(self, 0);<br>
+ llvm_gcroot(stackTrace, 0);<br>
+<br>
+ stackTrace = internalFillInStackTrace(self);<br>
+ mvm::Collector::objectReferenceWriteBarrier(<br>
+ (gc*)self, (gc**)&(self->vmState), (gc*)stackTrace);<br>
+<br>
+ mvm::Collector::objectReferenceWriteBarrier(<br>
+ (gc*)self, (gc**)&(self->cause), (gc*)self);<br>
+<br>
+ self->stackTrace = NULL;<br>
+ }<br>
+};<br>
+<br>
+class JavaObjectReference : public JavaObject {<br>
+private:<br>
+ JavaObject* referent;<br>
+ JavaObject* queue;<br>
+ JavaObject* nextOnQueue;<br>
+<br>
+public:<br>
+ static void init(JavaObjectReference* self, JavaObject* r, JavaObject* q) {<br>
+ llvm_gcroot(self, 0);<br>
+ llvm_gcroot(r, 0);<br>
+ llvm_gcroot(q, 0);<br>
+ mvm::Collector::objectReferenceWriteBarrier(<br>
+ (gc*)self, (gc**)&(self->referent), (gc*)r);<br>
+ mvm::Collector::objectReferenceWriteBarrier(<br>
+ (gc*)self, (gc**)&(self->queue), (gc*)q);<br>
+ }<br>
+<br>
+ static JavaObject** getReferentPtr(JavaObjectReference* self) {<br>
+ llvm_gcroot(self, 0);<br>
+ return &(self->referent);<br>
+ }<br>
+<br>
+ static void setReferent(JavaObjectReference* self, JavaObject* r) {<br>
+ llvm_gcroot(self, 0);<br>
+ llvm_gcroot(r, 0);<br>
+ // No write barrier: this is only called by the GC.<br>
+ self->referent = r;<br>
+ }<br>
+};<br>
+<br>
+}<br>
+<br>
+#endif<br>
diff --git a/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp<br>
b/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp<br>
new file mode 100644<br>
index 0000000..11226b3<br>
--- /dev/null<br>
+++ b/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp<br>
@@ -0,0 +1,1067 @@<br>
+//===-------- JavaUpcalls.cpp - Upcalls to Java entities<br>
------------------===//<br>
+//<br>
+// The VMKit project<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#include "ClasspathReflect.h"<br>
+#include "JavaAccess.h"<br>
+#include "JavaClass.h"<br>
+#include "JavaObject.h"<br>
+#include "JavaString.h"<br>
+#include "JavaThread.h"<br>
+#include "JavaUpcalls.h"<br>
+#include "Jnjvm.h"<br>
+#include "ReferenceQueue.h"<br>
+<br>
+#define COMPILE_METHODS(cl) \<br>
+ for (CommonClass::method_iterator i = cl->virtualMethods.begin(), \<br>
+ e = cl->virtualMethods.end(); i!= e; ++i) { \<br>
+ i->second->compiledPtr(); \<br>
+ } \<br>
+ \<br>
+ for (CommonClass::method_iterator i = cl->staticMethods.begin(), \<br>
+ e = cl->staticMethods.end(); i!= e; ++i) { \<br>
+ i->second->compiledPtr(); \<br>
+ }<br>
+<br>
+<br>
+using namespace j3;<br>
+<br>
+Class* Classpath::newThread;<br>
+Class* Classpath::newVMThread;<br>
+JavaField* Classpath::assocThread;<br>
+JavaField* Classpath::vmdataVMThread;<br>
+JavaMethod* Classpath::finaliseCreateInitialThread;<br>
+JavaMethod* Classpath::initVMThread;<br>
+JavaMethod* Classpath::initThread;<br>
+JavaMethod* Classpath::groupAddThread;<br>
+JavaField* Classpath::threadName;<br>
+JavaField* Classpath::groupName;<br>
+JavaMethod* Classpath::initGroup;<br>
+JavaField* Classpath::priority;<br>
+JavaField* Classpath::daemon;<br>
+JavaField* Classpath::group;<br>
+JavaField* Classpath::running;<br>
+Class* Classpath::threadGroup;<br>
+JavaField* Classpath::rootGroup;<br>
+JavaField* Classpath::vmThread;<br>
+JavaMethod* Classpath::getUncaughtExceptionHandler;<br>
+JavaMethod* Classpath::uncaughtException;<br>
+Class* Classpath::inheritableThreadLocal;<br>
+<br>
+JavaMethod* Classpath::runVMThread;<br>
+JavaMethod* Classpath::setContextClassLoader;<br>
+JavaMethod* Classpath::getSystemClassLoader;<br>
+Class* Classpath::newString;<br>
+Class* Classpath::newClass;<br>
+Class* Classpath::newThrowable;<br>
+Class* Classpath::newException;<br>
+JavaMethod* Classpath::initClass;<br>
+JavaMethod* Classpath::initClassWithProtectionDomain;<br>
+JavaField* Classpath::vmdataClass;<br>
+JavaMethod* Classpath::setProperty;<br>
+JavaMethod* Classpath::initString;<br>
+JavaMethod* Classpath::getCallingClassLoader;<br>
+JavaMethod* Classpath::initConstructor;<br>
+Class* Classpath::newConstructor;<br>
+ClassArray* Classpath::constructorArrayClass;<br>
+ClassArray* Classpath::constructorArrayAnnotation;<br>
+JavaField* Classpath::constructorSlot;<br>
+JavaMethod* Classpath::initMethod;<br>
+JavaMethod* Classpath::initField;<br>
+Class* Classpath::newField;<br>
+Class* Classpath::newMethod;<br>
+ClassArray* Classpath::methodArrayClass;<br>
+ClassArray* Classpath::fieldArrayClass;<br>
+JavaField* Classpath::methodSlot;<br>
+JavaField* Classpath::fieldSlot;<br>
+ClassArray* Classpath::classArrayClass;<br>
+JavaMethod* Classpath::loadInClassLoader;<br>
+JavaMethod* Classpath::initVMThrowable;<br>
+JavaField* Classpath::vmDataVMThrowable;<br>
+Class* Classpath::newVMThrowable;<br>
+JavaField* Classpath::bufferAddress;<br>
+JavaField* Classpath::dataPointer32;<br>
+JavaField* Classpath::dataPointer64;<br>
+Class* Classpath::newPointer32;<br>
+Class* Classpath::newPointer64;<br>
+Class* Classpath::newDirectByteBuffer;<br>
+JavaField* Classpath::vmdataClassLoader;<br>
+JavaMethod* Classpath::InitDirectByteBuffer;<br>
+Class* Classpath::newClassLoader;<br>
+<br>
+<br>
+JavaField* Classpath::boolValue;<br>
+JavaField* Classpath::byteValue;<br>
+JavaField* Classpath::shortValue;<br>
+JavaField* Classpath::charValue;<br>
+JavaField* Classpath::intValue;<br>
+JavaField* Classpath::longValue;<br>
+JavaField* Classpath::floatValue;<br>
+JavaField* Classpath::doubleValue;<br>
+<br>
+Class* Classpath::newStackTraceElement;<br>
+ClassArray* Classpath::stackTraceArray;<br>
+JavaMethod* Classpath::initStackTraceElement;<br>
+<br>
+Class* Classpath::voidClass;<br>
+Class* Classpath::boolClass;<br>
+Class* Classpath::byteClass;<br>
+Class* Classpath::shortClass;<br>
+Class* Classpath::charClass;<br>
+Class* Classpath::intClass;<br>
+Class* Classpath::floatClass;<br>
+Class* Classpath::doubleClass;<br>
+Class* Classpath::longClass;<br>
+<br>
+Class* Classpath::vmStackWalker;<br>
+<br>
+Class* Classpath::InvocationTargetException;<br>
+Class* Classpath::ArrayStoreException;<br>
+Class* Classpath::ClassCastException;<br>
+Class* Classpath::IllegalMonitorStateException;<br>
+Class* Classpath::IllegalArgumentException;<br>
+Class* Classpath::InterruptedException;<br>
+Class* Classpath::IndexOutOfBoundsException;<br>
+Class* Classpath::ArrayIndexOutOfBoundsException;<br>
+Class* Classpath::NegativeArraySizeException;<br>
+Class* Classpath::NullPointerException;<br>
+Class* Classpath::SecurityException;<br>
+Class* Classpath::ClassFormatError;<br>
+Class* Classpath::ClassCircularityError;<br>
+Class* Classpath::NoClassDefFoundError;<br>
+Class* Classpath::UnsupportedClassVersionError;<br>
+Class* Classpath::NoSuchFieldError;<br>
+Class* Classpath::NoSuchMethodError;<br>
+Class* Classpath::InstantiationError;<br>
+Class* Classpath::InstantiationException;<br>
+Class* Classpath::IllegalAccessError;<br>
+Class* Classpath::IllegalAccessException;<br>
+Class* Classpath::VerifyError;<br>
+Class* Classpath::ExceptionInInitializerError;<br>
+Class* Classpath::LinkageError;<br>
+Class* Classpath::AbstractMethodError;<br>
+Class* Classpath::UnsatisfiedLinkError;<br>
+Class* Classpath::InternalError;<br>
+Class* Classpath::OutOfMemoryError;<br>
+Class* Classpath::StackOverflowError;<br>
+Class* Classpath::UnknownError;<br>
+Class* Classpath::ClassNotFoundException;<br>
+Class* Classpath::ArithmeticException;<br>
+<br>
+JavaMethod* Classpath::InitInvocationTargetException;<br>
+JavaMethod* Classpath::InitArrayStoreException;<br>
+JavaMethod* Classpath::InitClassCastException;<br>
+JavaMethod* Classpath::InitIllegalMonitorStateException;<br>
+JavaMethod* Classpath::InitIllegalArgumentException;<br>
+JavaMethod* Classpath::InitInterruptedException;<br>
+JavaMethod* Classpath::InitIndexOutOfBoundsException;<br>
+JavaMethod* Classpath::InitArrayIndexOutOfBoundsException;<br>
+JavaMethod* Classpath::InitNegativeArraySizeException;<br>
+JavaMethod* Classpath::InitNullPointerException;<br>
+JavaMethod* Classpath::InitSecurityException;<br>
+JavaMethod* Classpath::InitClassFormatError;<br>
+JavaMethod* Classpath::InitClassCircularityError;<br>
+JavaMethod* Classpath::InitNoClassDefFoundError;<br>
+JavaMethod* Classpath::InitUnsupportedClassVersionError;<br>
+JavaMethod* Classpath::InitNoSuchFieldError;<br>
+JavaMethod* Classpath::InitNoSuchMethodError;<br>
+JavaMethod* Classpath::InitInstantiationError;<br>
+JavaMethod* Classpath::InitInstantiationException;<br>
+JavaMethod* Classpath::InitIllegalAccessError;<br>
+JavaMethod* Classpath::InitIllegalAccessException;<br>
+JavaMethod* Classpath::InitVerifyError;<br>
+JavaMethod* Classpath::InitExceptionInInitializerError;<br>
+JavaMethod* Classpath::InitLinkageError;<br>
+JavaMethod* Classpath::InitAbstractMethodError;<br>
+JavaMethod* Classpath::InitUnsatisfiedLinkError;<br>
+JavaMethod* Classpath::InitInternalError;<br>
+JavaMethod* Classpath::InitOutOfMemoryError;<br>
+JavaMethod* Classpath::InitStackOverflowError;<br>
+JavaMethod* Classpath::InitUnknownError;<br>
+JavaMethod* Classpath::InitClassNotFoundException;<br>
+JavaMethod* Classpath::InitArithmeticException;<br>
+JavaMethod* Classpath::InitObject;<br>
+JavaMethod* Classpath::FinalizeObject;<br>
+JavaMethod* Classpath::IntToString;<br>
+<br>
+JavaMethod* Classpath::SystemArraycopy;<br>
+JavaMethod* Classpath::VMSystemArraycopy;<br>
+Class* Classpath::SystemClass;<br>
+Class* Classpath::EnumClass;<br>
+<br>
+JavaMethod* Classpath::ErrorWithExcpNoClassDefFoundError;<br>
+JavaMethod* Classpath::ErrorWithExcpExceptionInInitializerError;<br>
+JavaMethod* Classpath::ErrorWithExcpInvocationTargetException;<br>
+<br>
+ClassArray* Classpath::ArrayOfByte;<br>
+ClassArray* Classpath::ArrayOfChar;<br>
+ClassArray* Classpath::ArrayOfString;<br>
+ClassArray* Classpath::ArrayOfInt;<br>
+ClassArray* Classpath::ArrayOfShort;<br>
+ClassArray* Classpath::ArrayOfBool;<br>
+ClassArray* Classpath::ArrayOfLong;<br>
+ClassArray* Classpath::ArrayOfFloat;<br>
+ClassArray* Classpath::ArrayOfDouble;<br>
+ClassArray* Classpath::ArrayOfObject;<br>
+<br>
+ClassPrimitive* Classpath::OfByte;<br>
+ClassPrimitive* Classpath::OfChar;<br>
+ClassPrimitive* Classpath::OfInt;<br>
+ClassPrimitive* Classpath::OfShort;<br>
+ClassPrimitive* Classpath::OfBool;<br>
+ClassPrimitive* Classpath::OfLong;<br>
+ClassPrimitive* Classpath::OfFloat;<br>
+ClassPrimitive* Classpath::OfDouble;<br>
+ClassPrimitive* Classpath::OfVoid;<br>
+<br>
+Class* Classpath::OfObject;<br>
+<br>
+JavaField* Classpath::methodClass;<br>
+JavaField* Classpath::fieldClass;<br>
+JavaField* Classpath::constructorClass;<br>
+<br>
+JavaMethod* Classpath::EnqueueReference;<br>
+Class* Classpath::newReference;<br>
+<br>
+void Classpath::CreateJavaThread(Jnjvm* vm, JavaThread* myth,<br>
+ const char* thName, JavaObject* Group) {<br>
+ JavaObjectVMThread* vmth = NULL;<br>
+ JavaObject* th = NULL;<br>
+ JavaObject* name = NULL;<br>
+ llvm_gcroot(Group, 0);<br>
+ llvm_gcroot(vmth, 0);<br>
+ llvm_gcroot(th, 0);<br>
+ llvm_gcroot(name, 0);<br>
+<br>
+ th = newThread->doNew(vm);<br>
+ myth->javaThread = th;<br>
+ vmth = (JavaObjectVMThread*)newVMThread->doNew(vm);<br>
+ name = vm->asciizToStr(thName);<br>
+<br>
+ initThread->invokeIntSpecial(vm, newThread, th, &vmth, &name, 1, 0);<br>
+ vmThread->setInstanceObjectField(th, vmth);<br>
+ assocThread->setInstanceObjectField(vmth, th);<br>
+ running->setInstanceInt8Field(vmth, (uint32)1);<br>
+ JavaObjectVMThread::setVmdata(vmth, myth);<br>
+<br>
+ group->setInstanceObjectField(th, Group);<br>
+ groupAddThread->invokeIntSpecial(vm, threadGroup, Group, &th);<br>
+<br>
+ finaliseCreateInitialThread->invokeIntStatic(vm,<br>
inheritableThreadLocal, &th);<br>
+}<br>
+<br>
+void Classpath::InitializeThreading(Jnjvm* vm) {<br>
+<br>
+ JavaObject* RG = 0;<br>
+ JavaObject* SystemGroup = 0;<br>
+ JavaObject* systemName = 0;<br>
+ llvm_gcroot(RG, 0);<br>
+ llvm_gcroot(SystemGroup, 0);<br>
+ llvm_gcroot(systemName, 0);<br>
+<br>
+ // Resolve and initialize classes first.<br>
+ newThread->resolveClass();<br>
+ newThread->initialiseClass(vm);<br>
+<br>
+ newVMThread->resolveClass();<br>
+ newVMThread->initialiseClass(vm);<br>
+<br>
+ threadGroup->resolveClass();<br>
+ threadGroup->initialiseClass(vm);<br>
+<br>
+ // Create the main thread<br>
+ RG = rootGroup->getStaticObjectField();<br>
+ assert(RG && "No root group");<br>
+ assert(vm->getMainThread() && "VM did not set its main thread");<br>
+ CreateJavaThread(vm, (JavaThread*)vm->getMainThread(), "main", RG);<br>
+<br>
+ // Create the "system" group.<br>
+ SystemGroup = threadGroup->doNew(vm);<br>
+ initGroup->invokeIntSpecial(vm, threadGroup, SystemGroup);<br>
+ systemName = vm->asciizToStr("system");<br>
+ groupName->setInstanceObjectField(SystemGroup, systemName);<br>
+<br>
+ // Create the finalizer thread.<br>
+ assert(vm->getFinalizerThread() && "VM did not set its finalizer thread");<br>
+ CreateJavaThread(vm, vm->getFinalizerThread(), "Finalizer", SystemGroup);<br>
+<br>
+ // Create the enqueue thread.<br>
+ assert(vm->getReferenceThread() && "VM did not set its enqueue thread");<br>
+ CreateJavaThread(vm, vm->getReferenceThread(), "Reference", SystemGroup);<br>
+}<br>
+<br>
+extern "C" void<br>
Java_java_lang_ref_WeakReference__0003Cinit_0003E__Ljava_lang_Object_2(<br>
+ JavaObjectReference* reference, JavaObject* referent) {<br>
+ llvm_gcroot(reference, 0);<br>
+ llvm_gcroot(referent, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaObjectReference::init(reference, referent, 0);<br>
+ JavaThread::get()->getJVM()->getReferenceThread()->addWeakReference(reference);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+}<br>
+<br>
+extern "C" void<br>
Java_java_lang_ref_WeakReference__0003Cinit_0003E__Ljava_lang_Object_2Ljava_lang_ref_ReferenceQueue_2(<br>
+ JavaObjectReference* reference,<br>
+ JavaObject* referent,<br>
+ JavaObject* queue) {<br>
+ llvm_gcroot(reference, 0);<br>
+ llvm_gcroot(referent, 0);<br>
+ llvm_gcroot(queue, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaObjectReference::init(reference, referent, queue);<br>
+ JavaThread::get()->getJVM()->getReferenceThread()->addWeakReference(reference);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+}<br>
+<br>
+extern "C" void<br>
Java_java_lang_ref_SoftReference__0003Cinit_0003E__Ljava_lang_Object_2(<br>
+ JavaObjectReference* reference, JavaObject* referent) {<br>
+ llvm_gcroot(reference, 0);<br>
+ llvm_gcroot(referent, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaObjectReference::init(reference, referent, 0);<br>
+ JavaThread::get()->getJVM()->getReferenceThread()->addSoftReference(reference);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+}<br>
+<br>
+extern "C" void<br>
Java_java_lang_ref_SoftReference__0003Cinit_0003E__Ljava_lang_Object_2Ljava_lang_ref_ReferenceQueue_2(<br>
+ JavaObjectReference* reference,<br>
+ JavaObject* referent,<br>
+ JavaObject* queue) {<br>
+ llvm_gcroot(reference, 0);<br>
+ llvm_gcroot(referent, 0);<br>
+ llvm_gcroot(queue, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaObjectReference::init(reference, referent, queue);<br>
+ JavaThread::get()->getJVM()->getReferenceThread()->addSoftReference(reference);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+}<br>
+<br>
+extern "C" void<br>
Java_java_lang_ref_PhantomReference__0003Cinit_0003E__Ljava_lang_Object_2Ljava_lang_ref_ReferenceQueue_2(<br>
+ JavaObjectReference* reference,<br>
+ JavaObject* referent,<br>
+ JavaObject* queue) {<br>
+ llvm_gcroot(reference, 0);<br>
+ llvm_gcroot(referent, 0);<br>
+ llvm_gcroot(queue, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaObjectReference::init(reference, referent, queue);<br>
+ JavaThread::get()->getJVM()->getReferenceThread()->addPhantomReference(reference);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+}<br>
+<br>
+extern "C" JavaString* Java_java_lang_VMString_intern__Ljava_lang_String_2(<br>
+ JavaString* obj) {<br>
+ const ArrayUInt16* array = 0;<br>
+ JavaString* res = 0;<br>
+ llvm_gcroot(obj, 0);<br>
+ llvm_gcroot(array, 0);<br>
+ llvm_gcroot(res, 0);<br>
+ // If the string is already interned, just return.<br>
+ if (obj->getVirtualTable() == JavaString::internStringVT) return obj;<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ Jnjvm* vm = JavaThread::get()->getJVM();<br>
+ array = JavaString::strToArray(obj, vm);<br>
+ res = vm->constructString(array);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return res;<br>
+}<br>
+<br>
+extern "C" uint8 Java_java_lang_Class_isArray__(JavaObjectClass* klass) {<br>
+ llvm_gcroot(klass, 0);<br>
+ UserCommonClass* cl = 0;<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ cl = JavaObjectClass::getClass(klass);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return (uint8)cl->isArray();<br>
+}<br>
+<br>
+extern "C" JavaObject* Java_gnu_classpath_VMStackWalker_getCallingClass__() {<br>
+<br>
+ JavaObject* res = 0;<br>
+ llvm_gcroot(res, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaThread* th = JavaThread::get();<br>
+ UserClass* cl = th->getCallingClassLevel(2);<br>
+ if (cl != NULL) res = cl->getClassDelegatee(th->getJVM());<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return res;<br>
+}<br>
+<br>
+extern "C" JavaObject*<br>
Java_gnu_classpath_VMStackWalker_getCallingClassLoader__() {<br>
+<br>
+ JavaObject* res = 0;<br>
+ llvm_gcroot(res, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaThread* th = JavaThread::get();<br>
+ UserClass* cl = th->getCallingClassLevel(2);<br>
+ res = cl->classLoader->getJavaClassLoader();<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return res;<br>
+}<br>
+<br>
+extern "C" JavaObject*<br>
Java_gnu_classpath_VMStackWalker_firstNonNullClassLoader__() {<br>
+ JavaObject* res = 0;<br>
+ llvm_gcroot(res, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaThread* th = JavaThread::get();<br>
+ res = th->getNonNullClassLoader();<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return res;<br>
+}<br>
+<br>
+extern "C" JavaObject*<br>
Java_sun_reflect_Reflection_getCallerClass__I(uint32 index) {<br>
+<br>
+ JavaObject* res = 0;<br>
+ llvm_gcroot(res, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ JavaThread* th = JavaThread::get();<br>
+ Jnjvm* vm = th->getJVM();<br>
+ UserClass* cl = th->getCallingClassLevel(index);<br>
+ if (cl) res = cl->getClassDelegatee(vm);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return res;<br>
+}<br>
+<br>
+extern "C" JavaObject*<br>
Java_java_lang_reflect_AccessibleObject_getAnnotation__Ljava_lang_Class_2(<br>
+ JavaObject* obj) {<br>
+ llvm_gcroot(obj, 0);<br>
+ return 0;<br>
+}<br>
+<br>
+extern "C" JavaObject*<br>
Java_java_lang_reflect_AccessibleObject_getDeclaredAnnotations__() {<br>
+ JavaObject* res = 0;<br>
+ llvm_gcroot(res, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ Jnjvm* vm = JavaThread::get()->getJVM();<br>
+ UserClassArray* array = vm->upcalls->constructorArrayAnnotation;<br>
+ res = array->doNew(0, vm);<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return res;<br>
+}<br>
+<br>
+extern "C" void nativeJavaObjectClassTracer(<br>
+ JavaObjectClass* obj, word_t closure) {<br>
+ JavaObjectClass::staticTracer(obj, closure);<br>
+}<br>
+<br>
+extern "C" void nativeJavaObjectFieldTracer(<br>
+ JavaObjectField* obj, word_t closure) {<br>
+ JavaObjectField::staticTracer(obj, closure);<br>
+}<br>
+<br>
+extern "C" void nativeJavaObjectMethodTracer(<br>
+ JavaObjectMethod* obj, word_t closure) {<br>
+ JavaObjectMethod::staticTracer(obj, closure);<br>
+}<br>
+<br>
+extern "C" void nativeJavaObjectConstructorTracer(<br>
+ JavaObjectConstructor* obj, word_t closure) {<br>
+ JavaObjectConstructor::staticTracer(obj, closure);<br>
+}<br>
+<br>
+extern "C" void nativeJavaObjectVMThreadTracer(<br>
+ JavaObjectVMThread* obj, word_t closure) {<br>
+ JavaObjectVMThread::staticTracer(obj, closure);<br>
+}<br>
+<br>
+extern "C" JavaString*<br>
Java_java_lang_VMSystem_getenv__Ljava_lang_String_2(JavaString* str) {<br>
+ JavaString* ret = 0;<br>
+ llvm_gcroot(str, 0);<br>
+ llvm_gcroot(ret, 0);<br>
+<br>
+ BEGIN_NATIVE_EXCEPTION(0)<br>
+<br>
+ mvm::ThreadAllocator allocator;<br>
+ char* buf = JavaString::strToAsciiz(str, &allocator);<br>
+ char* res = getenv(buf);<br>
+ if (res) {<br>
+ Jnjvm* vm = JavaThread::get()->getJVM();<br>
+ ret = vm->asciizToStr(res);<br>
+ }<br>
+<br>
+ END_NATIVE_EXCEPTION<br>
+<br>
+ return ret;<br>
+}<br>
+<br>
+void Classpath::initialiseClasspath(JnjvmClassLoader* loader) {<br>
+<br>
+ newClassLoader =<br>
+ UPCALL_CLASS(loader, "java/lang/ClassLoader");<br>
+<br>
+ getSystemClassLoader =<br>
+ UPCALL_METHOD(loader, "java/lang/ClassLoader", "getSystemClassLoader",<br>
+ "()Ljava/lang/ClassLoader;", ACC_STATIC);<br>
+<br>
+ setContextClassLoader =<br>
+ UPCALL_METHOD(loader, "java/lang/Thread", "setContextClassLoader",<br>
+ "(Ljava/lang/ClassLoader;)V", ACC_VIRTUAL);<br>
+<br>
+ newString =<br>
+ UPCALL_CLASS(loader, "java/lang/String");<br>
+<br>
+ newClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Class");<br>
+<br>
+ newThrowable =<br>
+ UPCALL_CLASS(loader, "java/lang/Throwable");<br>
+<br>
+ newException =<br>
+ UPCALL_CLASS(loader, "java/lang/Exception");<br>
+<br>
+ newPointer32 =<br>
+ UPCALL_CLASS(loader, "gnu/classpath/Pointer32");<br>
+<br>
+ newPointer64 =<br>
+ UPCALL_CLASS(loader, "gnu/classpath/Pointer64");<br>
+<br>
+ newDirectByteBuffer =<br>
+ UPCALL_CLASS(loader, "java/nio/DirectByteBufferImpl$ReadWrite");<br>
+<br>
+ InitDirectByteBuffer =<br>
+ UPCALL_METHOD(loader, "java/nio/DirectByteBufferImpl$ReadWrite", "<init>",<br>
+ "(Ljava/lang/Object;Lgnu/classpath/Pointer;III)V",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ initClass =<br>
+ UPCALL_METHOD(loader, "java/lang/Class", "<init>", "(Ljava/lang/Object;)V",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ initClassWithProtectionDomain =<br>
+ UPCALL_METHOD(loader, "java/lang/Class", "<init>",<br>
+ "(Ljava/lang/Object;Ljava/security/ProtectionDomain;)V",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ vmdataClass =<br>
+ UPCALL_FIELD(loader, "java/lang/Class", "vmdata", "Ljava/lang/Object;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ setProperty =<br>
+ UPCALL_METHOD(loader, "java/util/Properties", "setProperty",<br>
+ "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ initString =<br>
+ UPCALL_METHOD(loader, "java/lang/String", "<init>", "([CIIZ)V",<br>
ACC_VIRTUAL);<br>
+<br>
+ initConstructor =<br>
+ UPCALL_METHOD(loader, "java/lang/reflect/Constructor", "<init>",<br>
+ "(Ljava/lang/Class;I)V", ACC_VIRTUAL);<br>
+<br>
+ newConstructor =<br>
+ UPCALL_CLASS(loader, "java/lang/reflect/Constructor");<br>
+<br>
+ constructorArrayClass =<br>
+ UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Constructor", 1);<br>
+<br>
+ constructorArrayAnnotation =<br>
+ UPCALL_ARRAY_CLASS(loader, "java/lang/annotation/Annotation", 1);<br>
+<br>
+ constructorSlot =<br>
+ UPCALL_FIELD(loader, "java/lang/reflect/Constructor", "slot",<br>
"I", ACC_VIRTUAL);<br>
+<br>
+ initMethod =<br>
+ UPCALL_METHOD(loader, "java/lang/reflect/Method", "<init>",<br>
+ "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL);<br>
+<br>
+ newMethod =<br>
+ UPCALL_CLASS(loader, "java/lang/reflect/Method");<br>
+<br>
+ methodArrayClass =<br>
+ UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Method", 1);<br>
+<br>
+ methodSlot =<br>
+ UPCALL_FIELD(loader, "java/lang/reflect/Method", "slot", "I", ACC_VIRTUAL);<br>
+<br>
+ initField =<br>
+ UPCALL_METHOD(loader, "java/lang/reflect/Field", "<init>",<br>
+ "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL);<br>
+<br>
+ newField =<br>
+ UPCALL_CLASS(loader, "java/lang/reflect/Field");<br>
+<br>
+ fieldArrayClass =<br>
+ UPCALL_ARRAY_CLASS(loader, "java/lang/reflect/Field", 1);<br>
+<br>
+ fieldSlot =<br>
+ UPCALL_FIELD(loader, "java/lang/reflect/Field", "slot", "I", ACC_VIRTUAL);<br>
+<br>
+<br>
+ classArrayClass =<br>
+ UPCALL_ARRAY_CLASS(loader, "java/lang/Class", 1);<br>
+<br>
+ newVMThrowable =<br>
+ UPCALL_CLASS(loader, "java/lang/VMThrowable");<br>
+<br>
+ initVMThrowable =<br>
+ UPCALL_METHOD(loader, "java/lang/VMThrowable", "<init>", "()V",<br>
ACC_VIRTUAL);<br>
+<br>
+ vmDataVMThrowable =<br>
+ UPCALL_FIELD(loader, "java/lang/VMThrowable", "vmdata",<br>
"Ljava/lang/Object;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ bufferAddress =<br>
+ UPCALL_FIELD(loader, "java/nio/Buffer", "address",<br>
"Lgnu/classpath/Pointer;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ dataPointer32 =<br>
+ UPCALL_FIELD(loader, "gnu/classpath/Pointer32", "data", "I", ACC_VIRTUAL);<br>
+<br>
+ dataPointer64 =<br>
+ UPCALL_FIELD(loader, "gnu/classpath/Pointer64", "data", "J", ACC_VIRTUAL);<br>
+<br>
+ vmdataClassLoader =<br>
+ UPCALL_FIELD(loader, "java/lang/ClassLoader", "vmdata",<br>
"Ljava/lang/Object;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ newStackTraceElement =<br>
+ UPCALL_CLASS(loader, "java/lang/StackTraceElement");<br>
+<br>
+ stackTraceArray =<br>
+ UPCALL_ARRAY_CLASS(loader, "java/lang/StackTraceElement", 1);<br>
+<br>
+ initStackTraceElement =<br>
+ UPCALL_METHOD(loader, "java/lang/StackTraceElement", "<init>",<br>
+<br>
"(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)V",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ boolValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Boolean", "value", "Z", ACC_VIRTUAL);<br>
+<br>
+ byteValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Byte", "value", "B", ACC_VIRTUAL);<br>
+<br>
+ shortValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Short", "value", "S", ACC_VIRTUAL);<br>
+<br>
+ charValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Character", "value", "C", ACC_VIRTUAL);<br>
+<br>
+ intValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Integer", "value", "I", ACC_VIRTUAL);<br>
+<br>
+ longValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Long", "value", "J", ACC_VIRTUAL);<br>
+<br>
+ floatValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Float", "value", "F", ACC_VIRTUAL);<br>
+<br>
+ doubleValue =<br>
+ UPCALL_FIELD(loader, "java/lang/Double", "value", "D", ACC_VIRTUAL);<br>
+<br>
+ Classpath::voidClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Void");<br>
+<br>
+ Classpath::boolClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Boolean");<br>
+<br>
+ Classpath::byteClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Byte");<br>
+<br>
+ Classpath::shortClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Short");<br>
+<br>
+ Classpath::charClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Character");<br>
+<br>
+ Classpath::intClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Integer");<br>
+<br>
+ Classpath::floatClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Float");<br>
+<br>
+ Classpath::doubleClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Double");<br>
+<br>
+ Classpath::longClass =<br>
+ UPCALL_CLASS(loader, "java/lang/Long");<br>
+<br>
+ Classpath::OfObject =<br>
+ UPCALL_CLASS(loader, "java/lang/Object");<br>
+<br>
+ vmStackWalker =<br>
+ UPCALL_CLASS(loader, "gnu/classpath/VMStackWalker");<br>
+<br>
+ loadInClassLoader =<br>
+ UPCALL_METHOD(loader, "java/lang/ClassLoader", "loadClass",<br>
+ "(Ljava/lang/String;)Ljava/lang/Class;", ACC_VIRTUAL);<br>
+<br>
+ JavaMethod* internString =<br>
+ UPCALL_METHOD(loader, "java/lang/VMString", "intern",<br>
+ "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC);<br>
+ internString->setNative();<br>
+<br>
+ JavaMethod* isArray =<br>
+ UPCALL_METHOD(loader, "java/lang/Class", "isArray", "()Z", ACC_VIRTUAL);<br>
+ isArray->setNative();<br>
+<br>
+ // Make sure classes the JIT optimizes on are loaded.<br>
+ UPCALL_CLASS(loader, "java/lang/VMFloat");<br>
+ UPCALL_CLASS(loader, "java/lang/VMDouble");<br>
+<br>
+ UPCALL_REFLECT_CLASS_EXCEPTION(loader, InvocationTargetException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ArrayStoreException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ClassCastException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, IllegalMonitorStateException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, IllegalArgumentException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, InterruptedException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, IndexOutOfBoundsException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ArrayIndexOutOfBoundsException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, NegativeArraySizeException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, NullPointerException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, SecurityException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ClassFormatError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ClassCircularityError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, NoClassDefFoundError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, UnsupportedClassVersionError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, NoSuchFieldError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, NoSuchMethodError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, InstantiationError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, InstantiationException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, IllegalAccessError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, IllegalAccessException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, VerifyError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ExceptionInInitializerError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, LinkageError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, AbstractMethodError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, UnsatisfiedLinkError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, InternalError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, OutOfMemoryError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, StackOverflowError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, UnknownError);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ClassNotFoundException);<br>
+ UPCALL_CLASS_EXCEPTION(loader, ArithmeticException);<br>
+<br>
+ UPCALL_METHOD_EXCEPTION(loader, InvocationTargetException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ArrayStoreException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ClassCastException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, IllegalMonitorStateException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, IllegalArgumentException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, InterruptedException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, IndexOutOfBoundsException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ArrayIndexOutOfBoundsException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, NegativeArraySizeException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, NullPointerException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, SecurityException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ClassFormatError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ClassCircularityError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, NoClassDefFoundError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, UnsupportedClassVersionError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, NoSuchFieldError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, NoSuchMethodError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, InstantiationError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, InstantiationException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, IllegalAccessError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, IllegalAccessException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, VerifyError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ExceptionInInitializerError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, LinkageError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, AbstractMethodError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, UnsatisfiedLinkError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, InternalError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, OutOfMemoryError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, StackOverflowError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, UnknownError);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ClassNotFoundException);<br>
+ UPCALL_METHOD_EXCEPTION(loader, ArithmeticException);<br>
+<br>
+ UPCALL_METHOD_WITH_EXCEPTION(loader, NoClassDefFoundError);<br>
+ UPCALL_METHOD_WITH_EXCEPTION(loader, ExceptionInInitializerError);<br>
+ UPCALL_METHOD_WITH_EXCEPTION(loader, InvocationTargetException);<br>
+<br>
+ InitObject = UPCALL_METHOD(loader, "java/lang/Object", "<init>", "()V",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ FinalizeObject = UPCALL_METHOD(loader, "java/lang/Object", "finalize", "()V",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ IntToString = UPCALL_METHOD(loader, "java/lang/Integer", "toString",<br>
+ "(II)Ljava/lang/String;", ACC_STATIC);<br>
+<br>
+ SystemArraycopy = UPCALL_METHOD(loader, "java/lang/System", "arraycopy",<br>
+ "(Ljava/lang/Object;ILjava/lang/Object;II)V",<br>
+ ACC_STATIC);<br>
+<br>
+ VMSystemArraycopy = UPCALL_METHOD(loader, "java/lang/VMSystem", "arraycopy",<br>
+ "(Ljava/lang/Object;ILjava/lang/Object;II)V",<br>
+ ACC_STATIC);<br>
+<br>
+ SystemClass = UPCALL_CLASS(loader, "java/lang/System");<br>
+ EnumClass = UPCALL_CLASS(loader, "java/lang/Enum");<br>
+<br>
+ newThread =<br>
+ UPCALL_CLASS(loader, "java/lang/Thread");<br>
+<br>
+ newVMThread =<br>
+ UPCALL_CLASS(loader, "java/lang/VMThread");<br>
+<br>
+ assocThread =<br>
+ UPCALL_FIELD(loader, "java/lang/VMThread", "thread", "Ljava/lang/Thread;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ vmdataVMThread =<br>
+ UPCALL_FIELD(loader, "java/lang/VMThread", "vmdata", "Ljava/lang/Object;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ inheritableThreadLocal =<br>
+ UPCALL_CLASS(loader, "java/lang/InheritableThreadLocal");<br>
+<br>
+ finaliseCreateInitialThread =<br>
+ UPCALL_METHOD(loader, "java/lang/InheritableThreadLocal", "newChildThread",<br>
+ "(Ljava/lang/Thread;)V", ACC_STATIC);<br>
+<br>
+ initThread =<br>
+ UPCALL_METHOD(loader, "java/lang/Thread", "<init>",<br>
+ "(Ljava/lang/VMThread;Ljava/lang/String;IZ)V", ACC_VIRTUAL);<br>
+<br>
+ initVMThread =<br>
+ UPCALL_METHOD(loader, "java/lang/VMThread", "<init>",<br>
+ "(Ljava/lang/Thread;)V", ACC_VIRTUAL);<br>
+<br>
+ runVMThread =<br>
+ UPCALL_METHOD(loader, "java/lang/VMThread", "run", "()V", ACC_VIRTUAL);<br>
+<br>
+<br>
+ groupAddThread =<br>
+ UPCALL_METHOD(loader, "java/lang/ThreadGroup", "addThread",<br>
+ "(Ljava/lang/Thread;)V", ACC_VIRTUAL);<br>
+<br>
+ initGroup =<br>
+ UPCALL_METHOD(loader, "java/lang/ThreadGroup", "<init>",<br>
+ "()V", ACC_VIRTUAL);<br>
+<br>
+ groupName =<br>
+ UPCALL_FIELD(loader, "java/lang/ThreadGroup", "name", "Ljava/lang/String;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ threadName =<br>
+ UPCALL_FIELD(loader, "java/lang/Thread", "name", "Ljava/lang/String;",<br>
+ ACC_VIRTUAL);<br>
+<br>
+<br>
+ priority =<br>
+ UPCALL_FIELD(loader, "java/lang/Thread", "priority", "I", ACC_VIRTUAL);<br>
+<br>
+ daemon =<br>
+ UPCALL_FIELD(loader, "java/lang/Thread", "daemon", "Z", ACC_VIRTUAL);<br>
+<br>
+ group =<br>
+ UPCALL_FIELD(loader, "java/lang/Thread", "group",<br>
+ "Ljava/lang/ThreadGroup;", ACC_VIRTUAL);<br>
+<br>
+ running =<br>
+ UPCALL_FIELD(loader, "java/lang/VMThread", "running", "Z", ACC_VIRTUAL);<br>
+<br>
+ threadGroup =<br>
+ UPCALL_CLASS(loader, "java/lang/ThreadGroup");<br>
+<br>
+ rootGroup =<br>
+ UPCALL_FIELD(loader, "java/lang/ThreadGroup", "root",<br>
+ "Ljava/lang/ThreadGroup;", ACC_STATIC);<br>
+<br>
+ vmThread =<br>
+ UPCALL_FIELD(loader, "java/lang/Thread", "vmThread",<br>
+ "Ljava/lang/VMThread;", ACC_VIRTUAL);<br>
+<br>
+ getUncaughtExceptionHandler =<br>
+ UPCALL_METHOD(loader, "java/lang/Thread", "getUncaughtExceptionHandler",<br>
+ "()Ljava/lang/Thread$UncaughtExceptionHandler;",<br>
ACC_VIRTUAL);<br>
+<br>
+ uncaughtException =<br>
+ UPCALL_METHOD(loader, "java/lang/Thread$UncaughtExceptionHandler",<br>
+ "uncaughtException",<br>
+ "(Ljava/lang/Thread;Ljava/lang/Throwable;)V", ACC_VIRTUAL);<br>
+<br>
+<br>
+ methodClass =<br>
+ UPCALL_FIELD(loader, "java/lang/reflect/Method", "declaringClass",<br>
+ "Ljava/lang/Class;", ACC_VIRTUAL);<br>
+<br>
+ fieldClass =<br>
+ UPCALL_FIELD(loader, "java/lang/reflect/Field", "declaringClass",<br>
+ "Ljava/lang/Class;", ACC_VIRTUAL);<br>
+<br>
+ constructorClass =<br>
+ UPCALL_FIELD(loader, "java/lang/reflect/Constructor", "clazz",<br>
+ "Ljava/lang/Class;", ACC_VIRTUAL);<br>
+<br>
+ loader->loadName(loader->asciizConstructUTF8("java/lang/String"),<br>
+ true, false, NULL);<br>
+<br>
+ loader->loadName(loader->asciizConstructUTF8("java/lang/Object"),<br>
+ true, false, NULL);<br>
+<br>
+ // Don't compile methods here, we still don't know where to allocate Java<br>
+ // strings.<br>
+<br>
+ JavaMethod* getEnv =<br>
+ UPCALL_METHOD(loader, "java/lang/VMSystem", "getenv",<br>
+ "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC);<br>
+ getEnv->setNative();<br>
+<br>
+ JavaMethod* getCallingClass =<br>
+ UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClass",<br>
+ "()Ljava/lang/Class;", ACC_STATIC);<br>
+ getCallingClass->setNative();<br>
+<br>
+ JavaMethod* getCallingClassLoader =<br>
+ UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker",<br>
"getCallingClassLoader",<br>
+ "()Ljava/lang/ClassLoader;", ACC_STATIC);<br>
+ getCallingClassLoader->setNative();<br>
+<br>
+ JavaMethod* firstNonNullClassLoader =<br>
+ UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker",<br>
"firstNonNullClassLoader",<br>
+ "()Ljava/lang/ClassLoader;", ACC_STATIC);<br>
+ firstNonNullClassLoader->setNative();<br>
+<br>
+ JavaMethod* getCallerClass =<br>
+ UPCALL_METHOD(loader, "sun/reflect/Reflection", "getCallerClass",<br>
+ "(I)Ljava/lang/Class;", ACC_STATIC);<br>
+ getCallerClass->setNative();<br>
+<br>
+ JavaMethod* postProperties =<br>
+ UPCALL_METHOD(loader, "gnu/classpath/VMSystemProperties", "postInit",<br>
+ "(Ljava/util/Properties;)V", ACC_STATIC);<br>
+ postProperties->setNative();<br>
+<br>
+ // Also implement these twos, implementation in GNU Classpath<br>
0.97.2 is buggy.<br>
+ JavaMethod* getAnnotation =<br>
+ UPCALL_METHOD(loader, "java/lang/reflect/AccessibleObject",<br>
"getAnnotation",<br>
+ "(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;",<br>
+ ACC_VIRTUAL);<br>
+ getAnnotation->setNative();<br>
+<br>
+ JavaMethod* getAnnotations =<br>
+ UPCALL_METHOD(loader, "java/lang/reflect/AccessibleObject",<br>
+ "getDeclaredAnnotations",<br>
+ "()[Ljava/lang/annotation/Annotation;",<br>
+ ACC_VIRTUAL);<br>
+ getAnnotations->setNative();<br>
+<br>
+ JavaMethod* getBootPackages =<br>
+ UPCALL_METHOD(loader, "java/lang/VMClassLoader", "getBootPackages",<br>
+ "()[Ljava/lang/String;", ACC_STATIC);<br>
+ getBootPackages->setNative();<br>
+<br>
+ //===----------------------------------------------------------------------===//<br>
+ //<br>
+ // To make classes non GC-allocated, we have to bypass the tracer<br>
functions of<br>
+ // java.lang.Class, java.lang.reflect.Field, java.lang.reflect.Method and<br>
+ // java.lang.reflect.constructor. The new tracer functions trace<br>
the classloader<br>
+ // instead of the class/field/method.<br>
+ //<br>
+ //===----------------------------------------------------------------------===//<br>
+<br>
+ newClass->getVirtualVT()->setNativeTracer(<br>
+ (word_t)nativeJavaObjectClassTracer,<br>
+ "nativeJavaObjectClassTracer");<br>
+<br>
+ newConstructor->getVirtualVT()->setNativeTracer(<br>
+ (word_t)nativeJavaObjectConstructorTracer,<br>
+ "nativeJavaObjectConstructorTracer");<br>
+<br>
+ newMethod->getVirtualVT()->setNativeTracer(<br>
+ (word_t)nativeJavaObjectMethodTracer,<br>
+ "nativeJavaObjectMethodTracer");<br>
+<br>
+ newField->getVirtualVT()->setNativeTracer(<br>
+ (word_t)nativeJavaObjectFieldTracer,<br>
+ "nativeJavaObjectFieldTracer");<br>
+<br>
+ newVMThread->getVirtualVT()->setNativeTracer(<br>
+ (word_t)nativeJavaObjectVMThreadTracer,<br>
+ "nativeJavaObjectVMThreadTracer");<br>
+<br>
+ newReference = UPCALL_CLASS(loader, "java/lang/ref/Reference");<br>
+<br>
+ EnqueueReference =<br>
+ UPCALL_METHOD(loader, "java/lang/ref/Reference", "enqueue", "()Z",<br>
+ ACC_VIRTUAL);<br>
+<br>
+ JavaMethod* initWeakReference =<br>
+ UPCALL_METHOD(loader, "java/lang/ref/WeakReference", "<init>",<br>
+ "(Ljava/lang/Object;)V",<br>
+ ACC_VIRTUAL);<br>
+ initWeakReference->setNative();<br>
+<br>
+ initWeakReference =<br>
+ UPCALL_METHOD(loader, "java/lang/ref/WeakReference", "<init>",<br>
+ "(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V",<br>
+ ACC_VIRTUAL);<br>
+ initWeakReference->setNative();<br>
+<br>
+ JavaMethod* initSoftReference =<br>
+ UPCALL_METHOD(loader, "java/lang/ref/SoftReference", "<init>",<br>
+ "(Ljava/lang/Object;)V",<br>
+ ACC_VIRTUAL);<br>
+ initSoftReference->setNative();<br>
+<br>
+ initSoftReference =<br>
+ UPCALL_METHOD(loader, "java/lang/ref/SoftReference", "<init>",<br>
+ "(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V",<br>
+ ACC_VIRTUAL);<br>
+ initSoftReference->setNative();<br>
+<br>
+ JavaMethod* initPhantomReference =<br>
+ UPCALL_METHOD(loader, "java/lang/ref/PhantomReference", "<init>",<br>
+ "(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V",<br>
+ ACC_VIRTUAL);<br>
+ initPhantomReference->setNative();<br>
+}<br>
+<br>
+#include "ClasspathConstructor.inc"<br>
+#include "Classpath.inc"<br>
+#include "ClasspathField.inc"<br>
+#include "ClasspathMethod.inc"<br>
diff --git a/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h<br>
b/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h<br>
new file mode 100644<br>
index 0000000..ae5eb63<br>
--- /dev/null<br>
+++ b/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h<br>
@@ -0,0 +1,283 @@<br>
+//===---------- JavaUpcalls.h - Upcalls to Java entities<br>
------------------===//<br>
+//<br>
+// The VMKit project<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#ifndef JNJVM_JAVA_UPCALLS_H<br>
+#define JNJVM_JAVA_UPCALLS_H<br>
+<br>
+#include "mvm/Allocator.h"<br>
+<br>
+#include "JnjvmConfig.h"<br>
+<br>
+#define UPCALL_CLASS(vm, name)<br>
\<br>
+ vm->loadName(vm->asciizConstructUTF8(name), true, false, NULL)<br>
+<br>
+#define UPCALL_PRIMITIVE_CLASS(loader, name, nb)<br>
\<br>
+ new(loader->allocator, "Primitive class")<br>
\<br>
+ UserClassPrimitive(loader,<br>
loader->asciizConstructUTF8(name), nb) \<br>
+<br>
+#define UPCALL_FIELD(vm, cl, name, type, acc)<br>
\<br>
+ UPCALL_CLASS(vm,<br>
cl)->lookupFieldDontThrow(vm->asciizConstructUTF8(name), \<br>
+<br>
vm->asciizConstructUTF8(type), \<br>
+ isStatic(acc), false, 0)<br>
+<br>
+#define UPCALL_METHOD(vm, cl, name, type, acc)<br>
\<br>
+ UPCALL_CLASS(vm,<br>
cl)->lookupMethodDontThrow(vm->asciizConstructUTF8(name), \<br>
+<br>
vm->asciizConstructUTF8(type), \<br>
+ isStatic(acc), false, 0)<br>
+<br>
+#define UPCALL_ARRAY_CLASS(loader, name, depth)<br>
\<br>
+ loader->constructArray(<br>
\<br>
+ loader->constructArrayName(depth, loader->asciizConstructUTF8(name)))<br>
+<br>
+#define UPCALL_CLASS_EXCEPTION(loader, name)<br>
\<br>
+ name = UPCALL_CLASS(loader, "java/lang/"#name)<br>
+<br>
+#define UPCALL_REFLECT_CLASS_EXCEPTION(loader, name)<br>
\<br>
+ name = UPCALL_CLASS(loader, "java/lang/reflect/"#name)<br>
+<br>
+#define UPCALL_METHOD_EXCEPTION(loader, name) \<br>
+ Init##name =<br>
name->lookupMethodDontThrow(loader->asciizConstructUTF8("<init>"), \<br>
+<br>
loader->asciizConstructUTF8("(Ljava/lang/String;)V"), \<br>
+ false, false, 0);<br>
+<br>
+#define UPCALL_METHOD_WITH_EXCEPTION(loader, name) \<br>
+ ErrorWithExcp##name =<br>
name->lookupMethodDontThrow(loader->asciizConstructUTF8("<init>"), \<br>
+<br>
loader->asciizConstructUTF8("(Ljava/lang/Throwable;)V"), \<br>
+ false, false, 0);<br>
+<br>
+namespace j3 {<br>
+<br>
+class Jnjvm;<br>
+class JavaField;<br>
+class JavaMethod;<br>
+class JavaObject;<br>
+class JavaThread;<br>
+class Class;<br>
+class ClassArray;<br>
+class JnjvmClassLoader;<br>
+<br>
+class Classpath : public mvm::PermanentObject {<br>
+public:<br>
+ ISOLATE_STATIC UserClass* newClassLoader;<br>
+ ISOLATE_STATIC JavaMethod* getSystemClassLoader;<br>
+ ISOLATE_STATIC JavaMethod* setContextClassLoader;<br>
+ ISOLATE_STATIC UserClass* newString;<br>
+ ISOLATE_STATIC UserClass* newClass;<br>
+ ISOLATE_STATIC UserClass* newThrowable;<br>
+ ISOLATE_STATIC UserClass* newException;<br>
+ ISOLATE_STATIC JavaMethod* initClass;<br>
+ ISOLATE_STATIC JavaMethod* initClassWithProtectionDomain;<br>
+ ISOLATE_STATIC JavaField* vmdataClass;<br>
+ ISOLATE_STATIC JavaMethod* setProperty;<br>
+ ISOLATE_STATIC JavaMethod* initString;<br>
+ ISOLATE_STATIC JavaMethod* getCallingClassLoader;<br>
+ ISOLATE_STATIC JavaMethod* initConstructor;<br>
+ ISOLATE_STATIC UserClassArray* constructorArrayClass;<br>
+ ISOLATE_STATIC UserClassArray* constructorArrayAnnotation;<br>
+ ISOLATE_STATIC UserClass* newConstructor;<br>
+ ISOLATE_STATIC JavaField* constructorSlot;<br>
+ ISOLATE_STATIC JavaMethod* initMethod;<br>
+ ISOLATE_STATIC JavaMethod* initField;<br>
+ ISOLATE_STATIC UserClassArray* methodArrayClass;<br>
+ ISOLATE_STATIC UserClassArray* fieldArrayClass;<br>
+ ISOLATE_STATIC UserClass* newMethod;<br>
+ ISOLATE_STATIC UserClass* newField;<br>
+ ISOLATE_STATIC JavaField* methodSlot;<br>
+ ISOLATE_STATIC JavaField* fieldSlot;<br>
+ ISOLATE_STATIC UserClassArray* classArrayClass;<br>
+ ISOLATE_STATIC JavaMethod* loadInClassLoader;<br>
+ ISOLATE_STATIC JavaMethod* initVMThrowable;<br>
+ ISOLATE_STATIC JavaField* vmDataVMThrowable;<br>
+ ISOLATE_STATIC UserClass* newVMThrowable;<br>
+ ISOLATE_STATIC JavaField* bufferAddress;<br>
+ ISOLATE_STATIC JavaField* dataPointer32;<br>
+ ISOLATE_STATIC JavaField* dataPointer64;<br>
+ ISOLATE_STATIC UserClass* newPointer32;<br>
+ ISOLATE_STATIC UserClass* newPointer64;<br>
+ ISOLATE_STATIC UserClass* newDirectByteBuffer;<br>
+ ISOLATE_STATIC JavaMethod* InitDirectByteBuffer;<br>
+ ISOLATE_STATIC JavaField* vmdataClassLoader;<br>
+ ISOLATE_STATIC UserClass* enumClass;<br>
+<br>
+ ISOLATE_STATIC JavaField* boolValue;<br>
+ ISOLATE_STATIC JavaField* byteValue;<br>
+ ISOLATE_STATIC JavaField* shortValue;<br>
+ ISOLATE_STATIC JavaField* charValue;<br>
+ ISOLATE_STATIC JavaField* intValue;<br>
+ ISOLATE_STATIC JavaField* longValue;<br>
+ ISOLATE_STATIC JavaField* floatValue;<br>
+ ISOLATE_STATIC JavaField* doubleValue;<br>
+<br>
+ ISOLATE_STATIC UserClass* newStackTraceElement;<br>
+ ISOLATE_STATIC UserClassArray* stackTraceArray;<br>
+ ISOLATE_STATIC JavaMethod* initStackTraceElement;<br>
+<br>
+ ISOLATE_STATIC void initialiseClasspath(JnjvmClassLoader* loader);<br>
+<br>
+ ISOLATE_STATIC UserClass* voidClass;<br>
+ ISOLATE_STATIC UserClass* boolClass;<br>
+ ISOLATE_STATIC UserClass* byteClass;<br>
+ ISOLATE_STATIC UserClass* shortClass;<br>
+ ISOLATE_STATIC UserClass* charClass;<br>
+ ISOLATE_STATIC UserClass* intClass;<br>
+ ISOLATE_STATIC UserClass* floatClass;<br>
+ ISOLATE_STATIC UserClass* doubleClass;<br>
+ ISOLATE_STATIC UserClass* longClass;<br>
+<br>
+ ISOLATE_STATIC UserClass* vmStackWalker;<br>
+<br>
+ ISOLATE_STATIC UserClass* newThread;<br>
+ ISOLATE_STATIC UserClass* newVMThread;<br>
+ ISOLATE_STATIC JavaField* assocThread;<br>
+ ISOLATE_STATIC JavaField* vmdataVMThread;<br>
+ ISOLATE_STATIC JavaMethod* finaliseCreateInitialThread;<br>
+ ISOLATE_STATIC JavaMethod* initThread;<br>
+ ISOLATE_STATIC JavaMethod* initVMThread;<br>
+ ISOLATE_STATIC JavaMethod* runVMThread;<br>
+ ISOLATE_STATIC JavaMethod* groupAddThread;<br>
+ ISOLATE_STATIC JavaField* threadName;<br>
+ ISOLATE_STATIC JavaField* groupName;<br>
+ ISOLATE_STATIC JavaMethod* initGroup;<br>
+ ISOLATE_STATIC JavaField* priority;<br>
+ ISOLATE_STATIC JavaField* daemon;<br>
+ ISOLATE_STATIC JavaField* group;<br>
+ ISOLATE_STATIC JavaField* running;<br>
+ ISOLATE_STATIC UserClass* threadGroup;<br>
+ ISOLATE_STATIC JavaField* rootGroup;<br>
+ ISOLATE_STATIC JavaField* vmThread;<br>
+ ISOLATE_STATIC JavaMethod* getUncaughtExceptionHandler;<br>
+ ISOLATE_STATIC JavaMethod* uncaughtException;<br>
+ ISOLATE_STATIC UserClass* inheritableThreadLocal;<br>
+<br>
+<br>
+ ISOLATE_STATIC UserClass* InvocationTargetException;<br>
+ ISOLATE_STATIC UserClass* ArrayStoreException;<br>
+ ISOLATE_STATIC UserClass* ClassCastException;<br>
+ ISOLATE_STATIC UserClass* IllegalMonitorStateException;<br>
+ ISOLATE_STATIC UserClass* IllegalArgumentException;<br>
+ ISOLATE_STATIC UserClass* InterruptedException;<br>
+ ISOLATE_STATIC UserClass* IndexOutOfBoundsException;<br>
+ ISOLATE_STATIC UserClass* ArrayIndexOutOfBoundsException;<br>
+ ISOLATE_STATIC UserClass* NegativeArraySizeException;<br>
+ ISOLATE_STATIC UserClass* NullPointerException;<br>
+ ISOLATE_STATIC UserClass* SecurityException;<br>
+ ISOLATE_STATIC UserClass* ClassFormatError;<br>
+ ISOLATE_STATIC UserClass* ClassCircularityError;<br>
+ ISOLATE_STATIC UserClass* NoClassDefFoundError;<br>
+ ISOLATE_STATIC UserClass* UnsupportedClassVersionError;<br>
+ ISOLATE_STATIC UserClass* NoSuchFieldError;<br>
+ ISOLATE_STATIC UserClass* NoSuchMethodError;<br>
+ ISOLATE_STATIC UserClass* InstantiationError;<br>
+ ISOLATE_STATIC UserClass* InstantiationException;<br>
+ ISOLATE_STATIC UserClass* IllegalAccessError;<br>
+ ISOLATE_STATIC UserClass* IllegalAccessException;<br>
+ ISOLATE_STATIC UserClass* VerifyError;<br>
+ ISOLATE_STATIC UserClass* ExceptionInInitializerError;<br>
+ ISOLATE_STATIC UserClass* LinkageError;<br>
+ ISOLATE_STATIC UserClass* AbstractMethodError;<br>
+ ISOLATE_STATIC UserClass* UnsatisfiedLinkError;<br>
+ ISOLATE_STATIC UserClass* InternalError;<br>
+ ISOLATE_STATIC UserClass* OutOfMemoryError;<br>
+ ISOLATE_STATIC UserClass* StackOverflowError;<br>
+ ISOLATE_STATIC UserClass* UnknownError;<br>
+ ISOLATE_STATIC UserClass* ClassNotFoundException;<br>
+ ISOLATE_STATIC UserClass* ArithmeticException;<br>
+<br>
+ ISOLATE_STATIC JavaMethod* InitInvocationTargetException;<br>
+ ISOLATE_STATIC JavaMethod* InitArrayStoreException;<br>
+ ISOLATE_STATIC JavaMethod* InitClassCastException;<br>
+ ISOLATE_STATIC JavaMethod* InitIllegalMonitorStateException;<br>
+ ISOLATE_STATIC JavaMethod* InitIllegalArgumentException;<br>
+ ISOLATE_STATIC JavaMethod* InitInterruptedException;<br>
+ ISOLATE_STATIC JavaMethod* InitIndexOutOfBoundsException;<br>
+ ISOLATE_STATIC JavaMethod* InitArrayIndexOutOfBoundsException;<br>
+ ISOLATE_STATIC JavaMethod* InitNegativeArraySizeException;<br>
+ ISOLATE_STATIC JavaMethod* InitNullPointerException;<br>
+ ISOLATE_STATIC JavaMethod* InitSecurityException;<br>
+ ISOLATE_STATIC JavaMethod* InitClassFormatError;<br>
+ ISOLATE_STATIC JavaMethod* InitClassCircularityError;<br>
+ ISOLATE_STATIC JavaMethod* InitNoClassDefFoundError;<br>
+ ISOLATE_STATIC JavaMethod* InitUnsupportedClassVersionError;<br>
+ ISOLATE_STATIC JavaMethod* InitNoSuchFieldError;<br>
+ ISOLATE_STATIC JavaMethod* InitNoSuchMethodError;<br>
+ ISOLATE_STATIC JavaMethod* InitInstantiationError;<br>
+ ISOLATE_STATIC JavaMethod* InitInstantiationException;<br>
+ ISOLATE_STATIC JavaMethod* InitIllegalAccessError;<br>
+ ISOLATE_STATIC JavaMethod* InitIllegalAccessException;<br>
+ ISOLATE_STATIC JavaMethod* InitVerifyError;<br>
+ ISOLATE_STATIC JavaMethod* InitExceptionInInitializerError;<br>
+ ISOLATE_STATIC JavaMethod* InitLinkageError;<br>
+ ISOLATE_STATIC JavaMethod* InitAbstractMethodError;<br>
+ ISOLATE_STATIC JavaMethod* InitUnsatisfiedLinkError;<br>
+ ISOLATE_STATIC JavaMethod* InitInternalError;<br>
+ ISOLATE_STATIC JavaMethod* InitOutOfMemoryError;<br>
+ ISOLATE_STATIC JavaMethod* InitStackOverflowError;<br>
+ ISOLATE_STATIC JavaMethod* InitUnknownError;<br>
+ ISOLATE_STATIC JavaMethod* InitClassNotFoundException;<br>
+ ISOLATE_STATIC JavaMethod* InitArithmeticException;<br>
+<br>
+ ISOLATE_STATIC JavaMethod* SystemArraycopy;<br>
+ ISOLATE_STATIC JavaMethod* VMSystemArraycopy;<br>
+ ISOLATE_STATIC Class* SystemClass;<br>
+<br>
+ ISOLATE_STATIC JavaMethod* IntToString;<br>
+<br>
+ ISOLATE_STATIC JavaMethod* InitObject;<br>
+ ISOLATE_STATIC JavaMethod* FinalizeObject;<br>
+<br>
+ ISOLATE_STATIC JavaMethod* ErrorWithExcpNoClassDefFoundError;<br>
+ ISOLATE_STATIC JavaMethod* ErrorWithExcpExceptionInInitializerError;<br>
+ ISOLATE_STATIC JavaMethod* ErrorWithExcpInvocationTargetException;<br>
+<br>
+<br>
+<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfByte;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfChar;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfInt;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfShort;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfBool;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfLong;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfFloat;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfDouble;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfObject;<br>
+ ISOLATE_STATIC UserClassArray* ArrayOfString;<br>
+<br>
+ ISOLATE_STATIC UserClassPrimitive* OfByte;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfChar;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfInt;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfShort;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfBool;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfLong;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfFloat;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfDouble;<br>
+ ISOLATE_STATIC UserClassPrimitive* OfVoid;<br>
+<br>
+ ISOLATE_STATIC UserClass* OfObject;<br>
+<br>
+ ISOLATE_STATIC JavaField* methodClass;<br>
+ ISOLATE_STATIC JavaField* fieldClass;<br>
+ ISOLATE_STATIC JavaField* constructorClass;<br>
+<br>
+ ISOLATE_STATIC JavaMethod* EnqueueReference;<br>
+ ISOLATE_STATIC Class* newReference;<br>
+<br>
+ ISOLATE_STATIC UserClass* EnumClass;<br>
+<br>
+private:<br>
+ ISOLATE_STATIC void CreateJavaThread(Jnjvm* vm, JavaThread* myth,<br>
+ const char* name, JavaObject* Group);<br>
+<br>
+public:<br>
+ ISOLATE_STATIC void InitializeThreading(Jnjvm* vm);<br>
+};<br>
+<br>
+<br>
+} // end namespace j3<br>
+<br>
+#endif<br>
<font color="#888888">--<br>
1.7.5.1<br>
_______________________________________________<br>
vmkit-commits mailing list<br>
<a href="mailto:vmkit-commits@cs.uiuc.edu">vmkit-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits</a><br>
</font></blockquote></div><br>