< prev index next >

src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp

Print this page
@@ -44,10 +44,11 @@
  #include "runtime/signature.hpp"
  #include "runtime/stubRoutines.hpp"
  #include "runtime/vframeArray.hpp"
  #include "runtime/vm_version.hpp"
  #include "utilities/align.hpp"
+ #include "utilities/globalDefinitions.hpp"
  #include "vmreg_x86.inline.hpp"
  #ifdef COMPILER1
  #include "c1/c1_Runtime1.hpp"
  #endif
  #ifdef COMPILER2

@@ -1692,11 +1693,11 @@
        // Save the test result, for recursive case, the result is zero
        __ movptr(Address(lock_reg, mark_word_offset), swap_reg);
        __ jcc(Assembler::notEqual, slow_path_lock);
      } else {
        assert(LockingMode == LM_LIGHTWEIGHT, "must be");
-       __ lightweight_lock(obj_reg, swap_reg, thread, lock_reg, slow_path_lock);
+       __ lightweight_lock(lock_reg, obj_reg, swap_reg, thread, lock_reg, slow_path_lock);
      }
      __ bind(count_mon);
      __ inc_held_monitor_count();
  
      // Slow path will re-enter here

@@ -1931,10 +1932,15 @@
  
      // BEGIN Slow path lock
  
      __ bind(slow_path_lock);
  
+     if (LockingMode == LM_LIGHTWEIGHT) {
+       // Reload the lock addr. Clobbered by lightweight_lock.
+       __ lea(lock_reg, Address(rbp, lock_slot_rbp_offset));
+     }
+ 
      // has last_Java_frame setup. No exceptions so do vanilla call not call_VM
      // args are (oop obj, BasicLock* lock, JavaThread* thread)
      __ push(thread);
      __ push(lock_reg);
      __ push(obj_reg);
< prev index next >