use of com.ibm.j9ddr.vm29.types.U32 in project openj9 by eclipse.
the class RomClassWalker method allSlotsInMethodDebugInfoDo.
long allSlotsInMethodDebugInfoDo(U32Pointer cursor) throws CorruptDataException {
J9MethodDebugInfoPointer methodDebugInfo;
U8Pointer currentLineNumberPtr;
/* if data is out of line, then the size of the data inline in the method is a single SRP in sizeof(U_32 increments), currently assuming J9SRP is U_32 aligned*/
long inlineSize = SelfRelativePointer.SIZEOF / U32.SIZEOF;
long sectionSizeBytes = 0;
boolean inlineDebugExtension = (1 == (cursor.at(0).intValue() & 1));
/* check for low tag to indicate inline or out of line debug information */
if (inlineDebugExtension) {
methodDebugInfo = J9MethodDebugInfoPointer.cast(cursor);
/* set the inline size to stored size in terms of U_32
* NOTE: stored size is aligned on a U32
* tag bit will be dropped by the '/' operation */
inlineSize = cursor.at(0).intValue() / U32.SIZEOF;
sectionSizeBytes = inlineSize * U32.SIZEOF;
} else {
methodDebugInfo = J9MethodDebugInfoPointer.cast(SelfRelativePointer.cast(cursor).get());
if (AlgorithmVersion.getVersionOf("VM_LINE_NUMBER_TABLE_VERSION").getAlgorithmVersion() < 1) {
sectionSizeBytes = J9MethodDebugInfo.SIZEOF + (J9MethodDebugInfoHelper.getLineNumberCount(methodDebugInfo).intValue() * U32.SIZEOF);
} else {
sectionSizeBytes = J9MethodDebugInfo.SIZEOF + J9MethodDebugInfoHelper.getLineNumberCompressedSize(methodDebugInfo).intValue();
/* When out of line debug information, align on U_16 */
sectionSizeBytes = (sectionSizeBytes + U16.SIZEOF - 1) & ~(U16.SIZEOF - 1);
}
}
if (!inlineDebugExtension) {
if (inlineSize == 1) {
classWalkerCallback.addSlot(clazz, SlotType.J9_SRP, cursor, "SRP to DebugInfo");
classWalkerCallback.addSection(clazz, cursor, inlineSize * U32.SIZEOF, "methodDebugInfo out of line", true);
}
}
classWalkerCallback.addSlot(clazz, SlotType.J9_SRP, methodDebugInfo.srpToVarInfoEA(), "SizeOfDebugInfo(low tagged)");
if (AlgorithmVersion.getVersionOf("VM_LINE_NUMBER_TABLE_VERSION").getAlgorithmVersion() < 1) {
classWalkerCallback.addSlot(clazz, SlotType.J9_U32, methodDebugInfo.lineNumberCountEA(), "lineNumberCount");
classWalkerCallback.addSlot(clazz, SlotType.J9_U32, methodDebugInfo.varInfoCountEA(), "varInfoCount");
J9LineNumberPointer lineNumberPtr = J9MethodDebugInfoHelper.getLineNumberTableForROMClass(methodDebugInfo);
if (lineNumberPtr.notNull()) {
for (int j = 0; j < methodDebugInfo.lineNumberCount().intValue(); j++, lineNumberPtr = lineNumberPtr.add(1)) {
// FIXME : Silo
// classWalkerCallback.addSlot(clazz, SlotType.J9_U16, lineNumberPtr.offsetLocationEA(), "offsetLocation");
classWalkerCallback.addSlot(clazz, SlotType.J9_U16, lineNumberPtr.lineNumberEA(), "lineNumber");
}
}
} else {
classWalkerCallback.addSlot(clazz, SlotType.J9_U32, methodDebugInfo.lineNumberCountEA(), "lineNumberCount(encoded)");
classWalkerCallback.addSlot(clazz, SlotType.J9_U32, methodDebugInfo.varInfoCountEA(), "varInfoCount");
if (methodDebugInfo.lineNumberCount().allBitsIn(1)) {
classWalkerCallback.addSlot(clazz, SlotType.J9_U32, U32Pointer.cast(methodDebugInfo.add(1)), "compressed line number size");
}
currentLineNumberPtr = J9MethodDebugInfoHelper.getCompressedLineNumberTableForROMClassV1(methodDebugInfo);
if (currentLineNumberPtr.notNull()) {
for (int j = 0; j < J9MethodDebugInfoHelper.getLineNumberCompressedSize(methodDebugInfo).intValue(); j++) {
classWalkerCallback.addSlot(clazz, SlotType.J9_U8, currentLineNumberPtr, "pc, lineNumber compressed");
currentLineNumberPtr = currentLineNumberPtr.add(1);
}
}
}
U8Pointer variableTable = OptInfo.getV1VariableTableForMethodDebugInfo(methodDebugInfo);
if (variableTable.notNull()) {
LocalVariableTableIterator variableInfoValuesIterator = LocalVariableTableIterator.localVariableTableIteratorFor(methodDebugInfo);
U8Pointer start = variableInfoValuesIterator.getLocalVariableTablePtr();
while (variableInfoValuesIterator.hasNext()) {
LocalVariableTable values = variableInfoValuesIterator.next();
// Need to walk the name and signature to add them to the UTF8 section
classWalkerCallback.addSlot(clazz, SlotType.J9_UTF8, values.getName(), "name");
classWalkerCallback.addSlot(clazz, SlotType.J9_UTF8, values.getSignature(), "getSignature");
if (values.getGenericSignature().notNull()) {
classWalkerCallback.addSlot(clazz, SlotType.J9_UTF8, values.getGenericSignature(), "getGenericSignature");
}
}
U8Pointer end = variableInfoValuesIterator.getLocalVariableTablePtr();
int localVariableSectionSize = end.sub(start).intValue();
for (int j = 0; j < localVariableSectionSize; j++) {
classWalkerCallback.addSlot(clazz, SlotType.J9_U8, start, "variableInfo compressed");
start = start.add(1);
}
classWalkerCallback.addSection(clazz, variableTable, localVariableSectionSize, "variableInfo" + (inlineDebugExtension ? " Inline" : ""), inlineDebugExtension);
}
classWalkerCallback.addSection(clazz, methodDebugInfo, sectionSizeBytes, "methodDebugInfo" + (inlineDebugExtension ? " Inline" : ""), inlineDebugExtension);
return inlineSize;
}
use of com.ibm.j9ddr.vm29.types.U32 in project openj9 by eclipse.
the class RomClassWalker method allSlotsInIntermediateClassDataDo.
void allSlotsInIntermediateClassDataDo() throws CorruptDataException {
U32 count = romClass.intermediateClassDataLength();
if (count.gt(0)) {
U8Pointer cursor = romClass.intermediateClassData();
String j9xHelp = "!j9x " + cursor.getHexAddress() + "," + count.getHexValue();
classWalkerCallback.addSlot(clazz, SlotType.J9_IntermediateClassData, cursor, "intermediateClassData", j9xHelp);
classWalkerCallback.addSection(clazz, cursor, count.longValue(), "intermediateClassDataSection", true);
}
}
use of com.ibm.j9ddr.vm29.types.U32 in project openj9 by eclipse.
the class RamClassWalker method allSlotsInRAMStaticsDo.
private void allSlotsInRAMStaticsDo() throws CorruptDataException {
if (ramClass.ramStatics().isNull()) {
return;
}
Iterator<?> ofoIterator = J9ObjectFieldOffsetIterator.J9ObjectFieldOffsetIteratorFor(ramClass, J9ClassHelper.superclass(ramClass), new U32(J9ROMFieldOffsetWalkState.J9VM_FIELD_OFFSET_WALK_INCLUDE_STATIC));
J9ObjectFieldOffset fields = null;
while (ofoIterator.hasNext()) {
fields = (J9ObjectFieldOffset) ofoIterator.next();
J9ROMFieldShapePointer field = fields.getField();
String info = fields.getName();
U32 modifiers = field.modifiers();
UDATAPointer fieldAddress = ramClass.ramStatics().addOffset(fields.getOffsetOrAddress());
String additionalInfo = modifiers.anyBitsIn(J9FieldFlagObject) ? "!j9object" : "";
if (modifiers.anyBitsIn(J9FieldSizeDouble)) {
classWalkerCallback.addSlot(clazz, SlotType.J9_I64, I64Pointer.cast(fieldAddress), info, additionalInfo);
} else {
classWalkerCallback.addSlot(clazz, SlotType.J9_UDATA, fieldAddress, info, additionalInfo);
}
}
U32 staticSlotCount = ramClass.romClass().objectStaticCount().add(ramClass.romClass().singleScalarStaticCount());
if (J9BuildFlags.env_data64) {
staticSlotCount = staticSlotCount.add(ramClass.romClass().doubleScalarStaticCount());
} else {
staticSlotCount = staticSlotCount.add(1).bitAnd(~1L).add(ramClass.romClass().doubleScalarStaticCount().mult(2));
}
UDATA size = Scalar.convertSlotsToBytes(new UDATA(staticSlotCount));
classWalkerCallback.addSection(clazz, ramClass.ramStatics(), size.longValue(), "Ram static", false);
}
use of com.ibm.j9ddr.vm29.types.U32 in project openj9 by eclipse.
the class RomClassWalker method allSlotsInCPShapeDescriptionDo.
void allSlotsInCPShapeDescriptionDo() throws CorruptDataException {
int i, count;
U32Pointer cpShapeDescription = romClass.cpShapeDescription();
final int romConstantPoolCount = romClass.romConstantPoolCount().intValue();
count = (romConstantPoolCount + (U32.SIZEOF * 2) - 1) / (U32.SIZEOF * 2);
classWalkerCallback.addSection(clazz, cpShapeDescription, count * U32.SIZEOF, "cpShapeDescription", true);
for (i = 0; i < count; i++) {
classWalkerCallback.addSlot(clazz, SlotType.J9_U32, cpShapeDescription.add(i), "cpShapeDescriptionU32");
// callbacks.slotCallback(romClass, J9ROM_U32, &cpShapeDescription[i], "cpShapeDescriptionU32", userData);
}
}
use of com.ibm.j9ddr.vm29.types.U32 in project openj9 by eclipse.
the class ByteCodeDumper method _NEXT_BE_U32.
private static U32 _NEXT_BE_U32() throws CorruptDataException {
U32 a = new U32(bcIndex.at(0)).leftShift(24);
U32 b = new U32(bcIndex.at(1)).leftShift(16);
U32 c = new U32(bcIndex.at(2)).leftShift(8);
U32 d = new U32(bcIndex.at(3));
U32 value = a.bitOr(b).bitOr(c).bitOr(d);
bcIndex = bcIndex.add(4);
return value;
}
Aggregations