[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