< prev index next > src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp
Print this page
CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry),
r15_thread, c_rarg1);
restore_args(masm, total_c_args, c_arg, out_regs);
}
+ TSAN_RUNTIME_ONLY(
+ // protect the args we've loaded
+ save_args(masm, total_c_args, c_arg, out_regs);
+ __ call_VM(noreg,
+ CAST_FROM_FN_PTR(address, SharedRuntime::tsan_interp_method_entry),
+ r15_thread);
+ restore_args(masm, total_c_args, c_arg, out_regs);
+ );
+
// RedefineClasses() tracing support for obsolete method entry
if (log_is_enabled(Trace, redefine, class, obsolete)) {
// protect the args we've loaded
save_args(masm, total_c_args, c_arg, out_regs);
__ mov_metadata(c_rarg1, method());
__ jcc(Assembler::notEqual, slow_path_lock);
// Slow path will re-enter here
__ bind(lock_done);
+
+ TSAN_RUNTIME_ONLY(
+ __ pusha();
+ __ call_VM(noreg,
+ CAST_FROM_FN_PTR(address, SharedRuntime::tsan_oop_lock),
+ obj_reg);
+ __ popa();
+ );
}
// Finally just about ready to make the JNI call
// Get locked oop from the handle we passed to jni
__ movptr(obj_reg, Address(oop_handle_reg, 0));
__ resolve(IS_NOT_NULL, obj_reg);
+ TSAN_RUNTIME_ONLY(
+ __ pusha();
+ __ call_VM(noreg, CAST_FROM_FN_PTR(address,
+ SharedRuntime::tsan_oop_unlock),
+ obj_reg);
+ __ popa();
+ );
+
Label done;
if (UseBiasedLocking) {
__ biased_locking_exit(obj_reg, old_hdr, done);
}
}
__ bind(done);
}
+
+ TSAN_RUNTIME_ONLY(
+ save_native_result(masm, ret_type, stack_slots);
+ __ call_VM_leaf(
+ CAST_FROM_FN_PTR(address, SharedRuntime::tsan_interp_method_exit));
+ restore_native_result(masm, ret_type, stack_slots);
+ );
+
{
SkipIfEqual skip(masm, &DTraceMethodProbes, false);
save_native_result(masm, ret_type, stack_slots);
__ mov_metadata(c_rarg1, method());
__ call_VM_leaf(
< prev index next >