[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