[vmkit-commits] [vmkit] r198510 - Fix a bug in instanceof: if obj is null, return 0. Execute now more than 60000 bytecodes :)

Gael Thomas gael.thomas at lip6.fr
Sat Jan 4 10:29:58 PST 2014


Author: gthomas
Date: Sat Jan  4 12:29:58 2014
New Revision: 198510

URL: http://llvm.org/viewvc/llvm-project?rev=198510&view=rev
Log:
Fix a bug in instanceof: if obj is null, return 0. Execute now more than 60000 bytecodes :)

Modified:
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.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=198510&r1=198509&r2=198510&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sat Jan  4 12:29:58 2014
@@ -124,6 +124,72 @@ jobject JNICALL JVM_InitProperties(JNIEn
 	 */
   JavaObject * prop = *(JavaObject**)p;
   llvm_gcroot(prop, 0);
+
+  setProperty(vm, prop, "java.vm.specification.version", "1.0");
+  setProperty(vm, prop, "java.vm.specification.vendor",
+              "Sun Microsystems, Inc");
+  setProperty(vm, prop, "java.vm.specification.name",
+              "Java Virtual Machine Specification");
+  setProperty(vm, prop, "java.specification.version", "1.5");
+  setProperty(vm, prop, "java.specification.vendor", "Sun Microsystems, Inc");
+  setProperty(vm, prop, "java.specification.name",
+              "Java Platform API Specification");
+  setProperty(vm, prop, "java.version", "1.5");
+  setProperty(vm, prop, "java.runtime.version", "1.5");
+  setProperty(vm, prop, "java.vendor", "The VMKit Project");
+  setProperty(vm, prop, "java.vendor.url", "http://vmkit.llvm.org");
+
+  tmp = getenv("JAVA_HOME");
+  if (!tmp) tmp = "";
+  setProperty(vm, prop, "java.home", tmp);
+
+  JnjvmBootstrapLoader* JCL = vm->bootstrapLoader;
+  setProperty(vm, prop, "java.class.version", "49.0");
+  setProperty(vm, prop, "java.class.path", vm->classpath);
+  setProperty(vm, prop, "java.boot.class.path", JCL->bootClasspathEnv);
+  setProperty(vm, prop, "sun.boot.class.path", JCL->bootClasspathEnv);
+  setProperty(vm, prop, "java.vm.version", "0.28");
+  setProperty(vm, prop, "java.vm.vendor", "The VMKit Project");
+  setProperty(vm, prop, "java.vm.name", "J3");
+  setProperty(vm, prop, "java.specification.version", "1.5");
+  setProperty(vm, prop, "java.io.tmpdir", "/tmp");
+
+
+  setProperty(vm, prop, "build.compiler", "gcj");
+  setProperty(vm, prop, "gcj.class.path", JCL->bootClasspathEnv);
+  setProperty(vm, prop, "gnu.classpath.boot.library.path",
+              JCL->libClasspathEnv);
+  //setProperty(vm, prop, "java.library.path", TODO: getenv("LD_LIBRARY_PATH"))
+  setProperty(vm, prop, "sun.boot.library.path", JCL->libClasspathEnv);
+
+  // Align behavior with GNU Classpath for now, to pass mauve test
+  setProperty(vm, prop, "sun.lang.ClassLoader.allowArraySyntax", "true");
+
+  setUnameProp(vm, prop);
+
+  setProperty(vm, prop, "file.separator", vm->dirSeparator);
+  setProperty(vm, prop, "path.separator", vm->envSeparator);
+  setProperty(vm, prop, "line.separator", "\n");
+
+  tmp = getenv("USERNAME");
+  if (!tmp) tmp = getenv("LOGNAME");
+  if (!tmp) tmp = getenv("NAME");
+  if (!tmp) tmp = "";
+  setProperty(vm, prop, "user.name", tmp);
+
+  tmp  = getenv("HOME");
+  if (!tmp) tmp = "";
+  setProperty(vm, prop, "user.home", tmp);
+
+  tmp = getenv("PWD");
+  if (!tmp) tmp = "";
+  setProperty(vm, prop, "user.dir", tmp);
+
+  // Disable this property. The Classpath iconv implementation is really
+  // not optimized (it over-abuses JNI calls).
+  //setProperty(vm, prop, "gnu.classpath.nio.charset.provider.iconv", "true");
+  setProperty(vm, prop, "file.encoding", "ISO8859_1");
+  setProperty(vm, prop, "gnu.java.util.zoneinfo.dir", "/usr/share/zoneinfo");
   setProperties(prop);
   setCommandLineProperties(prop);
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198510&r1=198509&r2=198510&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sat Jan  4 12:29:58 2014
@@ -433,17 +433,6 @@ void J3CodeGen::invokeVirtual(uint32_t i
 	llvm::Value* func = builder->CreateBitCast(builder->CreateLoad(builder->CreateGEP(vt(obj), gepFunc)), 
 																						 target->signature()->functionType(target->access())->getPointerTo());
 
-	char buf[65536]; snprintf(buf, 65536, "%s::%s%s", 
-														target->cl()->name()->cStr(), 
-														target->name()->cStr(), 
-														target->signature()->name()->cStr());
-	builder->CreateCall5(funcEchoDebugExecute,
-											 builder->getInt32(2),
-											 buildString("Invoking %s %p::%d\n"),
-											 buildString(buf),
-											 vt(obj),
-											 funcEntry);
-
 	invoke(0, target, func);
 }
 
@@ -600,13 +589,13 @@ llvm::Value* J3CodeGen::isAssignableTo(l
 
 void J3CodeGen::instanceof(llvm::Value* obj, J3ObjectType* type) {
 	llvm::BasicBlock* after = forwardBranch("instanceof-after", codeReader->tell(), 0, 0);
-	llvm::BasicBlock* ok = newBB("instanceof-ok");
+	llvm::BasicBlock* nok = newBB("instanceof-null");
 	llvm::BasicBlock* test = newBB("instanceof");
 
-	builder->CreateCondBr(builder->CreateIsNull(obj), ok, test);
+	builder->CreateCondBr(builder->CreateIsNull(obj), nok, test);
 
-	builder->SetInsertPoint(ok);
-	stack.push(builder->getInt32(1));
+	builder->SetInsertPoint(nok);
+	stack.push(builder->getInt32(0));
 	builder->CreateBr(after);
 
 	stack.drop(1);





More information about the vmkit-commits mailing list