src/share/vm/interpreter/linkResolver.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/interpreter/linkResolver.cpp	Fri Dec  4 17:51:25 2015
--- new/src/share/vm/interpreter/linkResolver.cpp	Fri Dec  4 17:51:24 2015

*** 29,41 **** --- 29,43 ---- #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"
*** 725,734 **** --- 727,766 ---- } 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();
*** 781,794 **** --- 813,826 ---- 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) { ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokeinterface resolved method: caller-class", - link_info.current_klass(), resolved_klass, resolved_method); ! tty->cr(); ! resolved_method, true); } return resolved_method; }
*** 1029,1042 **** --- 1061,1073 ---- resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (TraceItables && Verbose) { ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokespecial resolved method: caller-class:", ! current_klass, resolved_klass, resolved_method, true); tty->cr(); } return resolved_method; }
*** 1101,1114 **** --- 1132,1144 ---- Method::name_and_sig_as_C_string(resolved_klass(), sel_method->name(), sel_method->signature())); } ! if (TraceItables && Verbose) { ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokespecial selected method: resolved-class:", ! resolved_klass, resolved_klass, sel_method, true); tty->cr(); } // setup result result.set_static(resolved_klass, sel_method, CHECK); }
*** 1155,1168 **** --- 1185,1197 ---- resolved_method->name(), resolved_method->signature())); THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } ! if (PrintVtables && Verbose) { ! if (develop_log_is_enabled(Trace, vtables)) { trace_method_resolution("invokevirtual resolved method: caller-class:", ! current_klass, resolved_klass, resolved_method, false); tty->cr(); } return resolved_method; }
*** 1236,1249 **** --- 1265,1278 ---- Method::name_and_sig_as_C_string(resolved_klass(), selected_method->name(), selected_method->signature())); } ! if (PrintVtables && Verbose) { ! if (develop_log_is_enabled(Trace, vtables)) { trace_method_resolution("invokevirtual selected method: receiver-class:", ! recv_klass, resolved_klass, selected_method); ! tty->print_cr("vtable_index:%d", vtable_index); ! 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); }
*** 1335,1348 **** --- 1364,1376 ---- Method::name_and_sig_as_C_string(recv_klass(), sel_method->name(), sel_method->signature())); } ! if (TraceItables && Verbose) { ! if (develop_log_is_enabled(Trace, itables)) { trace_method_resolution("invokeinterface selected method: receiver-class", ! recv_klass, resolved_klass, sel_method, true); 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");
*** 1585,1614 **** --- 1613,1617 ---- 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

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