< prev index next >
src/share/vm/runtime/stackValue.cpp
Print this page
@@ -100,12 +100,19 @@
// saved long to the int that the JVM wants.
value.noop = (narrowOop) *(julong*) value_addr;
} else {
value.noop = *(narrowOop*) value_addr;
}
- // Decode narrowoop and wrap a handle around the oop
- Handle h(oopDesc::decode_heap_oop(value.noop));
+ // Decode narrowoop
+ oop val = oopDesc::decode_heap_oop(value.noop);
+ // Deoptimization must make sure all oops have passed load barriers
+#if INCLUDE_ALL_GCS
+ if (UseShenandoahGC) {
+ val = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(val);
+ }
+#endif
+ Handle h(val); // Wrap a handle around the oop
return new StackValue(h);
}
#endif
case Location::oop: {
oop val = *(oop *)value_addr;
@@ -116,10 +123,16 @@
// The narrow_oop_base could be NULL or be the address
// of the page below heap. Use NULL value for both cases.
val = (oop)NULL;
}
#endif
+ // Deoptimization must make sure all oops have passed load barriers
+#if INCLUDE_ALL_GCS
+ if (UseShenandoahGC) {
+ val = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(val);
+ }
+#endif
Handle h(val); // Wrap a handle around the oop
return new StackValue(h);
}
case Location::addr: {
ShouldNotReachHere(); // both C1 and C2 now inline jsrs
< prev index next >