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>