[vmkit-commits] [vmkit] r198285 - I forgot to handle the case where a J3ObjectHandle is null in the caller gate

Gael Thomas gael.thomas at lip6.fr
Wed Jan 1 13:52:59 PST 2014


Author: gthomas
Date: Wed Jan  1 15:52:59 2014
New Revision: 198285

URL: http://llvm.org/viewvc/llvm-project?rev=198285&view=rev
Log:
I forgot to handle the case where a J3ObjectHandle is null in the caller gate

Modified:
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3signature.cc

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198285&r1=198284&r2=198285&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Wed Jan  1 15:52:59 2014
@@ -387,7 +387,6 @@ jbyteArray JNICALL JVM_GetClassTypeAnnot
 
 jobjectArray JNICALL JVM_GetClassDeclaredMethods(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
 jobjectArray JNICALL JVM_GetClassDeclaredFields(JNIEnv* env, jclass ofClass, jboolean publicOnly) { 
-	NYI();
 	jobjectArray res;
 
 	enterJVM(); 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3signature.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3signature.cc?rev=198285&r1=198284&r2=198285&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3signature.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3signature.cc Wed Jan  1 15:52:59 2014
@@ -34,10 +34,28 @@ void J3LLVMSignature::generateCallerIR(J
 		llvm::Type*  t = *it;
 		llvm::Value* arg;
 
-		if(t->isPointerTy())
-			arg = builder.CreateLoad(builder.CreateGEP(builder.CreateIntToPtr(builder.CreateLoad(ins), 
-																																				codeGen->vm->typeJ3ObjectHandlePtr), gepHandle));
-		else {
+		if(t->isPointerTy()) {
+			llvm::BasicBlock* ifnull = llvm::BasicBlock::Create(caller->getContext(), "if-arg-null", caller);
+			llvm::BasicBlock* ifnotnull = llvm::BasicBlock::Create(caller->getContext(), "if-arg-notnull", caller);
+			llvm::BasicBlock* after = llvm::BasicBlock::Create(caller->getContext(), "if-arg-after", caller);
+			llvm::Value*      alloca = builder.CreateAlloca(codeGen->vm->typeJ3ObjectPtr);
+			llvm::Value*      obj = builder.CreateLoad(ins);
+
+			builder.CreateCondBr(builder.CreateIsNull(obj), ifnull, ifnotnull);
+
+			builder.SetInsertPoint(ifnull);
+			builder.CreateStore(codeGen->nullValue, alloca);
+			builder.CreateBr(after);
+
+			builder.SetInsertPoint(ifnotnull);
+			builder.CreateStore(builder.CreateLoad(builder.CreateGEP(builder.CreateIntToPtr(obj,
+																																										 codeGen->vm->typeJ3ObjectHandlePtr), gepHandle)),
+													alloca);
+			builder.CreateBr(after);
+
+			builder.SetInsertPoint(after);
+			arg = builder.CreateLoad(alloca);
+		} else {
 			arg = builder.CreateLoad(builder.CreateTruncOrBitCast(ins, t->getPointerTo()));
 		}
 
@@ -75,4 +93,6 @@ void J3LLVMSignature::generateCallerIR(J
 		res = builder.getInt64(0);
 
 	builder.CreateRet(res);
+
+	//	caller->dump();
 }





More information about the vmkit-commits mailing list