[vmkit-commits] [vmkit] r76544 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMClassLoader.inc Classpath/ClasspathVMThrowable.inc Compiler/JavaAOTCompiler.cpp Compiler/JavaJIT.cpp VMCore/JavaClass.cpp VMCore/JavaClass.h VMCore/JavaConstantPool.cpp VMCore/Reader.h VMCore/Zip.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Jul 21 00:38:11 PDT 2009


Author: geoffray
Date: Tue Jul 21 02:38:09 2009
New Revision: 76544

URL: http://llvm.org/viewvc/llvm-project?rev=76544&view=rev
Log:
Add an indirection to manipulate an array in the Reader class.


Modified:
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.inc
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.inc
    vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Reader.h
    vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.inc?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.inc (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.inc Tue Jul 21 02:38:09 2009
@@ -130,7 +130,7 @@
   Jnjvm* vm = JavaThread::get()->getJVM();
  
   // Before creating a class, do a check on the bytes.  
-  Reader reader(bytes);
+  Reader reader(&bytes);
   uint32 magic = reader.readU4();
   if (magic != Jnjvm::Magic) {
     JavaThread::get()->getJVM()->classFormatError("bad magic number");

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.inc?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.inc (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThrowable.inc Tue Jul 21 02:38:09 2009
@@ -90,7 +90,7 @@
   
   // We don't have the bytes if the class was vmjc'ed.
   if (sourceAtt && cl->getBytes()) {
-    Reader reader(sourceAtt, cl->getBytes());
+    Reader reader(sourceAtt, cl->getBytesPtr());
     uint16 index = reader.readU2();
     sourceName = vm->internalUTF8ToStr(cl->getConstantPool()->UTF8At(index));
   }

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Tue Jul 21 02:38:09 2009
@@ -379,7 +379,7 @@
         Elts.push_back(Mod.getContext().getNullValue(Ty));
       }
     } else {
-      Reader reader(attribut, cl->bytes);
+      Reader reader(attribut, &(cl->bytes));
       JavaConstantPool * ctpInfo = cl->ctpInfo;
       uint16 idx = reader.readU2();
       if (type->isPrimitive()) {

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Tue Jul 21 02:38:09 2009
@@ -668,7 +668,7 @@
     abort();
   }
 
-  Reader reader(codeAtt, compilingClass->bytes);
+  Reader reader(codeAtt, &(compilingClass->bytes));
   /* uint16 maxStack = */ reader.readU2();
   uint16 maxLocals = reader.readU2();
   uint32 codeLen = reader.readU4();
@@ -801,7 +801,7 @@
     abort();
   }
 
-  Reader reader(codeAtt, compilingClass->bytes);
+  Reader reader(codeAtt, &(compilingClass->bytes));
   /* uint16 maxStack = */ reader.readU2();
   uint16 maxLocals = reader.readU2();
   uint32 codeLen = reader.readU4();

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Tue Jul 21 02:38:09 2009
@@ -584,7 +584,7 @@
   if (!attribut) {
     InitField(obj);
   } else {
-    Reader reader(attribut, classDef->bytes);
+    Reader reader(attribut, &(classDef->bytes));
     JavaConstantPool * ctpInfo = classDef->ctpInfo;
     uint16 idx = reader.readU2();
     if (type->isPrimitive()) {
@@ -685,7 +685,7 @@
   Attribut* codeAtt = meth.lookupAttribut(Attribut::codeAttribut);
    
   if (codeAtt) {
-    Reader reader(codeAtt, meth.classDef->bytes);
+    Reader reader(codeAtt, &(meth.classDef->bytes));
     //uint16 maxStack =
     reader.readU2();
     //uint16 maxLocals = 
@@ -821,7 +821,7 @@
   PRINT_DEBUG(JNJVM_LOAD, 0, LIGHT_GREEN, "reading ", 0);
   PRINT_DEBUG(JNJVM_LOAD, 0, COLOR_NORMAL, "%s\n", printString());
 
-  Reader reader(bytes);
+  Reader reader(&bytes);
   uint32 magic = reader.readU4();
   assert(magic == Jnjvm::Magic && "I've created a class but magic is no good!");
 
@@ -897,7 +897,7 @@
   if (!innerOuterResolved) {
     Attribut* attribut = lookupAttribut(Attribut::innerClassesAttribut);
     if (attribut != 0) {
-      Reader reader(attribut, getBytes());
+      Reader reader(attribut, getBytesPtr());
       uint16 nbi = reader.readU2();
       for (uint16 i = 0; i < nbi; ++i) {
         uint16 inner = reader.readU2();
@@ -969,7 +969,7 @@
     return (ArrayObject*)vm->upcalls->classArrayClass->doNew(0, vm);
   } else {
     UserConstantPool* ctp = classDef->getConstantPool();
-    Reader reader(exceptionAtt, classDef->getBytes());
+    Reader reader(exceptionAtt, classDef->getBytesPtr());
     uint16 nbe = reader.readU2();
     res = (ArrayObject*)vm->upcalls->classArrayClass->doNew(nbe, vm);
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue Jul 21 02:38:09 2009
@@ -687,6 +687,10 @@
     return bytes;
   }
   
+  ArrayUInt8** getBytesPtr() {
+    return &bytes;
+  }
+  
   /// resolveInnerOuterClasses - Resolve the inner/outer information.
   ///
   void resolveInnerOuterClasses();

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaConstantPool.cpp Tue Jul 21 02:38:09 2009
@@ -187,7 +187,7 @@
   }
   
   if (!ctpRes[entry]) {
-    Reader reader(classDef->bytes, ctpDef[entry]);
+    Reader reader(&(classDef->bytes), ctpDef[entry]);
     uint32 len = reader.readU2();
     uint16* buf = (uint16*)alloca(len * sizeof(uint16));
     uint32 n = 0;

Modified: vmkit/trunk/lib/JnJVM/VMCore/Reader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Reader.h?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Reader.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Reader.h Tue Jul 21 02:38:09 2009
@@ -24,12 +24,14 @@
 
 class Reader {
 public:
-  ArrayUInt8* bytes;
+  // bytes - Pointer to a reference array. The array is not manipulated directly
+  // in order to support copying GC.
+  ArrayUInt8** bytes;
   uint32 min;
   uint32 cursor;
   uint32 max;
 
-  Reader(Attribut* attr, ArrayUInt8* bytes) {
+  Reader(Attribut* attr, ArrayUInt8** bytes) {
     this->bytes = bytes;
     this->cursor = attr->start;
     this->min = attr->start;
@@ -82,11 +84,11 @@
                              const char* filename);
   
   uint8 readU1() {
-    return bytes->elements[cursor++];
+    return (*bytes)->elements[cursor++];
   }
   
   sint8 readS1() {
-    return bytes->elements[cursor++];
+    return (*bytes)->elements[cursor++];
   }
   
   uint16 readU2() {
@@ -119,8 +121,8 @@
     return tmp | ((sint64)(readS8()));
   }
 
-  Reader(ArrayUInt8* array, uint32 start = 0, uint32 end = 0) {
-    if (!end) end = array->size;
+  Reader(ArrayUInt8** array, uint32 start = 0, uint32 end = 0) {
+    if (!end) end = (*array)->size;
     this->bytes = array;
     this->cursor = start;
     this->min = start;

Modified: vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp?rev=76544&r1=76543&r2=76544&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Zip.cpp Tue Jul 21 02:38:09 2009
@@ -73,7 +73,7 @@
   sint32 minOffs = 0;
   sint32 st = END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4;
   
-  Reader reader(bytes);
+  Reader reader(&bytes);
   curOffs = reader.max;
   if (curOffs >= (65535 + END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4)) {
     minOffs = curOffs - (65535 + END_CENTRAL_DIRECTORY_FILE_HEADER_SIZE + 4);
@@ -103,8 +103,8 @@
     if (searchPos >= st) {
       sint32 searchPtr = temp + (searchPos - st);
       while (searchPtr > temp) {
-        if (reader.bytes->elements[searchPtr] == 'P' && 
-          !(memcmp(&(reader.bytes->elements[searchPtr]), HDR_ENDCENTRAL, 4))) {
+        if ((*(reader.bytes))->elements[searchPtr] == 'P' && 
+          !(memcmp(&((*(reader.bytes))->elements[searchPtr]), HDR_ENDCENTRAL, 4))) {
           sint32 offset = searchPtr + 4 + E_OFFSET_START_CENTRAL_DIRECTORY;
           reader.cursor = offset;
           this->ofscd = readEndianDep4(reader);
@@ -119,11 +119,11 @@
 void ZipArchive::addFiles() {
   sint32 temp = ofscd;
   
-  Reader reader(bytes);
+  Reader reader(&bytes);
   reader.cursor = temp;
 
   while (true) {
-    if (memcmp(&(reader.bytes->elements[temp]), HDR_CENTRAL, 4)) return;
+    if (memcmp(&((*(reader.bytes))->elements[temp]), HDR_CENTRAL, 4)) return;
     ZipFile* ptr = new(allocator, "ZipFile") ZipFile();
     reader.cursor = temp + 4 + C_COMPRESSION_METHOD;
     ptr->compressionMethod = readEndianDep2(reader);
@@ -147,7 +147,8 @@
 
     ptr->filename = (char*)allocator.Allocate(ptr->filenameLength + 1,
                                               "Zip file name");
-    memcpy(ptr->filename, &(reader.bytes->elements[temp]), ptr->filenameLength);
+    memcpy(ptr->filename, &((*(reader.bytes))->elements[temp]),
+           ptr->filenameLength);
     ptr->filename[ptr->filenameLength] = 0;
 
     if (ptr->filename[ptr->filenameLength - 1] != PATH_SEPARATOR) {
@@ -166,10 +167,10 @@
   char* ptr = (char*)array->elements;
   uint32 temp = 0;
 
-  Reader reader(bytes);
+  Reader reader(&bytes);
   reader.cursor = file->rolh;
   
-  if (!(memcmp(&(reader.bytes->elements[file->rolh]), HDR_LOCAL, 4))) {
+  if (!(memcmp(&((*(reader.bytes))->elements[file->rolh]), HDR_LOCAL, 4))) {
     reader.cursor += 4;
     temp = reader.cursor;
     reader.cursor += L_FILENAME_LENGTH;
@@ -180,7 +181,7 @@
       temp + extraFieldLength + filenameLength + LOCAL_FILE_HEADER_SIZE;
 
     if (file->compressionMethod == ZIP_STORE) {
-      memcpy(ptr, &(reader.bytes->elements[reader.cursor]), file->ucsize);
+      memcpy(ptr, &((*(reader.bytes))->elements[reader.cursor]), file->ucsize);
       return 1;
     } else if (file->compressionMethod == ZIP_DEFLATE) {
       z_stream stre;
@@ -200,7 +201,7 @@
 
       while (bytesLeft) {
         uint32 size = 0;
-        stre.next_in = &(reader.bytes->elements[reader.cursor]);
+        stre.next_in = &((*(reader.bytes))->elements[reader.cursor]);
         if (bytesLeft > 1024) size = 1024;
         else size = bytesLeft;
 





More information about the vmkit-commits mailing list