--- a/src/hotspot/share/runtime/sharedRuntime.cpp Wed Nov 13 11:27:50 2019 +0000
+++ b/src/hotspot/share/runtime/sharedRuntime.cpp Wed Nov 13 08:23:23 2019 -0500
@@ -1022,7 +1022,7 @@
return find_callee_info_helper(thread, vfst, bc, callinfo, THREAD);
}
-methodHandle SharedRuntime::extract_attached_method(vframeStream& vfst) {
+Method* SharedRuntime::extract_attached_method(vframeStream& vfst) {
CompiledMethod* caller = vfst.nm();
nmethodLocker caller_lock(caller);
@@ -1055,9 +1055,9 @@
int bytecode_index = bytecode.index();
bc = bytecode.invoke_code();
- methodHandle attached_method = extract_attached_method(vfst);
+ methodHandle attached_method(THREAD, extract_attached_method(vfst));
if (attached_method.not_null()) {
- methodHandle callee = bytecode.static_target(CHECK_NH);
+ Method* callee = bytecode.static_target(CHECK_NH);
vmIntrinsics::ID id = callee->intrinsic_id();
// When VM replaces MH.invokeBasic/linkTo* call with a direct/virtual call,
// it attaches statically resolved method to the call site.
@@ -1105,8 +1105,8 @@
frame callerFrame = stubFrame.sender(®_map2);
if (attached_method.is_null()) {
- methodHandle callee = bytecode.static_target(CHECK_NH);
- if (callee.is_null()) {
+ Method* callee = bytecode.static_target(CHECK_NH);
+ if (callee == NULL) {
THROW_(vmSymbols::java_lang_NoSuchMethodException(), nullHandle);
}
}
@@ -1144,7 +1144,6 @@
rk = constants->klass_ref_at(bytecode_index, CHECK_NH);
}
Klass* static_receiver_klass = rk;
- methodHandle callee = callinfo.selected_method();
assert(receiver_klass->is_subtype_of(static_receiver_klass),
"actual receiver must be subclass of static receiver klass");
if (receiver_klass->is_instance_klass()) {
@@ -1182,7 +1181,7 @@
Bytecodes::Code bc;
CallInfo callinfo;
find_callee_info_helper(thread, vfst, bc, callinfo, CHECK_(methodHandle()));
- callee_method = callinfo.selected_method();
+ callee_method = methodHandle(THREAD, callinfo.selected_method());
}
assert(callee_method()->is_method(), "must be");
return callee_method;
@@ -1325,7 +1324,7 @@
Bytecodes::Code invoke_code = Bytecodes::_illegal;
Handle receiver = find_callee_info(thread, invoke_code,
call_info, CHECK_(methodHandle()));
- methodHandle callee_method = call_info.selected_method();
+ methodHandle callee_method(THREAD, call_info.selected_method());
assert((!is_virtual && invoke_code == Bytecodes::_invokestatic ) ||
(!is_virtual && invoke_code == Bytecodes::_invokespecial) ||
@@ -1479,7 +1478,7 @@
// Get the called method from the invoke bytecode.
vframeStream vfst(thread, true);
assert(!vfst.at_end(), "Java frame must exist");
- methodHandle caller(vfst.method());
+ methodHandle caller(thread, vfst.method());
Bytecode_invoke invoke(caller, vfst.bci());
DEBUG_ONLY( invoke.verify(); )
@@ -1493,7 +1492,7 @@
// Install exception and return forward entry.
address res = StubRoutines::throw_AbstractMethodError_entry();
JRT_BLOCK
- methodHandle callee = invoke.static_target(thread);
+ methodHandle callee(thread, invoke.static_target(thread));
if (!callee.is_null()) {
oop recv = callerFrame.retrieve_receiver(®_map);
Klass *recv_klass = (recv != NULL) ? recv->klass() : NULL;
@@ -1657,7 +1656,7 @@
return callee_method;
}
- methodHandle callee_method = call_info.selected_method();
+ methodHandle callee_method(thread, call_info.selected_method());
#ifndef PRODUCT
Atomic::inc(&_ic_miss_ctr);