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 Thu Dec 3 14:13:14 2015
--- new/src/share/vm/interpreter/linkResolver.cpp Thu Dec 3 14:13:14 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