diff --git a/src/hotspot/share/prims/jvmti.xml b/src/hotspot/share/prims/jvmti.xml index 71d3c06cd79..e062e121680 100644 --- a/src/hotspot/share/prims/jvmti.xml +++ b/src/hotspot/share/prims/jvmti.xml @@ -9909,9 +9909,11 @@ myInit() { there is a jint parameter, the event handler should be declared: - void JNICALL myHandler(jvmtiEnv* jvmti_env, jint myInt, ...) + void JNICALL myHandler(jvmtiEnv* jvmti_env, ...) Note the terminal "..." which indicates varargs. + The jint argument inside myHandler needs to be extracted using + the va_* syntax of the C programming language. diff --git a/src/hotspot/share/prims/jvmtiExtensions.cpp b/src/hotspot/share/prims/jvmtiExtensions.cpp index f82b819223e..36bc47ad0b5 100644 --- a/src/hotspot/share/prims/jvmtiExtensions.cpp +++ b/src/hotspot/share/prims/jvmtiExtensions.cpp @@ -34,7 +34,14 @@ GrowableArray* JvmtiExtensions::_ext_events; // extension function -static jvmtiError JNICALL IsClassUnloadingEnabled(const jvmtiEnv* env, jboolean* enabled, ...) { +static jvmtiError JNICALL IsClassUnloadingEnabled(const jvmtiEnv* env, ...) { + jboolean* enabled = NULL; + va_list ap; + + va_start(ap, env); + enabled = va_arg(ap, jboolean *); + va_end(ap); + if (enabled == NULL) { return JVMTI_ERROR_NULL_POINTER; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/extension/EX03/ex03t001/ex03t001.c b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/extension/EX03/ex03t001/ex03t001.c index 6329eb8eeaf..3c123154d56 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/extension/EX03/ex03t001/ex03t001.c +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/extension/EX03/ex03t001/ex03t001.c @@ -43,7 +43,15 @@ static jrawMonitorID eventMon; /* ============================================================================= */ static void JNICALL -ClassUnload(jvmtiEnv* jvmti_env, JNIEnv* jni_env, const char* name, ...) { +ClassUnload(jvmtiEnv* jvmti_env, ...) { + JNIEnv *jni_env = NULL; + va_list ap; + + va_start(ap, jvmti_env); + jni_env = va_arg(ap, JNIEnv *); + const char * name = va_arg(ap, const char *); + va_end(ap); + // The name argument should never be null if (name == NULL) { nsk_jvmti_setFailStatus();