changeset 9763:29693376eaec

Add some more runtime barriers.
author rkennke
date Tue, 06 Oct 2015 15:04:50 +0200
parents 081cf5f88897
children 09c6aa9c4a33
files src/share/vm/classfile/javaClasses.cpp src/share/vm/oops/instanceKlass.cpp src/share/vm/prims/jvm.cpp src/share/vm/runtime/basicLock.hpp src/share/vm/runtime/handles.hpp src/share/vm/runtime/thread.cpp
diffstat 6 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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);
 }
 
--- 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<intptr_t>(java_mirror()));
+  return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + cast_from_oop<intptr_t>(oopDesc::bs()->resolve_and_maybe_copy_oop(java_mirror())));
 }
 
 
--- 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);
--- 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; }
 
--- 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; }
--- 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());