Mercurial > hg > graal-compiler
comparison src/share/vm/classfile/verifier.cpp @ 1560:e40a3601bc1f
6911922: JVM must throw VerifyError for jsr or jsr_w opcodes in class file v.51+
6693236: A class file whose version number is greater than to 50.0 must be verified using the typechecker
Summary: Disable failover verification for classfiles >= v51
Reviewed-by: never, acorn, dholmes
author | kamg |
---|---|
date | Wed, 19 May 2010 10:19:10 -0400 |
parents | 4ce7240d622c |
children | dfe27f03244a |
comparison
equal
deleted
inserted
replaced
1536:892898e961c5 | 1560:e40a3601bc1f |
---|---|
23 */ | 23 */ |
24 | 24 |
25 # include "incls/_precompiled.incl" | 25 # include "incls/_precompiled.incl" |
26 # include "incls/_verifier.cpp.incl" | 26 # include "incls/_verifier.cpp.incl" |
27 | 27 |
28 #define NOFAILOVER_MAJOR_VERSION 51 | |
29 | |
28 // Access to external entry for VerifyClassCodes - old byte code verifier | 30 // Access to external entry for VerifyClassCodes - old byte code verifier |
29 | 31 |
30 extern "C" { | 32 extern "C" { |
31 typedef jboolean (*verify_byte_codes_fn_t)(JNIEnv *, jclass, char *, jint); | 33 typedef jboolean (*verify_byte_codes_fn_t)(JNIEnv *, jclass, char *, jint); |
32 typedef jboolean (*verify_byte_codes_fn_new_t)(JNIEnv *, jclass, char *, jint, jint); | 34 typedef jboolean (*verify_byte_codes_fn_new_t)(JNIEnv *, jclass, char *, jint, jint); |
89 klass->major_version() >= STACKMAP_ATTRIBUTE_MAJOR_VERSION) { | 91 klass->major_version() >= STACKMAP_ATTRIBUTE_MAJOR_VERSION) { |
90 ClassVerifier split_verifier( | 92 ClassVerifier split_verifier( |
91 klass, message_buffer, message_buffer_len, THREAD); | 93 klass, message_buffer, message_buffer_len, THREAD); |
92 split_verifier.verify_class(THREAD); | 94 split_verifier.verify_class(THREAD); |
93 exception_name = split_verifier.result(); | 95 exception_name = split_verifier.result(); |
94 if (FailOverToOldVerifier && !HAS_PENDING_EXCEPTION && | 96 if (klass->major_version() < NOFAILOVER_MAJOR_VERSION && |
97 FailOverToOldVerifier && !HAS_PENDING_EXCEPTION && | |
95 (exception_name == vmSymbols::java_lang_VerifyError() || | 98 (exception_name == vmSymbols::java_lang_VerifyError() || |
96 exception_name == vmSymbols::java_lang_ClassFormatError())) { | 99 exception_name == vmSymbols::java_lang_ClassFormatError())) { |
97 if (TraceClassInitialization) { | 100 if (TraceClassInitialization) { |
98 tty->print_cr( | 101 tty->print_cr( |
99 "Fail over class verification to old verifier for: %s", klassName); | 102 "Fail over class verification to old verifier for: %s", klassName); |