src/share/vm/interpreter/linkResolver.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8141564.03 Cdiff src/share/vm/interpreter/linkResolver.cpp

src/share/vm/interpreter/linkResolver.cpp

Print this page

        

*** 30,42 **** --- 30,44 ---- #include "compiler/compileBroker.hpp" #include "gc/shared/collectedHeap.inline.hpp" #include "interpreter/bytecode.hpp" #include "interpreter/interpreterRuntime.hpp" #include "interpreter/linkResolver.hpp" + #include "logging/log.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" + #include "oops/method.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" #include "prims/nativeLookup.hpp" #include "runtime/compilationPolicy.hpp"
*** 726,735 **** --- 728,767 ---- } return resolved_method; } + static void trace_method_resolution(const char* prefix, + KlassHandle klass, + KlassHandle resolved_klass, + const methodHandle& method, + bool logitables, + int index = -1) { + #ifndef PRODUCT + ResourceMark rm; + outputStream* st; + if (logitables) { + st = LogHandle(itables)::trace_stream(); + } else { + st = LogHandle(vtables)::trace_stream(); + } + st->print("%s%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ", + prefix, + (klass.is_null() ? "<NULL>" : klass->internal_name()), + (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()), + Method::name_and_sig_as_C_string(resolved_klass(), + method->name(), + method->signature()), + method->method_holder()->internal_name()); + method->print_linkage_flags(st); + if (index != -1) { + st->print("vtable_index:%d", index); + } + st->cr(); + #endif // PRODUCT + } + methodHandle LinkResolver::resolve_interface_method(const LinkInfo& link_info, bool nostatics, TRAPS) { KlassHandle resolved_klass = link_info.resolved_klass();
*** 782,795 **** Method::name_and_sig_as_C_string(resolved_klass(), resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (TraceItables && Verbose) { trace_method_resolution("invokeinterface resolved method: caller-class", ! link_info.current_klass(), resolved_klass, resolved_method); ! tty->cr(); } return resolved_method; } --- 814,827 ---- Method::name_and_sig_as_C_string(resolved_klass(), resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokeinterface resolved method: caller-class", ! link_info.current_klass(), resolved_klass, ! resolved_method, true); } return resolved_method; }
*** 1030,1043 **** resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (TraceItables && Verbose) { trace_method_resolution("invokespecial resolved method: caller-class:", ! current_klass, resolved_klass, resolved_method); ! tty->cr(); } return resolved_method; } --- 1062,1074 ---- resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokespecial resolved method: caller-class:", ! current_klass, resolved_klass, resolved_method, true); } return resolved_method; }
*** 1102,1115 **** Method::name_and_sig_as_C_string(resolved_klass(), sel_method->name(), sel_method->signature())); } ! if (TraceItables && Verbose) { trace_method_resolution("invokespecial selected method: resolved-class:", ! resolved_klass, resolved_klass, sel_method); ! tty->cr(); } // setup result result.set_static(resolved_klass, sel_method, CHECK); } --- 1133,1145 ---- Method::name_and_sig_as_C_string(resolved_klass(), sel_method->name(), sel_method->signature())); } ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokespecial selected method: resolved-class:", ! resolved_klass, resolved_klass, sel_method, true); } // setup result result.set_static(resolved_klass, sel_method, CHECK); }
*** 1156,1169 **** resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (PrintVtables && Verbose) { trace_method_resolution("invokevirtual resolved method: caller-class:", ! current_klass, resolved_klass, resolved_method); ! tty->cr(); } return resolved_method; } --- 1186,1198 ---- resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (develop_log_is_enabled(Trace, vtables)) { trace_method_resolution("invokevirtual resolved method: caller-class:", ! current_klass, resolved_klass, resolved_method, false); } return resolved_method; }
*** 1237,1250 **** Method::name_and_sig_as_C_string(resolved_klass(), selected_method->name(), selected_method->signature())); } ! if (PrintVtables && Verbose) { trace_method_resolution("invokevirtual selected method: receiver-class:", ! recv_klass, resolved_klass, selected_method); ! tty->print_cr("vtable_index:%d", vtable_index); } // setup result result.set_virtual(resolved_klass, recv_klass, resolved_method, selected_method, vtable_index, CHECK); } --- 1266,1279 ---- Method::name_and_sig_as_C_string(resolved_klass(), selected_method->name(), selected_method->signature())); } ! if (develop_log_is_enabled(Trace, vtables)) { trace_method_resolution("invokevirtual selected method: receiver-class:", ! recv_klass, resolved_klass, selected_method, ! false, vtable_index); } // setup result result.set_virtual(resolved_klass, recv_klass, resolved_method, selected_method, vtable_index, CHECK); }
*** 1336,1349 **** Method::name_and_sig_as_C_string(recv_klass(), sel_method->name(), sel_method->signature())); } ! if (TraceItables && Verbose) { trace_method_resolution("invokeinterface selected method: receiver-class", ! recv_klass, resolved_klass, sel_method); ! tty->cr(); } // setup result if (!resolved_method->has_itable_index()) { int vtable_index = resolved_method->vtable_index(); assert(vtable_index == sel_method->vtable_index(), "sanity check"); --- 1365,1377 ---- Method::name_and_sig_as_C_string(recv_klass(), sel_method->name(), sel_method->signature())); } ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokeinterface selected method: receiver-class", ! recv_klass, resolved_klass, sel_method, true); } // setup result if (!resolved_method->has_itable_index()) { int vtable_index = resolved_method->vtable_index(); assert(vtable_index == sel_method->vtable_index(), "sanity check");
*** 1586,1615 **** THREAD); wrap_invokedynamic_exception(CHECK); result.set_handle(resolved_method, resolved_appendix, resolved_method_type, THREAD); wrap_invokedynamic_exception(CHECK); } - - #ifndef PRODUCT - void LinkResolver::trace_method_resolution(const char* prefix, - KlassHandle klass, - KlassHandle resolved_klass, - const methodHandle& method) { - ResourceMark rm; - tty->print("%s%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ", - prefix, - (klass.is_null() ? "<NULL>" : klass->internal_name()), - (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()), - Method::name_and_sig_as_C_string(resolved_klass(), - method->name(), - method->signature()), - method->method_holder()->internal_name() - ); - method->access_flags().print_on(tty); - if (method->is_default_method()) { - tty->print("default "); - } - if (method->is_overpass()) { - tty->print("overpass "); - } - } - #endif // PRODUCT --- 1614,1618 ----
src/share/vm/interpreter/linkResolver.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File