[vmkit-commits] [vmkit] r180326 - Enable conditional compilation of stale references correction.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 09:56:57 PDT 2013


Author: peter.senna
Date: Thu Apr 25 11:55:21 2013
New Revision: 180326

URL: http://llvm.org/viewvc/llvm-project?rev=180326&view=rev
Log:
Enable conditional compilation of stale references correction.
(cherry picked from commit 8909861d78d66d118fc172508da67320b3ad2666)

Modified:
    vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180326&r1=180325&r2=180326&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:55:21 2013
@@ -889,8 +889,7 @@ void Class::readClass() {
 
   uint16 minor = reader.readU2();
   uint16 major = reader.readU2();
-  if (major > (uint16)0x31)        // 0x31 for Java 1.5
-    cerr << "WARNING: Class file '" << *name << "' requires a Java version that is unsupported by this JVM." << endl;
+  this->isClassVersionSupported(major, minor);
 
   uint32 ctpSize = reader.readU2();
   ctpInfo = new(classLoader->allocator, ctpSize) JavaConstantPool(this, reader,
@@ -912,6 +911,36 @@ void Class::readClass() {
   attributes = readAttributes(reader, nbAttributes);
 }
 
+void Class::getMinimalJDKVersion(uint16 major, uint16 minor, unsigned int& JDKMajor, unsigned int& JDKMinor, unsigned int& JDKBuild)
+{
+	JDKMajor = 1;
+	JDKBuild = 0;
+	if (major == 45 && minor <= 3) {			// Supported by Java 1.0.2
+		JDKMinor = 0;
+		JDKBuild = 2;
+	} else if (major == 45 && minor <= 65535) {	// Supported by Java 1.1
+		JDKMinor = 1;
+	} else {									// Supported by Java 1.x (x >= 2)
+		JDKMinor = major - 43;
+		if (minor == 0) --JDKMinor;
+	}
+}
+
+bool Class::isClassVersionSupported(uint16 major, uint16 minor)
+{
+	const int supportedJavaMinorVersion = 5;	// Java 1.5
+
+	unsigned int JDKMajor, JDKMinor, JDKBuild;
+	Class::getMinimalJDKVersion(major, minor, JDKMajor, JDKMinor, JDKBuild);
+
+	bool res = (JDKMajor <= 1) && (JDKMinor <= supportedJavaMinorVersion);
+	if (!res) {
+		cerr << "WARNING: Class file '" << *name << "' requires Java version " << JDKMajor << '.' << JDKMinor <<
+			". This JVM only supports Java versions up to 1." << supportedJavaMinorVersion << '.' << endl;
+	}
+	return res;
+}
+
 void UserClass::resolveParents() {
   if (super != NULL) {
     super->resolveClass();
@@ -1772,7 +1801,7 @@ std::string& CommonClass::getName(std::s
 {
 	name->toString(nameBuffer);
 
-	for (size_t i=0; i < name->size; ++i) {
+	for (int32_t i=0; i < name->size; ++i) {
 		if (name->elements[i] == '/')
 			nameBuffer[i] = linkageName ? '_' : '.';
 	}

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180326&r1=180325&r2=180326&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:55:21 2013
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#define DEBUG_VERBOSE_CASS_LOADER_UNLOADING		1
+#define DEBUG_VERBOSE_CLASS_LOADER_UNLOADING		1
 
 #include <iostream>
 #include <climits>
@@ -213,14 +213,21 @@ JnjvmBootstrapLoader::JnjvmBootstrapLoad
 }
 
 JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc) :
-	allocator(Alloc), zombie(false)
+	allocator(Alloc)
+#if RESET_STALE_REFERENCES
+	,zombie(false)
+#endif
 {
 }
 
 JnjvmClassLoader::JnjvmClassLoader(vmkit::BumpPtrAllocator& Alloc,
                                    JnjvmClassLoader& JCL, JavaObject* loader,
                                    VMClassLoader* vmdata,
-                                   Jnjvm* VM) : allocator(Alloc), zombie(false) {
+                                   Jnjvm* VM) : allocator(Alloc)
+#if RESET_STALE_REFERENCES
+	, zombie(false)
+#endif
+{
   llvm_gcroot(loader, 0);
   llvm_gcroot(vmdata, 0);
   bootstrapLoader = JCL.bootstrapLoader;
@@ -244,24 +251,6 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit
   assert(loadClass && "Loader does not have a loadClass function");
 }
 
-int64_t JnjvmClassLoader::getAssociatedBundleID()
-{
-	return vm->getClassLoaderBundleID(this);
-}
-
-void JnjvmClassLoader::setAssociatedBundleID(int64_t newID)
-{
-	int64_t oldBundleID = vm->getClassLoaderBundleID(this);
-	if (oldBundleID != -1) {
-		if (oldBundleID == newID) return;	// Nothing to do
-
-		// Remove old bundle ID
-		vm->setBundleClassLoader(oldBundleID, NULL);
-	}
-
-	vm->setBundleClassLoader(newID, this);
-}
-
 void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) {
   // Set the new compiler.
   TheCompiler = Comp;
@@ -864,11 +853,15 @@ const UTF8* JnjvmClassLoader::readerCons
 
 JnjvmClassLoader::~JnjvmClassLoader() {
 
-#if DEBUG_VERBOSE_CASS_LOADER_UNLOADING
-	cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl;
+#if RESET_STALE_REFERENCES
+
+#if DEBUG_VERBOSE_CLASS_LOADER_UNLOADING
+  cerr << "Bundle class loader unloaded, bundleID=" << this->getAssociatedBundleID() << endl;
 #endif
 
-	this->setAssociatedBundleID(-1);
+  this->setAssociatedBundleID(-1);
+
+#endif
 
   if (vm) {
     vm->removeFrameInfos(TheCompiler);
@@ -1121,3 +1114,25 @@ ArrayObject* JnjvmBootstrapLoader::getBo
 
   return res;
 }
+
+#if RESET_STALE_REFERENCES
+
+int64_t JnjvmClassLoader::getAssociatedBundleID()
+{
+	return vm->getClassLoaderBundleID(this);
+}
+
+void JnjvmClassLoader::setAssociatedBundleID(int64_t newID)
+{
+	int64_t oldBundleID = vm->getClassLoaderBundleID(this);
+	if (oldBundleID != -1) {
+		if (oldBundleID == newID) return;	// Nothing to do
+
+		// Remove old bundle ID
+		vm->setBundleClassLoader(oldBundleID, NULL);
+	}
+
+	vm->setBundleClassLoader(newID, this);
+}
+
+#endif

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp?rev=180326&r1=180325&r2=180326&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp Thu Apr 25 11:55:21 2013
@@ -7,8 +7,11 @@
 #include "ClasspathReflect.h"
 #include "j3/jni.h"
 
+
 using namespace std;
 
+#if RESET_STALE_REFERENCES
+
 namespace j3 {
 
 void Jnjvm::dumpClassLoaderBundles()
@@ -60,6 +63,7 @@ void Jnjvm::setBundleClassLoader(int64_t
 
 }
 
+#endif
 
 using namespace j3;
 
@@ -72,8 +76,12 @@ extern "C" void Java_j3_vm_OSGi_associat
 {
 	llvm_gcroot(classObject, 0);
 
+#if RESET_STALE_REFERENCES
+
 	CommonClass* ccl = JavaObjectClass::getClass(classObject);
 	ccl->classLoader->setAssociatedBundleID(bundleID);
+
+#endif
 }
 
 /*
@@ -83,12 +91,20 @@ extern "C" void Java_j3_vm_OSGi_associat
 */
 extern "C" void Java_j3_vm_OSGi_resetReferencesToBundle(jlong bundleID)
 {
+#if RESET_STALE_REFERENCES
+
 	Jnjvm* vm = JavaThread::get()->getJVM();
 	vm->resetReferencesToBundle(bundleID);
+
+#endif
 }
 
 extern "C" void Java_j3_vm_OSGi_dumpClassLoaderBundles()
 {
+#if RESET_STALE_REFERENCES
+
 	Jnjvm* vm = JavaThread::get()->getJVM();
 	vm->dumpClassLoaderBundles();
+
+#endif
 }

Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180326&r1=180325&r2=180326&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:55:21 2013
@@ -114,10 +114,10 @@ void Collector::scanObject(void** ptr, w
   if ((*ptr) != NULL) {
     assert(((gc*)(*ptr))->getVirtualTable());
   }
-
+#if RESET_STALE_REFERENCES
   // Allow the VM to reset references if needed
   vmkit::Thread::get()->MyVM->resetReferenceIfStale(NULL, ptr);
-
+#endif
   JnJVM_org_j3_bindings_Bindings_reportDelayedRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2(closure, ptr);
 }
  
@@ -127,10 +127,10 @@ void Collector::markAndTrace(void* sourc
     assert(((gc*)(*ptr_))->getVirtualTable());
   }
   if ((*(void**)ptr) != NULL) assert(((gc*)(*(void**)ptr))->getVirtualTable());
-
+#if RESET_STALE_REFERENCES
   // Allow the VM to reset references if needed
   vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_);
-
+#endif
   JnJVM_org_j3_bindings_Bindings_processEdge__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2(closure, source, ptr);
 }
   
@@ -139,10 +139,10 @@ void Collector::markAndTraceRoot(void* s
   if ((*ptr_) != NULL) {
     assert(((gc*)(*ptr_))->getVirtualTable());
   }
-
+#if RESET_STALE_REFERENCES
   // Allow the VM to reset references if needed
   vmkit::Thread::get()->MyVM->resetReferenceIfStale(source, ptr_);
-
+#endif
   JnJVM_org_j3_bindings_Bindings_processRootEdge__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_Address_2Z(closure, ptr, true);
 }
 





More information about the vmkit-commits mailing list