aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
diff options
context:
space:
mode:
authoriveresov <none@none>2011-01-10 18:46:29 -0800
committeriveresov <none@none>2011-01-10 18:46:29 -0800
commitd477c23ebcb93e957145523021233c768d3dba19 (patch)
treec21586436525647725539b6acc1f8702ffa28446 /src/cpu/x86/vm/templateInterpreter_x86_32.cpp
parent30097e44da5681dd87ce0f72e073904c7bbd652a (diff)
downloadjdk8u_hotspot-d477c23ebcb93e957145523021233c768d3dba19.tar.gz
4930919: race condition in MDO creation at back branch locations
Summary: Reuse set_method_data_for_bcp() to setup mdp after MDO creation. Reviewed-by: kvn, never
Diffstat (limited to 'src/cpu/x86/vm/templateInterpreter_x86_32.cpp')
-rw-r--r--src/cpu/x86/vm/templateInterpreter_x86_32.cpp13
1 files changed, 3 insertions, 10 deletions
diff --git a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
index ee518b314..6471c2153 100644
--- a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
+++ b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1367,15 +1367,8 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) {
if (ProfileInterpreter) {
// We have decided to profile this method in the interpreter
__ bind(profile_method);
-
- __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::profile_method), rsi, true);
-
- __ movptr(rbx, Address(rbp, method_offset)); // restore methodOop
- __ movptr(rax, Address(rbx, in_bytes(methodOopDesc::method_data_offset())));
- __ movptr(Address(rbp, frame::interpreter_frame_mdx_offset * wordSize), rax);
- __ test_method_data_pointer(rax, profile_method_continue);
- __ addptr(rax, in_bytes(methodDataOopDesc::data_offset()));
- __ movptr(Address(rbp, frame::interpreter_frame_mdx_offset * wordSize), rax);
+ __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::profile_method));
+ __ set_method_data_pointer_for_bcp();
__ jmp(profile_method_continue);
}
// Handle overflow of counter and compile method