(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