diff -r fa378e035b81 -r 7c3891b9f1e0 src/hotspot/share/classfile/javaClasses.cpp --- a/src/hotspot/share/classfile/javaClasses.cpp Fri Aug 24 09:38:11 2018 +0200 +++ b/src/hotspot/share/classfile/javaClasses.cpp Fri Jul 06 16:04:19 2018 +0200 @@ -1271,6 +1271,13 @@ return size; } +int java_lang_Class::oop_size_raw(oop java_class) { + assert(_oop_size_offset != 0, "must be set"); + int size = java_class->int_field_raw(_oop_size_offset); + assert(size > 0, "Oop size must be greater than zero, not %d", size); + return size; +} + void java_lang_Class::set_oop_size(HeapWord* java_class, int size) { assert(_oop_size_offset != 0, "must be set"); assert(size > 0, "Oop size must be greater than zero, not %d", size); @@ -1281,6 +1288,12 @@ assert(_static_oop_field_count_offset != 0, "must be set"); return java_class->int_field(_static_oop_field_count_offset); } + +int java_lang_Class::static_oop_field_count_raw(oop java_class) { + assert(_static_oop_field_count_offset != 0, "must be set"); + return java_class->int_field_raw(_static_oop_field_count_offset); +} + void java_lang_Class::set_static_oop_field_count(oop java_class, int size) { assert(_static_oop_field_count_offset != 0, "must be set"); java_class->int_field_put(_static_oop_field_count_offset, size); @@ -1370,6 +1383,14 @@ return k; } +Klass* java_lang_Class::as_Klass_raw(oop java_class) { + //%note memory_2 + assert(java_lang_Class::is_instance(java_class), "must be a Class object"); + Klass* k = ((Klass*)java_class->metadata_field_raw(_klass_offset)); + assert(k == NULL || k->is_klass(), "type check"); + return k; +} + void java_lang_Class::set_klass(oop java_class, Klass* klass) { assert(java_lang_Class::is_instance(java_class), "must be a Class object"); @@ -4007,6 +4028,11 @@ return HeapAccess<>::load_at(loader, _loader_data_offset); } +ClassLoaderData* java_lang_ClassLoader::loader_data_raw(oop loader) { + assert(loader != NULL && oopDesc::is_oop(loader), "loader must be oop"); + return RawAccess<>::load_at(loader, _loader_data_offset); +} + ClassLoaderData* java_lang_ClassLoader::cmpxchg_loader_data(ClassLoaderData* new_data, oop loader, ClassLoaderData* expected_data) { assert(loader != NULL && oopDesc::is_oop(loader), "loader must be oop"); return HeapAccess<>::atomic_cmpxchg_at(new_data, loader, _loader_data_offset, expected_data);