提交 9a1c17be 编写于 作者: A acorn

8007888: jdk fix default method: VerifyError: Illegal use of nonvirtual

Summary: Recognize VM generated method in old verifier. With 8004967
Reviewed-by: coleenp, acorn
Contributed-by: bharadwaj.yadavalli@oracle.com
上级 8f4fc788
...@@ -821,6 +821,13 @@ JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cb, int index); ...@@ -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.
......
/* /*
* 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, ...@@ -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++) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册