1 /* |
1 /* |
2 * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
2598 java_lang_StackTraceElement::set_lineNumber(element(), line_number); |
2598 java_lang_StackTraceElement::set_lineNumber(element(), line_number); |
2599 } |
2599 } |
2600 } |
2600 } |
2601 |
2601 |
2602 Method* java_lang_StackFrameInfo::get_method(Handle stackFrame, InstanceKlass* holder, TRAPS) { |
2602 Method* java_lang_StackFrameInfo::get_method(Handle stackFrame, InstanceKlass* holder, TRAPS) { |
|
2603 HandleMark hm(THREAD); |
2603 Handle mname(THREAD, stackFrame->obj_field(_memberName_offset)); |
2604 Handle mname(THREAD, stackFrame->obj_field(_memberName_offset)); |
2604 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mname()); |
2605 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mname()); |
2605 // we should expand MemberName::name when Throwable uses StackTrace |
2606 // we should expand MemberName::name when Throwable uses StackTrace |
2606 // MethodHandles::expand_MemberName(mname, MethodHandles::_suppress_defc|MethodHandles::_suppress_type, CHECK_NULL); |
2607 // MethodHandles::expand_MemberName(mname, MethodHandles::_suppress_defc|MethodHandles::_suppress_type, CHECK_NULL); |
2607 return method; |
2608 return method; |
2608 } |
2609 } |
2609 |
2610 |
2610 void java_lang_StackFrameInfo::set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci, TRAPS) { |
2611 void java_lang_StackFrameInfo::set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci, TRAPS) { |
2611 // set Method* or mid/cpref |
2612 // set Method* or mid/cpref |
|
2613 HandleMark hm(THREAD); |
2612 Handle mname(Thread::current(), stackFrame->obj_field(_memberName_offset)); |
2614 Handle mname(Thread::current(), stackFrame->obj_field(_memberName_offset)); |
2613 InstanceKlass* ik = method->method_holder(); |
2615 InstanceKlass* ik = method->method_holder(); |
2614 CallInfo info(method(), ik, CHECK); |
2616 CallInfo info(method(), ik, CHECK); |
2615 MethodHandles::init_method_MemberName(mname, info); |
2617 MethodHandles::init_method_MemberName(mname, info); |
2616 // set bci |
2618 // set bci |
2621 java_lang_StackFrameInfo::set_version(stackFrame(), (short)version); |
2623 java_lang_StackFrameInfo::set_version(stackFrame(), (short)version); |
2622 } |
2624 } |
2623 |
2625 |
2624 void java_lang_StackFrameInfo::to_stack_trace_element(Handle stackFrame, Handle stack_trace_element, TRAPS) { |
2626 void java_lang_StackFrameInfo::to_stack_trace_element(Handle stackFrame, Handle stack_trace_element, TRAPS) { |
2625 ResourceMark rm(THREAD); |
2627 ResourceMark rm(THREAD); |
|
2628 HandleMark hm(THREAD); |
2626 Handle mname(THREAD, stackFrame->obj_field(java_lang_StackFrameInfo::_memberName_offset)); |
2629 Handle mname(THREAD, stackFrame->obj_field(java_lang_StackFrameInfo::_memberName_offset)); |
2627 Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname())); |
2630 Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname())); |
2628 InstanceKlass* holder = InstanceKlass::cast(clazz); |
2631 InstanceKlass* holder = InstanceKlass::cast(clazz); |
2629 Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK); |
2632 Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK); |
2630 |
2633 |