< prev index next >

hotspot/src/share/vm/interpreter/interpreterRuntime.cpp

Print this page
rev 7337 : 8076579: Popping a stack frame after exception breakpoint sets last method param to exception
Summary: Null the InterpreterRuntime::member_name_arg_or_null return value when it is necessary
Reviewed-by: jbachorik, coleenp, twisti


1289 // For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
1290 // FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
1291 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
1292                                                             Method* method, address bcp))
1293   Bytecodes::Code code = Bytecodes::code_at(method, bcp);
1294   if (code != Bytecodes::_invokestatic) {
1295     return;
1296   }
1297   ConstantPool* cpool = method->constants();
1298   int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
1299   Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
1300   Symbol* mname = cpool->name_ref_at(cp_index);
1301 
1302   if (MethodHandles::has_member_arg(cname, mname)) {
1303     oop member_name_oop = (oop) member_name;
1304     if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
1305       // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
1306       member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
1307     }
1308     thread->set_vm_result(member_name_oop);


1309   }
1310 IRT_END
1311 #endif // INCLUDE_JVMTI


1289 // For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
1290 // FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
1291 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
1292                                                             Method* method, address bcp))
1293   Bytecodes::Code code = Bytecodes::code_at(method, bcp);
1294   if (code != Bytecodes::_invokestatic) {
1295     return;
1296   }
1297   ConstantPool* cpool = method->constants();
1298   int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
1299   Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
1300   Symbol* mname = cpool->name_ref_at(cp_index);
1301 
1302   if (MethodHandles::has_member_arg(cname, mname)) {
1303     oop member_name_oop = (oop) member_name;
1304     if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
1305       // FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
1306       member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
1307     }
1308     thread->set_vm_result(member_name_oop);
1309   } else {
1310     thread->set_vm_result(NULL);
1311   }
1312 IRT_END
1313 #endif // INCLUDE_JVMTI
< prev index next >