< prev index next >

src/cpu/x86/vm/interp_masm_x86.cpp

Print this page
rev 12152 : [mq]: verification.patch

@@ -959,10 +959,11 @@
   // We use c_rarg1/rdx so that if we go slow path it will be the correct
   // register for unlock_object to pass to VM directly
   lea(robj, monitor); // address of first monitor
 
   movptr(rax, Address(robj, BasicObjectLock::obj_offset_in_bytes()));
+  shenandoah_store_addr_check(rax); // Invariant
   testptr(rax, rax);
   jcc(Assembler::notZero, unlock);
 
   pop(state);
   if (throw_monitor_exception) {

@@ -1041,10 +1042,11 @@
       jmp(restart);
     }
 
     bind(loop);
     // check if current entry is used
+    shenandoah_lock_check(rmon);
     cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), (int32_t) NULL);
     jcc(Assembler::notEqual, exception);
 
     addptr(rmon, entry_size); // otherwise advance to next entry
     bind(entry);

@@ -1138,10 +1140,12 @@
     Label slow_case;
 
     // Load object pointer into obj_reg
     movptr(obj_reg, Address(lock_reg, obj_offset));
 
+    shenandoah_store_addr_check(obj_reg);
+
     if (UseBiasedLocking) {
       biased_locking_enter(lock_reg, obj_reg, swap_reg, tmp_reg, false, done, &slow_case);
     }
 
     // Load immediate 1 into swap_reg %rax

@@ -1154,10 +1158,11 @@
     movptr(Address(lock_reg, mark_offset), swap_reg);
 
     assert(lock_offset == 0,
            "displaced header must be first word in BasicObjectLock");
 
+    // obj_reg has been checked a few lines up.
     if (os::is_MP()) lock();
     cmpxchgptr(lock_reg, Address(obj_reg, 0));
     if (PrintBiasedLockingStatistics) {
       cond_inc32(Assembler::zero,
                  ExternalAddress((address) BiasedLocking::fast_path_entry_count_addr()));

@@ -1232,10 +1237,11 @@
     // structure Store the BasicLock address into %rax
     lea(swap_reg, Address(lock_reg, BasicObjectLock::lock_offset_in_bytes()));
 
     // Load oop into obj_reg(%c_rarg3)
     movptr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset_in_bytes()));
+    shenandoah_store_addr_check(obj_reg); // Invariant
 
     // Free entry
     movptr(Address(lock_reg, BasicObjectLock::obj_offset_in_bytes()), (int32_t)NULL_WORD);
 
     if (UseBiasedLocking) {
< prev index next >