--- old/src/share/vm/interpreter/linkResolver.cpp 2015-12-01 17:44:25.291124868 -0500 +++ new/src/share/vm/interpreter/linkResolver.cpp 2015-12-01 17:44:25.136723847 -0500 @@ -31,6 +31,7 @@ #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" @@ -783,10 +784,12 @@ THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } - if (TraceItables && Verbose) { - trace_method_resolution("invokeinterface resolved method: caller-class", + if (develop_log_is_enabled(Trace, itables)) { + ResourceMark rm; + outputStream* logst = LogHandle(itables)::trace_stream(); + trace_method_resolution(logst, "invokeinterface resolved method: caller-class", link_info.current_klass(), resolved_klass, resolved_method); - tty->cr(); + logst->cr(); } return resolved_method; @@ -1031,10 +1034,12 @@ THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } - if (TraceItables && Verbose) { - trace_method_resolution("invokespecial resolved method: caller-class:", + if (develop_log_is_enabled(Trace, itables)) { + ResourceMark rm; + outputStream* logst = LogHandle(itables)::trace_stream(); + trace_method_resolution(logst, "invokespecial resolved method: caller-class:", current_klass, resolved_klass, resolved_method); - tty->cr(); + logst->cr(); } return resolved_method; @@ -1103,10 +1108,12 @@ sel_method->signature())); } - if (TraceItables && Verbose) { - trace_method_resolution("invokespecial selected method: resolved-class:", + if (develop_log_is_enabled(Trace, itables)) { + ResourceMark rm; + outputStream* logst = LogHandle(itables)::trace_stream(); + trace_method_resolution(logst, "invokespecial selected method: resolved-class:", resolved_klass, resolved_klass, sel_method); - tty->cr(); + logst->cr(); } // setup result @@ -1157,10 +1164,12 @@ THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); } - if (PrintVtables && Verbose) { - trace_method_resolution("invokevirtual resolved method: caller-class:", + if (develop_log_is_enabled(Trace, vtables)) { + ResourceMark rm(THREAD); + outputStream* logst = LogHandle(vtables)::trace_stream(); + trace_method_resolution(logst, "invokevirtual resolved method: caller-class:", current_klass, resolved_klass, resolved_method); - tty->cr(); + logst->cr(); } return resolved_method; @@ -1238,10 +1247,12 @@ selected_method->signature())); } - if (PrintVtables && Verbose) { - trace_method_resolution("invokevirtual selected method: receiver-class:", + if (develop_log_is_enabled(Trace, vtables)) { + ResourceMark rm; + outputStream* logst = LogHandle(vtables)::trace_stream(); + trace_method_resolution(logst, "invokevirtual selected method: receiver-class:", recv_klass, resolved_klass, selected_method); - tty->print_cr("vtable_index:%d", vtable_index); + logst->print_cr("vtable_index:%d", vtable_index); } // setup result result.set_virtual(resolved_klass, recv_klass, resolved_method, selected_method, vtable_index, CHECK); @@ -1337,10 +1348,12 @@ sel_method->signature())); } - if (TraceItables && Verbose) { - trace_method_resolution("invokeinterface selected method: receiver-class", + if (develop_log_is_enabled(Trace, itables)) { + ResourceMark rm; + outputStream* logst = LogHandle(itables)::trace_stream(); + trace_method_resolution(logst, "invokeinterface selected method: receiver-class", recv_klass, resolved_klass, sel_method); - tty->cr(); + logst->cr(); } // setup result if (!resolved_method->has_itable_index()) { @@ -1589,26 +1602,27 @@ } #ifndef PRODUCT -void LinkResolver::trace_method_resolution(const char* prefix, +// Must call with a ResourceMark +void LinkResolver::trace_method_resolution(outputStream* st, + 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() ? "" : klass->internal_name()), - (resolved_klass.is_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); + st->print("%s%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ", + prefix, + (klass.is_null() ? "" : klass->internal_name()), + (resolved_klass.is_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(st); if (method->is_default_method()) { - tty->print("default "); + st->print("default "); } if (method->is_overpass()) { - tty->print("overpass "); + st->print("overpass "); } } #endif // PRODUCT