Mercurial > hg > truffle
diff src/share/vm/classfile/javaClasses.cpp @ 10133:6337ca4dcad8
8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
Summary: Lazily create and maintain the MemberNameTable to be able to update MemberName's
Reviewed-by: coleenp, jrose, dholmes
Contributed-by: serguei.spitsyn@oracle.com
author | sspitsyn |
---|---|
date | Sat, 20 Apr 2013 04:07:08 -0700 |
parents | 22ba8c8ce6a6 |
children | f258c5828eb8 4b52137b07c9 |
line wrap: on
line diff
--- a/src/share/vm/classfile/javaClasses.cpp Fri Apr 19 16:51:27 2013 -0700 +++ b/src/share/vm/classfile/javaClasses.cpp Sat Apr 20 04:07:08 2013 -0700 @@ -2625,6 +2625,15 @@ return (Metadata*)mname->address_field(_vmtarget_offset); } +#if INCLUDE_JVMTI +// Can be executed on VM thread only +void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Metadata* ref) { + assert((is_instance(mname) && (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0), "wrong type"); + assert(Thread::current()->is_VM_thread(), "not VM thread"); + mname->address_field_put(_vmtarget_offset, (address)ref); +} +#endif // INCLUDE_JVMTI + void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) { assert(is_instance(mname), "wrong type"); // check the type of the vmtarget