2660 InstanceKlass* ik = method->method_holder(); 2661 CallInfo info(method(), ik, CHECK); 2662 MethodHandles::init_method_MemberName(mname, info); 2663 // set bci 2664 java_lang_StackFrameInfo::set_bci(stackFrame(), bci); 2665 // method may be redefined; store the version 2666 int version = method->constants()->version(); 2667 assert((jushort)version == version, "version should be short"); 2668 java_lang_StackFrameInfo::set_version(stackFrame(), (short)version); 2669 } 2670 2671 void java_lang_StackFrameInfo::to_stack_trace_element(Handle stackFrame, Handle stack_trace_element, TRAPS) { 2672 ResourceMark rm(THREAD); 2673 HandleMark hm(THREAD); 2674 Handle mname(THREAD, stackFrame->obj_field(java_lang_StackFrameInfo::_memberName_offset)); 2675 Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname())); 2676 InstanceKlass* holder = InstanceKlass::cast(clazz); 2677 Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK); 2678 2679 short version = stackFrame->short_field(_version_offset); 2680 short bci = stackFrame->short_field(_bci_offset); 2681 Symbol* name = method->name(); 2682 java_lang_StackTraceElement::fill_in(stack_trace_element, holder, method, version, bci, name, CHECK); 2683 } 2684 2685 #define STACKFRAMEINFO_FIELDS_DO(macro) \ 2686 macro(_memberName_offset, k, "memberName", object_signature, false); \ 2687 macro(_bci_offset, k, "bci", short_signature, false) 2688 2689 void java_lang_StackFrameInfo::compute_offsets() { 2690 InstanceKlass* k = SystemDictionary::StackFrameInfo_klass(); 2691 STACKFRAMEINFO_FIELDS_DO(FIELD_COMPUTE_OFFSET); 2692 STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); 2693 } 2694 2695 #if INCLUDE_CDS 2696 void java_lang_StackFrameInfo::serialize_offsets(SerializeClosure* f) { 2697 STACKFRAMEINFO_FIELDS_DO(FIELD_SERIALIZE_OFFSET); 2698 STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_SERIALIZE_OFFSET); 2699 } 2700 #endif 2701 2702 #define LIVESTACKFRAMEINFO_FIELDS_DO(macro) \ 2703 macro(_monitors_offset, k, "monitors", object_array_signature, false); \ 2704 macro(_locals_offset, k, "locals", object_array_signature, false); \ 2705 macro(_operands_offset, k, "operands", object_array_signature, false); \ 2706 macro(_mode_offset, k, "mode", int_signature, false) 2707 | 2660 InstanceKlass* ik = method->method_holder(); 2661 CallInfo info(method(), ik, CHECK); 2662 MethodHandles::init_method_MemberName(mname, info); 2663 // set bci 2664 java_lang_StackFrameInfo::set_bci(stackFrame(), bci); 2665 // method may be redefined; store the version 2666 int version = method->constants()->version(); 2667 assert((jushort)version == version, "version should be short"); 2668 java_lang_StackFrameInfo::set_version(stackFrame(), (short)version); 2669 } 2670 2671 void java_lang_StackFrameInfo::to_stack_trace_element(Handle stackFrame, Handle stack_trace_element, TRAPS) { 2672 ResourceMark rm(THREAD); 2673 HandleMark hm(THREAD); 2674 Handle mname(THREAD, stackFrame->obj_field(java_lang_StackFrameInfo::_memberName_offset)); 2675 Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname())); 2676 InstanceKlass* holder = InstanceKlass::cast(clazz); 2677 Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK); 2678 2679 short version = stackFrame->short_field(_version_offset); 2680 int bci = stackFrame->int_field(_bci_offset); 2681 Symbol* name = method->name(); 2682 java_lang_StackTraceElement::fill_in(stack_trace_element, holder, method, version, bci, name, CHECK); 2683 } 2684 2685 #define STACKFRAMEINFO_FIELDS_DO(macro) \ 2686 macro(_memberName_offset, k, "memberName", object_signature, false); \ 2687 macro(_bci_offset, k, "bci", int_signature, false) 2688 2689 void java_lang_StackFrameInfo::compute_offsets() { 2690 InstanceKlass* k = SystemDictionary::StackFrameInfo_klass(); 2691 STACKFRAMEINFO_FIELDS_DO(FIELD_COMPUTE_OFFSET); 2692 STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); 2693 } 2694 2695 #if INCLUDE_CDS 2696 void java_lang_StackFrameInfo::serialize_offsets(SerializeClosure* f) { 2697 STACKFRAMEINFO_FIELDS_DO(FIELD_SERIALIZE_OFFSET); 2698 STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_SERIALIZE_OFFSET); 2699 } 2700 #endif 2701 2702 #define LIVESTACKFRAMEINFO_FIELDS_DO(macro) \ 2703 macro(_monitors_offset, k, "monitors", object_array_signature, false); \ 2704 macro(_locals_offset, k, "locals", object_array_signature, false); \ 2705 macro(_operands_offset, k, "operands", object_array_signature, false); \ 2706 macro(_mode_offset, k, "mode", int_signature, false) 2707 |