[vmkit-commits] [vmkit] r144090 - in /vmkit/trunk/lib/J3/ClassLib: ClassContext.inc GNUClasspath/ClasspathVMStackWalker.inc OpenJDK/OpenJDK.inc

Will Dietz wdietz2 at illinois.edu
Tue Nov 8 09:33:57 PST 2011


Author: wdietz2
Date: Tue Nov  8 11:33:56 2011
New Revision: 144090

URL: http://llvm.org/viewvc/llvm-project?rev=144090&view=rev
Log:
Impl JVM_GetClassContext, refactor existing code into shared ClassContext.inc.

Also, fix ClassContext creation of wrong array type.

Added:
    vmkit/trunk/lib/J3/ClassLib/ClassContext.inc
Modified:
    vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc
    vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc

Added: vmkit/trunk/lib/J3/ClassLib/ClassContext.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/ClassContext.inc?rev=144090&view=auto
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/ClassContext.inc (added)
+++ vmkit/trunk/lib/J3/ClassLib/ClassContext.inc Tue Nov  8 11:33:56 2011
@@ -0,0 +1,36 @@
+//===------------ ClassContext.inc -- Implement GetClassContext -----------===//
+//
+//                            The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ArrayObject* GetClassContext() {
+  ArrayObject* result = NULL;
+  JavaObject* delegatee = NULL;
+  llvm_gcroot(result, 0);
+  llvm_gcroot(delegatee, 0);
+
+  JavaThread* th = JavaThread::get();
+  Jnjvm* vm = th->getJVM();
+  uint32 length = th->getFrameContextLength();
+
+  mvm::ThreadAllocator allocator;
+  uintptr_t* buffer = (uintptr_t*)allocator.Allocate(length * sizeof(uintptr_t));
+
+  uint32 finalSize = th->getJavaFrameContext((void**)buffer);
+
+  result = (ArrayObject*)
+    vm->upcalls->classArrayClass->doNew(finalSize, vm);
+
+  for (uint32 i = 0; i != finalSize; ++i) {
+    JavaMethod* meth = ((JavaMethod**)buffer)[i];
+    assert(meth && "Wrong stack trace");
+    delegatee = meth->classDef->getClassDelegatee(vm);;
+    ArrayObject::setElement(result, delegatee, i);
+  }
+
+  return result;
+}

Modified: vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc?rev=144090&r1=144089&r2=144090&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc Tue Nov  8 11:33:56 2011
@@ -19,6 +19,8 @@
 #include "JavaUpcalls.h"
 #include "Jnjvm.h"
 
+#include "ClassContext.inc"
+
 using namespace j3;
 
 extern "C" {
@@ -31,31 +33,12 @@
 ) {
 
   ArrayObject* result = NULL;
-  JavaObject* delegatee = NULL;
   llvm_gcroot(result, 0);
-  llvm_gcroot(delegatee, 0);
 
   BEGIN_NATIVE_EXCEPTION(0)
 
-  JavaThread* th = JavaThread::get();
-  Jnjvm* vm = th->getJVM();
-  uint32 length = th->getFrameContextLength();
-  
-  mvm::ThreadAllocator allocator;  
-  uintptr_t* buffer = (uintptr_t*)allocator.Allocate(length * sizeof(uintptr_t));
-  
-  uint32 finalSize = th->getJavaFrameContext((void**)buffer);
-  
-  result = (ArrayObject*)
-    vm->upcalls->stackTraceArray->doNew(finalSize, vm);
-   
-  for (uint32 i = 0; i != finalSize; ++i) {
-    JavaMethod* meth = ((JavaMethod**)buffer)[i];
-    assert(meth && "Wrong stack trace");
-    delegatee = meth->classDef->getClassDelegatee(vm);;
-    ArrayObject::setElement(result, delegatee, i);
-  }
-  
+  result = GetClassContext();
+
   END_NATIVE_EXCEPTION
   
   return result;

Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=144090&r1=144089&r2=144090&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Tue Nov  8 11:33:56 2011
@@ -8,9 +8,11 @@
 
 #include "jvm.h"
 
-#include "ArrayCopy.inc"
 #include "JavaConstantPool.h"
 #include "Reader.h"
+
+#include "ArrayCopy.inc"
+#include "ClassContext.inc"
 #include "SetProperties.inc"
 
 #include <errno.h>
@@ -734,7 +736,16 @@
 
 JNIEXPORT jobjectArray JNICALL
 JVM_GetClassContext(JNIEnv *env) {
-  NYI();
+  ArrayObject * res = 0;
+  llvm_gcroot(res, 0);
+  BEGIN_JNI_EXCEPTION
+
+  res = GetClassContext();
+
+  RETURN_FROM_JNI((jobjectArray)th->pushJNIRef(res));
+  END_JNI_EXCEPTION
+
+  return 0;
 }
 
 JNIEXPORT jint JNICALL





More information about the vmkit-commits mailing list