Mercurial > hg > graal-compiler
comparison src/share/vm/interpreter/interpreterRuntime.cpp @ 12010:ca0165daa6ec
7187554: JSR 292: JVMTI PopFrame needs to handle appendix arguments
Summary: Restore the appendix argument after PopFrame() call
Reviewed-by: twisti, coleenp
Contributed-by: serguei.spitsyn@oracle.com
author | sspitsyn |
---|---|
date | Tue, 06 Aug 2013 16:33:59 -0700 |
parents | 746b070f5022 |
children | 3cce976666d9 b2e698d2276c abe03600372a |
comparison
equal
deleted
inserted
replaced
11996:22a5aff0df0b | 12010:ca0165daa6ec |
---|---|
1207 int size_of_arguments = (asc.size() + (invoke.has_receiver() ? 1 : 0)); // receiver | 1207 int size_of_arguments = (asc.size() + (invoke.has_receiver() ? 1 : 0)); // receiver |
1208 Copy::conjoint_jbytes(src_address, dest_address, | 1208 Copy::conjoint_jbytes(src_address, dest_address, |
1209 size_of_arguments * Interpreter::stackElementSize); | 1209 size_of_arguments * Interpreter::stackElementSize); |
1210 IRT_END | 1210 IRT_END |
1211 #endif | 1211 #endif |
1212 | |
1213 #if INCLUDE_JVMTI | |
1214 // This is a support of the JVMTI PopFrame interface. | |
1215 // Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument | |
1216 // and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters. | |
1217 // The dmh argument is a reference to a DirectMethoHandle that has a member name field. | |
1218 IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh, | |
1219 Method* method, address bcp)) | |
1220 Bytecodes::Code code = Bytecodes::code_at(method, bcp); | |
1221 if (code != Bytecodes::_invokestatic) { | |
1222 return; | |
1223 } | |
1224 ConstantPool* cpool = method->constants(); | |
1225 int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG; | |
1226 Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index)); | |
1227 Symbol* mname = cpool->name_ref_at(cp_index); | |
1228 | |
1229 if (MethodHandles::has_member_arg(cname, mname)) { | |
1230 oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh); | |
1231 thread->set_vm_result(member_name); | |
1232 } | |
1233 IRT_END | |
1234 #endif // INCLUDE_JVMTI |