(original) (raw)
src/share/vm/classfile/verifier.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/classfile/verifier.cpp Tue Nov 24 16:20:59 2015** --- new/src/share/vm/classfile/verifier.cpp Tue Nov 24 16:20:59 2015
*** 46,55 ****
--- 46,56 ----
#include "runtime/orderAccess.inline.hpp"
#include "runtime/os.hpp"
#include "runtime/thread.hpp"
#include "services/threadService.hpp"
#include "utilities/bytes.hpp"
+ #include "logging/log.hpp"
#define NOFAILOVER_MAJOR_VERSION 51
#define NONZERO_PADDING_BYTES_IN_SWITCH_MAJOR_VERSION 51
#define STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION 52
*** 109,118 **** --- 110,131 ---- } else { tty->print("RESOLVE %s %s (verification)\n", verify, resolve); } }
+ // Prints the end-verification message to the appropriate output. + void Verifier::log_end_verification(outputStream st, const char klassName, Symbol* exception_name, TRAPS) {** + if (HAS_PENDING_EXCEPTION) { + st->print("Verification for %s has", klassName); + st->print_cr(" exception pending %s ", + PENDING_EXCEPTION->klass()->external_name()); + } else if (exception_name != NULL) { + st->print_cr("Verification for %s failed", klassName); + } + st->print_cr("End class verification for: %s", klassName); + } + bool Verifier::verify(instanceKlassHandle klass, Verifier::Mode mode, bool should_verify_class, TRAPS) { HandleMark hm; ResourceMark rm(THREAD);
// Eagerly allocate the identity hash code for a klass. This is a fallout
*** 153,176 **** --- 166,187 ----
const char* klassName = klass->external_name();
bool can_failover = FailOverToOldVerifier &&
klass->major_version() < NOFAILOVER_MAJOR_VERSION;
if (TraceClassInitialization) {
tty->print_cr("Start class verification for: %s", klassName);
}
+ log_info(classinit)("Start class verification for: %s", klassName);
if (klass->major_version() >= STACKMAP_ATTRIBUTE_MAJOR_VERSION) {
ClassVerifier split_verifier(klass, THREAD);
split_verifier.verify_class(THREAD);
exception_name = split_verifier.result();
if (can_failover && !HAS_PENDING_EXCEPTION &&
(exception_name == vmSymbols::java_lang_VerifyError() ||
exception_name == vmSymbols::java_lang_ClassFormatError())) {
- if (TraceClassInitialization || VerboseVerification) {
! tty->print_cr("Fail over class verification to old verifier for: %s", klassName);
"Fail over class verification to old verifier for: %s", klassName);
}
+ log_info(classinit)("Fail over class verification to old verifier for: %s", klassName);
exception_name = inference_verify(
klass, message_buffer, message_buffer_len, THREAD);
}
if (exception_name != NULL) {
exception_message = split_verifier.exception_message();
*** 178,196 **** --- 189,203 ---- } else { exception_name = inference_verify( klass, message_buffer, message_buffer_len, THREAD); }
! if (TraceClassInitialization || VerboseVerification) {
if (HAS_PENDING_EXCEPTION) {
tty->print("Verification for %s has", klassName);
tty->print_cr(" exception pending %s ",
PENDING_EXCEPTION->klass()->external_name());
} else if (exception_name != NULL) {
tty->print_cr("Verification for %s failed", klassName);
! if (log_is_enabled(Info, classinit)){
+ log_end_verification(LogHandle(classinit)::info_stream(), klassName, exception_name, THREAD);
}
tty->print_cr("End class verification for: %s", klassName);
+ if (VerboseVerification){
+ log_end_verification(tty, klassName, exception_name, THREAD);
}
if (HAS_PENDING_EXCEPTION) {
return false; // use the existing exception
} else if (exception_name == NULL) {
*** 596,610 **** --- 603,620 ---- continue; } verify_method(methodHandle(THREAD, m), CHECK_VERIFY(this)); }
! if (VerboseVerification || TraceClassInitialization) {
! if (was_recursively_verified())
! if (was_recursively_verified()){
! if (VerboseVerification){
tty->print_cr("Recursive verification detected for: %s",
_klass->external_name());
}
+ log_info(classinit)("Recursive verification detected for: %s",
+ _klass->external_name());
+ }
}
void ClassVerifier::verify_method(const methodHandle& m, TRAPS) { HandleMark hm(THREAD); _method = m; // initialize _method
src/share/vm/classfile/verifier.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File