src/share/vm/classfile/javaClasses.cpp
Print this page
@@ -2623,12 +2623,22 @@
Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) {
assert(is_instance(mname), "wrong type");
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
oop dependency = NULL;
if (ref != NULL) {
switch (flags(mname) & (MN_IS_METHOD |
MN_IS_CONSTRUCTOR |
@@ -2635,10 +2645,11 @@
MN_IS_FIELD)) {
case MN_IS_METHOD:
case MN_IS_CONSTRUCTOR:
assert(ref->is_method(), "should be a method");
dependency = ((Method*)ref)->method_holder()->java_mirror();
+ ((Method*)ref)->method_holder()->add_member_name(mname);
break;
case MN_IS_FIELD:
assert(ref->is_klass(), "should be a class");
dependency = ((Klass*)ref)->java_mirror();
break;