[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