40 #if defined(ENABLE_JVMTI)
74 # define TRACEJNICALLS(x) \
76 if (opt_TraceJNICalls) { \
81 # define TRACEJNICALLSENTER(x) \
83 if (opt_TraceJNICalls) { \
89 # define TRACEJNICALLSEXIT(x) \
91 if (opt_TraceJNICalls) { \
99 # define TRACEJNICALLS(x)
100 # define TRACEJNICALLSENTER(x)
101 # define TRACEJNICALLSEXIT(x)
106 STAT_REGISTER_GROUP_VAR(
u8,count_jni_callXmethod_calls,0,"jni callXmethod calls","Number of jni->CallXMethod function invokations",function_call_stat)
107 STAT_REGISTER_GROUP_VAR(u8,count_jni_calls,0,"jni calls","Overall number of jni invokations",function_call_stat)
115 #define HASHTABLE_GLOBAL_REF_SIZE 64
122 #if defined(ENABLE_JAVASE)
125 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
130 # if SIZEOF_VOID_P == 8
133 static classinfo *class_gnu_classpath_Pointer32;
138 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
140 static classinfo *class_sun_nio_ch_DirectBuffer;
141 static classinfo *class_java_nio_DirectByteBuffer;
156 #ifdef ENABLE_STATISTICS
163 inline void jnicallXmethodnvokation(
void)
176 inline void jniinvokation(
void)
181 #endif // ENABLE_STATISTICS
201 #if defined(ENABLE_JAVASE)
204 if (!(class_java_nio_Buffer =
209 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
211 if (!(class_java_nio_DirectByteBufferImpl =
213 !
link_class(class_java_nio_DirectByteBufferImpl))
216 if (!(class_java_nio_DirectByteBufferImpl_ReadWrite =
218 !
link_class(class_java_nio_DirectByteBufferImpl_ReadWrite))
227 # if SIZEOF_VOID_P == 8
228 if (!(class_gnu_classpath_Pointer64 =
233 if (!(class_gnu_classpath_Pointer32 =
239 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
241 if (!(class_sun_nio_ch_DirectBuffer =
243 vm_abort(
"jni_init: loading sun/nio/ch/DirectBuffer failed");
245 if (!
link_class(class_sun_nio_ch_DirectBuffer))
246 vm_abort(
"jni_init: linking sun/nio/ch/DirectBuffer failed");
248 if (!(class_java_nio_DirectByteBuffer =
250 vm_abort(
"jni_init: loading java/nio/DirectByteBuffer failed");
252 if (!
link_class(class_java_nio_DirectByteBuffer))
253 vm_abort(
"jni_init: linking java/nio/DirectByteBuffer failed");
259 vm_abort(
"jni_init: resolving java/nio/DirectByteBuffer.init(JI)V failed");
285 case JNI_VERSION_1_1:
286 case JNI_VERSION_1_2:
287 case JNI_VERSION_1_4:
288 case JNI_VERSION_1_6:
841 #if defined(ENABLE_JAVASE)
847 TRACEJNICALLS((
"jni_DefineClass(env=%p, name=%s, loader=%p, buf=%p, bufLen=%d)", env, name, loader, buf, bufLen));
858 vm_abort(
"jni_DefineClass: Not implemented in this configuration");
877 #if defined(ENABLE_JAVASE)
882 TRACEJNICALLS((
"jni_FindClass(env=%p, name=%s)", env, name));
914 #if defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
916 if (!cl && cc->
name == utf8::java_lang_ClassLoader_NativeLibrary)
950 #elif defined(ENABLE_JAVAME_CLDC1_1)
953 TRACEJNICALLS((
"jni_FindClass(env=%p, name=%s)", env, name));
969 vm_abort(
"jni_FindClass: not implemented in this configuration");
991 TRACEJNICALLS((
"jni_GetSuperclass(env=%p, sub=%p)", env, sub));
1017 TRACEJNICALLS((
"_Jv_JNI_IsAssignableFrom(env=%p, sub=%p, sup=%p)", env, sub, sup));
1144 vm_abort(
"JNI Fatal error: %s", msg);
1157 TRACEJNICALLS((
"jni_PushLocalFrame(env=%p, capacity=%d)", env, capacity));
1181 TRACEJNICALLS((
"jni_PopLocalFrame(env=%p, result=%p)", env, result));
1203 TRACEJNICALLS((
"jni_DeleteLocalRef(env=%p, ref=%p)", env, localRef));
1257 TRACEJNICALLS((
"jni_NewLocalRef(env=%p, ref=%p)", env, ref));
1283 TRACEJNICALLS((
"jni_EnsureLocalCapacity(env=%p, capacity=%d)", env, capacity));
1341 TRACEJNICALLSENTER((
"jni_NewObject(env=%p, clazz=%p, methodID=%p, ...)", env, clazz, methodID));
1355 va_start(ap, methodID);
1450 TRACEJNICALLS((
"jni_GetObjectClass(env=%p, obj=%p)", env, obj));
1473 TRACEJNICALLS((
"_Jv_JNI_IsInstanceOf(env=%p, obj=%p, clazz=%p)", env, obj, clazz));
1494 #if defined(ENABLE_JAVASE)
1497 TRACEJNICALLS((
"jni_FromReflectedMethod(env=%p, method=%p)", env, method));
1512 m = rm.get_method();
1515 return (jmethodID) m;
1517 vm_abort(
"jni_FromReflectedMethod: Not implemented in this configuration.");
1533 #if defined(ENABLE_JAVASE)
1535 TRACEJNICALLS((
"jni_FromReflectedField(env=%p, field=%p)", env, field));
1544 return (jfieldID) f;
1546 vm_abort(
"jni_FromReflectedField: Not implemented in this configuration.");
1564 #if defined(ENABLE_JAVASE)
1565 TRACEJNICALLS((
"jni_ToReflectedMethod(env=%p, cls=%p, methodID=%p, isStatic=%d)", env, cls, methodID, isStatic));
1575 if (m->
name == utf8::init) {
1584 vm_abort(
"jni_ToReflectedMethod: Not implemented in this configuration.");
1605 log_text(
"JNI-Call: ToReflectedField: IMPLEMENT ME!");
1654 return (jmethodID) m;
1660 #define JNI_CALL_VIRTUAL_METHOD(name, type, intern) \
1661 type _Jv_JNI_Call##name##Method(JNIEnv *env, jobject obj, \
1662 jmethodID methodID, ...) \
1669 o = (java_handle_t *) obj; \
1670 m = (methodinfo *) methodID; \
1672 va_start(ap, methodID); \
1673 ret = _Jv_jni_Call##intern##Method(o, LLNI_vftbl_direct(o), m, ap); \
1689 #define JNI_CALL_VIRTUAL_METHOD_V(name, type, intern) \
1690 type _Jv_JNI_Call##name##MethodV(JNIEnv *env, jobject obj, \
1691 jmethodID methodID, va_list args) \
1697 o = (java_handle_t *) obj; \
1698 m = (methodinfo *) methodID; \
1700 ret = _Jv_jni_Call##intern##Method(o, LLNI_vftbl_direct(o), m, args); \
1715 #define JNI_CALL_VIRTUAL_METHOD_A(name, type, intern) \
1716 type _Jv_JNI_Call##name##MethodA(JNIEnv *env, jobject obj, \
1717 jmethodID methodID, \
1718 const jvalue *args) \
1724 o = (java_handle_t *) obj; \
1725 m = (methodinfo *) methodID; \
1727 ret = _Jv_jni_Call##intern##MethodA(o, LLNI_vftbl_direct(o), m, args); \
1753 va_start(ap, methodID);
1803 va_start(ap, methodID);
1836 #define JNI_CALL_NONVIRTUAL_METHOD(name, type, intern) \
1837 type _Jv_JNI_CallNonvirtual##name##Method(JNIEnv *env, jobject obj, \
1838 jclass clazz, jmethodID methodID, \
1847 o = (java_handle_t *) obj; \
1848 c = LLNI_classinfo_unwrap(clazz); \
1849 m = (methodinfo *) methodID; \
1851 va_start(ap, methodID); \
1852 ret = _Jv_jni_Call##intern##Method(o, c->vftbl, m, ap); \
1868 #define JNI_CALL_NONVIRTUAL_METHOD_V(name, type, intern) \
1869 type _Jv_JNI_CallNonvirtual##name##MethodV(JNIEnv *env, jobject obj, \
1870 jclass clazz, jmethodID methodID, \
1878 o = (java_handle_t *) obj; \
1879 c = LLNI_classinfo_unwrap(clazz); \
1880 m = (methodinfo *) methodID; \
1882 ret = _Jv_jni_CallIntMethod(o, c->vftbl, m, args); \
1897 #define JNI_CALL_NONVIRTUAL_METHOD_A(name, type, intern) \
1898 type _Jv_JNI_CallNonvirtual##name##MethodA(JNIEnv *env, jobject obj, \
1899 jclass clazz, jmethodID methodID, \
1900 const jvalue *args) \
1902 log_text("JNI-Call: CallNonvirtual##name##MethodA: IMPLEMENT ME!"); \
1917 jclass clazz, jmethodID methodID,
1930 va_start(ap, methodID);
1939 jclass clazz, jmethodID methodID,
1958 jclass clazz, jmethodID methodID,
1961 log_text(
"JNI-Call: CallNonvirtualObjectMethodA: IMPLEMENT ME!");
1968 jmethodID methodID, ...)
1979 va_start(ap, methodID);
1986 jmethodID methodID, va_list args)
2001 jmethodID methodID,
const jvalue * args)
2046 return (jfieldID) f;
2058 #define GET_FIELD(o,type,f) \
2059 *((type *) (((intptr_t) (o)) + ((intptr_t) ((fieldinfo *) (f))->offset)))
2061 #define JNI_GET_FIELD(name, type, intern) \
2062 type _Jv_JNI_Get##name##Field(JNIEnv *env, jobject obj, jfieldID fieldID) \
2066 TRACEJNICALLS(("_Jv_JNI_Get" STR(name) "Field(env=%p, obj=%p, fieldId=%p)", env, obj, fieldID)); \
2068 LLNI_CRITICAL_START; \
2070 ret = GET_FIELD(LLNI_DIRECT((java_handle_t *) obj), intern, fieldID); \
2072 LLNI_CRITICAL_END; \
2074 return (type) ret; \
2091 TRACEJNICALLS((
"_Jv_JNI_GetObjectField(env=%p, obj=%p, fieldId=%p)", env, obj, fieldID));
2111 #define SET_FIELD(o,type,f,value) \
2112 *((type *) (((intptr_t) (o)) + ((intptr_t) ((fieldinfo *) (f))->offset))) = (type) (value)
2114 #define GET_FIELDINFO(f) ((fieldinfo*) (f))
2116 #define JNI_SET_FIELD(name, type, intern) \
2117 void _Jv_JNI_Set##name##Field(JNIEnv *env, jobject obj, jfieldID fieldID, \
2120 TRACEJNICALLS(("_Jv_JNI_Set" STR(name) "Field(env=%p, obj=%p, fieldId=%p, value=%p)", env, obj, fieldID, value)); \
2122 LLNI_CRITICAL_START; \
2124 SET_FIELD(LLNI_DIRECT((java_handle_t *) obj), intern, fieldID, value); \
2126 LLNI_CRITICAL_END; \
2128 if (GET_FIELDINFO(fieldID)->flags & ACC_VOLATILE) \
2129 Atomic::memory_barrier(); \
2145 TRACEJNICALLS((
"_Jv_JNI_SetObjectField(env=%p, obj=%p, fieldId=%p, value=%p)", env, obj, fieldID, value));
2176 TRACEJNICALLS((
"_Jv_JNI_GetStaticMethodID(env=%p, clazz=%p, name=%s, sig=%s)", env, clazz, name, sig));
2200 return (jmethodID) m;
2204 #define JNI_CALL_STATIC_METHOD(name, type, intern) \
2205 type _Jv_JNI_CallStatic##name##Method(JNIEnv *env, jclass clazz, \
2206 jmethodID methodID, ...) \
2212 m = (methodinfo *) methodID; \
2214 va_start(ap, methodID); \
2215 res = _Jv_jni_Call##intern##Method(NULL, NULL, m, ap); \
2231 #define JNI_CALL_STATIC_METHOD_V(name, type, intern) \
2232 type _Jv_JNI_CallStatic##name##MethodV(JNIEnv *env, jclass clazz, \
2233 jmethodID methodID, va_list args) \
2238 m = (methodinfo *) methodID; \
2240 res = _Jv_jni_Call##intern##Method(NULL, NULL, m, args); \
2255 #define JNI_CALL_STATIC_METHOD_A(name, type, intern) \
2256 type _Jv_JNI_CallStatic##name##MethodA(JNIEnv *env, jclass clazz, \
2257 jmethodID methodID, const jvalue *args) \
2262 m = (methodinfo *) methodID; \
2264 res = _Jv_jni_Call##intern##MethodA(NULL, NULL, m, args); \
2280 jmethodID methodID, ...)
2286 TRACEJNICALLS((
"_Jv_JNI_CallStaticObjectMethod(env=%p, clazz=%p, methodID=%p, ...)", env, clazz, methodID));
2290 va_start(ap, methodID);
2299 jmethodID methodID, va_list args)
2304 TRACEJNICALLS((
"_Jv_JNI_CallStaticObjectMethodV(env=%p, clazz=%p, methodID=%p)", env, clazz, methodID));
2315 jmethodID methodID,
const jvalue *args)
2320 TRACEJNICALLS((
"_Jv_JNI_CallStaticObjectMethodA(env=%p, clazz=%p, methodID=%p, args=%p)", env, clazz, methodID, args));
2331 jmethodID methodID, ...)
2336 TRACEJNICALLS((
"_Jv_JNI_CallStaticVoidMethod(env=%p, clazz=%p, methodID=%p, ...)", env, clazz, methodID));
2340 va_start(ap, methodID);
2347 jmethodID methodID, va_list args)
2351 TRACEJNICALLS((
"_Jv_JNI_CallStaticVoidMethodV(env=%p, clazz=%p, methodID=%p)", env, clazz, methodID));
2360 jmethodID methodID,
const jvalue * args)
2364 TRACEJNICALLS((
"_Jv_JNI_CallStaticVoidMethodA(env=%p, clazz=%p, methodID=%p, args=%p)", env, clazz, methodID, args));
2401 return (jfieldID) f;
2412 #define JNI_GET_STATIC_FIELD(name, type, field) \
2413 type _Jv_JNI_GetStatic##name##Field(JNIEnv *env, jclass clazz, \
2419 STATISTICS(jniinvokation()); \
2421 c = LLNI_classinfo_unwrap(clazz); \
2422 f = (fieldinfo *) fieldID; \
2424 if (!(c->state & CLASS_INITIALIZED)) \
2425 if (!initialize_class(c)) \
2428 return f->value->field; \
2470 #define JNI_SET_STATIC_FIELD(name, type, field) \
2471 void _Jv_JNI_SetStatic##name##Field(JNIEnv *env, jclass clazz, \
2478 STATISTICS(jniinvokation()); \
2480 c = LLNI_classinfo_unwrap(clazz); \
2481 f = (fieldinfo *) fieldID; \
2483 if (!(c->state & CLASS_INITIALIZED)) \
2484 if (!initialize_class(c)) \
2487 f->value->field = value; \
2489 if (f->flags & ACC_VOLATILE) \
2490 Atomic::memory_barrier(); \
2536 TRACEJNICALLS((
"jni_NewString(env=%p, buf=%p, len=%d)", env, buf, len));
2581 TRACEJNICALLS((
"jni_GetStringChars(env=%p, str=%p, isCopy=%p)", env, str, isCopy));
2599 stringbuffer =
MNEW(
u2, count + 1);
2604 uint16_t* ptr = (uint16_t*) ca.get_raw_data_ptr();
2605 for (i = 0; i < count; i++)
2606 stringbuffer[i] = ptr[offset + i];
2610 stringbuffer[
i] =
'\0';
2615 return (jchar*) stringbuffer;
2629 TRACEJNICALLS((
"jni_ReleaseStringChars(env=%p, str=%p, chars=%p)", env, str, chars));
2632 if (chars == emptyStringJ)
2638 MFREE(((jchar*) chars), jchar, count + 1);
2651 TRACEJNICALLS((
"jni_NewStringUTF(env=%p, bytes=%s)", env, bytes));
2663 TRACEJNICALLS((
"jni_GetStringUTFLength(env=%p, string=%p)", env,
string));
2725 TRACEJNICALLS((
"_Jv_JNI_GetArrayLength(env=%p, array=%p)", env, array));
2766 for (i = 0; i <
length; i++)
2815 #define JNI_NEW_ARRAY(name, type) \
2816 type _Jv_JNI_New##name##Array(JNIEnv *env, jsize len) \
2818 STATISTICS(jniinvokation()); \
2821 exceptions_throw_negativearraysizeexception(); \
2825 name##Array a(len); \
2827 return (type) jni_NewLocalRef(env, \
2828 (jobject) a.get_handle()); \
2847 #define JNI_GET_ARRAY_ELEMENTS(name, type, intern) \
2848 type *_Jv_JNI_Get##name##ArrayElements(JNIEnv *env, type##Array array, \
2851 TRACEJNICALLS(("_Jv_JNI_Get" STR(name) "ArrayElements(env=%p, array=%p, isCopy=%d)", env, array, isCopy)); \
2853 name##Array a(array); \
2856 *isCopy = JNI_FALSE; \
2858 return (type *) a.get_raw_data_ptr(); \
2882 #define JNI_RELEASE_ARRAY_ELEMENTS(name, type, intern, intern2) \
2883 void _Jv_JNI_Release##name##ArrayElements(JNIEnv *env, type##Array array, \
2884 type *elems, jint mode) \
2886 STATISTICS(jniinvokation()); \
2888 name##Array a(array); \
2890 if (elems != (type *) a.get_raw_data_ptr()) { \
2893 a.set_region(0, a.get_length(), (intern2 *) elems); \
2896 a.set_region(0, a.get_length(), (intern2 *) elems); \
2923 #define JNI_GET_ARRAY_REGION(name, type, intern, intern2) \
2924 void _Jv_JNI_Get##name##ArrayRegion(JNIEnv *env, type##Array array, \
2925 jsize start, jsize len, type *buf) \
2927 TRACEJNICALLS(("_Jv_JNI_Get" STR(name) "ArrayRegion(env=%p, array=%p, start=%d, len=%d, buf=%p)", env, array, start, len, buf)); \
2929 name##Array a(array); \
2931 if ((start < 0) || (len < 0) || (start + len > a.get_length())) \
2932 exceptions_throw_arrayindexoutofboundsexception(); \
2934 a.get_region(start, len, (intern2 *) buf); \
2954 #define JNI_SET_ARRAY_REGION(name, type, intern, intern2) \
2955 void _Jv_JNI_Set##name##ArrayRegion(JNIEnv *env, type##Array array, \
2956 jsize start, jsize len, const type *buf) \
2958 STATISTICS(jniinvokation()); \
2960 name##Array a(array); \
2962 if ((start < 0) || (len < 0) || (start + len > a.get_length())) \
2963 exceptions_throw_arrayindexoutofboundsexception(); \
2965 a.set_region(start, len, (intern2 *) buf); \
2992 TRACEJNICALLS((
"jni_RegisterNatives(env=%p, clazz=%p, methods=%p, nMethods=%d)", env, clazz, methods, nMethods));
3021 log_text(
"JNI-Call: UnregisterNatives: IMPLEMENT ME!!!");
3111 if ((start < 0) || (len < 0) || (start > count) || (start + len > count)) {
3116 ca.get_region(start, len, buf);
3132 TRACEJNICALLS((
"jni_GetStringUTFRegion(env=%p, str=%p, start=%d, len=%d, buf=%p)", env, str, start, len, buf));
3141 if ((start < 0) || (len < 0) || (start > count) || (start + len > count)) {
3149 uint16_t* ptr = (uint16_t*) ca.get_raw_data_ptr();
3150 for (i = 0; i < len; i++)
3151 buf[i] = ptr[offset + start + i];
3173 TRACEJNICALLS((
"jni_GetPrimitiveArrayCritical(env=%p, array=%p, isCopy=%d)", env, array, isCopy));
3175 if (isCopy != NULL) {
3189 data = (
void*) (((intptr_t) a) + ad->
dataoffset);
3206 TRACEJNICALLS((
"jni_ReleasePrimitiveArrayCritical(env=%p, array=%p, carray=%p, mode=%d)", env, array, carray, mode));
3229 const jchar *cstring)
3239 TRACEJNICALLS((
"_Jv_JNI_NewWeakGlobalRef(env=%p, obj=%p): IMPLEMENT ME!", env, obj));
3247 TRACEJNICALLS((
"_Jv_JNI_DeleteWeakGlobalRef(env=%p, ref=%p): IMPLEMENT ME", env, ref));
3265 TRACEJNICALLS((
"jni_NewGlobalRef(env=%p, obj=%p)", env, obj));
3276 slot = key & (hashtable_global_ref->
size - 1);
3290 gre = gre->hashlink;
3300 #if defined(ENABLE_GC_CACAO)
3317 hashtable_global_ref->
ptr[slot] = gre;
3321 hashtable_global_ref->
entries++;
3326 #if defined(ENABLE_HANDLES)
3348 TRACEJNICALLS((
"jni_DeleteGlobalRef(env=%p, globalRef=%p)", env, globalRef));
3359 slot = key & (hashtable_global_ref->
size - 1);
3376 if (gre->refs == 0) {
3379 if (prevgre == NULL)
3380 hashtable_global_ref->
ptr[
slot] = gre->hashlink;
3384 #if defined(ENABLE_GC_CACAO)
3404 log_println(
"jni_DeleteGlobalRef: Global reference not found.");
3443 #if defined(ENABLE_JAVASE)
3444 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
3445 TRACEJNICALLSENTER((
"jni_NewDirectByteBuffer(env=%p, address=%p, capacity=%ld)", env, address, capacity));
3449 # if SIZEOF_VOID_P == 8
3464 (jmethodID) dbbirw_init, NULL, p.
get_handle(),
3465 (jint) capacity, (jint) capacity, (jint) 0);
3473 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
3479 TRACEJNICALLSENTER((
"jni_NewDirectByteBuffer(env=%p, address=%p, capacity=%ld)", env, address, capacity));
3483 addr = (int64_t) ((uintptr_t)
address);
3484 cap = (int32_t) capacity;
3487 (jmethodID) dbb_init, addr, cap);
3496 # error unknown classpath configuration
3500 vm_abort(
"jni_NewDirectByteBuffer: Not implemented in this configuration.");
3518 #if defined(ENABLE_JAVASE)
3519 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
3533 if (address == NULL) {
3545 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
3547 TRACEJNICALLS((
"jni_GetDirectBufferAddress(env=%p, buf=%p)", env, buf));
3554 void* address = jnb.get_address();
3559 # error unknown classpath configuration
3564 vm_abort(
"jni_GetDirectBufferAddress: Not implemented in this configuration.");
3582 #if defined(ENABLE_JAVASE)
3583 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
3584 TRACEJNICALLS((
"jni_GetDirectBufferCapacity(env=%p, buf=%p)", env, buf));
3595 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
3597 TRACEJNICALLS((
"jni_GetDirectBufferCapacity(env=%p, buf=%p)", env, buf));
3604 jlong capacity = jnb.get_capacity();
3609 # error unknown classpath configuration
3613 vm_abort(
"jni_GetDirectBufferCapacity: not implemented in this configuration");
3632 log_println(
"jni_GetObjectRefType: IMPLEMENT ME!");
3634 return (jobjectRefType) NULL;
3650 TRACEJNICALLS((
"_Jv_JNI_DestroyJavaVM(javavm=%p)", javavm));
3682 if (result ==
true) {
3687 JavaVMAttachArgs *vm_aargs = (JavaVMAttachArgs *) thr_args;
3689 if (vm_aargs != NULL) {
3690 if ((vm_aargs->version != JNI_VERSION_1_2) &&
3691 (vm_aargs->version != JNI_VERSION_1_4))
3692 return JNI_EVERSION;
3711 TRACEJNICALLS((
"jni_AttachCurrentThread(javavm=%p, p_env=%p, thr_args=%p)", javavm, p_env, thr_args));
3748 if (result ==
false)
3776 TRACEJNICALLS((
"jni_GetEnv(javavm=%p, env=%p, version=%d)", javavm, env, version));
3780 return JNI_EDETACHED;
3786 return JNI_EDETACHED;
3796 #if defined(ENABLE_JVMTI)
3807 return JNI_EVERSION;
3828 TRACEJNICALLS((
"jni_AttachCurrentThreadAsDaemon(javavm=%p, penv=%p, args=%p)", javavm, penv, args));
3901 _Jv_JNI_CallBooleanMethod,
3902 _Jv_JNI_CallBooleanMethodV,
3903 _Jv_JNI_CallBooleanMethodA,
3904 _Jv_JNI_CallByteMethod,
3905 _Jv_JNI_CallByteMethodV,
3906 _Jv_JNI_CallByteMethodA,
3907 _Jv_JNI_CallCharMethod,
3908 _Jv_JNI_CallCharMethodV,
3909 _Jv_JNI_CallCharMethodA,
3910 _Jv_JNI_CallShortMethod,
3911 _Jv_JNI_CallShortMethodV,
3912 _Jv_JNI_CallShortMethodA,
3913 _Jv_JNI_CallIntMethod,
3914 _Jv_JNI_CallIntMethodV,
3915 _Jv_JNI_CallIntMethodA,
3916 _Jv_JNI_CallLongMethod,
3917 _Jv_JNI_CallLongMethodV,
3918 _Jv_JNI_CallLongMethodA,
3919 _Jv_JNI_CallFloatMethod,
3920 _Jv_JNI_CallFloatMethodV,
3921 _Jv_JNI_CallFloatMethodA,
3922 _Jv_JNI_CallDoubleMethod,
3923 _Jv_JNI_CallDoubleMethodV,
3924 _Jv_JNI_CallDoubleMethodA,
3932 _Jv_JNI_CallNonvirtualBooleanMethod,
3933 _Jv_JNI_CallNonvirtualBooleanMethodV,
3934 _Jv_JNI_CallNonvirtualBooleanMethodA,
3935 _Jv_JNI_CallNonvirtualByteMethod,
3936 _Jv_JNI_CallNonvirtualByteMethodV,
3937 _Jv_JNI_CallNonvirtualByteMethodA,
3938 _Jv_JNI_CallNonvirtualCharMethod,
3939 _Jv_JNI_CallNonvirtualCharMethodV,
3940 _Jv_JNI_CallNonvirtualCharMethodA,
3941 _Jv_JNI_CallNonvirtualShortMethod,
3942 _Jv_JNI_CallNonvirtualShortMethodV,
3943 _Jv_JNI_CallNonvirtualShortMethodA,
3944 _Jv_JNI_CallNonvirtualIntMethod,
3945 _Jv_JNI_CallNonvirtualIntMethodV,
3946 _Jv_JNI_CallNonvirtualIntMethodA,
3947 _Jv_JNI_CallNonvirtualLongMethod,
3948 _Jv_JNI_CallNonvirtualLongMethodV,
3949 _Jv_JNI_CallNonvirtualLongMethodA,
3950 _Jv_JNI_CallNonvirtualFloatMethod,
3951 _Jv_JNI_CallNonvirtualFloatMethodV,
3952 _Jv_JNI_CallNonvirtualFloatMethodA,
3953 _Jv_JNI_CallNonvirtualDoubleMethod,
3954 _Jv_JNI_CallNonvirtualDoubleMethodV,
3955 _Jv_JNI_CallNonvirtualDoubleMethodA,
3963 _Jv_JNI_GetBooleanField,
3964 _Jv_JNI_GetByteField,
3965 _Jv_JNI_GetCharField,
3966 _Jv_JNI_GetShortField,
3967 _Jv_JNI_GetIntField,
3968 _Jv_JNI_GetLongField,
3969 _Jv_JNI_GetFloatField,
3970 _Jv_JNI_GetDoubleField,
3972 _Jv_JNI_SetBooleanField,
3973 _Jv_JNI_SetByteField,
3974 _Jv_JNI_SetCharField,
3975 _Jv_JNI_SetShortField,
3976 _Jv_JNI_SetIntField,
3977 _Jv_JNI_SetLongField,
3978 _Jv_JNI_SetFloatField,
3979 _Jv_JNI_SetDoubleField,
3986 _Jv_JNI_CallStaticBooleanMethod,
3987 _Jv_JNI_CallStaticBooleanMethodV,
3988 _Jv_JNI_CallStaticBooleanMethodA,
3989 _Jv_JNI_CallStaticByteMethod,
3990 _Jv_JNI_CallStaticByteMethodV,
3991 _Jv_JNI_CallStaticByteMethodA,
3992 _Jv_JNI_CallStaticCharMethod,
3993 _Jv_JNI_CallStaticCharMethodV,
3994 _Jv_JNI_CallStaticCharMethodA,
3995 _Jv_JNI_CallStaticShortMethod,
3996 _Jv_JNI_CallStaticShortMethodV,
3997 _Jv_JNI_CallStaticShortMethodA,
3998 _Jv_JNI_CallStaticIntMethod,
3999 _Jv_JNI_CallStaticIntMethodV,
4000 _Jv_JNI_CallStaticIntMethodA,
4001 _Jv_JNI_CallStaticLongMethod,
4002 _Jv_JNI_CallStaticLongMethodV,
4003 _Jv_JNI_CallStaticLongMethodA,
4004 _Jv_JNI_CallStaticFloatMethod,
4005 _Jv_JNI_CallStaticFloatMethodV,
4006 _Jv_JNI_CallStaticFloatMethodA,
4007 _Jv_JNI_CallStaticDoubleMethod,
4008 _Jv_JNI_CallStaticDoubleMethodV,
4009 _Jv_JNI_CallStaticDoubleMethodA,
4017 _Jv_JNI_GetStaticBooleanField,
4018 _Jv_JNI_GetStaticByteField,
4019 _Jv_JNI_GetStaticCharField,
4020 _Jv_JNI_GetStaticShortField,
4021 _Jv_JNI_GetStaticIntField,
4022 _Jv_JNI_GetStaticLongField,
4023 _Jv_JNI_GetStaticFloatField,
4024 _Jv_JNI_GetStaticDoubleField,
4026 _Jv_JNI_SetStaticBooleanField,
4027 _Jv_JNI_SetStaticByteField,
4028 _Jv_JNI_SetStaticCharField,
4029 _Jv_JNI_SetStaticShortField,
4030 _Jv_JNI_SetStaticIntField,
4031 _Jv_JNI_SetStaticLongField,
4032 _Jv_JNI_SetStaticFloatField,
4033 _Jv_JNI_SetStaticDoubleField,
4051 _Jv_JNI_NewBooleanArray,
4052 _Jv_JNI_NewByteArray,
4053 _Jv_JNI_NewCharArray,
4054 _Jv_JNI_NewShortArray,
4055 _Jv_JNI_NewIntArray,
4056 _Jv_JNI_NewLongArray,
4057 _Jv_JNI_NewFloatArray,
4058 _Jv_JNI_NewDoubleArray,
4060 _Jv_JNI_GetBooleanArrayElements,
4061 _Jv_JNI_GetByteArrayElements,
4062 _Jv_JNI_GetCharArrayElements,
4063 _Jv_JNI_GetShortArrayElements,
4064 _Jv_JNI_GetIntArrayElements,
4065 _Jv_JNI_GetLongArrayElements,
4066 _Jv_JNI_GetFloatArrayElements,
4067 _Jv_JNI_GetDoubleArrayElements,
4069 _Jv_JNI_ReleaseBooleanArrayElements,
4070 _Jv_JNI_ReleaseByteArrayElements,
4071 _Jv_JNI_ReleaseCharArrayElements,
4072 _Jv_JNI_ReleaseShortArrayElements,
4073 _Jv_JNI_ReleaseIntArrayElements,
4074 _Jv_JNI_ReleaseLongArrayElements,
4075 _Jv_JNI_ReleaseFloatArrayElements,
4076 _Jv_JNI_ReleaseDoubleArrayElements,
4078 _Jv_JNI_GetBooleanArrayRegion,
4079 _Jv_JNI_GetByteArrayRegion,
4080 _Jv_JNI_GetCharArrayRegion,
4081 _Jv_JNI_GetShortArrayRegion,
4082 _Jv_JNI_GetIntArrayRegion,
4083 _Jv_JNI_GetLongArrayRegion,
4084 _Jv_JNI_GetFloatArrayRegion,
4085 _Jv_JNI_GetDoubleArrayRegion,
4086 _Jv_JNI_SetBooleanArrayRegion,
4087 _Jv_JNI_SetByteArrayRegion,
4088 _Jv_JNI_SetCharArrayRegion,
4089 _Jv_JNI_SetShortArrayRegion,
4090 _Jv_JNI_SetIntArrayRegion,
4091 _Jv_JNI_SetLongArrayRegion,
4092 _Jv_JNI_SetFloatArrayRegion,
4093 _Jv_JNI_SetDoubleArrayRegion,
4141 JavaVMInitArgs *_vm_args;
4143 _vm_args = (JavaVMInitArgs *) vm_args;
4147 switch (_vm_args->version) {
4148 case JNI_VERSION_1_1:
4149 _vm_args->version = JNI_VERSION_1_1;
4152 case JNI_VERSION_1_2:
4153 case JNI_VERSION_1_4:
4154 _vm_args->ignoreUnrecognized =
JNI_FALSE;
4155 _vm_args->options = NULL;
4156 _vm_args->nOptions = 0;
4184 TRACEJNICALLS((
"JNI_GetCreatedJavaVMs(vmBuf=%p, jsize=%d, jsize=%p)", vmBuf, bufLen, nVMs));
4207 TRACEJNICALLS((
"JNI_CreateJavaVM(p_vm=%p, p_env=%p, vm_args=%p)", p_vm, p_env, vm_args));
static classinfo * class_java_nio_DirectByteBufferImpl_ReadWrite
#define GET_FIELD(o, type, f)
jsize jni_GetStringLength(JNIEnv *env, jstring str)
java_handle_t * get_address() const
jmethodID _Jv_JNI_GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig)
bool builtin_instanceof(java_handle_t *o, classinfo *c)
jint _Jv_JNI_UnregisterNatives(JNIEnv *env, jclass clazz)
jobject _Jv_JNI_GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID)
bool localref_table_init(void)
void localref_del(java_handle_t *localref)
jlong jlong jlong jlong jint jmethodID jint slot
jobject jni_NewObject(JNIEnv *env, jclass clazz, jmethodID methodID,...)
void jni_DeleteLocalRef(JNIEnv *env, jobject localRef)
jobject _Jv_JNI_ToReflectedField(JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic)
#define JNI_CALL_STATIC_METHOD(name, type, intern)
bool thread_detach_current_external_thread(void)
Detaches the current external thread from the VM.
void jni_ExceptionClear(JNIEnv *env)
java_handle_t * vm_call_method_valist(methodinfo *m, java_handle_t *o, va_list ap)
JNIEnv jthread jmethodID jlocation jclass jobject jfieldID field
#define STATISTICS(x)
Wrapper for statistics only code.
#define TRACEJNICALLSEXIT(x)
void jni_DeleteGlobalRef(JNIEnv *env, jobject globalRef)
methodinfo * class_resolveclassmethod(classinfo *c, Utf8String name, Utf8String desc, classinfo *referer, bool throwexception)
void exceptions_print_stacktrace(void)
virtual java_handle_t * get_handle() const
const JNIInvokeInterface_ _Jv_JNIInvokeInterface
#define JNI_CALL_VIRTUAL_METHOD(name, type, intern)
jint JNI_CreateJavaVM(JavaVM **p_vm, void **p_env, void *vm_args)
Table containing all native methods registered with the VM.
NativeMethods & get_nativemethods()
static jlong _Jv_jni_CallLongMethodA(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, const jvalue *args)
void register_methods(Utf8String classname, const JNINativeMethod *methods, size_t count)
Register native methods with the VM.
#define JVMTI_VERSION_MASK_INTERFACE_TYPE
jobject _Jv_JNI_CallObjectMethod(JNIEnv *env, jobject obj, jmethodID methodID,...)
jobject _Jv_JNI_AllocObject(JNIEnv *env, jclass clazz)
static Utf8String from_utf8_dot_to_slash(const char *, size_t)
void jni_ExceptionDescribe(JNIEnv *env)
jint _Jv_JNI_ThrowNew(JNIEnv *env, jclass clazz, const char *msg)
static jchar emptyStringJ[]
java_handle_t * vm_call_method_jvalue(methodinfo *m, java_handle_t *o, const jvalue *args)
jint jni_RegisterNatives(JNIEnv *env, jclass clazz, const JNINativeMethod *methods, jint nMethods)
jboolean _Jv_JNI_IsAssignableFrom(JNIEnv *env, jclass sub, jclass sup)
Utf8String to_utf8() const
void _Jv_JNI_CallStaticVoidMethodV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
GNU Classpath java/nio/Buffer.
classinfo * load_class_from_sysloader(Utf8String name)
virtual java_handle_array_t * get_handle() const
void exceptions_throw_nosuchmethoderror(classinfo *c, Utf8String name, Utf8String desc)
int64_t vm_call_method_long_jvalue(methodinfo *m, java_handle_t *o, const jvalue *args)
static classinfo * class_get_superclass(classinfo *c)
void _Jv_JNI_SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject value)
float vm_call_method_float_jvalue(methodinfo *m, java_handle_t *o, const jvalue *args)
static jdouble _Jv_jni_CallDoubleMethodA(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, const jvalue *args)
static classinfo * class_java_nio_DirectByteBufferImpl
jclass jni_GetSuperclass(JNIEnv *env, jclass sub)
static JavaString from_utf8(Utf8String)
void _Jv_JNI_CallNonvirtualVoidMethod(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,...)
#define LOCK_MONITOR_EXIT(o)
void _Jv_JNI_ReleaseStringUTFChars(JNIEnv *env, jstring string, const char *utf)
jobject _Jv_JNI_CallNonvirtualObjectMethodA(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, const jvalue *args)
#define JNI_CALL_STATIC_METHOD_A(name, type, intern)
void _Jv_JNI_ReleaseStringCritical(JNIEnv *env, jstring string, const jchar *cstring)
double vm_call_method_double_valist(methodinfo *m, java_handle_t *o, va_list ap)
java_handle_chararray_t * get_value() const
classloader_t * classloader
Actual implementation of access class for Java Object arrays.
void exceptions_throw_nosuchfielderror(classinfo *c, Utf8String name)
void resolve_handle_pending_exception(bool throwError)
#define JNI_CALL_STATIC_METHOD_V(name, type, intern)
static methodinfo * dbbirw_init
#define SET_FIELD(o, type, f, value)
jobject _Jv_JNI_CallStaticObjectMethodA(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args)
jint jni_EnsureLocalCapacity(JNIEnv *env, jint capacity)
methodinfo * method_vftbl_lookup(vftbl_t *vftbl, methodinfo *m)
typedef void(JNICALL *jvmtiEventSingleStep)(jvmtiEnv *jvmti_env
jboolean _Jv_JNI_ExceptionCheck(JNIEnv *env)
void _Jv_JNI_SetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value)
jobject _Jv_JNI_CallObjectMethodA(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args)
#define JNI_RELEASE_ARRAY_ELEMENTS(name, type, intern, intern2)
T get_element(int32_t index)
GNU Classpath java/lang/reflect/Field.
jclass jni_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize bufLen)
bool VM_create(JavaVM **p_vm, void **p_env, void *vm_args)
C wrapper for VM::create.
jobject jni_NewLocalRef(JNIEnv *env, jobject ref)
jclass jni_GetObjectClass(JNIEnv *env, jobject obj)
classinfo * get_Class() const
classinfo * load_class_bootstrap(Utf8String name)
void _Jv_JNI_CallVoidMethod(JNIEnv *env, jobject obj, jmethodID methodID,...)
static jfloat _Jv_jni_CallFloatMethod(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, va_list ap)
static int32_t heap_hashcode(java_object_t *obj)
#define LLNI_CRITICAL_END
jweak _Jv_JNI_NewWeakGlobalRef(JNIEnv *env, jobject obj)
bool class_is_instance(classinfo *c, java_handle_t *h)
java_handle_t * vm_call_method(methodinfo *m, java_handle_t *o,...)
jobject _Jv_JNI_CallNonvirtualObjectMethod(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,...)
jobject jni_ToReflectedMethod(JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic)
jint JNI_GetDefaultJavaVMInitArgs(void *vm_args)
JNIEnv jclass jobject const char * name
void set_element(int32_t index, T value)
int vm_destroy(JavaVM *vm)
void log_println(const char *text,...)
void _Jv_JNI_CallStaticVoidMethod(JNIEnv *env, jclass clazz, jmethodID methodID,...)
jobject _Jv_JNI_GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index)
JNIEnv jthread jobject jclass jlong size
static bool thread_current_is_attached(void)
#define TRACESUBSYSTEMINITIALIZATION(text)
void exceptions_throw_noclassdeffounderror(Utf8String name)
jint _Jv_JNI_MonitorEnter(JNIEnv *env, jobject obj)
classloader_t * loader_hashtable_classloader_add(java_handle_t *cl)
#define JNI_SET_ARRAY_REGION(name, type, intern, intern2)
java_handle_t * builtin_new(classinfo *c)
jstring jni_NewStringUTF(JNIEnv *env, const char *bytes)
static int jni_attach_current_thread(void **p_env, void *thr_args, bool isdaemon)
void vm_abort(const char *text,...)
GNU Classpath java/lang/reflect/Constructor.
static java_handle_t * _Jv_jni_CallObjectMethodA(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, const jvalue *args)
jobjectArray _Jv_JNI_NewObjectArray(JNIEnv *env, jsize length, jclass elementClass, jobject initialElement)
bool localref_frame_push(int32_t capacity)
int32_t vm_call_method_int_valist(methodinfo *m, java_handle_t *o, va_list ap)
jvmtiEnv * jvmti_new_environment()
static void _Jv_jni_CallVoidMethod(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, va_list ap)
#define LLNI_classinfo_wrap(classinfo)
#define LLNI_class_get(obj, variable)
void * heap_alloc_uncollectable(u4 size)
classinfo * stacktrace_get_current_class(void)
jint _Jv_JNI_MonitorExit(JNIEnv *env, jobject obj)
JNINativeInterface_ _Jv_JNINativeInterface
void * jni_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboolean *isCopy)
static java_handle_t * _Jv_jni_CallObjectMethod(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, va_list ap)
jobject _Jv_JNI_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
void _Jv_JNI_CallNonvirtualVoidMethodV(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
java_handle_t * localref_add(java_object_t *o)
int32_t get_length() const
#define JNI_CALL_NONVIRTUAL_METHOD_A(name, type, intern)
JNIEnv jthread jmethodID method
void exceptions_set_exception(java_handle_t *e)
jfieldID _Jv_JNI_GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig)
bool localref_table_destroy(void)
jint jni_GetEnv(JavaVM *javavm, void **env, jint version)
static jint _Jv_jni_CallIntMethod(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, va_list ap)
void _Jv_JNI_FatalError(JNIEnv *env, const char *msg)
void exceptions_throw_instantiationexception(classinfo *c)
void localref_frame_pop_all(void)
#define JNI_SET_FIELD(name, type, intern)
static void version(bool opt_exit)
void _Jv_JNI_CallVoidMethodV(JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
const char * _Jv_JNI_GetStringUTFChars(JNIEnv *env, jstring string, jboolean *isCopy)
static JNINativeMethod methods[]
This file contains the statistics framework.
void exceptions_throw_nullpointerexception(void)
methodinfo * class_resolvemethod(classinfo *c, Utf8String name, Utf8String desc)
jboolean _Jv_JNI_IsInstanceOf(JNIEnv *env, jobject obj, jclass clazz)
#define STAT_REGISTER_GROUP_VAR(type, var, init, name, description, group)
Register an statistics variable and add it to a group.
void _Jv_JNI_DeleteWeakGlobalRef(JNIEnv *env, jweak ref)
jobject _Jv_JNI_CallStaticObjectMethod(JNIEnv *env, jclass clazz, jmethodID methodID,...)
GNU Classpath java/lang/reflect/Method.
bool thread_attach_current_external_thread(JavaVMAttachArgs *vm_aargs, bool isdaemon)
Attaches the current external thread to the VM.
fieldinfo * class_findfield(classinfo *c, Utf8String name, Utf8String desc)
#define JNI_VERSION_SUPPORTED
jobject jni_NewGlobalRef(JNIEnv *env, jobject obj)
jobject _Jv_JNI_CallObjectMethodV(JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
classinfo * class_java_lang_reflect_Method
#define JNI_CALL_VIRTUAL_METHOD_A(name, type, intern)
static jint _Jv_jni_CallIntMethodA(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, const jvalue *args)
static Utf8String from_utf8(const char *, size_t)
JNIEnv jthread jmethodID void * address
#define STAT_REGISTER_GROUP(var, name, description)
Register a statistics group.
jsize jni_GetStringUTFLength(JNIEnv *env, jstring string)
JNIEnv jclass jobject loader
static jdouble _Jv_jni_CallDoubleMethod(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, va_list ap)
jsize get_string_offset(const java_lang_String &s)
void _Jv_JNI_ReleaseStringChars(JNIEnv *env, jstring str, const jchar *chars)
#define TRACEJNICALLSENTER(x)
void gc_reference_register(java_object_t **ref, int32_t reftype)
#define HASHTABLE_GLOBAL_REF_SIZE
bool initialize_class(classinfo *c)
#define JNI_GET_ARRAY_ELEMENTS(name, type, intern)
jsize _Jv_JNI_GetArrayLength(JNIEnv *env, jarray array)
void exceptions_throw_negativearraysizeexception(void)
jfieldID jni_FromReflectedField(JNIEnv *env, jobject field)
arraydescriptor * arraydesc
GNU Classpath java/nio/DirectByteBufferImpl.
static jfloat _Jv_jni_CallFloatMethodA(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, const jvalue *args)
#define JNI_CALL_VIRTUAL_METHOD_V(name, type, intern)
jobject jni_NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity)
void exceptions_throw_arrayindexoutofboundsexception(void)
This is a generic accessor class for Java arrays (of unspecified type), which can be used to safely o...
static classinfo * class_gnu_classpath_Pointer64
jobject _Jv_JNI_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args)
#define LLNI_vftbl_direct(obj)
static classinfo * class_java_nio_Buffer
int32_t vm_call_method_int_jvalue(methodinfo *m, java_handle_t *o, const jvalue *args)
byte_iterator begin() const
GNU Classpath java/lang/String.
bool builtin_canstore(java_handle_objectarray_t *oa, java_handle_t *o)
jlong jni_GetDirectBufferCapacity(JNIEnv *env, jobject buf)
#define JNI_CALL_NONVIRTUAL_METHOD(name, type, intern)
static threadobject * thread_get_current()
Return the threadobject for the current thread.
void memory_barrier(void)
jint _Jv_JNI_GetJavaVM(JNIEnv *env, JavaVM **javavm)
#define JNI_GET_STATIC_FIELD(name, type, field)
#define JNI_GET_FIELD(name, type, intern)
#define JNI_VERSION_CACAO
jint jni_PushLocalFrame(JNIEnv *env, jint capacity)
jint _Jv_JNI_Throw(JNIEnv *env, jthrowable obj)
#define JNI_NEW_ARRAY(name, type)
#define JVMTI_VERSION_INTERFACE_JVMTI
hashtable_global_ref_entry * hashlink
const jchar * _Jv_JNI_GetStringCritical(JNIEnv *env, jstring string, jboolean *isCopy)
jint jni_DetachCurrentThread(JavaVM *vm)
double vm_call_method_double_jvalue(methodinfo *m, java_handle_t *o, const jvalue *args)
void jni_GetStringRegion(JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf)
classinfo * link_class(classinfo *c)
jmethodID jni_FromReflectedMethod(JNIEnv *env, jobject method)
#define LOCK_MONITOR_ENTER(o)
jobject _Jv_JNI_CallStaticObjectMethodV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
methodinfo * get_method() const
#define LLNI_CRITICAL_START
void exceptions_clear_exception(void)
void jni_ReleasePrimitiveArrayCritical(JNIEnv *env, jarray array, void *carray, jint mode)
java_handle_t * exceptions_get_exception(void)
void unlock()
Unlocks the given mutex object and checks for errors.
#define JNI_SET_STATIC_FIELD(name, type, field)
bool class_is_assignable_from(classinfo *to, classinfo *from)
classinfo * load_class_from_classloader(Utf8String name, classloader_t *cl)
jint _Jv_JNI_DestroyJavaVM(JavaVM *javavm)
jint jni_AttachCurrentThreadAsDaemon(JavaVM *javavm, void **penv, void *args)
jstring jni_NewString(JNIEnv *env, const jchar *buf, jsize len)
jthrowable _Jv_JNI_ExceptionOccurred(JNIEnv *env)
jobject _Jv_JNI_CallNonvirtualObjectMethodV(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
void gc_reference_unregister(java_object_t **ref)
#define JNI_GET_ARRAY_REGION(name, type, intern, intern2)
fieldinfo * get_field() const
java_handle_t * native_new_and_init_string(classinfo *c, java_handle_t *s)
jmethodID _Jv_JNI_GetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig)
static jlong _Jv_jni_CallLongMethod(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, va_list ap)
jboolean _Jv_JNI_IsSameObject(JNIEnv *env, jobject ref1, jobject ref2)
jsize get_string_count(const java_lang_String &s)
#define LLNI_classinfo_unwrap(clazz)
void _Jv_JNI_CallNonvirtualVoidMethodA(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, const jvalue *args)
jint jni_AttachCurrentThread(JavaVM *javavm, void **p_env, void *thr_args)
jobjectRefType jni_GetObjectRefType(JNIEnv *env, jobject obj)
void jni_GetStringUTFRegion(JNIEnv *env, jstring str, jsize start, jsize len, char *buf)
void _Jv_JNI_CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args)
void _Jv_JNI_CallStaticVoidMethodA(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args)
void * jni_GetDirectBufferAddress(JNIEnv *env, jobject buf)
jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs)
bool jni_version_check(int version)
void hashtable_create(hashtable *hash, u4 size)
classinfo * class_java_lang_reflect_Constructor
jfieldID _Jv_JNI_GetStaticFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig)
#define MFREE(ptr, type, num)
const char const void jint length
static void _Jv_jni_CallVoidMethodA(java_handle_t *o, vftbl_t *vftbl, methodinfo *m, const jvalue *args)
int64_t vm_call_method_long_valist(methodinfo *m, java_handle_t *o, va_list ap)
static hashtable * hashtable_global_ref
classinfo * class_define(Utf8String name, classloader_t *cl, int32_t length, uint8_t *data, java_handle_t *pd)
jclass jni_FindClass(JNIEnv *env, const char *name)
jobject jni_PopLocalFrame(JNIEnv *env, jobject result)
GNU Classpath gnu/classpath/Pointer.
jobject _Jv_JNI_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID)
float vm_call_method_float_valist(methodinfo *m, java_handle_t *o, va_list ap)
jint _Jv_JNI_GetVersion(JNIEnv *env)
void lock()
Locks the given mutex object and checks for errors.
void _Jv_JNI_SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index, jobject val)
const jchar * jni_GetStringChars(JNIEnv *env, jstring str, jboolean *isCopy)
void exceptions_throw_stringindexoutofboundsexception(void)
static VM * get_current()
static JavaString from_utf16(const u2 *, size_t)
creates a new java/lang/String from a utf16-text
#define JNI_CALL_NONVIRTUAL_METHOD_V(name, type, intern)