[vmkit-commits] [vmkit] r55369 - in /vmkit/branches/isolate/lib/JnJVM: Classpath/ Isolate/ VMCore/
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Aug 26 08:45:08 PDT 2008
Author: geoffray
Date: Tue Aug 26 10:45:03 2008
New Revision: 55369
URL: http://llvm.org/viewvc/llvm-project?rev=55369&view=rev
Log:
New reorganization. SingleVM still compiles and runs normally,
MultiVM compiles.
Modified:
vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc
vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h
vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h
vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h
vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp
vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp
Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc Tue Aug 26 10:45:03 2008
@@ -37,7 +37,7 @@
if (!ass)
vm->unknownError("unknown byte primitive %c", byteId);
- return (jobject)ass->classType->getClassDelegatee(vm);
+ return (jobject)ass->getPrimitiveClass()->getClassDelegatee(vm);
}
Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathVMSystem.cpp.inc Tue Aug 26 10:45:03 2008
@@ -49,8 +49,8 @@
UserCommonClass* dstType = td->baseClass();
AssessorDesc* dstFuncs = td->funcs();
AssessorDesc* srcFuncs = ts->funcs();
- UserCommonClass* srcPrim = vm->getPrimitiveClass(srcFuncs);
- UserCommonClass* dstPrim = vm->getPrimitiveClass(dstFuncs);
+ UserCommonClass* srcPrim = srcFuncs->getPrimitiveClass();
+ UserCommonClass* dstPrim = dstFuncs->getPrimitiveClass();
if (len > src->size) {
vm->indexOutOfBounds(src, len);
Modified: vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/Isolate/IsolateCommonClass.h Tue Aug 26 10:45:03 2008
@@ -20,12 +20,14 @@
class Class;
class ClassArray;
class ClassPrimitive;
+class JavaConstantPool;
class JavaField;
class JavaMethod;
class JavaObject;
class Jnjvm;
class JnjvmClassLoader;
class UserClass;
+class UserClassArray;
class UTF8;
class UserCommonClass : public mvm::Object {
@@ -48,6 +50,7 @@
bool isArray();
bool isPrimitive();
bool isInterface();
+ bool isReady();
uint8 getAccess();
const UTF8* getName();
@@ -67,8 +70,28 @@
bool isStatic, bool recurse);
JavaMethod* lookupMethod(const UTF8* name, const UTF8* type,
bool isStatic, bool recurse);
+ JavaField* lookupField(const UTF8* name, const UTF8* type,
+ bool isStatic, bool recurse,
+ UserCommonClass*& fieldCl);
uint64 getVirtualSize();
+ VirtualTable* getVirtualVT();
+
+ void setInterfaces(std::vector<UserClass*> Is);
+ void setSuper(UserClass* S);
+
+ bool instantiationOfArray(UserClassArray* cl);
+ bool implements(UserCommonClass* cl);
+
+ /// constructMethod - Add a new method in this class method map.
+ ///
+ JavaMethod* constructMethod(const UTF8* name, const UTF8* type,
+ uint32 access);
+
+ /// constructField - Add a new field in this class field map.
+ ///
+ JavaField* constructField(const UTF8* name, const UTF8* type,
+ uint32 access);
};
class UserClass : public UserCommonClass {
@@ -86,7 +109,13 @@
UserClass* getOuterClass();
void resolveInnerOuterClasses();
JavaObject* getStaticInstance();
+ JavaConstantPool* getConstantPool();
+
+ void setStaticSize(uint64 size);
+ void setStaticVT(VirtualTable* VT);
+ uint64 getStaticSize();
+ VirtualTable* getStaticVT();
};
class UserClassArray : public UserCommonClass {
@@ -107,7 +136,7 @@
public:
virtual void TRACER;
- UserClassPrimitive(JnjvmClassLoader* JCL, const UTF8* name);
+ UserClassPrimitive(JnjvmClassLoader* JCL, const UTF8* name, uint32 nb);
};
} // end namespace jnjvm
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp Tue Aug 26 10:45:03 2008
@@ -61,7 +61,8 @@
-Class* JavaJIT::getCallingClass() {
+#ifndef MULTIPLE_VM
+UserClass* JavaJIT::getCallingClass() {
int* ips[10];
int real_size = mvm::jit::getBacktrace((void**)(void*)ips, 10);
int n = 0;
@@ -82,7 +83,7 @@
return 0;
}
-Class* JavaJIT::getCallingClassWalker() {
+UserClass* JavaJIT::getCallingClassWalker() {
int* ips[10];
int real_size = mvm::jit::getBacktrace((void**)(void*)ips, 10);
int n = 0;
@@ -102,9 +103,19 @@
}
return 0;
}
+#else
+UserClass* JavaJIT::getCallingClassWalker() {
+ fprintf(stderr, "implement me");
+ abort();
+}
+UserClass* JavaJIT::getCallingClass() {
+ fprintf(stderr, "implement me");
+ abort();
+}
+#endif
JavaObject* JavaJIT::getCallingClassLoader() {
- Class* cl = getCallingClassWalker();
+ UserClass* cl = getCallingClassWalker();
if (!cl) return 0;
else return cl->classLoader->getJavaClassLoader();
}
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaCache.h Tue Aug 26 10:45:03 2008
@@ -29,9 +29,9 @@
namespace jnjvm {
-class Class;
class Enveloppe;
class JavaConstantPool;
+class UserClass;
/// CacheNode - A {class, method pointer} pair.
class CacheNode {
@@ -41,7 +41,7 @@
void* methPtr;
/// lastCible - The class of this cache.
- Class* lastCible;
+ UserClass* lastCible;
/// next - The next cache.
CacheNode* next;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.cpp Tue Aug 26 10:45:03 2008
@@ -39,10 +39,6 @@
const UTF8* Attribut::innerClassesAttribut = 0;
const UTF8* Attribut::sourceFileAttribut = 0;
-CommonClass* ClassArray::SuperArray = 0;
-std::vector<Class*> ClassArray::InterfacesArray;
-
-
Attribut::Attribut(const UTF8* name, uint32 length,
uint32 offset) {
@@ -219,7 +215,9 @@
#endif
}
-ClassPrimitive::ClassPrimitive(JnjvmClassLoader* loader, const UTF8* n) :
+#ifndef MULTIPLE_VM
+ClassPrimitive::ClassPrimitive(JnjvmClassLoader* loader, const UTF8* n,
+ uint32 nb) :
CommonClass(loader, n, false) {
display = (CommonClass**)malloc(sizeof(CommonClass*));
@@ -227,6 +225,7 @@
primitive = true;
status = ready;
access = ACC_ABSTRACT | ACC_FINAL | ACC_PUBLIC;
+ virtualSize = nb;
}
Class::Class(JnjvmClassLoader* loader, const UTF8* n, ArrayUInt8* B) :
@@ -234,22 +233,21 @@
bytes = B;
super = 0;
ctpInfo = 0;
-#ifndef MULTIPLE_VM
_staticInstance = 0;
-#endif
}
ClassArray::ClassArray(JnjvmClassLoader* loader, const UTF8* n) : CommonClass(loader, n, true) {
_funcs = 0;
_baseClass = 0;
- super = ClassArray::SuperArray;
- interfaces = ClassArray::InterfacesArray;
+ super = JnjvmBootstrapLoader::SuperArray;
+ interfaces = JnjvmBootstrapLoader::InterfacesArray;
depth = 1;
display = (CommonClass**)malloc(2 * sizeof(CommonClass*));
- display[0] = ClassArray::SuperArray;
+ display[0] = JnjvmBootstrapLoader::SuperArray;
display[1] = this;
access = ACC_FINAL | ACC_ABSTRACT;
}
+#endif
void Class::print(mvm::PrintBuffer* buf) const {
buf->write("Class<");
@@ -263,10 +261,12 @@
buf->write(">");
}
+#ifndef MULTIPLE_VM
void ClassArray::resolveComponent() {
AssessorDesc::introspectArray(classLoader, name, 0, _funcs,
_baseClass);
}
+#endif
JnjvmClassLoader* ClassArray::arrayLoader(const UTF8* name,
JnjvmClassLoader* loader,
@@ -278,7 +278,7 @@
} else if (name->elements[start] == AssessorDesc::I_REF) {
const UTF8* componentName = name->javaToInternal(loader->hashUTF8, start + 1,
len - 2);
- CommonClass* cl = loader->loadName(componentName, false, true);
+ UserCommonClass* cl = loader->loadName(componentName, false, true);
return cl->classLoader;
} else {
return JnjvmClassLoader::bootstrapLoader;
@@ -361,25 +361,36 @@
JavaField* CommonClass::lookupFieldDontThrow(const UTF8* name,
const UTF8* type, bool isStatic,
- bool recurse) {
+ bool recurse,
+ CommonClass*& definingClass) {
FieldCmp CC(name, type);
field_map& map = isStatic ? staticFields : virtualFields;
field_iterator End = map.end();
field_iterator I = map.find(CC);
- if (I != End) return I->second;
+ if (I != End) {
+ definingClass = this;
+ return I->second;
+ }
JavaField *cur = 0;
if (recurse) {
if (super) cur = super->lookupFieldDontThrow(name, type, isStatic,
- recurse);
- if (cur) return cur;
+ recurse, definingClass);
+ if (cur) {
+ definingClass = (Class*)super;
+ return cur;
+ }
if (isStatic) {
for (std::vector<Class*>::iterator i = interfaces.begin(),
e = interfaces.end(); i!= e; i++) {
- cur = (*i)->lookupFieldDontThrow(name, type, isStatic, recurse);
- if (cur) return cur;
+ cur = (*i)->lookupFieldDontThrow(name, type, isStatic, recurse,
+ definingClass);
+ if (cur) {
+ definingClass = *i;
+ return cur;
+ }
}
}
}
@@ -388,21 +399,25 @@
}
JavaField* CommonClass::lookupField(const UTF8* name, const UTF8* type,
- bool isStatic, bool recurse) {
+ bool isStatic, bool recurse,
+ CommonClass*& definingClass) {
- JavaField* res = lookupFieldDontThrow(name, type, isStatic, recurse);
+ JavaField* res = lookupFieldDontThrow(name, type, isStatic, recurse,
+ definingClass);
if (!res) {
JavaThread::get()->isolate->noSuchFieldError(this, name);
}
return res;
}
+#ifndef MULTIPLE_VM
JavaObject* Class::doNew(Jnjvm* vm) {
assert(this->isReady() && "Uninitialized class when allocating.");
JavaObject* res = (JavaObject*)vm->allocator.allocateObject(virtualSize, virtualVT);
res->classOf = this;
return res;
}
+#endif
bool CommonClass::inheritName(const UTF8* Tname) {
if (name->equals(Tname)) {
@@ -585,6 +600,7 @@
}
+#ifndef MULTIPLE_VM
void Class::loadParents() {
int nbI = interfacesUTF8.size();
if (superUTF8 == 0) {
@@ -605,6 +621,7 @@
interfaces.push_back((Class*)classLoader->loadName(interfacesUTF8[i],
true, true));
}
+#endif
void Class::readAttributs(Reader& reader, std::vector<Attribut*>& attr) {
unsigned short int nba = reader.readU2();
@@ -712,7 +729,8 @@
}
}
-void Class::resolveInnerOuterClasses() {
+#ifndef MULTIPLE_VM
+void UserClass::resolveInnerOuterClasses() {
if (!innerOuterResolved) {
Attribut* attribut = lookupAttribut(Attribut::innerClassesAttribut);
if (attribut != 0) {
@@ -739,6 +757,7 @@
innerOuterResolved = true;
}
}
+#endif
void CommonClass::getDeclaredConstructors(std::vector<JavaMethod*>& res,
bool publicOnly) {
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaClass.h Tue Aug 26 10:45:03 2008
@@ -182,6 +182,10 @@
uint32 getVirtualSize() {
return virtualSize;
}
+
+ VirtualTable* getVirtualVT() {
+ return virtualVT;
+ }
/// virtualTableSize - The size of the virtual table of this class.
///
@@ -215,9 +219,11 @@
return jnjvm::isInterface(access);
}
+#ifndef MULTIPLE_VM
std::vector<Class*> * getInterfaces() {
return &interfaces;
}
+#endif
/// name - The name of the class.
///
@@ -230,7 +236,7 @@
/// status - The loading/resolve/initialization state of the class.
///
JavaState status;
-
+
/// super - The parent of this class.
///
CommonClass * super;
@@ -242,7 +248,7 @@
/// superUTF8 - The name of the parent of this class.
///
const UTF8* superUTF8;
-
+
/// interfaces - The interfaces this class implements.
///
std::vector<Class*> interfaces;
@@ -360,12 +366,13 @@
/// not throw if the field is not found.
///
JavaField* lookupFieldDontThrow(const UTF8* name, const UTF8* type,
- bool isStatic, bool recurse);
+ bool isStatic, bool recurse,
+ CommonClass*& definingClass);
/// lookupField - Lookup a field and throw an exception if not found.
///
JavaField* lookupField(const UTF8* name, const UTF8* type, bool isStatic,
- bool recurse);
+ bool recurse, CommonClass*& definingClass);
/// print - Print the class for debugging purposes.
///
@@ -465,7 +472,12 @@
void getDeclaredConstructors(std::vector<JavaMethod*>& res, bool publicOnly);
void getDeclaredMethods(std::vector<JavaMethod*>& res, bool publicOnly);
void getDeclaredFields(std::vector<JavaField*>& res, bool publicOnly);
-
+ void setInterfaces(std::vector<Class*> I) {
+ interfaces = I;
+ }
+ void setSuper(CommonClass* S) {
+ super = S;
+ }
};
/// ClassPrimitive - This class represents internal classes for primitive
@@ -473,7 +485,7 @@
///
class ClassPrimitive : public CommonClass {
public:
- ClassPrimitive(JnjvmClassLoader* loader, const UTF8* name);
+ ClassPrimitive(JnjvmClassLoader* loader, const UTF8* name, uint32 nb);
};
@@ -506,7 +518,8 @@
/// attributs - JVM attributes of this class.
///
std::vector<Attribut*> attributs;
-
+
+#ifndef MULTIPLE_VM
/// innerClasses - The inner classes of this class.
///
std::vector<Class*> innerClasses;
@@ -514,6 +527,7 @@
/// outerClass - The outer class, if this class is an inner class.
///
Class* outerClass;
+#endif
/// innerAccess - The access of this class, if this class is an inner class.
///
@@ -531,9 +545,11 @@
///
VirtualTable* staticVT;
+#ifndef MULTIPLE_VM
/// doNew - Allocates a Java object whose class is this class.
///
JavaObject* doNew(Jnjvm* vm);
+#endif
/// print - Prints a string representation of this class in the buffer.
///
@@ -602,6 +618,7 @@
void resolveInnerOuterClasses();
+#ifndef MULTIPLE_VM
Class* getOuterClass() {
return outerClass;
}
@@ -609,6 +626,9 @@
std::vector<Class*>* getInnerClasses() {
return &innerClasses;
}
+#endif
+
+
};
/// ClassArray - This class represents Java array classes.
@@ -676,14 +696,6 @@
/// tracer - Tracer of array classes.
///
virtual void TRACER;
-
- /// SuperArray - The super class of array classes.
- ///
- static CommonClass* SuperArray;
-
- /// InterfacesArray - The interfaces that array classes implement.
- ///
- static std::vector<Class*> InterfacesArray;
};
/// JavaMethod - This class represents Java methods.
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.cpp Tue Aug 26 10:45:03 2008
@@ -265,6 +265,7 @@
else return UTF8At(ctpDef[index]);
}
+#ifndef MULTIPLE_VM
CommonClass* JavaConstantPool::loadClass(uint32 index) {
CommonClass* temp = isClassLoaded(index);
if (!temp) {
@@ -293,6 +294,7 @@
}
return temp;
}
+#endif
Typedef* JavaConstantPool::resolveNameAndType(uint32 index) {
void* res = ctpRes[index];
@@ -421,7 +423,7 @@
return sign;
}
-void JavaConstantPool::resolveMethod(uint32 index, CommonClass*& cl,
+void JavaConstantPool::resolveMethod(uint32 index, UserCommonClass*& cl,
const UTF8*& utf8, Signdef*& sign) {
sint32 entry = ctpDef[index];
sint32 ntIndex = entry & 0xFFFF;
@@ -432,7 +434,7 @@
cl->resolveClass();
}
-void JavaConstantPool::resolveField(uint32 index, CommonClass*& cl,
+void JavaConstantPool::resolveField(uint32 index, UserCommonClass*& cl,
const UTF8*& utf8, Typedef*& sign) {
sint32 entry = ctpDef[index];
sint32 ntIndex = entry & 0xFFFF;
@@ -450,8 +452,9 @@
const UTF8* utf8 = UTF8At(ctpDef[ntIndex] >> 16);
CommonClass* cl = getMethodClassIfLoaded(entry >> 16);
if (cl && cl->status >= resolved) {
+ CommonClass* fieldCl = 0;
JavaField* field = cl->lookupFieldDontThrow(utf8, sign->keyName, stat,
- true);
+ true, fieldCl);
// don't throw if no field, the exception will be thrown just in time
if (field) {
if (!stat) {
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaConstantPool.h Tue Aug 26 10:45:03 2008
@@ -27,6 +27,7 @@
class Reader;
class Signdef;
class Typedef;
+class UserCommonClass;
class UTF8;
@@ -228,14 +229,14 @@
/// perform class loading. This function is called just in time, ie when
/// the method call is actually made and not yet resolved.
///
- void resolveMethod(uint32 index, CommonClass*& cl,
+ void resolveMethod(uint32 index, UserCommonClass*& cl,
const UTF8*& utf8, Signdef*& sign);
/// resolveField - Resolve the class and signature of the field. May
/// perform class loading. This function is called just in time, ie when
/// the field is accessed and not yet resolved.
///
- void resolveField(uint32 index, CommonClass*& cl, const UTF8*& utf8,
+ void resolveField(uint32 index, UserCommonClass*& cl, const UTF8*& utf8,
Typedef*& sign);
/// loadClass - Loads the class and returns it. This is called just in time,
@@ -244,7 +245,7 @@
/// MULTIANEWARRAY. This function is also called by the classpath for
/// loading exception classes referenced by a method.
///
- CommonClass* loadClass(uint32 index);
+ UserCommonClass* loadClass(uint32 index);
/// JavaConstantPool - Default constructor.
///
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaInitialise.cpp Tue Aug 26 10:45:03 2008
@@ -47,9 +47,6 @@
INIT(ClassMap);
INIT(JnjvmBootstrapLoader);
INIT(JnjvmClassLoader);
-#ifdef MULTIPLE_VM
- INIT(JnjvmSharedLoader);
-#endif
#ifdef SERVICE_VM
INIT(ServiceDomain);
#endif
@@ -79,20 +76,20 @@
((UTF8*)utf8OfChar)->classOf = JCL->upcalls->ArrayOfChar;
JCL->hashUTF8->array = JCL->upcalls->ArrayOfChar;
- ClassArray::InterfacesArray.push_back(
+ JCL->InterfacesArray.push_back(
JCL->loadName(JCL->asciizConstructUTF8("java/lang/Cloneable"), false,
false));
- ClassArray::InterfacesArray.push_back(
+ JCL->InterfacesArray.push_back(
JCL->loadName(JCL->asciizConstructUTF8("java/io/Serializable"), false,
false));
- ClassArray::SuperArray =
+ JCL->SuperArray =
JCL->loadName(JCL->asciizConstructUTF8("java/lang/Object"), false,
false);
- JCL->upcalls->ArrayOfChar->interfaces = ClassArray::InterfacesArray;
- JCL->upcalls->ArrayOfChar->super = ClassArray::SuperArray;
+ JCL->upcalls->ArrayOfChar->setInterfaces(JCL->InterfacesArray);
+ JCL->upcalls->ArrayOfChar->setSuper(JCL->SuperArray);
JCL->upcalls->ArrayOfByte = JCL->constructArray(JCL->asciizConstructUTF8("[B"));
JCL->upcalls->ArrayOfString =
@@ -169,7 +166,7 @@
#undef DEF_UTF8
- Classpath::initialiseClasspath(JCL);
+ JCL->upcalls->initialiseClasspath(JCL);
}
void mvm::VirtualMachine::initialiseJVM() {
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.cpp Tue Aug 26 10:45:03 2008
@@ -914,9 +914,9 @@
if (ex->catche) {
JavaObject* exc = 0;
- Class* cl = 0;
+ UserClass* cl = 0;
try {
- cl = (Class*)(ctpInfo->loadClass(ex->catche));
+ cl = (UserClass*)(ctpInfo->loadClass(ex->catche));
} catch(...) {
compilingClass->release();
exc = JavaThread::getJavaException();
@@ -931,7 +931,12 @@
ex->catchClass = cl;
} else {
+#ifdef MULTIPLE_VM
+ fprintf(stderr, "implement me");
+ abort();
+#else
ex->catchClass = Classpath::newThrowable;
+#endif
}
ex->test = createBasicBlock("testException");
@@ -1024,8 +1029,13 @@
Value* cl = 0;
currentBlock = cur->realTest;
assert(cur->catchClass);
+#ifdef MULTIPLE_VM
+ fprintf(stderr, "implement me");
+ abort();
+#else
LLVMClassInfo* LCI = (LLVMClassInfo*)module->getClassInfo(cur->catchClass);
cl = LCI->getVar(this);
+#endif
Value* cmp = llvm::CallInst::Create(JnjvmModule::CompareExceptionFunction, cl, "",
currentBlock);
llvm::BranchInst::Create(cur->handler, bbNext, cmp, currentBlock);
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJIT.h Tue Aug 26 10:45:03 2008
@@ -41,7 +41,7 @@
uint32 endpc;
uint32 handlerpc;
uint16 catche;
- Class* catchClass;
+ UserClass* catchClass;
llvm::BasicBlock* test;
llvm::BasicBlock* realTest;
llvm::BasicBlock* handler;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaJITOpcodes.cpp Tue Aug 26 10:45:03 2008
@@ -1820,7 +1820,7 @@
case NEWARRAY :
case ANEWARRAY : {
- ClassArray* dcl = 0;
+ UserClassArray* dcl = 0;
ConstantInt* sizeElement = 0;
GlobalVariable* TheVT = 0;
JnjvmClassLoader* JCL = compilingClass->classLoader;
@@ -1828,7 +1828,7 @@
if (bytecodes[i] == NEWARRAY) {
uint8 id = bytecodes[++i];
AssessorDesc* ass = AssessorDesc::arrayType(id);
- dcl = ass->arrayClass;
+ dcl = ass->getArrayClass();
TheVT = JnjvmModule::JavaObjectVirtualTableGV;
LLVMAssessorInfo& LAI = LLVMAssessorInfo::AssessorInfo[ass->numId];
sizeElement = LAI.sizeInBytesConstant;
@@ -1844,10 +1844,14 @@
TheVT = JnjvmModule::ArrayObjectVirtualTableGV;
sizeElement = mvm::jit::constantPtrSize;
}
-
+#ifdef MULTIPLE_VM
+ llvm::Value* valCl = 0;
+ fprintf(stderr, "implement me");
+ abort();
+#else
LLVMCommonClassInfo* LCI = module->getClassInfo(dcl);
llvm::Value* valCl = LCI->getVar(this);
-
+#endif
llvm::Value* arg1 = popAsInt();
Value* cmp = new ICmpInst(ICmpInst::ICMP_SLT, arg1,
@@ -2069,12 +2073,18 @@
const UTF8* className =
compilingClass->ctpInfo->resolveClassName(index);
- ClassArray* dcl = JCL->constructArray(className);
+ UserClassArray* dcl = JCL->constructArray(className);
compilingClass->ctpInfo->loadClass(index);
+#ifdef MULTIPLE_VM
+ llvm::Value* valCl = 0;
+ fprintf(stderr, "implement me %s", dcl->printString());
+ abort();
+#else
LLVMCommonClassInfo* LCI = module->getClassInfo(dcl);
Value* valCl = LCI->getVar(this);
+#endif
Value** args = (Value**)alloca(sizeof(Value*) * (dim + 2));
args[0] = valCl;
args[1] = ConstantInt::get(Type::Int32Ty, dim);
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaMetaJIT.cpp Tue Aug 26 10:45:03 2008
@@ -29,8 +29,8 @@
char const* className, char const* func,
char const* sign, int access, ...) {
- CommonClass* cl = loader->loadName(loader->asciizConstructUTF8(className),
- true, true);
+ UserCommonClass* cl = loader->loadName(loader->asciizConstructUTF8(className),
+ true, true);
cl->initialiseClass(vm);
bool stat = access == ACC_STATIC ? true : false;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaObject.cpp Tue Aug 26 10:45:03 2008
@@ -159,7 +159,7 @@
void JavaObject::print(mvm::PrintBuffer* buf) const {
buf->write("JavaObject<");
- CommonClass::printClassName(classOf->name, buf);
+ CommonClass::printClassName(classOf->getName(), buf);
buf->write(">");
}
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Tue Aug 26 10:45:03 2008
@@ -101,21 +101,19 @@
}
UserCommonClass* cl = 0;
+ UserCommonClass* fieldCl = 0;
const UTF8* utf8 = 0;
Typedef* sign = 0;
ctpInfo->resolveField(index, cl, utf8, sign);
- JavaField* field = cl->lookupField(utf8, sign->keyName, stat, true);
+ JavaField* field = cl->lookupField(utf8, sign->keyName, stat, true, fieldCl);
void* ptr = 0;
if (stat) {
- UserClass* fieldCl = field->classDef;
fieldCl->initialiseClass(JavaThread::get()->isolate);
- ptr = (void*)((uint64)(fieldCl->getStaticInstance()) + field->ptrOffset);
-#ifndef MULTIPLE_VM
+ ptr = (void*)((uint64)(((UserClass*)fieldCl)->getStaticInstance()) + field->ptrOffset);
ctpInfo->ctpRes[index] = ptr;
-#endif
} else {
ptr = (void*)((uint64)obj + field->ptrOffset);
ctpInfo->ctpRes[index] = (void*)field->ptrOffset;
@@ -177,18 +175,7 @@
JavaThread::get()->isolate->indexOutOfBounds(obj, index);
}
-#ifdef MULTIPLE_VM
-extern "C" JavaObject* getStaticInstance(UserClass* cl, Jnjvm* vm) {
- std::pair<JavaState, JavaObject*>* val = vm->statics->lookup(cl);
- if (!val || !(val->second)) {
- vm->initialiseClass(cl);
- val = vm->statics->lookup(cl);
- }
- return val->second;
-}
-#endif
-
-extern "C" CommonClass* initialisationCheck(UserCommonClass* cl) {
+extern "C" UserCommonClass* initialisationCheck(UserCommonClass* cl) {
cl->initialiseClass(JavaThread::get()->isolate);
return cl;
}
@@ -198,7 +185,7 @@
return cl->getClassDelegatee(vm);
}
-extern "C" Class* newLookup(UserClass* caller, uint32 index) {
+extern "C" UserClass* newLookup(UserClass* caller, uint32 index) {
JavaConstantPool* ctpInfo = caller->getConstantPool();
UserClass* cl = (UserClass*)ctpInfo->loadClass(index);
return cl;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaString.cpp Tue Aug 26 10:45:03 2008
@@ -17,9 +17,9 @@
JavaString* JavaString::stringDup(const UTF8*& utf8, Jnjvm* vm) {
- Class* cl = vm->upcalls->newString;
- JavaString* res = (JavaString*)malloc(cl->virtualSize);
- ((void**)res)[0] = cl->virtualVT;
+ UserClass* cl = vm->upcalls->newString;
+ JavaString* res = (JavaString*)malloc(cl->getVirtualSize());
+ ((void**)res)[0] = cl->getVirtualVT();
res->classOf = cl;
// No need to call the Java function: both the Java function and
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.cpp Tue Aug 26 10:45:03 2008
@@ -56,7 +56,7 @@
AssessorDesc::AssessorDesc(bool dt, char bid, uint32 nb, uint32 nw,
const char* name,
JnjvmClassLoader* loader, uint8 nid,
- const char* assocName, ClassArray* cl,
+ const char* assocName, UserClassArray* cl,
arrayCtor_t ctor) {
AssessorDesc* res = this;
res->numId = nid;
@@ -75,10 +75,9 @@
res->assocClassName = 0;
if (bid != I_PARG && bid != I_PARD && bid != I_REF && bid != I_TAB) {
- res->classType = new ClassPrimitive(loader, res->UTF8Name);
- res->classType->virtualSize = nb;
+ res->primitiveClass = new UserClassPrimitive(loader, res->UTF8Name, nb);
} else {
- res->classType = 0;
+ res->primitiveClass = 0;
}
}
@@ -265,37 +264,9 @@
}
}
-/*
-void AssessorDesc::introspectArrayName(Jnjvm *vm, const UTF8* utf8,
- uint32 start, AssessorDesc*& ass,
- const UTF8*& res) {
- uint32 pos = 0;
- uint32 intern = 0;
- AssessorDesc* funcs = 0;
-
- analyseIntern(utf8, start, 1, funcs, intern);
-
- if (funcs != dTab) {
- vm->unknownError("%s isn't an array", utf8->printString());
- }
-
- analyseIntern(utf8, intern, 0, funcs, pos);
-
- if (funcs == dRef) {
- ass = dRef;
- res = utf8->extract(vm, intern + 1, pos - 1);
- } else if (funcs == dTab) {
- ass = dTab;
- res = utf8->extract(vm, intern, pos);
- } else {
- ass = funcs;
- res = 0;
- }
-}
-*/
void AssessorDesc::introspectArray(JnjvmClassLoader* loader,
const UTF8* utf8, uint32 start,
- AssessorDesc*& ass, CommonClass*& res) {
+ AssessorDesc*& ass, UserCommonClass*& res) {
uint32 pos = 0;
uint32 intern = 0;
AssessorDesc* funcs = 0;
@@ -318,7 +289,7 @@
res = loader->constructArray(utf8->extract(loader->hashUTF8, intern, pos));
} else {
ass = funcs;
- res = funcs->classType;
+ res = funcs->getPrimitiveClass();
}
}
@@ -377,8 +348,7 @@
}
}
-AssessorDesc* AssessorDesc::classToPrimitive(CommonClass* cl) {
- const UTF8* name = cl->name;
+AssessorDesc* AssessorDesc::classNameToPrimitive(const UTF8* name) {
if (name->equals(dFloat->assocClassName)) {
return dFloat;
} else if (name->equals(dInt->assocClassName)) {
@@ -410,9 +380,9 @@
return buf->contents()->cString();
}
-CommonClass* Typedef::assocClass(JnjvmClassLoader* loader) {
+UserCommonClass* Typedef::assocClass(JnjvmClassLoader* loader) {
if (pseudoAssocClassName == 0) {
- return funcs->classType;
+ return funcs->getPrimitiveClass();
} else if (funcs == AssessorDesc::dRef) {
return loader->loadName(pseudoAssocClassName, false, true);
} else {
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaTypes.h Tue Aug 26 10:45:03 2008
@@ -19,13 +19,15 @@
class ClassArray;
class CommonClass;
-class UserCommonClass;
class JavaArray;
class JavaJIT;
class JavaObject;
class Jnjvm;
class JnjvmBootstrapLoader;
class JnjvmClassLoader;
+class UserClassArray;
+class UserClassPrimitive;
+class UserCommonClass;
class UTF8;
#define VOID_ID 0
@@ -41,7 +43,7 @@
#define OBJECT_ID 10
#define NUM_ASSESSORS 11
-typedef JavaArray* (*arrayCtor_t)(uint32 len, CommonClass* cl, Jnjvm* vm);
+typedef JavaArray* (*arrayCtor_t)(uint32 len, UserClassArray* cl, Jnjvm* vm);
/// AssessorDesc - Description of a Java assessor: these are the letters found
@@ -95,10 +97,10 @@
///
const UTF8* UTF8Name;
- /// classType - The primitive Java class of this assessor. This class
+ /// primitiveClass - The primitive Java class of this assessor. This class
/// is internal to the JVM.
///
- CommonClass* classType;
+ UserClassPrimitive* primitiveClass;
/// assocClassName - The associated class name, e.g. "java/lang/Integer" for
/// "I".
@@ -107,7 +109,7 @@
/// arrayClass - The primitive array class of the assessor, e.g. I[] for "I".
///
- ClassArray* arrayClass;
+ UserClassArray* arrayClass;
/// arrayCtor - The constructor of an array of this assessor.
///
@@ -184,7 +186,7 @@
AssessorDesc(bool dt, char bid, uint32 nb, uint32 nw,
const char* name,
JnjvmClassLoader* loader, uint8 nid,
- const char* assocName, ClassArray* cl,
+ const char* assocName, UserClassArray* cl,
arrayCtor_t ctor);
@@ -204,19 +206,26 @@
static const UTF8* constructArrayName(JnjvmClassLoader* loader, AssessorDesc* ass,
uint32 steps, const UTF8* className);
- /*
- static void introspectArrayName(const UTF8* utf8, uint32 start,
- AssessorDesc*& ass, const UTF8*& res);
- */
static void introspectArray(JnjvmClassLoader* loader, const UTF8* utf8,
uint32 start, AssessorDesc*& ass,
- CommonClass*& res);
+ UserCommonClass*& res);
static AssessorDesc* arrayType(unsigned int t);
static AssessorDesc* byteIdToPrimitive(const char id);
- static AssessorDesc* classToPrimitive(CommonClass* cl);
-
+ static AssessorDesc* classNameToPrimitive(const UTF8* name);
+
+#ifdef MULTIPLE_VM
+ UserClassArray* getArrayClass() const;
+ UserClassPrimitive* getPrimitiveClass() const;
+#else
+ UserClassArray* getArrayClass() const {
+ return arrayClass;
+ }
+ UserClassPrimitive* getPrimitiveClass() const {
+ return primitiveClass;
+ }
+#endif
};
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.cpp Tue Aug 26 10:45:03 2008
@@ -49,6 +49,7 @@
JavaField* Classpath::daemon;
JavaField* Classpath::group;
JavaField* Classpath::running;
+Class* Classpath::threadGroup;
JavaField* Classpath::rootGroup;
JavaField* Classpath::vmThread;
JavaMethod* Classpath::uncaughtException;
@@ -197,7 +198,7 @@
void Classpath::createInitialThread(Jnjvm* vm, JavaObject* th) {
JnjvmClassLoader* JCL = JnjvmClassLoader::bootstrapLoader;
- JCL->loadName(newVMThread->name, true, true);
+ JCL->loadName(newVMThread->getName(), true, true);
newVMThread->initialiseClass(vm);
JavaObject* vmth = newVMThread->doNew(vm);
@@ -208,9 +209,9 @@
assocThread->setObjectField(vmth, th);
running->setInt8Field(vmth, (uint32)1);
- JCL->loadName(rootGroup->classDef->name, true, true);
- rootGroup->classDef->initialiseClass(vm);
- JavaObject* Stat = rootGroup->classDef->getStaticInstance();
+ JCL->loadName(threadGroup->getName(), true, true);
+ threadGroup->initialiseClass(vm);
+ JavaObject* Stat = threadGroup->getStaticInstance();
JavaObject* RG = rootGroup->getObjectField(Stat);
group->setObjectField(th, RG);
groupAddThread->invokeIntSpecial(vm, RG, th);
@@ -218,7 +219,7 @@
void Classpath::mapInitialThread(Jnjvm* vm) {
JnjvmClassLoader* JCL = JnjvmClassLoader::bootstrapLoader;
- JCL->loadName(newThread->name, true, true);
+ JCL->loadName(newThread->getName(), true, true);
newThread->initialiseClass(vm);
JavaObject* th = newThread->doNew(vm);
createInitialThread(vm, th);
@@ -527,6 +528,9 @@
running =
UPCALL_FIELD(loader, "java/lang/VMThread", "running", "Z", ACC_VIRTUAL);
+ threadGroup =
+ UPCALL_CLASS(loader, "java/lang/ThreadGroup");
+
rootGroup =
UPCALL_FIELD(loader, "java/lang/ThreadGroup", "root",
"Ljava/lang/ThreadGroup;", ACC_STATIC);
@@ -584,8 +588,9 @@
}
extern "C" uint8 isArray(JavaObject* klass) {
+ Jnjvm* vm = JavaThread::get()->isolate;
CommonClass* cl =
- (CommonClass*)((Classpath::vmdataClass->getObjectField(klass)));
+ (CommonClass*)((vm->upcalls->vmdataClass->getObjectField(klass)));
return (uint8)cl->isArray();
}
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaUpcalls.h Tue Aug 26 10:45:03 2008
@@ -127,6 +127,7 @@
ISOLATE_STATIC JavaField* daemon;
ISOLATE_STATIC JavaField* group;
ISOLATE_STATIC JavaField* running;
+ ISOLATE_STATIC UserClass* threadGroup;
ISOLATE_STATIC JavaField* rootGroup;
ISOLATE_STATIC JavaField* vmThread;
ISOLATE_STATIC JavaMethod* uncaughtException;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jni.cpp Tue Aug 26 10:45:03 2008
@@ -834,9 +834,10 @@
// TODO: find a better place to store the UTF8
UserCommonClass* cl = NativeUtil::resolvedImplClass(clazz, true);
+ UserCommonClass* realCl = 0;
return (jfieldID)
cl->lookupField(cl->classLoader->asciizConstructUTF8(name),
- cl->classLoader->asciizConstructUTF8(sig), 0, 1);
+ cl->classLoader->asciizConstructUTF8(sig), 0, 1, realCl);
END_EXCEPTION
return 0;
@@ -1327,9 +1328,11 @@
// TODO: find a better place to store the UTF8
UserCommonClass* cl = NativeUtil::resolvedImplClass(clazz, true);
+ UserCommonClass* realCl = 0;
return (jfieldID)
cl->lookupField(cl->classLoader->asciizConstructUTF8(name),
- cl->classLoader->asciizConstructUTF8(sig), true, true);
+ cl->classLoader->asciizConstructUTF8(sig), true, true,
+ realCl);
END_EXCEPTION
return 0;
@@ -1665,7 +1668,7 @@
UserCommonClass* base = NativeUtil::resolvedImplClass(elementClass, true);
JnjvmClassLoader* loader = base->classLoader;
- const UTF8* name = base->name;
+ const UTF8* name = base->getName();
const UTF8* arrayName = AssessorDesc::constructArrayName(loader, 0, 1, name);
UserClassArray* array = loader->constructArray(arrayName);
ArrayObject* res = ArrayObject::acons(length, array, &(vm->allocator));
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.cpp Tue Aug 26 10:45:03 2008
@@ -87,6 +87,7 @@
typedef void (*clinit_t)(Jnjvm* vm);
+#ifndef MULTIPLE_VM
void CommonClass::initialiseClass(Jnjvm* vm) {
// Primitives are initialized at boot time
if (isArray()) {
@@ -97,6 +98,7 @@
release();
} else if (status >= resolved && status != clinitParent &&
status != inClinit) {
+ Class* cl = (Class*)this;
status = clinitParent;
release();
if (super) {
@@ -114,6 +116,16 @@
PRINT_DEBUG(JNJVM_LOAD, 0, LIGHT_GREEN, "clinit ", 0);
PRINT_DEBUG(JNJVM_LOAD, 0, COLOR_NORMAL, "%s\n", printString());
+ JavaObject* val =
+ (JavaObject*)vm->allocator.allocateObject(cl->staticSize, cl->staticVT);
+ val->initialise(cl);
+ for (CommonClass::field_iterator i = cl->staticFields.begin(),
+ e = cl->staticFields.end(); i!= e; ++i) {
+ i->second->initField(val);
+ }
+
+ cl->_staticInstance = val;
+
if (meth) {
JavaObject* exc = 0;
try{
@@ -148,15 +160,16 @@
}
}
}
+#endif
-void Jnjvm::errorWithExcp(Class* cl, JavaMethod* init, const JavaObject* excp) {
+void Jnjvm::errorWithExcp(UserClass* cl, JavaMethod* init, const JavaObject* excp) {
JavaObject* obj = cl->doNew(this);
init->invokeIntSpecial(this, obj, excp);
JavaThread::throwException(obj);
}
-void Jnjvm::error(Class* cl, JavaMethod* init, const char* fmt, ...) {
+void Jnjvm::error(UserClass* cl, JavaMethod* init, const char* fmt, ...) {
char* tmp = (char*)alloca(4096);
va_list ap;
va_start(ap, fmt);
@@ -316,6 +329,7 @@
postProperties.push_back(std::make_pair(key, value));
}
+#ifndef MULTIPLE_VM
JavaObject* CommonClass::getClassDelegatee(Jnjvm* vm, JavaObject* pd) {
acquire();
if (!(delegatee)) {
@@ -332,6 +346,7 @@
release();
return delegatee;
}
+#endif
Jnjvm::~Jnjvm() {
#ifdef MULTIPLE_GC
@@ -431,7 +446,7 @@
if (archive.getOfscd() != -1) {
ZipFile* file = archive.getFile(PATH_MANIFEST);
if (file) {
- ClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfByte;
+ UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfByte;
ArrayUInt8* res = ArrayUInt8::acons(file->ucsize, array, &vm->allocator);
int ok = archive.readFile(res, file);
if (ok) {
@@ -693,7 +708,7 @@
appClassLoader->getJavaClassLoader());
// load and initialise math since it is responsible for dlopen'ing
// libjavalang.so and we are optimizing some math operations
- CommonClass* math =
+ UserCommonClass* math =
loader->loadName(loader->asciizConstructUTF8("java/lang/Math"), true, true);
math->initialiseClass(this);
}
@@ -767,7 +782,7 @@
}
}
- ClassArray* array = bootstrapLoader->upcalls->ArrayOfString;
+ UserClassArray* array = bootstrapLoader->upcalls->ArrayOfString;
ArrayObject* args = ArrayObject::acons(argc - 2, array, &allocator);
for (int i = 2; i < argc; ++i) {
args->elements[i - 2] = (JavaObject*)asciizToStr(argv[i]);
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Jnjvm.h Tue Aug 26 10:45:03 2008
@@ -26,13 +26,8 @@
namespace jnjvm {
class ArrayObject;
-class ArrayUInt8;
-class Attribut;
-class UserClass;
-class UserClassArray;
class Classpath;
-class UserCommonClass;
-class UserClassPrimitive;
+class CommonClass;
class JavaField;
class JavaMethod;
class JavaObject;
@@ -40,26 +35,12 @@
class JavaThread;
class JnjvmBootstrapLoader;
class JnjvmClassLoader;
-class JnjvmModule;
-class JnjvmModuleProvider;
-class Reader;
-class Typedef;
-class UTF8;
-class UTF8Map;
-class ClassMap;
-class DelegateeMap;
-class FieldMap;
-class MethodMap;
-class Signdef;
-class SignMap;
-class StaticInstanceMap;
class StringMap;
-class TypeMap;
-class FunctionMap;
-class FunctionDefMap;
-class FunctionDefMap;
-class AllocationMap;
-class ZipArchive;
+class UserClass;
+class UserClassArray;
+class UserClassPrimitive;
+class UserCommonClass;
+class UTF8;
/// ThreadSystem - Thread management of a JVM. Each JVM has one thread
/// management system to count the number of non-daemon threads it owns.
@@ -307,8 +288,8 @@
void illegalArgumentException(const char* msg);
void classCastException(const char* msg);
void unknownError(const char* fmt, ...);
- void noSuchFieldError(UserCommonClass* cl, const UTF8* name);
- void noSuchMethodError(UserCommonClass* cl, const UTF8* name);
+ void noSuchFieldError(CommonClass* cl, const UTF8* name);
+ void noSuchMethodError(CommonClass* cl, const UTF8* name);
void classFormatError(const char* fmt, ...);
void noClassDefFoundError(JavaObject* obj);
void noClassDefFoundError(const char* fmt, ...);
@@ -355,13 +336,6 @@
///
virtual void runApplication(int argc, char** argv);
-#ifdef MULTIPLE_VM
- UserClassPrimitive* getPrimitiveClass(const AssessorDesc* ass);
-#else
- UserClassPrimitive* getPrimitiveClass(const AssessorDesc* ass) {
- return (UserClassPrimitive*)ass->classType;
- }
-#endif
};
} // end namespace jnjvm
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue Aug 26 10:45:03 2008
@@ -27,7 +27,12 @@
using namespace jnjvm;
+#ifndef MULTIPLE_VM
JnjvmBootstrapLoader* JnjvmClassLoader::bootstrapLoader = 0;
+UserClass* JnjvmBootstrapLoader::SuperArray = 0;
+std::vector<UserClass*> JnjvmBootstrapLoader::InterfacesArray;
+#endif
+
extern const char* GNUClasspathGlibj;
extern const char* GNUClasspathLibs;
@@ -241,7 +246,7 @@
JnjvmClassLoader * ld =
ClassArray::arrayLoader(name, this, 1, name->size - 1);
UserClassArray* res =
- (ClassArray*)ld->classes->lookupOrCreate(name, this, arrayDup);
+ (UserClassArray*)ld->classes->lookupOrCreate(name, this, arrayDup);
return res;
} else {
return (UserClassArray*)classes->lookupOrCreate(name, this, arrayDup);
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmClassLoader.h Tue Aug 26 10:45:03 2008
@@ -266,6 +266,9 @@
/// Java code.
///
Classpath* upcalls;
+
+ ISOLATE_STATIC std::vector<UserClass*> InterfacesArray;
+ ISOLATE_STATIC UserClass* SuperArray;
};
} // end namespace jnjvm
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModule.cpp Tue Aug 26 10:45:03 2008
@@ -408,7 +408,7 @@
const Type* LLVMClassInfo::getStaticType() {
if (!staticType) {
- UserClass* cl = (UserClass*)classDef;
+ Class* cl = (Class*)classDef;
std::vector<const llvm::Type*> fields;
JavaField** array = (JavaField**)
alloca(sizeof(JavaField*) * (classDef->staticFields.size() + 1));
@@ -444,18 +444,6 @@
uint64 size = mvm::jit::getTypeSize(structType);
cl->staticSize = size;
cl->staticVT = VT;
-
- JavaObject* val =
- (JavaObject*)JavaThread::get()->isolate->allocator.allocateObject(cl->staticSize,
- cl->staticVT);
- val->initialise(classDef);
- for (CommonClass::field_iterator i = cl->staticFields.begin(),
- e = cl->staticFields.end(); i!= e; ++i) {
-
- i->second->initField(val);
- }
-
- cl->_staticInstance = val;
}
return staticType;
}
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Tue Aug 26 10:45:03 2008
@@ -31,7 +31,7 @@
bool isStatic = ctpInfo->isAStaticCall(index);
- CommonClass* cl = 0;
+ UserCommonClass* cl = 0;
const UTF8* utf8 = 0;
Signdef* sign = 0;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/LockedMap.h Tue Aug 26 10:45:03 2008
@@ -97,14 +97,14 @@
mvm::Lock* lock;
JavaAllocator* allocator;
- ClassArray* array;
+ UserClassArray* array;
std::multimap<const uint32, const UTF8*> map;
const UTF8* lookupOrCreateAsciiz(const char* asciiz);
const UTF8* lookupOrCreateReader(const uint16* buf, uint32 size);
const UTF8* lookupAsciiz(const char* asciiz);
const UTF8* lookupReader(const uint16* buf, uint32 size);
- UTF8Map(JavaAllocator* A, ClassArray* cl) {
+ UTF8Map(JavaAllocator* A, UserClassArray* cl) {
lock = mvm::Lock::allocNormal();
allocator = A;
array = cl;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp Tue Aug 26 10:45:03 2008
@@ -230,7 +230,7 @@
Jnjvm* vm = JavaThread::get()->isolate;
JavaObject *Cl = (JavaObject*)clazz;
UserCommonClass* cl =
- (CommonClass*)vm->upcalls->vmdataClass->getObjectField(Cl);
+ (UserCommonClass*)vm->upcalls->vmdataClass->getObjectField(Cl);
cl->resolveClass();
if (doClinit) cl->initialiseClass(vm);
return cl;
@@ -251,8 +251,8 @@
} else if (obj == 0) {
vm->illegalArgumentException("");
} else {
- CommonClass* cl = obj->classOf;
- AssessorDesc* value = AssessorDesc::classToPrimitive(cl);
+ UserCommonClass* cl = obj->classOf;
+ AssessorDesc* value = AssessorDesc::classNameToPrimitive(cl->getName());
if (value == 0) {
vm->illegalArgumentException("");
@@ -381,7 +381,7 @@
JavaObject* NativeUtil::getClassType(JnjvmClassLoader* loader, Typedef* type) {
Jnjvm* vm = JavaThread::get()->isolate;
- CommonClass* res = type->assocClass(loader);
+ UserCommonClass* res = type->assocClass(loader);
return res->getClassDelegatee(vm);
}
@@ -417,7 +417,7 @@
for (uint16 i = 0; i < nbe; ++i) {
uint16 idx = reader.readU2();
- CommonClass* cl = ctp->loadClass(idx);
+ UserCommonClass* cl = ctp->loadClass(idx);
cl->resolveClass();
JavaObject* obj = cl->getClassDelegatee(vm);
res->elements[i] = obj;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/Reader.cpp Tue Aug 26 10:45:03 2008
@@ -32,7 +32,7 @@
fseek(fp, 0, SeekEnd);
long nbb = ftell(fp);
fseek(fp, 0, SeekSet);
- ClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
+ UserClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
res = ArrayUInt8::acons(nbb, array, loader->allocator);
fread(res->elements, nbb, 1, fp);
fclose(fp);
@@ -45,7 +45,7 @@
ArrayUInt8* ret = 0;
ZipFile* file = archive->getFile(filename);
if (file != 0) {
- ClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
+ UserClassArray* array = loader->bootstrapLoader->upcalls->ArrayOfByte;
ArrayUInt8* res = ArrayUInt8::acons(file->ucsize, array, loader->allocator);
if (archive->readFile(res, file) != 0) {
ret = res;
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp?rev=55369&r1=55368&r2=55369&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/VirtualTables.cpp Tue Aug 26 10:45:03 2008
@@ -35,9 +35,6 @@
INIT(ClassMap);
INIT(JnjvmBootstrapLoader);
INIT(JnjvmClassLoader);
-#ifdef MULTIPLE_VM
- INIT(JnjvmSharedLoader);
-#endif
#ifdef SERVICE_VM
INIT(ServiceDomain);
#endif
@@ -100,10 +97,6 @@
void Jnjvm::TRACER {
appClassLoader->MARK_AND_TRACE;
TRACE_VECTOR(JavaObject*, gc_allocator, globalRefs);
-#ifdef MULTIPLE_VM
- statics->MARK_AND_TRACE;
- delegatees->MARK_AND_TRACE;
-#endif
bootstrapThread->MARK_AND_TRACE;
JnjvmClassLoader::bootstrapLoader->MARK_AND_TRACE;
}
@@ -129,7 +122,7 @@
}
#ifndef MULTIPLE_VM
#define TRACE_DELEGATEE(prim) \
- prim->classType->delegatee->MARK_AND_TRACE
+ prim->primitiveClass->delegatee->MARK_AND_TRACE
TRACE_DELEGATEE(AssessorDesc::dVoid);
TRACE_DELEGATEE(AssessorDesc::dBool);
More information about the vmkit-commits
mailing list