# HG changeset patch # User acorn # Date 1359388530 18000 # Node ID a72c53517fe75438d84d65f345f9f7eb4f072512 # Parent fe4df8ab0eb7039433df8ec8531b9d54d15a6573 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 diff -r fe4df8ab0eb7 -r a72c53517fe7 hotspot/make/bsd/makefiles/mapfile-vers-debug --- a/hotspot/make/bsd/makefiles/mapfile-vers-debug Sun Jan 27 21:58:34 2013 -0500 +++ b/hotspot/make/bsd/makefiles/mapfile-vers-debug Mon Jan 28 10:55:30 2013 -0500 @@ -188,6 +188,7 @@ JVM_IsSilentCompiler; JVM_IsSupportedJNIVersion; JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; JVM_LatestUserDefinedLoader; JVM_Listen; JVM_LoadClass0; diff -r fe4df8ab0eb7 -r a72c53517fe7 hotspot/make/bsd/makefiles/mapfile-vers-product --- a/hotspot/make/bsd/makefiles/mapfile-vers-product Sun Jan 27 21:58:34 2013 -0500 +++ b/hotspot/make/bsd/makefiles/mapfile-vers-product Mon Jan 28 10:55:30 2013 -0500 @@ -188,6 +188,7 @@ JVM_IsSilentCompiler; JVM_IsSupportedJNIVersion; JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; JVM_LatestUserDefinedLoader; JVM_Listen; JVM_LoadClass0; diff -r fe4df8ab0eb7 -r a72c53517fe7 hotspot/make/linux/makefiles/mapfile-vers-debug --- a/hotspot/make/linux/makefiles/mapfile-vers-debug Sun Jan 27 21:58:34 2013 -0500 +++ b/hotspot/make/linux/makefiles/mapfile-vers-debug Mon Jan 28 10:55:30 2013 -0500 @@ -184,6 +184,7 @@ JVM_IsSilentCompiler; JVM_IsSupportedJNIVersion; JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; JVM_LatestUserDefinedLoader; JVM_Listen; JVM_LoadClass0; diff -r fe4df8ab0eb7 -r a72c53517fe7 hotspot/make/linux/makefiles/mapfile-vers-product --- a/hotspot/make/linux/makefiles/mapfile-vers-product Sun Jan 27 21:58:34 2013 -0500 +++ b/hotspot/make/linux/makefiles/mapfile-vers-product Mon Jan 28 10:55:30 2013 -0500 @@ -184,6 +184,7 @@ JVM_IsSilentCompiler; JVM_IsSupportedJNIVersion; JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; JVM_LatestUserDefinedLoader; JVM_Listen; JVM_LoadClass0; diff -r fe4df8ab0eb7 -r a72c53517fe7 hotspot/make/solaris/makefiles/mapfile-vers --- a/hotspot/make/solaris/makefiles/mapfile-vers Sun Jan 27 21:58:34 2013 -0500 +++ b/hotspot/make/solaris/makefiles/mapfile-vers Mon Jan 28 10:55:30 2013 -0500 @@ -184,6 +184,7 @@ JVM_IsSilentCompiler; JVM_IsSupportedJNIVersion; JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; JVM_LatestUserDefinedLoader; JVM_Listen; JVM_LoadClass0; diff -r fe4df8ab0eb7 -r a72c53517fe7 hotspot/src/share/vm/prims/jvm.cpp --- a/hotspot/src/share/vm/prims/jvm.cpp Sun Jan 27 21:58:34 2013 -0500 +++ b/hotspot/src/share/vm/prims/jvm.cpp Mon Jan 28 10:55:30 2013 -0500 @@ -2302,6 +2302,15 @@ 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)) JVMWrapper("JVM_GetMethodIxIxUTF"); Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); diff -r fe4df8ab0eb7 -r a72c53517fe7 hotspot/src/share/vm/prims/jvm.h --- a/hotspot/src/share/vm/prims/jvm.h Sun Jan 27 21:58:34 2013 -0500 +++ b/hotspot/src/share/vm/prims/jvm.h Mon Jan 28 10:55:30 2013 -0500 @@ -860,6 +860,13 @@ 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. * The result remains valid until JVM_ReleaseUTF is called. *