[vmkit-commits] [vmkit] r199064 - implement NewDirectByteBuffer

Gael Thomas gael.thomas at lip6.fr
Sun Jan 12 14:01:54 PST 2014


Author: gthomas
Date: Sun Jan 12 16:01:54 2014
New Revision: 199064

URL: http://llvm.org/viewvc/llvm-project?rev=199064&view=rev
Log:
implement NewDirectByteBuffer

Modified:
    vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc?rev=199064&r1=199063&r2=199064&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc Sun Jan 12 16:01:54 2014
@@ -75,26 +75,9 @@ void J3Lib::loadSystemLibraries(J3ClassL
 }
 
 J3ObjectHandle* J3Lib::newDirectByteBuffer(void* address, size_t len) {
-#if 0
-  JavaObject* res = 0;
-  llvm_gcroot(res, 0);
-
-  BEGIN_JNI_EXCEPTION
-
-  JavaThread* th = JavaThread::get();
-  Jnjvm* myvm = th->getJVM();
-  UserClass* BB = myvm->upcalls->newDirectByteBuffer;
-
-  res = BB->doNew(myvm);
-
-  myvm->upcalls->InitDirectByteBuffer->invokeIntSpecial(myvm, BB, res,
-    (uint64_t)(uintptr_t)address, (int)capacity);
-
-  jobject ret = (jobject)th->pushJNIRef(res);
-  RETURN_FROM_JNI(ret);
-  END_JNI_EXCEPTION
-
-  RETURN_FROM_JNI(0);
-#endif
-	J3::internalError("not yet implemented");
+	J3* vm = J3Thread::get()->vm();
+	J3Class* cl = vm->initialClassLoader->loadClass(vm->names()->get("java/nio/DirectByteBuffer"));
+	J3ObjectHandle* res = J3ObjectHandle::doNewObject(cl);
+	cl->findMethod(0, vm->initName, vm->initialClassLoader->getSignature(0, vm->names()->get("(JI)V")))->invokeSpecial(res, address, len);
+	return res;
 }

Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=199064&r1=199063&r2=199064&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sun Jan 12 16:01:54 2014
@@ -282,11 +282,13 @@ uintptr_t J3Layout::structSize() {
 }
 
 J3Method* J3Layout::localFindMethod(const vmkit::Name* name, J3Signature* signature) {
+	//fprintf(stderr, " --- lookup %s::%s in %s\n", name->cStr(), signature->name()->cStr(), J3Layout::name()->cStr());
+
 	for(size_t i=0; i<nbMethods(); i++) {
 		J3Method* cur = methods()[i];
 
-		//printf("%s - %s\n", cur->name()->cStr(), cur->signature()->cStr());
-		//printf("%s - %s\n", name->cStr(), signature->cStr());
+		//fprintf(stderr, "%s::%s%s\n", cur->cl()->name()->cStr(), cur->name()->cStr(), cur->signature()->name()->cStr());
+
 		if(cur->name() == name && cur->signature() == signature) {
 			return cur;
 		}





More information about the vmkit-commits mailing list