[vmkit-commits] [vmkit] r68780 - in /vmkit/trunk/lib/JnJVM: Compiler/JavaAOTCompiler.cpp VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JnjvmClassLoader.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Apr 10 07:16:16 PDT 2009
Author: geoffray
Date: Fri Apr 10 09:16:15 2009
New Revision: 68780
URL: http://llvm.org/viewvc/llvm-project?rev=68780&view=rev
Log:
Make virtual tables of native arrays static in the program,
so that AOT files can link with them.
Modified:
vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=68780&r1=68779&r2=68780&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Fri Apr 10 09:16:15 2009
@@ -34,8 +34,6 @@
using namespace llvm;
extern JavaVirtualTable JavaArrayVT;
-extern JavaVirtualTable ArrayObjectVT;
-extern JavaVirtualTable JavaObjectVT;
extern ClassArray ArrayOfBool;
extern ClassArray ArrayOfByte;
@@ -1277,7 +1275,11 @@
#define PRIMITIVE_ARRAY(name) \
varGV = new GlobalVariable(ATy, true, GlobalValue::ExternalLinkage, \
0, #name, getLLVMModule()); \
- arrayClasses.insert(std::make_pair(&name, varGV));
+ arrayClasses.insert(std::make_pair(&name, varGV)); \
+ varGV = new GlobalVariable(JnjvmModule::VTType->getContainedType(0), true, \
+ GlobalValue::ExternalLinkage, \
+ 0, #name"VT", getLLVMModule()); \
+ virtualTables.insert(std::make_pair(name.virtualVT, varGV));
PRIMITIVE_ARRAY(ArrayOfBool)
PRIMITIVE_ARRAY(ArrayOfByte)
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=68780&r1=68779&r2=68780&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Fri Apr 10 09:16:15 2009
@@ -322,6 +322,25 @@
access = ACC_FINAL | ACC_ABSTRACT | ACC_PUBLIC | JNJVM_ARRAY;
}
+void ClassArray::initPrimitive(JnjvmClassLoader* loader, const UTF8* n,
+ UserCommonClass* base) {
+ CommonClass::init(loader, n);
+
+ _baseClass = base;
+ super = ClassArray::SuperArray;
+ interfaces = ClassArray::InterfacesArray;
+ nbInterfaces = 2;
+
+ virtualVT->tracer = (uintptr_t)JavaArrayTracer;
+ virtualVT->cl = this;
+
+ depth = 1;
+ display = (CommonClass**)loader->allocator.Allocate(2 * sizeof(CommonClass*));
+ display[0] = ClassArray::SuperArray;
+ display[1] = this;
+ access = ACC_FINAL | ACC_ABSTRACT | ACC_PUBLIC | JNJVM_ARRAY;
+}
+
JavaArray* UserClassArray::doNew(sint32 n, Jnjvm* vm) {
if (n < 0)
vm->negativeArraySizeException(n);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=68780&r1=68779&r2=68780&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Fri Apr 10 09:16:15 2009
@@ -915,10 +915,15 @@
///
void init(JnjvmClassLoader* loader, const UTF8* name,
UserCommonClass* baseClass);
+
+ /// initPrimitive - Initialize the primitive array class.
+ ///
+ void initPrimitive(JnjvmClassLoader* loader, const UTF8* name,
+ UserCommonClass* baseClass);
- /// ClassArray - Empty constructor.
+ /// ClassArray - Constructor with a VT.
///
- ClassArray() {}
+ ClassArray(JavaVirtualTable& VT) { virtualVT = &VT; }
/// ClassArray - Construct a Java array class with the given name.
///
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=68780&r1=68779&r2=68780&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Fri Apr 10 09:16:15 2009
@@ -52,14 +52,23 @@
using namespace jnjvm;
-ClassArray ArrayOfBool;
-ClassArray ArrayOfByte;
-ClassArray ArrayOfChar;
-ClassArray ArrayOfShort;
-ClassArray ArrayOfInt;
-ClassArray ArrayOfFloat;
-ClassArray ArrayOfDouble;
-ClassArray ArrayOfLong;
+JavaVirtualTable ArrayOfBoolVT;
+JavaVirtualTable ArrayOfByteVT;
+JavaVirtualTable ArrayOfCharVT;
+JavaVirtualTable ArrayOfShortVT;
+JavaVirtualTable ArrayOfIntVT;
+JavaVirtualTable ArrayOfFloatVT;
+JavaVirtualTable ArrayOfDoubleVT;
+JavaVirtualTable ArrayOfLongVT;
+
+ClassArray ArrayOfBool(ArrayOfBoolVT);
+ClassArray ArrayOfByte(ArrayOfByteVT);
+ClassArray ArrayOfChar(ArrayOfCharVT);
+ClassArray ArrayOfShort(ArrayOfShortVT);
+ClassArray ArrayOfInt(ArrayOfIntVT);
+ClassArray ArrayOfFloat(ArrayOfFloatVT);
+ClassArray ArrayOfDouble(ArrayOfDoubleVT);
+ClassArray ArrayOfLong(ArrayOfLongVT);
extern "C" void JavaArrayTracer(JavaObject*);
@@ -620,10 +629,8 @@
JnjvmBootstrapLoader::constructPrimitiveArray(ClassArray& cl, const UTF8* name,
ClassPrimitive* baseClass) {
- cl.CommonClass::init(this, name);
- cl.ClassArray::init(this, name, baseClass);
+ cl.initPrimitive(this, name, baseClass);
classes->map.insert(std::make_pair(name, &cl));
- cl.virtualVT->tracer = (uintptr_t)JavaArrayTracer;
return &cl;
}
More information about the vmkit-commits
mailing list