@@ -2097,14 +2097,14 @@ static jobject read_field_value(Handle obj, long displacement, jchar type_char,
20972097 // folding Unsafe.get* methods with volatile semantics.
20982098
20992099 switch (basic_type) {
2100- case T_BOOLEAN: value = obj->bool_field_acquire (displacement); break ;
2101- case T_BYTE: value = obj->byte_field_acquire (displacement); break ;
2102- case T_SHORT: value = obj->short_field_acquire (displacement); break ;
2103- case T_CHAR: value = obj->char_field_acquire (displacement); break ;
2100+ case T_BOOLEAN: value = HeapAccess<MO_SEQ_CST>:: load ( obj->field_addr_of_type <jboolean> (displacement)); break ;
2101+ case T_BYTE: value = HeapAccess<MO_SEQ_CST>:: load ( obj->field_addr_of_type <jbyte> (displacement)); break ;
2102+ case T_SHORT: value = HeapAccess<MO_SEQ_CST>:: load ( obj->field_addr_of_type <jshort> (displacement)); break ;
2103+ case T_CHAR: value = HeapAccess<MO_SEQ_CST>:: load ( obj->field_addr_of_type <jchar> (displacement)); break ;
21042104 case T_FLOAT:
2105- case T_INT: value = obj->int_field_acquire (displacement); break ;
2105+ case T_INT: value = HeapAccess<MO_SEQ_CST>:: load ( obj->field_addr_of_type <jint> (displacement)); break ;
21062106 case T_DOUBLE:
2107- case T_LONG: value = obj->long_field_acquire (displacement); break ;
2107+ case T_LONG: value = HeapAccess<MO_SEQ_CST>:: load ( obj->field_addr_of_type <jlong> (displacement)); break ;
21082108
21092109 case T_OBJECT: {
21102110 if (displacement == java_lang_Class::component_mirror_offset () && java_lang_Class::is_instance (obj ()) &&
@@ -2114,7 +2114,9 @@ static jobject read_field_value(Handle obj, long displacement, jchar type_char,
21142114 return JVMCIENV->get_jobject (JVMCIENV->get_JavaConstant_NULL_POINTER ());
21152115 }
21162116
2117- oop value = obj->obj_field_acquire (displacement);
2117+ // Perform the read including any barriers required to make the reference strongly reachable
2118+ // since it will be wrapped as a JavaConstant.
2119+ oop value = obj->obj_field_access <MO_SEQ_CST | ON_UNKNOWN_OOP_REF>(displacement);
21182120
21192121 if (value == nullptr ) {
21202122 return JVMCIENV->get_jobject (JVMCIENV->get_JavaConstant_NULL_POINTER ());
0 commit comments