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