[vmkit-commits] [vmkit] r198231 - Compute my own field offsets
Gael Thomas
gael.thomas at lip6.fr
Mon Dec 30 10:09:53 PST 2013
Author: gthomas
Date: Mon Dec 30 12:09:53 2013
New Revision: 198231
URL: http://llvm.org/viewvc/llvm-project?rev=198231&view=rev
Log:
Compute my own field offsets
Modified:
vmkit/branches/mcjit/lib/j3/vm/j3class.cc
Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=198231&r1=198230&r2=198231&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Mon Dec 30 12:09:53 2013
@@ -443,13 +443,14 @@ void J3Class::doResolve(J3Field* hiddenF
if(super() == this) {
virtualBody[0] = loader()->vm()->typeJ3Object;
} else {
- super()->resolve();
virtualBody[0] = super()->llvmType()->getContainedType(0);
}
llvm::cast<llvm::StructType>(llvmType()->getContainedType(0))->setBody(virtualBody);
- _structSize = loader()->vm()->dataLayout()->getTypeAllocSize(llvmType()->getContainedType(0));
+ uint64_t kkk = loader()->vm()->dataLayout()->getTypeAllocSize(llvmType()->getContainedType(0));
+ if(kkk != structSize())
+ J3::internalError(L"should not happen");
staticLayout._vt = J3VirtualTable::create(&staticLayout);
@@ -588,11 +589,21 @@ void J3Class::readClassBytes(std::vector
staticBody.push_back(loader()->vm()->typeJ3Object);
virtualBody->push_back(0);
+ if(super() == this)
+ _structSize = sizeof(J3Object);
+ else {
+ super()->resolve();
+ _structSize = super()->structSize();
+ }
+
fillFields(&staticBody, virtualBody, pFields3, i3);
fillFields(&staticBody, virtualBody, pFields2, i2);
fillFields(&staticBody, virtualBody, pFields1, i1);
fillFields(&staticBody, virtualBody, pFields0, i0);
+ _structSize = ((_structSize - 1) & -sizeof(uintptr_t)) + sizeof(uintptr_t);
+ staticLayout._structSize = ((staticLayout._structSize - 1) & -sizeof(uintptr_t)) + sizeof(uintptr_t);
+
staticLLVMType()->getContainedType(0);
llvm::cast<llvm::StructType>(staticLLVMType()->getContainedType(0))->setBody(staticBody);
@@ -654,7 +665,8 @@ void J3Class::fillFields(std::vector<llv
virtualBody->push_back(cur->type()->llvmType());
}
layout->fields[layout->nbFields++] = *fields[i];
-
+ cur->_offset = layout->structSize();
+ layout->_structSize += 1 << fields[i]->type()->logSize();
}
}
More information about the vmkit-commits
mailing list