8007888: jdk fix default method: VerifyError: Illegal use of nonvirtual
Recognize VM generated method in old verifier. With 8004967 Reviewed-by: coleenp, acorn
This commit is contained in:
parent
4c2a4c9b4a
commit
db31a896d8
@ -821,6 +821,13 @@ JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cb, int index);
|
|||||||
JNIEXPORT jboolean JNICALL
|
JNIEXPORT jboolean JNICALL
|
||||||
JVM_IsConstructorIx(JNIEnv *env, jclass cb, int index);
|
JVM_IsConstructorIx(JNIEnv *env, jclass cb, int index);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Is the given method generated by the VM.
|
||||||
|
* The method is identified by method_index.
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL
|
||||||
|
JVM_IsVMGeneratedMethodIx(JNIEnv *env, jclass cb, int index);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the name of a given method in UTF format.
|
* Returns the name of a given method in UTF format.
|
||||||
* The result remains valid until JVM_ReleaseUTF is called.
|
* The result remains valid until JVM_ReleaseUTF is called.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -983,6 +983,12 @@ verify_method(context_type *context, jclass cb, int method_index,
|
|||||||
CCerror(context, "Inconsistent access bits.");
|
CCerror(context, "Inconsistent access bits.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If this method is an overpass method, which is generated by the VM,
|
||||||
|
// we trust the code and no check needs to be done.
|
||||||
|
if (JVM_IsVMGeneratedMethodIx(env, cb, method_index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Run through the code. Mark the start of each instruction, and give
|
/* Run through the code. Mark the start of each instruction, and give
|
||||||
* the instruction a number */
|
* the instruction a number */
|
||||||
for (i = 0, offset = 0; offset < code_length; i++) {
|
for (i = 0, offset = 0; offset < code_length; i++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user