[vmkit-commits] [vmkit] r143129 - in /vmkit/trunk/lib/J3/ClassLib/OpenJDK: JavaUpcalls.cpp JavaUpcalls.h

Will Dietz wdietz2 at illinois.edu
Thu Oct 27 12:17:01 PDT 2011


Author: wdietz2
Date: Thu Oct 27 14:17:01 2011
New Revision: 143129

URL: http://llvm.org/viewvc/llvm-project?rev=143129&view=rev
Log:
OpenJDK JavaUpcalls revamp

Modified:
    vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp
    vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h

Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=143129&r1=143128&r2=143129&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.cpp Thu Oct 27 14:17:01 2011
@@ -33,33 +33,28 @@
 using namespace j3;
 
 Class*      Classpath::newThread;
-Class*      Classpath::newVMThread;
-JavaField*  Classpath::assocThread;
-JavaField*  Classpath::vmdataVMThread;
-JavaMethod* Classpath::finaliseCreateInitialThread;
-JavaMethod* Classpath::initVMThread;
 JavaMethod* Classpath::initThread;
+JavaMethod* Classpath::runThread;
 JavaMethod* Classpath::groupAddThread;
-JavaField*  Classpath::threadName;
 JavaField*  Classpath::groupName;
 JavaMethod* Classpath::initGroup;
+JavaMethod* Classpath::initNamedGroup;
 JavaField*  Classpath::priority;
 JavaField*  Classpath::daemon;
+JavaField*  Classpath::eetop;
+JavaField*  Classpath::threadStatus;
 JavaField*  Classpath::group;
-JavaField*  Classpath::running;
 Class*      Classpath::threadGroup;
-JavaField*  Classpath::rootGroup;
-JavaField*  Classpath::vmThread;
 JavaMethod* Classpath::getUncaughtExceptionHandler;
 JavaMethod* Classpath::uncaughtException;
-Class*      Classpath::inheritableThreadLocal;
 
-JavaMethod* Classpath::runVMThread;
 JavaMethod* Classpath::setContextClassLoader;
 JavaMethod* Classpath::getSystemClassLoader;
 Class*      Classpath::newString;
 Class*      Classpath::newClass;
 Class*      Classpath::newThrowable;
+JavaField*  Classpath::backtrace;
+JavaField*  Classpath::detailMessage;
 Class*      Classpath::newException;
 JavaMethod* Classpath::initClass;
 JavaMethod* Classpath::initClassWithProtectionDomain;
@@ -82,18 +77,12 @@
 JavaField*  Classpath::fieldSlot;
 ClassArray* Classpath::classArrayClass;
 JavaMethod* Classpath::loadInClassLoader;
-JavaMethod* Classpath::initVMThrowable;
-JavaField*  Classpath::vmDataVMThrowable;
-Class*      Classpath::newVMThrowable;
 JavaField*  Classpath::bufferAddress;
-JavaField*  Classpath::dataPointer32;
-JavaField*  Classpath::dataPointer64;
-Class*      Classpath::newPointer32;
-Class*      Classpath::newPointer64;
 Class*      Classpath::newDirectByteBuffer;
 JavaField*  Classpath::vmdataClassLoader;
 JavaMethod* Classpath::InitDirectByteBuffer;
 Class*      Classpath::newClassLoader;
+Class*      Classpath::cloneableClass;
 
 
 JavaField*  Classpath::boolValue;
@@ -153,6 +142,7 @@
 Class* Classpath::UnknownError;
 Class* Classpath::ClassNotFoundException;
 Class* Classpath::ArithmeticException;
+Class* Classpath::CloneNotSupportedException;
 
 JavaMethod* Classpath::InitInvocationTargetException;
 JavaMethod* Classpath::InitArrayStoreException;
@@ -186,13 +176,14 @@
 JavaMethod* Classpath::InitUnknownError;
 JavaMethod* Classpath::InitClassNotFoundException;
 JavaMethod* Classpath::InitArithmeticException;
+JavaMethod* Classpath::InitCloneNotSupportedException;
 JavaMethod* Classpath::InitObject;
 JavaMethod* Classpath::FinalizeObject;
 JavaMethod* Classpath::IntToString;
 
 JavaMethod* Classpath::SystemArraycopy;
-JavaMethod* Classpath::VMSystemArraycopy;
 Class*      Classpath::SystemClass;
+JavaMethod* Classpath::initSystem;
 Class*      Classpath::EnumClass;
 
 JavaMethod* Classpath::ErrorWithExcpNoClassDefFoundError;
@@ -231,29 +222,25 @@
 
 void Classpath::CreateJavaThread(Jnjvm* vm, JavaThread* myth,
                                  const char* thName, JavaObject* Group) {
-  JavaObjectVMThread* vmth = NULL;
   JavaObject* th = NULL;
   JavaObject* name = NULL;
   llvm_gcroot(Group, 0);
-  llvm_gcroot(vmth, 0);
   llvm_gcroot(th, 0);
   llvm_gcroot(name, 0);
 
+  assert(thName && thName[0] && "Invalid thread name!");
+
   th = newThread->doNew(vm);
   myth->javaThread = th;
-  vmth = (JavaObjectVMThread*)newVMThread->doNew(vm);
-  name = vm->asciizToStr(thName);
 
-  initThread->invokeIntSpecial(vm, newThread, th, &vmth, &name, 1, 0);
-  vmThread->setInstanceObjectField(th, vmth);
-  assocThread->setInstanceObjectField(vmth, th);
-  running->setInstanceInt8Field(vmth, (uint32)1);
-  JavaObjectVMThread::setVmdata(vmth, myth);
+  name = vm->asciizToStr(thName);
 
-  group->setInstanceObjectField(th, Group);
-  groupAddThread->invokeIntSpecial(vm, threadGroup, Group, &th);
+  // call Thread(ThreadGroup,String) constructor
+  initThread->invokeIntSpecial(vm, newThread, th, &Group, &name);
 
-  finaliseCreateInitialThread->invokeIntStatic(vm, inheritableThreadLocal, &th);
+  // Store reference to the JavaThread for this thread in the 'eetop' field
+  // TODO: Don't do this until we have the tracing handled.
+  // eetop->setInstanceLongField(th, (long)myth);
 }
 
 void Classpath::InitializeThreading(Jnjvm* vm) {
@@ -261,31 +248,33 @@
   JavaObject* RG = 0;
   JavaObject* SystemGroup = 0;
   JavaObject* systemName = 0;
+  JavaObject* MainGroup = 0;
+  JavaObject* mainName = 0;
   llvm_gcroot(RG, 0);
   llvm_gcroot(SystemGroup, 0);
   llvm_gcroot(systemName, 0);
+  llvm_gcroot(MainGroup, 0);
+  llvm_gcroot(mainName, 0);
 
   // Resolve and initialize classes first.
   newThread->resolveClass();
   newThread->initialiseClass(vm);
 
-  newVMThread->resolveClass();
-  newVMThread->initialiseClass(vm);
-
   threadGroup->resolveClass();
   threadGroup->initialiseClass(vm);
 
-  // Create the main thread
-  RG = rootGroup->getStaticObjectField();
-  assert(RG && "No root group");
-  assert(vm->getMainThread() && "VM did not set its main thread");
-  CreateJavaThread(vm, (JavaThread*)vm->getMainThread(), "main", RG);
-
   // Create the "system" group.
   SystemGroup = threadGroup->doNew(vm);
   initGroup->invokeIntSpecial(vm, threadGroup, SystemGroup);
-  systemName = vm->asciizToStr("system");
-  groupName->setInstanceObjectField(SystemGroup, systemName);
+
+  // Create the "main" group, child of the "system" group.
+  MainGroup = threadGroup->doNew(vm);
+  mainName = vm->asciizToStr("main");
+  initNamedGroup->invokeIntSpecial(vm, threadGroup, MainGroup, &SystemGroup, &mainName);
+
+  // Create the main thread
+  assert(vm->getMainThread() && "VM did not set its main thread");
+  CreateJavaThread(vm, (JavaThread*)vm->getMainThread(), "main", MainGroup);
 
   // Create the finalizer thread.
   assert(vm->getFinalizerThread() && "VM did not set its finalizer thread");
@@ -395,65 +384,6 @@
   return res;
 }
 
-extern "C" uint8 Java_java_lang_Class_isArray__(JavaObjectClass* klass) {
-  llvm_gcroot(klass, 0);
-  UserCommonClass* cl = 0;
-
-  BEGIN_NATIVE_EXCEPTION(0)
-
-  cl = JavaObjectClass::getClass(klass);
-
-  END_NATIVE_EXCEPTION
-
-  return (uint8)cl->isArray();
-}
-
-extern "C" JavaObject* Java_gnu_classpath_VMStackWalker_getCallingClass__() {
-
-  JavaObject* res = 0;
-  llvm_gcroot(res, 0);
-
-  BEGIN_NATIVE_EXCEPTION(0)
-
-  JavaThread* th = JavaThread::get();
-  UserClass* cl = th->getCallingClassLevel(2);
-  if (cl != NULL) res = cl->getClassDelegatee(th->getJVM());
-
-  END_NATIVE_EXCEPTION
-
-  return res;
-}
-
-extern "C" JavaObject* Java_gnu_classpath_VMStackWalker_getCallingClassLoader__() {
-
-  JavaObject* res = 0;
-  llvm_gcroot(res, 0);
-
-  BEGIN_NATIVE_EXCEPTION(0)
-
-  JavaThread* th = JavaThread::get();
-  UserClass* cl = th->getCallingClassLevel(2);
-  res = cl->classLoader->getJavaClassLoader();
-
-  END_NATIVE_EXCEPTION
-
-  return res;
-}
-
-extern "C" JavaObject* Java_gnu_classpath_VMStackWalker_firstNonNullClassLoader__() {
-  JavaObject* res = 0;
-  llvm_gcroot(res, 0);
-
-  BEGIN_NATIVE_EXCEPTION(0)
-
-  JavaThread* th = JavaThread::get();
-  res = th->getNonNullClassLoader();
-
-  END_NATIVE_EXCEPTION
-
-  return res;
-}
-
 extern "C" JavaObject* Java_sun_reflect_Reflection_getCallerClass__I(uint32 index) {
 
   JavaObject* res = 0;
@@ -512,30 +442,6 @@
   JavaObjectConstructor::staticTracer(obj, closure);
 }
 
-extern "C" void nativeJavaObjectVMThreadTracer(
-    JavaObjectVMThread* obj, word_t closure) {
-  JavaObjectVMThread::staticTracer(obj, closure);
-}
-
-extern "C" JavaString* Java_java_lang_VMSystem_getenv__Ljava_lang_String_2(JavaString* str) {
-  JavaString* ret = 0;
-  llvm_gcroot(str, 0);
-  llvm_gcroot(ret, 0);
-
-  BEGIN_NATIVE_EXCEPTION(0)
-
-  mvm::ThreadAllocator allocator;
-  char* buf = JavaString::strToAsciiz(str, &allocator);
-  char* res = getenv(buf);
-  if (res) {
-    Jnjvm* vm = JavaThread::get()->getJVM();
-    ret = vm->asciizToStr(res);
-  }
-
-  END_NATIVE_EXCEPTION
-
-  return ret;
-}
 
 void Classpath::initialiseClasspath(JnjvmClassLoader* loader) {
 
@@ -566,21 +472,23 @@
   newThrowable =
     UPCALL_CLASS(loader, "java/lang/Throwable");
 
+  backtrace =
+    UPCALL_FIELD(loader, "java/lang/Throwable",
+        "backtrace", "Ljava/lang/Object;", ACC_VIRTUAL);
+
+  detailMessage =
+    UPCALL_FIELD(loader, "java/lang/Throwable",
+        "detailMessage", "Ljava/lang/String;", ACC_VIRTUAL);
+
   newException =
     UPCALL_CLASS(loader, "java/lang/Exception");
 
-  newPointer32 =
-    UPCALL_CLASS(loader, "gnu/classpath/Pointer32");
-
-  newPointer64 =
-    UPCALL_CLASS(loader, "gnu/classpath/Pointer64");
-
   newDirectByteBuffer =
-    UPCALL_CLASS(loader, "java/nio/DirectByteBufferImpl$ReadWrite");
+    UPCALL_CLASS(loader, "java/nio/DirectByteBuffer");
 
+  //TODO: Revisit this one, verify signature.
   InitDirectByteBuffer =
-    UPCALL_METHOD(loader, "java/nio/DirectByteBufferImpl$ReadWrite", "<init>",
-                  "(Ljava/lang/Object;Lgnu/classpath/Pointer;III)V",
+    UPCALL_METHOD(loader, "java/nio/DirectByteBuffer", "<init>", "(JI)V",
                   ACC_VIRTUAL);
 
   initClass =
@@ -606,7 +514,9 @@
 
   initConstructor =
     UPCALL_METHOD(loader, "java/lang/reflect/Constructor", "<init>",
-                  "(Ljava/lang/Class;I)V", ACC_VIRTUAL);
+    "(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;"
+    "IILjava/lang/String;[B[B)V",
+      ACC_VIRTUAL);
 
   newConstructor =
     UPCALL_CLASS(loader, "java/lang/reflect/Constructor");
@@ -622,7 +532,9 @@
 
   initMethod =
     UPCALL_METHOD(loader, "java/lang/reflect/Method", "<init>",
-                  "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL);
+                  "(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;"
+                  "Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;"
+                  "[B[B[B)V", ACC_VIRTUAL);
 
   newMethod =
     UPCALL_CLASS(loader, "java/lang/reflect/Method");
@@ -635,7 +547,8 @@
 
   initField =
     UPCALL_METHOD(loader, "java/lang/reflect/Field", "<init>",
-                  "(Ljava/lang/Class;Ljava/lang/String;I)V", ACC_VIRTUAL);
+                  "(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V",
+                  ACC_VIRTUAL);
 
   newField =
     UPCALL_CLASS(loader, "java/lang/reflect/Field");
@@ -650,29 +563,14 @@
   classArrayClass =
     UPCALL_ARRAY_CLASS(loader, "java/lang/Class", 1);
 
-  newVMThrowable =
-    UPCALL_CLASS(loader, "java/lang/VMThrowable");
-
-  initVMThrowable =
-    UPCALL_METHOD(loader, "java/lang/VMThrowable", "<init>", "()V", ACC_VIRTUAL);
-
-  vmDataVMThrowable =
-    UPCALL_FIELD(loader, "java/lang/VMThrowable", "vmdata", "Ljava/lang/Object;",
-                 ACC_VIRTUAL);
-
   bufferAddress =
     UPCALL_FIELD(loader, "java/nio/Buffer", "address", "Lgnu/classpath/Pointer;",
                  ACC_VIRTUAL);
 
-  dataPointer32 =
-    UPCALL_FIELD(loader, "gnu/classpath/Pointer32", "data", "I", ACC_VIRTUAL);
-
-  dataPointer64 =
-    UPCALL_FIELD(loader, "gnu/classpath/Pointer64", "data", "J", ACC_VIRTUAL);
-
-  vmdataClassLoader =
-    UPCALL_FIELD(loader, "java/lang/ClassLoader", "vmdata", "Ljava/lang/Object;",
-                 ACC_VIRTUAL);
+  // TODO: Resolve how to tie a ClassLoader to its internal representation
+  //vmdataClassLoader =
+  //  UPCALL_FIELD(loader, "java/lang/ClassLoader", "vmdata", "Ljava/lang/Object;",
+  //               ACC_VIRTUAL);
 
   newStackTraceElement =
     UPCALL_CLASS(loader, "java/lang/StackTraceElement");
@@ -682,7 +580,7 @@
 
   initStackTraceElement =
     UPCALL_METHOD(loader,  "java/lang/StackTraceElement", "<init>",
-                  "(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)V",
+                  "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V",
                   ACC_VIRTUAL);
 
   boolValue =
@@ -739,25 +637,14 @@
   Classpath::OfObject =
     UPCALL_CLASS(loader, "java/lang/Object");
 
-  vmStackWalker =
-    UPCALL_CLASS(loader, "gnu/classpath/VMStackWalker");
-
   loadInClassLoader =
     UPCALL_METHOD(loader, "java/lang/ClassLoader", "loadClass",
                   "(Ljava/lang/String;)Ljava/lang/Class;", ACC_VIRTUAL);
 
-  JavaMethod* internString =
-    UPCALL_METHOD(loader, "java/lang/VMString", "intern",
-                  "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC);
-  internString->setNative();
-
-  JavaMethod* isArray =
-    UPCALL_METHOD(loader, "java/lang/Class", "isArray", "()Z", ACC_VIRTUAL);
-  isArray->setNative();
-
   // Make sure classes the JIT optimizes on are loaded.
-  UPCALL_CLASS(loader, "java/lang/VMFloat");
-  UPCALL_CLASS(loader, "java/lang/VMDouble");
+  // TODO: What to do with these? I think we can just remove them...
+  //UPCALL_CLASS(loader, "java/lang/VMFloat");
+  //UPCALL_CLASS(loader, "java/lang/VMDouble");
 
   UPCALL_REFLECT_CLASS_EXCEPTION(loader, InvocationTargetException);
   UPCALL_CLASS_EXCEPTION(loader, ArrayStoreException);
@@ -791,6 +678,7 @@
   UPCALL_CLASS_EXCEPTION(loader, UnknownError);
   UPCALL_CLASS_EXCEPTION(loader, ClassNotFoundException);
   UPCALL_CLASS_EXCEPTION(loader, ArithmeticException);
+  UPCALL_CLASS_EXCEPTION(loader, CloneNotSupportedException);
 
   UPCALL_METHOD_EXCEPTION(loader, InvocationTargetException);
   UPCALL_METHOD_EXCEPTION(loader, ArrayStoreException);
@@ -824,6 +712,7 @@
   UPCALL_METHOD_EXCEPTION(loader, UnknownError);
   UPCALL_METHOD_EXCEPTION(loader, ClassNotFoundException);
   UPCALL_METHOD_EXCEPTION(loader, ArithmeticException);
+  UPCALL_METHOD_EXCEPTION(loader, CloneNotSupportedException);
 
   UPCALL_METHOD_WITH_EXCEPTION(loader, NoClassDefFoundError);
   UPCALL_METHOD_WITH_EXCEPTION(loader, ExceptionInInitializerError);
@@ -842,45 +731,26 @@
                                   "(Ljava/lang/Object;ILjava/lang/Object;II)V",
                                   ACC_STATIC);
 
-  VMSystemArraycopy = UPCALL_METHOD(loader, "java/lang/VMSystem", "arraycopy",
-                                  "(Ljava/lang/Object;ILjava/lang/Object;II)V",
-                                  ACC_STATIC);
+  SystemClass = UPCALL_CLASS(loader, "java/lang/System");
+
+  initSystem =
+    UPCALL_METHOD(loader, "java/lang/System", "initializeSystemClass", "()V",
+        ACC_STATIC);
 
   SystemClass = UPCALL_CLASS(loader, "java/lang/System");
   EnumClass = UPCALL_CLASS(loader, "java/lang/Enum");
 
+  cloneableClass = UPCALL_CLASS(loader, "java/lang/Cloneable");
+
   newThread =
     UPCALL_CLASS(loader, "java/lang/Thread");
 
-  newVMThread =
-    UPCALL_CLASS(loader, "java/lang/VMThread");
-
-  assocThread =
-    UPCALL_FIELD(loader, "java/lang/VMThread", "thread", "Ljava/lang/Thread;",
-                 ACC_VIRTUAL);
-
-  vmdataVMThread =
-    UPCALL_FIELD(loader, "java/lang/VMThread", "vmdata", "Ljava/lang/Object;",
-                 ACC_VIRTUAL);
-
-  inheritableThreadLocal =
-    UPCALL_CLASS(loader, "java/lang/InheritableThreadLocal");
-
-  finaliseCreateInitialThread =
-    UPCALL_METHOD(loader, "java/lang/InheritableThreadLocal", "newChildThread",
-                  "(Ljava/lang/Thread;)V", ACC_STATIC);
-
   initThread =
     UPCALL_METHOD(loader, "java/lang/Thread", "<init>",
-                  "(Ljava/lang/VMThread;Ljava/lang/String;IZ)V", ACC_VIRTUAL);
-
-  initVMThread =
-    UPCALL_METHOD(loader, "java/lang/VMThread", "<init>",
-                  "(Ljava/lang/Thread;)V", ACC_VIRTUAL);
-
-  runVMThread =
-    UPCALL_METHOD(loader, "java/lang/VMThread", "run", "()V", ACC_VIRTUAL);
+        "(Ljava/lang/ThreadGroup;Ljava/lang/String;)V", ACC_VIRTUAL);
 
+  runThread =
+    UPCALL_METHOD(loader, "java/lang/Thread", "run", "()V", ACC_VIRTUAL);
 
   groupAddThread =
     UPCALL_METHOD(loader, "java/lang/ThreadGroup", "addThread",
@@ -890,39 +760,32 @@
     UPCALL_METHOD(loader, "java/lang/ThreadGroup", "<init>",
                   "()V", ACC_VIRTUAL);
 
+  initNamedGroup =
+    UPCALL_METHOD(loader, "java/lang/ThreadGroup", "<init>",
+                  "(Ljava/lang/ThreadGroup;Ljava/lang/String;)V", ACC_VIRTUAL);
+
   groupName =
     UPCALL_FIELD(loader, "java/lang/ThreadGroup", "name", "Ljava/lang/String;",
                  ACC_VIRTUAL);
-
-  threadName =
-     UPCALL_FIELD(loader, "java/lang/Thread", "name", "Ljava/lang/String;",
-                  ACC_VIRTUAL);
-
-
   priority =
     UPCALL_FIELD(loader,  "java/lang/Thread", "priority", "I", ACC_VIRTUAL);
 
   daemon =
     UPCALL_FIELD(loader, "java/lang/Thread", "daemon", "Z", ACC_VIRTUAL);
 
+  eetop =
+    UPCALL_FIELD(loader, "java/lang/Thread", "eetop", "J", ACC_VIRTUAL);
+
+  threadStatus =
+    UPCALL_FIELD(loader, "java/lang/Thread", "threadStatus", "I", ACC_VIRTUAL);
   group =
     UPCALL_FIELD(loader, "java/lang/Thread", "group",
                  "Ljava/lang/ThreadGroup;", ACC_VIRTUAL);
 
-  running =
-    UPCALL_FIELD(loader, "java/lang/VMThread", "running", "Z", ACC_VIRTUAL);
-
   threadGroup =
     UPCALL_CLASS(loader, "java/lang/ThreadGroup");
 
-  rootGroup =
-    UPCALL_FIELD(loader, "java/lang/ThreadGroup", "root",
-                 "Ljava/lang/ThreadGroup;", ACC_STATIC);
-
-  vmThread =
-    UPCALL_FIELD(loader, "java/lang/Thread", "vmThread",
-                 "Ljava/lang/VMThread;", ACC_VIRTUAL);
-
+  // TODO: Verify this works in OpenJDK, merged from upstream
   getUncaughtExceptionHandler =
     UPCALL_METHOD(loader, "java/lang/Thread", "getUncaughtExceptionHandler",
                   "()Ljava/lang/Thread$UncaughtExceptionHandler;", ACC_VIRTUAL);
@@ -954,55 +817,11 @@
   // Don't compile methods here, we still don't know where to allocate Java
   // strings.
 
-  JavaMethod* getEnv =
-    UPCALL_METHOD(loader, "java/lang/VMSystem", "getenv",
-                  "(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC);
-  getEnv->setNative();
-
-  JavaMethod* getCallingClass =
-    UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClass",
-                  "()Ljava/lang/Class;", ACC_STATIC);
-  getCallingClass->setNative();
-
-  JavaMethod* getCallingClassLoader =
-    UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "getCallingClassLoader",
-                  "()Ljava/lang/ClassLoader;", ACC_STATIC);
-  getCallingClassLoader->setNative();
-
-  JavaMethod* firstNonNullClassLoader =
-    UPCALL_METHOD(loader, "gnu/classpath/VMStackWalker", "firstNonNullClassLoader",
-                  "()Ljava/lang/ClassLoader;", ACC_STATIC);
-  firstNonNullClassLoader->setNative();
-
   JavaMethod* getCallerClass =
     UPCALL_METHOD(loader, "sun/reflect/Reflection", "getCallerClass",
                   "(I)Ljava/lang/Class;", ACC_STATIC);
   getCallerClass->setNative();
 
-  JavaMethod* postProperties =
-    UPCALL_METHOD(loader, "gnu/classpath/VMSystemProperties", "postInit",
-                  "(Ljava/util/Properties;)V", ACC_STATIC);
-  postProperties->setNative();
-
-  // Also implement these twos, implementation in GNU Classpath 0.97.2 is buggy.
-  JavaMethod* getAnnotation =
-    UPCALL_METHOD(loader, "java/lang/reflect/AccessibleObject", "getAnnotation",
-                  "(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;",
-                  ACC_VIRTUAL);
-  getAnnotation->setNative();
-
-  JavaMethod* getAnnotations =
-    UPCALL_METHOD(loader, "java/lang/reflect/AccessibleObject",
-                  "getDeclaredAnnotations",
-                  "()[Ljava/lang/annotation/Annotation;",
-                  ACC_VIRTUAL);
-  getAnnotations->setNative();
-
-  JavaMethod* getBootPackages =
-    UPCALL_METHOD(loader, "java/lang/VMClassLoader", "getBootPackages",
-                  "()[Ljava/lang/String;", ACC_STATIC);
-  getBootPackages->setNative();
-
   //===----------------------------------------------------------------------===//
   //
   // To make classes non GC-allocated, we have to bypass the tracer functions of
@@ -1028,9 +847,11 @@
       (word_t)nativeJavaObjectFieldTracer,
       "nativeJavaObjectFieldTracer");
 
-   newVMThread->getVirtualVT()->setNativeTracer(
-      (word_t)nativeJavaObjectVMThreadTracer,
-      "nativeJavaObjectVMThreadTracer");
+   //TODO: Fix native tracer for java.lang.Thread to not trace through
+   // the eetop field to our internal JavaThread.
+   //newVMThread->getVirtualVT()->setNativeTracer(
+   //   (word_t)nativeJavaObjectVMThreadTracer,
+   //   "nativeJavaObjectVMThreadTracer");
 
   newReference = UPCALL_CLASS(loader, "java/lang/ref/Reference");
 
@@ -1070,7 +891,24 @@
 }
 
 void Classpath::InitializeSystem(Jnjvm * jvm) {
-  // TODO: Implement me!
+  JavaObject * exc = NULL;
+  llvm_gcroot(exc, 0);
+  TRY {
+    initSystem->invokeIntStatic(jvm, SystemClass);
+  } CATCH {
+    exc = JavaThread::get()->pendingException;
+  } END_CATCH;
+
+  if (exc) {
+    fprintf(stderr, "Exception %s while initializing system.\n",
+        UTF8Buffer(JavaObject::getClass(exc)->name).cString());
+    JavaString * s = (JavaString*)detailMessage->getInstanceObjectField(exc);
+    if (s) {
+      fprintf(stderr, "Exception Message: \"%s\"\n",
+          JavaString::strToAsciiz(s));
+    }
+    abort();
+  }
 }
 
 

Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h?rev=143129&r1=143128&r2=143129&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/JavaUpcalls.h Thu Oct 27 14:17:01 2011
@@ -70,6 +70,8 @@
   ISOLATE_STATIC UserClass* newString;
   ISOLATE_STATIC UserClass* newClass;
   ISOLATE_STATIC UserClass* newThrowable;
+  ISOLATE_STATIC JavaField* backtrace;
+  ISOLATE_STATIC JavaField* detailMessage;
   ISOLATE_STATIC UserClass* newException;
   ISOLATE_STATIC JavaMethod* initClass;
   ISOLATE_STATIC JavaMethod* initClassWithProtectionDomain;
@@ -92,17 +94,11 @@
   ISOLATE_STATIC JavaField*  fieldSlot;
   ISOLATE_STATIC UserClassArray* classArrayClass;
   ISOLATE_STATIC JavaMethod* loadInClassLoader;
-  ISOLATE_STATIC JavaMethod* initVMThrowable;
-  ISOLATE_STATIC JavaField*  vmDataVMThrowable;
-  ISOLATE_STATIC UserClass*  newVMThrowable;
   ISOLATE_STATIC JavaField*  bufferAddress;
-  ISOLATE_STATIC JavaField*  dataPointer32;
-  ISOLATE_STATIC JavaField*  dataPointer64;
-  ISOLATE_STATIC UserClass*  newPointer32;
-  ISOLATE_STATIC UserClass*  newPointer64;
   ISOLATE_STATIC UserClass*  newDirectByteBuffer;
   ISOLATE_STATIC JavaMethod* InitDirectByteBuffer;
   ISOLATE_STATIC JavaField*  vmdataClassLoader;
+  ISOLATE_STATIC UserClass* cloneableClass;
   ISOLATE_STATIC UserClass*  enumClass;
 
   ISOLATE_STATIC JavaField* boolValue;
@@ -133,27 +129,20 @@
   ISOLATE_STATIC UserClass* vmStackWalker;
 
   ISOLATE_STATIC UserClass* newThread;
-  ISOLATE_STATIC UserClass* newVMThread;
-  ISOLATE_STATIC JavaField* assocThread;
-  ISOLATE_STATIC JavaField* vmdataVMThread;
-  ISOLATE_STATIC JavaMethod* finaliseCreateInitialThread;
   ISOLATE_STATIC JavaMethod* initThread;
-  ISOLATE_STATIC JavaMethod* initVMThread;
-  ISOLATE_STATIC JavaMethod* runVMThread;
+  ISOLATE_STATIC JavaMethod* runThread;
   ISOLATE_STATIC JavaMethod* groupAddThread;
-  ISOLATE_STATIC JavaField* threadName;
   ISOLATE_STATIC JavaField* groupName;
   ISOLATE_STATIC JavaMethod* initGroup;
+  ISOLATE_STATIC JavaMethod* initNamedGroup;
   ISOLATE_STATIC JavaField* priority;
   ISOLATE_STATIC JavaField* daemon;
+  ISOLATE_STATIC JavaField* eetop;
   ISOLATE_STATIC JavaField* group;
-  ISOLATE_STATIC JavaField* running;
+  ISOLATE_STATIC JavaField* threadStatus;
   ISOLATE_STATIC UserClass* threadGroup;
-  ISOLATE_STATIC JavaField* rootGroup;
-  ISOLATE_STATIC JavaField* vmThread;
   ISOLATE_STATIC JavaMethod* getUncaughtExceptionHandler;
   ISOLATE_STATIC JavaMethod* uncaughtException;
-  ISOLATE_STATIC UserClass*  inheritableThreadLocal;
 
 
   ISOLATE_STATIC UserClass* InvocationTargetException;
@@ -188,6 +177,7 @@
   ISOLATE_STATIC UserClass* UnknownError;
   ISOLATE_STATIC UserClass* ClassNotFoundException;
   ISOLATE_STATIC UserClass* ArithmeticException;
+  ISOLATE_STATIC UserClass* CloneNotSupportedException;
 
   ISOLATE_STATIC JavaMethod* InitInvocationTargetException;
   ISOLATE_STATIC JavaMethod* InitArrayStoreException;
@@ -221,10 +211,11 @@
   ISOLATE_STATIC JavaMethod* InitUnknownError;
   ISOLATE_STATIC JavaMethod* InitClassNotFoundException;
   ISOLATE_STATIC JavaMethod* InitArithmeticException;
+  ISOLATE_STATIC JavaMethod* InitCloneNotSupportedException;
 
   ISOLATE_STATIC JavaMethod* SystemArraycopy;
-  ISOLATE_STATIC JavaMethod* VMSystemArraycopy;
   ISOLATE_STATIC Class*      SystemClass;
+  ISOLATE_STATIC JavaMethod* initSystem;
 
   ISOLATE_STATIC JavaMethod* IntToString;
 





More information about the vmkit-commits mailing list