/*
 * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 *  
 */

provider hotspot_jni {
  probe AllocObject__entry(void*, void*);
  probe AllocObject__return(void*);
  probe AttachCurrentThreadAsDaemon__entry(void*, void**, void*);
  probe AttachCurrentThreadAsDaemon__return(uint32_t);
  probe AttachCurrentThread__entry(void*, void**, void*);
  probe AttachCurrentThread__return(uint32_t);
  probe CallBooleanMethodA__entry(void*, void*, uintptr_t);
  probe CallBooleanMethodA__return(uintptr_t);
  probe CallBooleanMethod__entry(void*, void*, uintptr_t);
  probe CallBooleanMethod__return(uintptr_t);
  probe CallBooleanMethodV__entry(void*, void*, uintptr_t);
  probe CallBooleanMethodV__return(uintptr_t);
  probe CallByteMethodA__entry(void*, void*, uintptr_t);
  probe CallByteMethodA__return(char);
  probe CallByteMethod__entry(void*, void*, uintptr_t);
  probe CallByteMethod__return(char);
  probe CallByteMethodV__entry(void*, void*, uintptr_t);
  probe CallByteMethodV__return(char);
  probe CallCharMethodA__entry(void*, void*, uintptr_t);
  probe CallCharMethodA__return(uint16_t);
  probe CallCharMethod__entry(void*, void*, uintptr_t);
  probe CallCharMethod__return(uint16_t);
  probe CallCharMethodV__entry(void*, void*, uintptr_t);
  probe CallCharMethodV__return(uint16_t);
  probe CallDoubleMethodA__entry(void*, void*, uintptr_t);
  probe CallDoubleMethodA__return();
  probe CallDoubleMethod__entry(void*, void*, uintptr_t);
  probe CallDoubleMethod__return();
  probe CallDoubleMethodV__entry(void*, void*, uintptr_t);
  probe CallDoubleMethodV__return();
  probe CallFloatMethodA__entry(void*, void*, uintptr_t);
  probe CallFloatMethodA__return();
  probe CallFloatMethod__entry(void*, void*, uintptr_t);
  probe CallFloatMethod__return();
  probe CallFloatMethodV__entry(void*, void*, uintptr_t);
  probe CallFloatMethodV__return();
  probe CallIntMethodA__entry(void*, void*, uintptr_t);
  probe CallIntMethodA__return(uint32_t);
  probe CallIntMethod__entry(void*, void*, uintptr_t);
  probe CallIntMethod__return(uint32_t);
  probe CallIntMethodV__entry(void*, void*, uintptr_t);
  probe CallIntMethodV__return(uint32_t);
  probe CallLongMethodA__entry(void*, void*, uintptr_t);
  probe CallLongMethodA__return(uintptr_t);
  probe CallLongMethod__entry(void*, void*, uintptr_t);
  probe CallLongMethod__return(uintptr_t);
  probe CallLongMethodV__entry(void*, void*, uintptr_t);
  probe CallLongMethodV__return(uintptr_t);
  probe CallNonvirtualBooleanMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualBooleanMethodA__return(uintptr_t);
  probe CallNonvirtualBooleanMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualBooleanMethod__return(uintptr_t);
  probe CallNonvirtualBooleanMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualBooleanMethodV__return(uintptr_t);
  probe CallNonvirtualByteMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualByteMethodA__return(char);
  probe CallNonvirtualByteMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualByteMethod__return(char);
  probe CallNonvirtualByteMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualByteMethodV__return(char);
  probe CallNonvirtualCharMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualCharMethodA__return(uint16_t);
  probe CallNonvirtualCharMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualCharMethod__return(uint16_t);
  probe CallNonvirtualCharMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualCharMethodV__return(uint16_t);
  probe CallNonvirtualDoubleMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualDoubleMethodA__return();
  probe CallNonvirtualDoubleMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualDoubleMethod__return();
  probe CallNonvirtualDoubleMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualDoubleMethodV__return();
  probe CallNonvirtualFloatMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualFloatMethodA__return();
  probe CallNonvirtualFloatMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualFloatMethod__return();
  probe CallNonvirtualFloatMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualFloatMethodV__return();
  probe CallNonvirtualIntMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualIntMethodA__return(uint32_t);
  probe CallNonvirtualIntMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualIntMethod__return(uint32_t);
  probe CallNonvirtualIntMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualIntMethodV__return(uint32_t);
  probe CallNonvirtualLongMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualLongMethodA__return(uintptr_t);
  probe CallNonvirtualLongMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualLongMethod__return(uintptr_t);
  probe CallNonvirtualLongMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualLongMethodV__return(uintptr_t);
  probe CallNonvirtualObjectMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualObjectMethodA__return(void*);
  probe CallNonvirtualObjectMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualObjectMethod__return(void*);
  probe CallNonvirtualObjectMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualObjectMethodV__return(void*);
  probe CallNonvirtualShortMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualShortMethodA__return(uint16_t);
  probe CallNonvirtualShortMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualShortMethod__return(uint16_t);
  probe CallNonvirtualShortMethodV__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualShortMethodV__return(uint16_t);
  probe CallNonvirtualVoidMethodA__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualVoidMethodA__return();
  probe CallNonvirtualVoidMethod__entry(void*, void*, void*, uintptr_t);
  probe CallNonvirtualVoidMethod__return();
  probe CallNonvirtualVoidMethodV__entry(void*, void*, void*, uintptr_t);  
  probe CallNonvirtualVoidMethodV__return();
  probe CallObjectMethodA__entry(void*, void*, uintptr_t);
  probe CallObjectMethodA__return(void*);
  probe CallObjectMethod__entry(void*, void*, uintptr_t);
  probe CallObjectMethod__return(void*);
  probe CallObjectMethodV__entry(void*, void*, uintptr_t);
  probe CallObjectMethodV__return(void*);
  probe CallShortMethodA__entry(void*, void*, uintptr_t);
  probe CallShortMethodA__return(uint16_t);
  probe CallShortMethod__entry(void*, void*, uintptr_t);
  probe CallShortMethod__return(uint16_t);
  probe CallShortMethodV__entry(void*, void*, uintptr_t);
  probe CallShortMethodV__return(uint16_t);
  probe CallStaticBooleanMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticBooleanMethodA__return(uintptr_t);
  probe CallStaticBooleanMethod__entry(void*, void*, uintptr_t);
  probe CallStaticBooleanMethod__return(uintptr_t);
  probe CallStaticBooleanMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticBooleanMethodV__return(uintptr_t);
  probe CallStaticByteMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticByteMethodA__return(char);
  probe CallStaticByteMethod__entry(void*, void*, uintptr_t);
  probe CallStaticByteMethod__return(char);
  probe CallStaticByteMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticByteMethodV__return(char);
  probe CallStaticCharMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticCharMethodA__return(uint16_t);
  probe CallStaticCharMethod__entry(void*, void*, uintptr_t);
  probe CallStaticCharMethod__return(uint16_t);
  probe CallStaticCharMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticCharMethodV__return(uint16_t);
  probe CallStaticDoubleMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticDoubleMethodA__return();
  probe CallStaticDoubleMethod__entry(void*, void*, uintptr_t);
  probe CallStaticDoubleMethod__return();
  probe CallStaticDoubleMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticDoubleMethodV__return();
  probe CallStaticFloatMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticFloatMethodA__return();
  probe CallStaticFloatMethod__entry(void*, void*, uintptr_t);
  probe CallStaticFloatMethod__return();
  probe CallStaticFloatMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticFloatMethodV__return();
  probe CallStaticIntMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticIntMethodA__return(uint32_t);
  probe CallStaticIntMethod__entry(void*, void*, uintptr_t);
  probe CallStaticIntMethod__return(uint32_t);
  probe CallStaticIntMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticIntMethodV__return(uint32_t);
  probe CallStaticLongMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticLongMethodA__return(uintptr_t);
  probe CallStaticLongMethod__entry(void*, void*, uintptr_t);
  probe CallStaticLongMethod__return(uintptr_t);
  probe CallStaticLongMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticLongMethodV__return(uintptr_t);
  probe CallStaticObjectMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticObjectMethodA__return(void*);
  probe CallStaticObjectMethod__entry(void*, void*, uintptr_t);
  probe CallStaticObjectMethod__return(void*);
  probe CallStaticObjectMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticObjectMethodV__return(void*);
  probe CallStaticShortMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticShortMethodA__return(uint16_t);
  probe CallStaticShortMethod__entry(void*, void*, uintptr_t);
  probe CallStaticShortMethod__return(uint16_t);
  probe CallStaticShortMethodV__entry(void*, void*, uintptr_t);
  probe CallStaticShortMethodV__return(uint16_t);
  probe CallStaticVoidMethodA__entry(void*, void*, uintptr_t);
  probe CallStaticVoidMethodA__return();
  probe CallStaticVoidMethod__entry(void*, void*, uintptr_t);
  probe CallStaticVoidMethod__return(); 
  probe CallStaticVoidMethodV__entry(void*, void*, uintptr_t);  
  probe CallStaticVoidMethodV__return();
  probe CallVoidMethodA__entry(void*, void*, uintptr_t);  
  probe CallVoidMethodA__return();
  probe CallVoidMethod__entry(void*, void*, uintptr_t);  
  probe CallVoidMethod__return(); 
  probe CallVoidMethodV__entry(void*, void*, uintptr_t);  
  probe CallVoidMethodV__return();
  probe CreateJavaVM__entry(void**, void**, void*);
  probe CreateJavaVM__return(uint32_t);
  probe DefineClass__entry(void*, const char*, void*, char, uintptr_t);
  probe DefineClass__return(void*);
  probe DeleteGlobalRef__entry(void*, void*);
  probe DeleteGlobalRef__return();
  probe DeleteLocalRef__entry(void*, void*);
  probe DeleteLocalRef__return();
  probe DeleteWeakGlobalRef__entry(void*, void*);
  probe DeleteWeakGlobalRef__return();
  probe DestroyJavaVM__entry(void*);
  probe DestroyJavaVM__return(uint32_t);
  probe DetachCurrentThread__entry(void*);
  probe DetachCurrentThread__return(uint32_t);
  probe EnsureLocalCapacity__entry(void*, uint32_t);
  probe EnsureLocalCapacity__return(uint32_t);
  probe ExceptionCheck__entry(void*);
  probe ExceptionCheck__return(uintptr_t);
  probe ExceptionClear__entry(void*);
  probe ExceptionClear__return();
  probe ExceptionDescribe__entry(void*);  
  probe ExceptionDescribe__return();
  probe ExceptionOccurred__entry(void*);
  probe ExceptionOccurred__return(void*);
  probe FatalError__entry(void* env, const char*);
  probe FindClass__entry(void*, const char*);
  probe FindClass__return(void*);
  probe FromReflectedField__entry(void*, void*);
  probe FromReflectedField__return(uintptr_t);
  probe FromReflectedMethod__entry(void*, void*);
  probe FromReflectedMethod__return(uintptr_t);
  probe GetArrayLength__entry(void*, void*);
  probe GetArrayLength__return(uintptr_t);
  probe GetBooleanArrayElements__entry(void*, void*, uintptr_t*);
  probe GetBooleanArrayElements__return(uintptr_t*);
  probe GetBooleanArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, uintptr_t*);
  probe GetBooleanArrayRegion__return();
  probe GetBooleanField__entry(void*, void*, uintptr_t);
  probe GetBooleanField__return(uintptr_t);
  probe GetByteArrayElements__entry(void*, void*, uintptr_t*);
  probe GetByteArrayElements__return(char*);
  probe GetByteArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, char*);
  probe GetByteArrayRegion__return();
  probe GetByteField__entry(void*, void*, uintptr_t);
  probe GetByteField__return(char);
  probe GetCharArrayElements__entry(void*, void*, uintptr_t*);
  probe GetCharArrayElements__return(uint16_t*);
  probe GetCharArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, uint16_t*);
  probe GetCharArrayRegion__return();
  probe GetCharField__entry(void*, void*, uintptr_t);
  probe GetCharField__return(uint16_t);
  probe GetCreatedJavaVMs__entry(void**, uintptr_t, uintptr_t*);
  probe GetCreatedJavaVMs__return(uintptr_t);
  probe GetDefaultJavaVMInitArgs__entry(void*);
  probe GetDefaultJavaVMInitArgs__return(uint32_t);
  probe GetDirectBufferAddress__entry(void*, void*);
  probe GetDirectBufferAddress__return(void*);
  probe GetDirectBufferCapacity__entry(void*, void*);
  probe GetDirectBufferCapacity__return(uintptr_t);
  probe GetDoubleArrayElements__entry(void*, void*, uintptr_t*);
  probe GetDoubleArrayElements__return(double*);
  probe GetDoubleArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, double*);
  probe GetDoubleArrayRegion__return();
  probe GetDoubleField__entry(void*, void*, uintptr_t);
  probe GetDoubleField__return();
  probe GetEnv__entry(void*, void*, uint32_t);
  probe GetEnv__return(uint32_t);
  probe GetFieldID__entry(void*, void*, const char*, const char*);
  probe GetFieldID__return(uintptr_t);
  probe GetFloatArrayElements__entry(void*, void*, uintptr_t*);
  probe GetFloatArrayElements__return(float*);
  probe GetFloatArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, float*);
  probe GetFloatArrayRegion__return();
  probe GetFloatField__entry(void*, void*, uintptr_t);
  probe GetFloatField__return();
  probe GetIntArrayElements__entry(void*, void*, uintptr_t*);
  probe GetIntArrayElements__return(uint32_t*);
  probe GetIntArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, uint32_t*);
  probe GetIntArrayRegion__return();
  probe GetIntField__entry(void*, void*, uintptr_t);
  probe GetIntField__return(uint32_t);
  probe GetJavaVM__entry(void*, void**);
  probe GetJavaVM__return(uint32_t);
  probe GetLongArrayElements__entry(void*, void*, uintptr_t*);
  probe GetLongArrayElements__return(uintptr_t*);
  probe GetLongArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, uintptr_t*);
  probe GetLongArrayRegion__return();
  probe GetLongField__entry(void*, void*, uintptr_t);
  probe GetLongField__return(uintptr_t);
  probe GetMethodID__entry(void*, void*, const char*, const char*);
  probe GetMethodID__return(uintptr_t);
  probe GetObjectArrayElement__entry(void*, void*, uintptr_t);
  probe GetObjectArrayElement__return(void*);
  probe GetObjectClass__entry(void*, void*);
  probe GetObjectClass__return(void*);
  probe GetObjectField__entry(void*, void*, uintptr_t);
  probe GetObjectField__return(void*);
  probe GetObjectRefType__entry(void*, void*);
  probe GetObjectRefType__return(void*);
  probe GetPrimitiveArrayCritical__entry(void*, void*, uintptr_t*);
  probe GetPrimitiveArrayCritical__return(void*);
  probe GetShortArrayElements__entry(void*, void*, uintptr_t*);
  probe GetShortArrayElements__return(uint16_t*);
  probe GetShortArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, uint16_t*);
  probe GetShortArrayRegion__return();
  probe GetShortField__entry(void*, void*, uintptr_t);
  probe GetShortField__return(uint16_t);
  probe GetStaticBooleanField__entry(void*, void*, uintptr_t);
  probe GetStaticBooleanField__return(uintptr_t);
  probe GetStaticByteField__entry(void*, void*, uintptr_t);
  probe GetStaticByteField__return(char);
  probe GetStaticCharField__entry(void*, void*, uintptr_t);
  probe GetStaticCharField__return(uint16_t);
  probe GetStaticDoubleField__entry(void*, void*, uintptr_t);
  probe GetStaticDoubleField__return();
  probe GetStaticFieldID__entry(void*, void*, const char*, const char*);
  probe GetStaticFieldID__return(uintptr_t);
  probe GetStaticFloatField__entry(void*, void*, uintptr_t);
  probe GetStaticFloatField__return();
  probe GetStaticIntField__entry(void*, void*, uintptr_t);
  probe GetStaticIntField__return(uint32_t);
  probe GetStaticLongField__entry(void*, void*, uintptr_t);
  probe GetStaticLongField__return(uintptr_t);
  probe GetStaticMethodID__entry(void*, void*, const char*, const char*);
  probe GetStaticMethodID__return(uintptr_t);
  probe GetStaticObjectField__entry(void*, void*, uintptr_t);
  probe GetStaticObjectField__return(void*);
  probe GetStaticShortField__entry(void*, void*, uintptr_t);
  probe GetStaticShortField__return(uint16_t);
  probe GetStringChars__entry(void*, void*, uintptr_t*);
  probe GetStringChars__return(const uint16_t*);
  probe GetStringCritical__entry(void*, void*, uintptr_t*);
  probe GetStringCritical__return(const uint16_t*);
  probe GetStringLength__entry(void*, void*);
  probe GetStringLength__return(uintptr_t);
  probe GetStringRegion__entry(void*, void*, uintptr_t, uintptr_t, uint16_t*);
  probe GetStringRegion__return();
  probe GetStringUTFChars__entry(void*, void*, uintptr_t*);
  probe GetStringUTFChars__return(const char*);
  probe GetStringUTFLength__entry(void*, void*);
  probe GetStringUTFLength__return(uintptr_t);
  probe GetStringUTFRegion__entry(void*, void*, uintptr_t, uintptr_t, char*);
  probe GetStringUTFRegion__return();
  probe GetSuperclass__entry(void*, void*);
  probe GetSuperclass__return(void*);
  probe GetVersion__entry(void*);
  probe GetVersion__return(uint32_t);
  probe IsAssignableFrom__entry(void*, void*, void*);
  probe IsAssignableFrom__return(uintptr_t);
  probe IsInstanceOf__entry(void*, void*, void*);
  probe IsInstanceOf__return(uintptr_t);
  probe IsSameObject__entry(void*, void*, void*);
  probe IsSameObject__return(uintptr_t);
  probe MonitorEnter__entry(void*, void*);
  probe MonitorEnter__return(uint32_t);
  probe MonitorExit__entry(void*, void*);
  probe MonitorExit__return(uint32_t);
  probe NewBooleanArray__entry(void*, uintptr_t);
  probe NewBooleanArray__return(void*);
  probe NewByteArray__entry(void*, uintptr_t);
  probe NewByteArray__return(void*);
  probe NewCharArray__entry(void*, uintptr_t);
  probe NewCharArray__return(void*);
  probe NewDirectByteBuffer__entry(void*, void*, uintptr_t);
  probe NewDirectByteBuffer__return(void*);
  probe NewDoubleArray__entry(void*, uintptr_t);
  probe NewDoubleArray__return(void*);
  probe NewFloatArray__entry(void*, uintptr_t);
  probe NewFloatArray__return(void*);
  probe NewGlobalRef__entry(void*, void*);
  probe NewGlobalRef__return(void*);
  probe NewIntArray__entry(void*, uintptr_t);
  probe NewIntArray__return(void*);
  probe NewLocalRef__entry(void*, void*);
  probe NewLocalRef__return(void*);
  probe NewLongArray__entry(void*, uintptr_t);
  probe NewLongArray__return(void*);
  probe NewObjectA__entry(void*, void*, uintptr_t);  
  probe NewObjectA__return(void*);
  probe NewObjectArray__entry(void*, uintptr_t, void*, void*);
  probe NewObjectArray__return(void*);
  probe NewObject__entry(void*, void*, uintptr_t); 
  probe NewObject__return(void*);
  probe NewObjectV__entry(void*, void*, uintptr_t);  
  probe NewObjectV__return(void*);
  probe NewShortArray__entry(void*, uintptr_t);
  probe NewShortArray__return(void*);
  probe NewString__entry(void*, const uint16_t*, uintptr_t);
  probe NewString__return(void*);
  probe NewStringUTF__entry(void*, const char*);
  probe NewStringUTF__return(void*);
  probe NewWeakGlobalRef__entry(void*, void*);
  probe NewWeakGlobalRef__return(void*);
  probe PopLocalFrame__entry(void*, void*);
  probe PopLocalFrame__return(void*);
  probe PushLocalFrame__entry(void*, uint32_t);
  probe PushLocalFrame__return(uint32_t);
  probe RegisterNatives__entry(void*, void*, const void*, uint32_t);  
  probe RegisterNatives__return(uint32_t);
  probe ReleaseBooleanArrayElements__entry(void*, void*, uintptr_t*, uint32_t);
  probe ReleaseBooleanArrayElements__return();
  probe ReleaseByteArrayElements__entry(void*, void*, char*, uint32_t);
  probe ReleaseByteArrayElements__return();
  probe ReleaseCharArrayElements__entry(void*, void*, uint16_t*, uint32_t);
  probe ReleaseCharArrayElements__return();
  probe ReleaseDoubleArrayElements__entry(void*, void*, double*, uint32_t);
  probe ReleaseDoubleArrayElements__return();
  probe ReleaseFloatArrayElements__entry(void*, void*, float*, uint32_t);
  probe ReleaseFloatArrayElements__return();
  probe ReleaseIntArrayElements__entry(void*, void*, uint32_t*, uint32_t);
  probe ReleaseIntArrayElements__return();
  probe ReleaseLongArrayElements__entry(void*, void*, uintptr_t*, uint32_t);
  probe ReleaseLongArrayElements__return();
  probe ReleasePrimitiveArrayCritical__entry(void*, void*, void*, uint32_t);
  probe ReleasePrimitiveArrayCritical__return();
  probe ReleaseShortArrayElements__entry(void*, void*, uint16_t*, uint32_t);
  probe ReleaseShortArrayElements__return();
  probe ReleaseStringChars__entry(void*, void*, const uint16_t*);
  probe ReleaseStringChars__return();
  probe ReleaseStringCritical__entry(void*, void*, const uint16_t*);
  probe ReleaseStringCritical__return();
  probe ReleaseStringUTFChars__entry(void*, void*, const char*);
  probe ReleaseStringUTFChars__return();
  probe SetBooleanArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const uintptr_t*);
  probe SetBooleanArrayRegion__return();
  probe SetBooleanField__entry(void*, void*, uintptr_t, uintptr_t);
  probe SetBooleanField__return();
  probe SetByteArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const char*);
  probe SetByteArrayRegion__return();
  probe SetByteField__entry(void*, void*, uintptr_t, char);
  probe SetByteField__return();
  probe SetCharArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const uint16_t*);
  probe SetCharArrayRegion__return();
  probe SetCharField__entry(void*, void*, uintptr_t, uint16_t);
  probe SetCharField__return();
  probe SetDoubleArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const double*);
  probe SetDoubleArrayRegion__return();
  probe SetDoubleField__entry(void*, void*, uintptr_t);
  probe SetDoubleField__return();
  probe SetFloatArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const float*);
  probe SetFloatArrayRegion__return();
  probe SetFloatField__entry(void*, void*, uintptr_t);
  probe SetFloatField__return();
  probe SetIntArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const uint32_t*);
  probe SetIntArrayRegion__return();
  probe SetIntField__entry(void*, void*, uintptr_t, uint32_t);
  probe SetIntField__return();
  probe SetLongArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const uintptr_t*);
  probe SetLongArrayRegion__return();
  probe SetLongField__entry(void*, void*, uintptr_t, uintptr_t);
  probe SetLongField__return();
  probe SetObjectArrayElement__entry(void*, void*, uintptr_t, void*);
  probe SetObjectArrayElement__return();
  probe SetObjectField__entry(void*, void*, uintptr_t, void*);
  probe SetObjectField__return();
  probe SetShortArrayRegion__entry(void*, void*, uintptr_t, uintptr_t, const uint16_t*);
  probe SetShortArrayRegion__return();
  probe SetShortField__entry(void*, void*, uintptr_t, uint16_t);
  probe SetShortField__return();
  probe SetStaticBooleanField__entry(void*, void*, uintptr_t, uintptr_t);
  probe SetStaticBooleanField__return();
  probe SetStaticByteField__entry(void*, void*, uintptr_t, char);
  probe SetStaticByteField__return();
  probe SetStaticCharField__entry(void*, void*, uintptr_t, uint16_t);
  probe SetStaticCharField__return();
  probe SetStaticDoubleField__entry(void*, void*, uintptr_t);
  probe SetStaticDoubleField__return();
  probe SetStaticFloatField__entry(void*, void*, uintptr_t);
  probe SetStaticFloatField__return();
  probe SetStaticIntField__entry(void*, void*, uintptr_t, uint32_t);
  probe SetStaticIntField__return();
  probe SetStaticLongField__entry(void*, void*, uintptr_t, uintptr_t);
  probe SetStaticLongField__return();
  probe SetStaticObjectField__entry(void*, void*, uintptr_t, void*);
  probe SetStaticObjectField__return();
  probe SetStaticShortField__entry(void*, void*, uintptr_t, uint16_t);
  probe SetStaticShortField__return();
  probe Throw__entry(void*, void*);
  probe Throw__return(intptr_t);
  probe ThrowNew__entry(void*, void*, const char*);  
  probe ThrowNew__return(intptr_t);  
  probe ToReflectedField__entry(void*, void*, uintptr_t, uintptr_t);
  probe ToReflectedField__return(void*);
  probe ToReflectedMethod__entry(void*, void*, uintptr_t, uintptr_t);
  probe ToReflectedMethod__return(void*);
  probe UnregisterNatives__entry(void*, void*);  
  probe UnregisterNatives__return(uint32_t);
};

#pragma D attributes Standard/Standard/Common provider hotspot_jni provider
#pragma D attributes Private/Private/Unknown provider hotspot_jni module
#pragma D attributes Private/Private/Unknown provider hotspot_jni function
#pragma D attributes Standard/Standard/Common provider hotspot_jni name
#pragma D attributes Evolving/Evolving/Common provider hotspot_jni args

