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