< prev index next >
src/share/vm/classfile/javaClasses.cpp
Print this page
@@ -50,10 +50,14 @@
#include "runtime/safepoint.hpp"
#include "runtime/thread.inline.hpp"
#include "runtime/vframe.hpp"
#include "utilities/preserveException.hpp"
+#if INCLUDE_ALL_GCS
+#include "gc_implementation/shenandoah/shenandoahBarrierSet.hpp"
+#endif
+
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
#define INJECTED_FIELD_COMPUTE_OFFSET(klass, name, signature, may_be_java) \
klass::_##name##_offset = JavaClasses::compute_injected_offset(JavaClasses::klass##_##name##_enum);
@@ -1206,15 +1210,22 @@
}
oop java_lang_Throwable::unassigned_stacktrace() {
InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::Throwable_klass());
address addr = ik->static_field_addr(static_unassigned_stacktrace_offset);
+ oop result;
if (UseCompressedOops) {
- return oopDesc::load_decode_heap_oop((narrowOop *)addr);
+ result = oopDesc::load_decode_heap_oop((narrowOop *)addr);
} else {
- return oopDesc::load_decode_heap_oop((oop*)addr);
+ result = oopDesc::load_decode_heap_oop((oop*)addr);
+ }
+#if INCLUDE_ALL_GCS
+ if (UseShenandoahGC) {
+ result = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(result);
}
+#endif
+ return result;
}
oop java_lang_Throwable::backtrace(oop throwable) {
return throwable->obj_field_acquire(backtrace_offset);
}
@@ -2646,15 +2657,22 @@
}
oop java_lang_ref_Reference::pending_list_lock() {
InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::Reference_klass());
address addr = ik->static_field_addr(static_lock_offset);
+ oop result;
if (UseCompressedOops) {
- return oopDesc::load_decode_heap_oop((narrowOop *)addr);
+ result = oopDesc::load_decode_heap_oop((narrowOop *)addr);
} else {
- return oopDesc::load_decode_heap_oop((oop*)addr);
+ result = oopDesc::load_decode_heap_oop((oop*)addr);
+ }
+#if INCLUDE_ALL_GCS
+ if (UseShenandoahGC) {
+ result = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(result);
}
+#endif
+ return result;
}
HeapWord *java_lang_ref_Reference::pending_list_addr() {
InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::Reference_klass());
address addr = ik->static_field_addr(static_pending_offset);
@@ -2662,15 +2680,22 @@
return (HeapWord*)addr;
}
oop java_lang_ref_Reference::pending_list() {
char *addr = (char *)pending_list_addr();
+ oop result;
if (UseCompressedOops) {
- return oopDesc::load_decode_heap_oop((narrowOop *)addr);
+ result = oopDesc::load_decode_heap_oop((narrowOop *)addr);
} else {
- return oopDesc::load_decode_heap_oop((oop*)addr);
+ result = oopDesc::load_decode_heap_oop((oop*)addr);
+ }
+#if INCLUDE_ALL_GCS
+ if (UseShenandoahGC) {
+ result = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(result);
}
+#endif
+ return result;
}
// Support for java_lang_ref_SoftReference
< prev index next >