# HG changeset patch # User rkennke # Date 1444136690 -7200 # Node ID 29693376eaec7f8a9bfe1c082a23f46898300e91 # Parent 081cf5f88897f14b9546b7390082295843002915 Add some more runtime barriers. diff -r 081cf5f88897 -r 29693376eaec src/share/vm/classfile/javaClasses.cpp --- a/src/share/vm/classfile/javaClasses.cpp Sat Oct 03 13:51:17 2015 +0200 +++ b/src/share/vm/classfile/javaClasses.cpp Tue Oct 06 15:04:50 2015 +0200 @@ -3104,6 +3104,7 @@ ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) { assert(loader != NULL && loader->is_oop(), "loader must be oop"); + loader = oopDesc::bs()->resolve_and_maybe_copy_oop(loader); return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset); } diff -r 081cf5f88897 -r 29693376eaec src/share/vm/oops/instanceKlass.cpp --- a/src/share/vm/oops/instanceKlass.cpp Sat Oct 03 13:51:17 2015 +0200 +++ b/src/share/vm/oops/instanceKlass.cpp Tue Oct 06 15:04:50 2015 +0200 @@ -2258,7 +2258,7 @@ } address InstanceKlass::static_field_addr(int offset) { - return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + cast_from_oop(java_mirror())); + return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + cast_from_oop(oopDesc::bs()->resolve_and_maybe_copy_oop(java_mirror()))); } diff -r 081cf5f88897 -r 29693376eaec src/share/vm/prims/jvm.cpp --- a/src/share/vm/prims/jvm.cpp Sat Oct 03 13:51:17 2015 +0200 +++ b/src/share/vm/prims/jvm.cpp Tue Oct 06 15:04:50 2015 +0200 @@ -590,7 +590,7 @@ JVM_ENTRY(jobject, JVM_Clone(JNIEnv* env, jobject handle)) JVMWrapper("JVM_Clone"); - Handle obj(THREAD, JNIHandles::resolve_non_null(handle)); + Handle obj(THREAD, oopDesc::bs()->resolve_oop(JNIHandles::resolve_non_null(handle))); const KlassHandle klass (THREAD, obj->klass()); JvmtiVMObjectAllocEventCollector oam; @@ -631,6 +631,7 @@ // of oops. We know objects are aligned on a minimum of an jlong boundary. // The same is true of StubRoutines::object_copy and the various oop_copy // variants, and of the code generated by the inline_native_clone intrinsic. + assert(new_obj_oop == oopDesc::bs()->resolve_oop(new_obj_oop), "expect to-space copy"); assert(MinObjAlignmentInBytes >= BytesPerLong, "objects misaligned"); Copy::conjoint_jlongs_atomic((jlong*)obj(), (jlong*)new_obj_oop, (size_t)align_object_size(size) / HeapWordsPerLong); diff -r 081cf5f88897 -r 29693376eaec src/share/vm/runtime/basicLock.hpp --- a/src/share/vm/runtime/basicLock.hpp Sat Oct 03 13:51:17 2015 +0200 +++ b/src/share/vm/runtime/basicLock.hpp Tue Oct 06 15:04:50 2015 +0200 @@ -63,12 +63,10 @@ public: // Manipulation oop obj() const { - assert(_obj == oopDesc::bs()->resolve_and_maybe_copy_oop(_obj), "expect to-space copy"); return _obj; } void set_obj(oop obj) { _obj = obj; - assert(_obj == oopDesc::bs()->resolve_and_maybe_copy_oop(_obj), "expect to-space copy"); } BasicLock* lock() { return &_lock; } diff -r 081cf5f88897 -r 29693376eaec src/share/vm/runtime/handles.hpp --- a/src/share/vm/runtime/handles.hpp Sat Oct 03 13:51:17 2015 +0200 +++ b/src/share/vm/runtime/handles.hpp Tue Oct 06 15:04:50 2015 +0200 @@ -25,6 +25,7 @@ #ifndef SHARE_VM_RUNTIME_HANDLES_HPP #define SHARE_VM_RUNTIME_HANDLES_HPP +#include "gc/shared/barrierSet.hpp" #include "oops/oop.hpp" #include "oops/oopsHierarchy.hpp" @@ -82,8 +83,8 @@ // General access oop operator () () const { return obj(); } oop operator -> () const { return non_null_obj(); } - bool operator == (oop o) const { return obj() == o; } - bool operator == (const Handle& h) const { return obj() == h.obj(); } + bool operator == (oop o) const { return oopDesc::bs()->resolve_and_maybe_copy_oop(obj()) == oopDesc::bs()->resolve_and_maybe_copy_oop(o); } + bool operator == (const Handle& h) const { return oopDesc::bs()->resolve_and_maybe_copy_oop(obj()) == oopDesc::bs()->resolve_and_maybe_copy_oop(h.obj()); } // Null checks bool is_null() const { return _handle == NULL; } diff -r 081cf5f88897 -r 29693376eaec src/share/vm/runtime/thread.cpp --- a/src/share/vm/runtime/thread.cpp Sat Oct 03 13:51:17 2015 +0200 +++ b/src/share/vm/runtime/thread.cpp Tue Oct 06 15:04:50 2015 +0200 @@ -2909,6 +2909,7 @@ oop thread_group = java_lang_Thread::threadGroup(thread_obj); if (thread_group != NULL) { typeArrayOop name = java_lang_ThreadGroup::name(thread_group); + name = typeArrayOop(oopDesc::bs()->resolve_oop(name)); // ThreadGroup.name can be null if (name != NULL) { const char* str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length()); @@ -2928,6 +2929,7 @@ oop parent = java_lang_ThreadGroup::parent(thread_group); if (parent != NULL) { typeArrayOop name = java_lang_ThreadGroup::name(parent); + name = typeArrayOop(oopDesc::bs()->resolve_oop(name)); // ThreadGroup.name can be null if (name != NULL) { const char* str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length());