hotspot/src/share/vm/classfile/javaClasses.cpp
changeset 27674 00cabfc45357
parent 27654 4e508c2376f7
child 27694 543f6042c268
equal deleted inserted replaced
27673:df559a888b9f 27674:00cabfc45357
    39 #include "oops/instanceMirrorKlass.hpp"
    39 #include "oops/instanceMirrorKlass.hpp"
    40 #include "oops/klass.hpp"
    40 #include "oops/klass.hpp"
    41 #include "oops/method.hpp"
    41 #include "oops/method.hpp"
    42 #include "oops/symbol.hpp"
    42 #include "oops/symbol.hpp"
    43 #include "oops/typeArrayOop.hpp"
    43 #include "oops/typeArrayOop.hpp"
       
    44 #include "prims/jvmtiRedefineClassesTrace.hpp"
    44 #include "runtime/fieldDescriptor.hpp"
    45 #include "runtime/fieldDescriptor.hpp"
    45 #include "runtime/handles.inline.hpp"
    46 #include "runtime/handles.inline.hpp"
    46 #include "runtime/interfaceSupport.hpp"
    47 #include "runtime/interfaceSupport.hpp"
    47 #include "runtime/java.hpp"
    48 #include "runtime/java.hpp"
    48 #include "runtime/javaCalls.hpp"
    49 #include "runtime/javaCalls.hpp"
  2792 Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) {
  2793 Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) {
  2793   assert(is_instance(mname), "wrong type");
  2794   assert(is_instance(mname), "wrong type");
  2794   return (Metadata*)mname->address_field(_vmtarget_offset);
  2795   return (Metadata*)mname->address_field(_vmtarget_offset);
  2795 }
  2796 }
  2796 
  2797 
       
  2798 bool java_lang_invoke_MemberName::is_method(oop mname) {
       
  2799   assert(is_instance(mname), "must be MemberName");
       
  2800   return (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0;
       
  2801 }
       
  2802 
  2797 #if INCLUDE_JVMTI
  2803 #if INCLUDE_JVMTI
  2798 // Can be executed on VM thread only
  2804 // Can be executed on VM thread only
  2799 void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Metadata* ref) {
  2805 void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Method* old_method,
  2800   assert((is_instance(mname) && (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0), "wrong type");
  2806                                                   Method* new_method, bool* trace_name_printed) {
       
  2807   assert(is_method(mname), "wrong type");
  2801   assert(Thread::current()->is_VM_thread(), "not VM thread");
  2808   assert(Thread::current()->is_VM_thread(), "not VM thread");
  2802   mname->address_field_put(_vmtarget_offset, (address)ref);
  2809 
       
  2810   Method* target = (Method*)mname->address_field(_vmtarget_offset);
       
  2811   if (target == old_method) {
       
  2812     mname->address_field_put(_vmtarget_offset, (address)new_method);
       
  2813 
       
  2814     if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) {
       
  2815       if (!(*trace_name_printed)) {
       
  2816         // RC_TRACE_MESG macro has an embedded ResourceMark
       
  2817         RC_TRACE_MESG(("adjust: name=%s",
       
  2818                        old_method->method_holder()->external_name()));
       
  2819         *trace_name_printed = true;
       
  2820       }
       
  2821       // RC_TRACE macro has an embedded ResourceMark
       
  2822       RC_TRACE(0x00400000, ("MemberName method update: %s(%s)",
       
  2823                             new_method->name()->as_C_string(),
       
  2824                             new_method->signature()->as_C_string()));
       
  2825     }
       
  2826   }
  2803 }
  2827 }
  2804 #endif // INCLUDE_JVMTI
  2828 #endif // INCLUDE_JVMTI
  2805 
  2829 
  2806 void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) {
  2830 void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) {
  2807   assert(is_instance(mname), "wrong type");
  2831   assert(is_instance(mname), "wrong type");