Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,11 @@ public abstract class DebugInfoBase {
/**
* Bit mask used for tagging oops.
*/
private int reservedBitsMask;
private int reservedHubBitsMask;
/**
* Number of low order bits used for tagging oops.
*/
private int numReservedBits;
private int numReservedHubBits;
/**
* Number of bytes used to store an oop reference.
*/
Expand Down Expand Up @@ -211,8 +211,8 @@ public abstract class DebugInfoBase {
public DebugInfoBase(ByteOrder byteOrder) {
this.byteOrder = byteOrder;
this.useHeapBase = true;
this.reservedBitsMask = 0;
this.numReservedBits = 0;
this.reservedHubBitsMask = 0;
this.numReservedHubBits = 0;
this.compressionShift = 0;
this.referenceSize = 0;
this.pointerSize = 0;
Expand Down Expand Up @@ -250,12 +250,12 @@ public void installDebugInfo(DebugInfoProvider debugInfoProvider) {
/*
* Save count of low order tag bits that may appear in references.
*/
reservedBitsMask = debugInfoProvider.reservedBitsMask();
reservedHubBitsMask = debugInfoProvider.reservedHubBitsMask();

/* Mask must be contiguous from bit 0. */
assert ((reservedBitsMask + 1) & reservedBitsMask) == 0;
assert ((reservedHubBitsMask + 1) & reservedHubBitsMask) == 0;

numReservedBits = Integer.bitCount(reservedBitsMask);
numReservedHubBits = Integer.bitCount(reservedHubBitsMask);

/* Save amount we need to shift references by when loading from an object field. */
compressionShift = debugInfoProvider.compressionShift();
Expand Down Expand Up @@ -705,12 +705,12 @@ public boolean useHeapBase() {
return useHeapBase;
}

public int reservedBitsMask() {
return reservedBitsMask;
public int reservedHubBitsMask() {
return reservedHubBitsMask;
}

public int numReservedBits() {
return numReservedBits;
public int numReservedHubBits() {
return numReservedHubBits;
}

public int compressionShift() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public interface DebugInfoProvider {
/**
* Mask selecting low order bits used for tagging oops.
*/
int reservedBitsMask();
int reservedHubBitsMask();

/**
* Number of bytes used to store an oop reference.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2132,8 +2132,8 @@ public int writeCompressedOopConversionExpression(boolean isHub, byte[] buffer,
*/

boolean useHeapBase = dwarfSections.useHeapBase();
int reservedBitsMask = dwarfSections.reservedBitsMask();
int numReservedBits = dwarfSections.numReservedBits();
int reservedHubBitsMask = dwarfSections.reservedHubBitsMask();
int numReservedHubBits = dwarfSections.numReservedHubBits();
int compressionShift = dwarfSections.compressionShift();
int numAlignmentBits = dwarfSections.numAlignmentBits();

Expand All @@ -2143,12 +2143,12 @@ public int writeCompressedOopConversionExpression(boolean isHub, byte[] buffer,
* The required expression will be one of these paths:
*
* push object address ................................ (1 byte) ..... [offset] ............
* IF reservedBitsMask != 0 ................................................................
* . push reservedBitsMask ............................ (1 byte) ..... [offset, mask] ......
* IF reservedHubBitsMask != 0 .............................................................
* . push reservedHubBitsMask.......................... (1 byte) ..... [offset, mask] ......
* . NOT .............................................. (1 byte) ..... [offset, ~mask] .....
* . AND .............................................. (1 byte) ..... [offset] ............
* . IF numReservedBits == numAlignmentBits && compressionShift == 0 .......................
* ... push numReservedBits ........................... (1 byte) ..... [offset, right shift]
* . IF numReservedHubBits == numAlignmentBits && compressionShift == 0 ....................
* ... push numReservedHubBits ........................ (1 byte) ..... [offset, right shift]
* ... LSHR ........................................... (1 byte) ..... [offset] ............
* ... IF compressionShift != numAlignmentBits .............................................
* ..... push numAlignmentBits - compressionShift ..... (1 byte) ..... [offset, left shift]
Expand Down Expand Up @@ -2176,13 +2176,13 @@ public int writeCompressedOopConversionExpression(boolean isHub, byte[] buffer,
pos = writeULEB(0, buffer, pos);
int exprStart = pos;
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_push_object_address, buffer, pos);
if (isHub && reservedBitsMask != 0) {
if (numReservedBits == numAlignmentBits && compressionShift == 0) {
pos = writeExprOpcodeLiteral(reservedBitsMask, buffer, pos);
if (isHub && reservedHubBitsMask != 0) {
if (numReservedHubBits == numAlignmentBits && compressionShift == 0) {
pos = writeExprOpcodeLiteral(reservedHubBitsMask, buffer, pos);
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_not, buffer, pos);
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_and, buffer, pos);
} else {
pos = writeExprOpcodeLiteral(numReservedBits, buffer, pos);
pos = writeExprOpcodeLiteral(numReservedHubBits, buffer, pos);
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_shr, buffer, pos);
if (compressionShift != numAlignmentBits) {
pos = writeExprOpcodeLiteral(numAlignmentBits - compressionShift, buffer, pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import com.oracle.svm.core.genscavenge.remset.BrickTable;
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
import com.oracle.svm.core.graal.RuntimeCompilation;
import com.oracle.svm.core.heap.Heap;
import com.oracle.svm.core.heap.ObjectHeader;
import com.oracle.svm.core.heap.ObjectVisitor;
import com.oracle.svm.core.log.Log;
Expand Down Expand Up @@ -179,7 +180,8 @@ public Object promoteAlignedObject(Object original, AlignedHeapChunk.AlignedHead
return space.copyAlignedObject(original, originalSpace);
}
assert originalSpace == space;
Word header = ObjectHeader.readHeaderFromObject(original);
ObjectHeader oh = Heap.getHeap().getObjectHeader();
Word header = oh.readHeaderFromObject(original);
if (ObjectHeaderImpl.isMarkedHeader(header)) {
return original;
}
Expand All @@ -193,7 +195,7 @@ public Object promoteAlignedObject(Object original, AlignedHeapChunk.AlignedHead
* object's size. The easiest way to handle this is to copy the object.
*/
result = space.copyAlignedObject(original, originalSpace);
assert !ObjectHeaderImpl.hasIdentityHashFromAddressInline(ObjectHeader.readHeaderFromObject(result));
assert !ObjectHeaderImpl.hasIdentityHashFromAddressInline(oh.readHeaderFromObject(result));
}
ObjectHeaderImpl.setMarked(result);
markStack.push(result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import com.oracle.svm.core.AlwaysInline;
import com.oracle.svm.core.Uninterruptible;
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
import com.oracle.svm.core.heap.ObjectHeader;
import com.oracle.svm.core.heap.ObjectReferenceVisitor;
import com.oracle.svm.core.heap.ReferenceAccess;
import com.oracle.svm.core.hub.LayoutEncoding;
Expand Down Expand Up @@ -91,7 +90,7 @@ public boolean visitObjectReferenceInline(Pointer objRef, int innerOffset, boole
// This is the most expensive check as it accesses the heap fairly randomly, which results
// in a lot of cache misses.
ObjectHeaderImpl ohi = ObjectHeaderImpl.getObjectHeaderImpl();
Word header = ObjectHeader.readHeaderFromPointer(p);
Word header = ohi.readHeaderFromPointer(p);
if (GCImpl.getGCImpl().isCompleteCollection() || !RememberedSet.get().hasRememberedSet(header)) {

if (ObjectHeaderImpl.isForwardedHeader(header)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,7 @@ public int maxInvocationCount() {
@RestrictHeapAccess(access = RestrictHeapAccess.Access.NO_ALLOCATION, reason = "Must not allocate while printing diagnostics.")
public void printDiagnostics(Log log, ErrorContext context, int maxDiagnosticLevel, int invocationCount) {
log.string("Heap settings and statistics:").indent(true);
log.string("Reserved object header bits: 0b").number(Heap.getHeap().getObjectHeader().getReservedBitsMask(), 2, false).newline();
log.string("Reserved hub pointer bits: 0b").number(Heap.getHeap().getObjectHeader().getReservedHubBitsMask(), 2, false).newline();

log.string("Aligned chunk size: ").unsigned(HeapParameters.getAlignedHeapChunkSize()).newline();
log.string("Large array threshold: ").unsigned(HeapParameters.getLargeArrayThreshold()).newline();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import com.oracle.svm.core.genscavenge.AlignedHeapChunk.AlignedHeader;
import com.oracle.svm.core.genscavenge.UnalignedHeapChunk.UnalignedHeader;
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
import com.oracle.svm.core.heap.Heap;
import com.oracle.svm.core.heap.ObjectHeader;
import com.oracle.svm.core.heap.ObjectReferenceVisitor;
import com.oracle.svm.core.heap.ObjectVisitor;
Expand Down Expand Up @@ -241,7 +242,8 @@ private static boolean verifyObject(Object obj, AlignedHeader aChunk, UnalignedH
return false;
}

Word header = ObjectHeader.readHeaderFromPointer(ptr);
ObjectHeader oh = Heap.getHeap().getObjectHeader();
Word header = oh.readHeaderFromPointer(ptr);
if (ObjectHeaderImpl.isProducedHeapChunkZapped(header) || ObjectHeaderImpl.isConsumedHeapChunkZapped(header)) {
Log.log().string("Object ").zhex(ptr).string(" has a zapped header: ").zhex(header).newline();
return false;
Expand Down Expand Up @@ -352,7 +354,8 @@ private static boolean verifyReference(Object parentObject, Pointer reference, P
return false;
}

Word header = ObjectHeader.readHeaderFromPointer(referencedObject);
ObjectHeader oh = Heap.getHeap().getObjectHeader();
Word header = oh.readHeaderFromPointer(referencedObject);
if (!ObjectHeaderImpl.getObjectHeaderImpl().isEncodedObjectHeader(header)) {
Log.log().string("Object reference at ").zhex(reference).string(" does not point to a Java object or the object header of the Java object is invalid: ").zhex(referencedObject)
.string(". ");
Expand Down
Loading
Loading