< prev index next >
src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java
Print this page
*** 107,123 ****
throw new IllegalArgumentException(String.valueOf(bits));
}
}
}
! private boolean verifyReadRawObject(Object expected, Constant base, long displacement, boolean compressed) {
! if (compressed == runtime.getConfig().useCompressedOops) {
! Object obj = asObject(base);
! if (obj != null) {
! assert expected == UNSAFE.getObject(obj, displacement) : "readUnsafeOop doesn't agree with unsafe.getObject";
! }
! }
if (base instanceof HotSpotMetaspaceConstant) {
MetaspaceWrapperObject metaspaceObject = HotSpotMetaspaceConstantImpl.getMetaspaceObject(base);
if (metaspaceObject instanceof HotSpotResolvedObjectTypeImpl) {
if (displacement == runtime.getConfig().classMirrorOffset) {
assert expected == ((HotSpotResolvedObjectTypeImpl) metaspaceObject).mirror();
--- 107,117 ----
throw new IllegalArgumentException(String.valueOf(bits));
}
}
}
! private boolean verifyReadRawObject(Object expected, Constant base, long displacement) {
if (base instanceof HotSpotMetaspaceConstant) {
MetaspaceWrapperObject metaspaceObject = HotSpotMetaspaceConstantImpl.getMetaspaceObject(base);
if (metaspaceObject instanceof HotSpotResolvedObjectTypeImpl) {
if (displacement == runtime.getConfig().classMirrorOffset) {
assert expected == ((HotSpotResolvedObjectTypeImpl) metaspaceObject).mirror();
*** 134,148 ****
Object base = asObject(baseConstant);
if (base == null) {
assert !compressed;
displacement += asRawPointer(baseConstant);
ret = UNSAFE.getUncompressedObject(displacement);
} else {
assert runtime.getConfig().useCompressedOops == compressed;
ret = UNSAFE.getObject(base, displacement);
}
- assert verifyReadRawObject(ret, baseConstant, initialDisplacement, compressed);
return ret;
}
/**
* Reads a value of this kind using a base address and a displacement. No bounds checking or
--- 128,142 ----
Object base = asObject(baseConstant);
if (base == null) {
assert !compressed;
displacement += asRawPointer(baseConstant);
ret = UNSAFE.getUncompressedObject(displacement);
+ assert verifyReadRawObject(ret, baseConstant, initialDisplacement);
} else {
assert runtime.getConfig().useCompressedOops == compressed;
ret = UNSAFE.getObject(base, displacement);
}
return ret;
}
/**
* Reads a value of this kind using a base address and a displacement. No bounds checking or
< prev index next >