提交 cb116363 编写于 作者: A acorn

8004967: Default method cause VerifyError: Illegal use of nonvirtual

Summary: Recognize VM generated method in old verifier
Reviewed-by: acorn, coleenp
Contributed-by: bharadwaj.yadavelli@oracle.com
上级 28443efb
...@@ -188,6 +188,7 @@ SUNWprivate_1.1 { ...@@ -188,6 +188,7 @@ SUNWprivate_1.1 {
JVM_IsSilentCompiler; JVM_IsSilentCompiler;
JVM_IsSupportedJNIVersion; JVM_IsSupportedJNIVersion;
JVM_IsThreadAlive; JVM_IsThreadAlive;
JVM_IsVMGeneratedMethodIx;
JVM_LatestUserDefinedLoader; JVM_LatestUserDefinedLoader;
JVM_Listen; JVM_Listen;
JVM_LoadClass0; JVM_LoadClass0;
......
...@@ -188,6 +188,7 @@ SUNWprivate_1.1 { ...@@ -188,6 +188,7 @@ SUNWprivate_1.1 {
JVM_IsSilentCompiler; JVM_IsSilentCompiler;
JVM_IsSupportedJNIVersion; JVM_IsSupportedJNIVersion;
JVM_IsThreadAlive; JVM_IsThreadAlive;
JVM_IsVMGeneratedMethodIx;
JVM_LatestUserDefinedLoader; JVM_LatestUserDefinedLoader;
JVM_Listen; JVM_Listen;
JVM_LoadClass0; JVM_LoadClass0;
......
...@@ -184,6 +184,7 @@ SUNWprivate_1.1 { ...@@ -184,6 +184,7 @@ SUNWprivate_1.1 {
JVM_IsSilentCompiler; JVM_IsSilentCompiler;
JVM_IsSupportedJNIVersion; JVM_IsSupportedJNIVersion;
JVM_IsThreadAlive; JVM_IsThreadAlive;
JVM_IsVMGeneratedMethodIx;
JVM_LatestUserDefinedLoader; JVM_LatestUserDefinedLoader;
JVM_Listen; JVM_Listen;
JVM_LoadClass0; JVM_LoadClass0;
......
...@@ -184,6 +184,7 @@ SUNWprivate_1.1 { ...@@ -184,6 +184,7 @@ SUNWprivate_1.1 {
JVM_IsSilentCompiler; JVM_IsSilentCompiler;
JVM_IsSupportedJNIVersion; JVM_IsSupportedJNIVersion;
JVM_IsThreadAlive; JVM_IsThreadAlive;
JVM_IsVMGeneratedMethodIx;
JVM_LatestUserDefinedLoader; JVM_LatestUserDefinedLoader;
JVM_Listen; JVM_Listen;
JVM_LoadClass0; JVM_LoadClass0;
......
...@@ -184,6 +184,7 @@ SUNWprivate_1.1 { ...@@ -184,6 +184,7 @@ SUNWprivate_1.1 {
JVM_IsSilentCompiler; JVM_IsSilentCompiler;
JVM_IsSupportedJNIVersion; JVM_IsSupportedJNIVersion;
JVM_IsThreadAlive; JVM_IsThreadAlive;
JVM_IsVMGeneratedMethodIx;
JVM_LatestUserDefinedLoader; JVM_LatestUserDefinedLoader;
JVM_Listen; JVM_Listen;
JVM_LoadClass0; JVM_LoadClass0;
......
...@@ -2302,6 +2302,15 @@ JVM_QUICK_ENTRY(jboolean, JVM_IsConstructorIx(JNIEnv *env, jclass cls, int metho ...@@ -2302,6 +2302,15 @@ JVM_QUICK_ENTRY(jboolean, JVM_IsConstructorIx(JNIEnv *env, jclass cls, int metho
JVM_END JVM_END
JVM_QUICK_ENTRY(jboolean, JVM_IsVMGeneratedMethodIx(JNIEnv *env, jclass cls, int method_index))
JVMWrapper("JVM_IsVMGeneratedMethodIx");
ResourceMark rm(THREAD);
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
return method->is_overpass();
JVM_END
JVM_ENTRY(const char*, JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index)) JVM_ENTRY(const char*, JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index))
JVMWrapper("JVM_GetMethodIxIxUTF"); JVMWrapper("JVM_GetMethodIxIxUTF");
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
......
...@@ -859,6 +859,13 @@ JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cb, int index); ...@@ -859,6 +859,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.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册