src/hotspot/share/prims/jni.cpp
changeset 58722 cba8afa5cfed
parent 58545 725244418646
child 58775 ba524a5f7cc2
equal deleted inserted replaced
58720:ae0af9fb3dbb 58722:cba8afa5cfed
  2149   // jni_SetField_probe_nh() assumes that is not okay to create handles
  2149   // jni_SetField_probe_nh() assumes that is not okay to create handles
  2150   // and creates a ResetNoHandleMark.
  2150   // and creates a ResetNoHandleMark.
  2151   if (JvmtiExport::should_post_field_modification()) {
  2151   if (JvmtiExport::should_post_field_modification()) {
  2152     jvalue field_value;
  2152     jvalue field_value;
  2153     field_value.l = value;
  2153     field_value.l = value;
  2154     o = JvmtiExport::jni_SetField_probe_nh(thread, obj, o, k, fieldID, false, 'L', (jvalue *)&field_value);
  2154     o = JvmtiExport::jni_SetField_probe_nh(thread, obj, o, k, fieldID, false, JVM_SIGNATURE_CLASS, (jvalue *)&field_value);
  2155   }
  2155   }
  2156   HeapAccess<ON_UNKNOWN_OOP_REF>::oop_store_at(o, offset, JNIHandles::resolve(value));
  2156   HeapAccess<ON_UNKNOWN_OOP_REF>::oop_store_at(o, offset, JNIHandles::resolve(value));
  2157   HOTSPOT_JNI_SETOBJECTFIELD_RETURN();
  2157   HOTSPOT_JNI_SETOBJECTFIELD_RETURN();
  2158 JNI_END
  2158 JNI_END
  2159 
  2159 
  2175   if (JvmtiExport::should_post_field_modification()) { \
  2175   if (JvmtiExport::should_post_field_modification()) { \
  2176     jvalue field_value; \
  2176     jvalue field_value; \
  2177     field_value.unionType = value; \
  2177     field_value.unionType = value; \
  2178     o = JvmtiExport::jni_SetField_probe_nh(thread, obj, o, k, fieldID, false, SigType, (jvalue *)&field_value); \
  2178     o = JvmtiExport::jni_SetField_probe_nh(thread, obj, o, k, fieldID, false, SigType, (jvalue *)&field_value); \
  2179   } \
  2179   } \
  2180   if (SigType == 'Z') { value = ((jboolean)value) & 1; } \
  2180   if (SigType == JVM_SIGNATURE_BOOLEAN) { value = ((jboolean)value) & 1; } \
  2181   o->Fieldname##_field_put(offset, value); \
  2181   o->Fieldname##_field_put(offset, value); \
  2182   ReturnProbe; \
  2182   ReturnProbe; \
  2183 JNI_END
  2183 JNI_END
  2184 
  2184 
  2185 DEFINE_SETFIELD(jboolean, bool,   Boolean, 'Z', z
  2185 DEFINE_SETFIELD(jboolean, bool,   Boolean, JVM_SIGNATURE_BOOLEAN, z
  2186                 , HOTSPOT_JNI_SETBOOLEANFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2186                 , HOTSPOT_JNI_SETBOOLEANFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2187                 HOTSPOT_JNI_SETBOOLEANFIELD_RETURN())
  2187                 HOTSPOT_JNI_SETBOOLEANFIELD_RETURN())
  2188 DEFINE_SETFIELD(jbyte,    byte,   Byte,    'B', b
  2188 DEFINE_SETFIELD(jbyte,    byte,   Byte,    JVM_SIGNATURE_BYTE, b
  2189                 , HOTSPOT_JNI_SETBYTEFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2189                 , HOTSPOT_JNI_SETBYTEFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2190                 HOTSPOT_JNI_SETBYTEFIELD_RETURN())
  2190                 HOTSPOT_JNI_SETBYTEFIELD_RETURN())
  2191 DEFINE_SETFIELD(jchar,    char,   Char,    'C', c
  2191 DEFINE_SETFIELD(jchar,    char,   Char,    JVM_SIGNATURE_CHAR, c
  2192                 , HOTSPOT_JNI_SETCHARFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2192                 , HOTSPOT_JNI_SETCHARFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2193                 HOTSPOT_JNI_SETCHARFIELD_RETURN())
  2193                 HOTSPOT_JNI_SETCHARFIELD_RETURN())
  2194 DEFINE_SETFIELD(jshort,   short,  Short,   'S', s
  2194 DEFINE_SETFIELD(jshort,   short,  Short,   JVM_SIGNATURE_SHORT, s
  2195                 , HOTSPOT_JNI_SETSHORTFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2195                 , HOTSPOT_JNI_SETSHORTFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2196                 HOTSPOT_JNI_SETSHORTFIELD_RETURN())
  2196                 HOTSPOT_JNI_SETSHORTFIELD_RETURN())
  2197 DEFINE_SETFIELD(jint,     int,    Int,     'I', i
  2197 DEFINE_SETFIELD(jint,     int,    Int,     JVM_SIGNATURE_INT, i
  2198                 , HOTSPOT_JNI_SETINTFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2198                 , HOTSPOT_JNI_SETINTFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2199                 HOTSPOT_JNI_SETINTFIELD_RETURN())
  2199                 HOTSPOT_JNI_SETINTFIELD_RETURN())
  2200 DEFINE_SETFIELD(jlong,    long,   Long,    'J', j
  2200 DEFINE_SETFIELD(jlong,    long,   Long,    JVM_SIGNATURE_LONG, j
  2201                 , HOTSPOT_JNI_SETLONGFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2201                 , HOTSPOT_JNI_SETLONGFIELD_ENTRY(env, obj, (uintptr_t)fieldID, value),
  2202                 HOTSPOT_JNI_SETLONGFIELD_RETURN())
  2202                 HOTSPOT_JNI_SETLONGFIELD_RETURN())
  2203 // Float and double probes don't return value because dtrace doesn't currently support it
  2203 // Float and double probes don't return value because dtrace doesn't currently support it
  2204 DEFINE_SETFIELD(jfloat,   float,  Float,   'F', f
  2204 DEFINE_SETFIELD(jfloat,   float,  Float,   JVM_SIGNATURE_FLOAT, f
  2205                 , HOTSPOT_JNI_SETFLOATFIELD_ENTRY(env, obj, (uintptr_t)fieldID),
  2205                 , HOTSPOT_JNI_SETFLOATFIELD_ENTRY(env, obj, (uintptr_t)fieldID),
  2206                 HOTSPOT_JNI_SETFLOATFIELD_RETURN())
  2206                 HOTSPOT_JNI_SETFLOATFIELD_RETURN())
  2207 DEFINE_SETFIELD(jdouble,  double, Double,  'D', d
  2207 DEFINE_SETFIELD(jdouble,  double, Double,  JVM_SIGNATURE_DOUBLE, d
  2208                 , HOTSPOT_JNI_SETDOUBLEFIELD_ENTRY(env, obj, (uintptr_t)fieldID),
  2208                 , HOTSPOT_JNI_SETDOUBLEFIELD_ENTRY(env, obj, (uintptr_t)fieldID),
  2209                 HOTSPOT_JNI_SETDOUBLEFIELD_RETURN())
  2209                 HOTSPOT_JNI_SETDOUBLEFIELD_RETURN())
  2210 
  2210 
  2211 DT_RETURN_MARK_DECL(ToReflectedField, jobject
  2211 DT_RETURN_MARK_DECL(ToReflectedField, jobject
  2212                     , HOTSPOT_JNI_TOREFLECTEDFIELD_RETURN(_ret_ref));
  2212                     , HOTSPOT_JNI_TOREFLECTEDFIELD_RETURN(_ret_ref));
  2350   // Keep JVMTI addition small and only check enabled flag here.
  2350   // Keep JVMTI addition small and only check enabled flag here.
  2351   // jni_SetField_probe() assumes that is okay to create handles.
  2351   // jni_SetField_probe() assumes that is okay to create handles.
  2352   if (JvmtiExport::should_post_field_modification()) {
  2352   if (JvmtiExport::should_post_field_modification()) {
  2353     jvalue field_value;
  2353     jvalue field_value;
  2354     field_value.l = value;
  2354     field_value.l = value;
  2355     JvmtiExport::jni_SetField_probe(thread, NULL, NULL, id->holder(), fieldID, true, 'L', (jvalue *)&field_value);
  2355     JvmtiExport::jni_SetField_probe(thread, NULL, NULL, id->holder(), fieldID, true, JVM_SIGNATURE_CLASS, (jvalue *)&field_value);
  2356   }
  2356   }
  2357   id->holder()->java_mirror()->obj_field_put(id->offset(), JNIHandles::resolve(value));
  2357   id->holder()->java_mirror()->obj_field_put(id->offset(), JNIHandles::resolve(value));
  2358   HOTSPOT_JNI_SETSTATICOBJECTFIELD_RETURN();
  2358   HOTSPOT_JNI_SETSTATICOBJECTFIELD_RETURN();
  2359 JNI_END
  2359 JNI_END
  2360 
  2360 
  2374   if (JvmtiExport::should_post_field_modification()) { \
  2374   if (JvmtiExport::should_post_field_modification()) { \
  2375     jvalue field_value; \
  2375     jvalue field_value; \
  2376     field_value.unionType = value; \
  2376     field_value.unionType = value; \
  2377     JvmtiExport::jni_SetField_probe(thread, NULL, NULL, id->holder(), fieldID, true, SigType, (jvalue *)&field_value); \
  2377     JvmtiExport::jni_SetField_probe(thread, NULL, NULL, id->holder(), fieldID, true, SigType, (jvalue *)&field_value); \
  2378   } \
  2378   } \
  2379   if (SigType == 'Z') { value = ((jboolean)value) & 1; } \
  2379   if (SigType == JVM_SIGNATURE_BOOLEAN) { value = ((jboolean)value) & 1; } \
  2380   id->holder()->java_mirror()-> Fieldname##_field_put (id->offset(), value); \
  2380   id->holder()->java_mirror()-> Fieldname##_field_put (id->offset(), value); \
  2381   ReturnProbe;\
  2381   ReturnProbe;\
  2382 JNI_END
  2382 JNI_END
  2383 
  2383 
  2384 DEFINE_SETSTATICFIELD(jboolean, bool,   Boolean, 'Z', z
  2384 DEFINE_SETSTATICFIELD(jboolean, bool,   Boolean, JVM_SIGNATURE_BOOLEAN, z
  2385                       , HOTSPOT_JNI_SETSTATICBOOLEANFIELD_ENTRY(env, clazz, (uintptr_t)fieldID, value),
  2385                       , HOTSPOT_JNI_SETSTATICBOOLEANFIELD_ENTRY(env, clazz, (uintptr_t)fieldID, value),
  2386                       HOTSPOT_JNI_SETSTATICBOOLEANFIELD_RETURN())
  2386                       HOTSPOT_JNI_SETSTATICBOOLEANFIELD_RETURN())
  2387 DEFINE_SETSTATICFIELD(jbyte,    byte,   Byte,    'B', b
  2387 DEFINE_SETSTATICFIELD(jbyte,    byte,   Byte,    JVM_SIGNATURE_BYTE, b
  2388                       , HOTSPOT_JNI_SETSTATICBYTEFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2388                       , HOTSPOT_JNI_SETSTATICBYTEFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2389                       HOTSPOT_JNI_SETSTATICBYTEFIELD_RETURN())
  2389                       HOTSPOT_JNI_SETSTATICBYTEFIELD_RETURN())
  2390 DEFINE_SETSTATICFIELD(jchar,    char,   Char,    'C', c
  2390 DEFINE_SETSTATICFIELD(jchar,    char,   Char,    JVM_SIGNATURE_CHAR, c
  2391                       , HOTSPOT_JNI_SETSTATICCHARFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2391                       , HOTSPOT_JNI_SETSTATICCHARFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2392                       HOTSPOT_JNI_SETSTATICCHARFIELD_RETURN())
  2392                       HOTSPOT_JNI_SETSTATICCHARFIELD_RETURN())
  2393 DEFINE_SETSTATICFIELD(jshort,   short,  Short,   'S', s
  2393 DEFINE_SETSTATICFIELD(jshort,   short,  Short,   JVM_SIGNATURE_SHORT, s
  2394                       , HOTSPOT_JNI_SETSTATICSHORTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2394                       , HOTSPOT_JNI_SETSTATICSHORTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2395                       HOTSPOT_JNI_SETSTATICSHORTFIELD_RETURN())
  2395                       HOTSPOT_JNI_SETSTATICSHORTFIELD_RETURN())
  2396 DEFINE_SETSTATICFIELD(jint,     int,    Int,     'I', i
  2396 DEFINE_SETSTATICFIELD(jint,     int,    Int,     JVM_SIGNATURE_INT, i
  2397                       , HOTSPOT_JNI_SETSTATICINTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2397                       , HOTSPOT_JNI_SETSTATICINTFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2398                       HOTSPOT_JNI_SETSTATICINTFIELD_RETURN())
  2398                       HOTSPOT_JNI_SETSTATICINTFIELD_RETURN())
  2399 DEFINE_SETSTATICFIELD(jlong,    long,   Long,    'J', j
  2399 DEFINE_SETSTATICFIELD(jlong,    long,   Long,    JVM_SIGNATURE_LONG, j
  2400                       , HOTSPOT_JNI_SETSTATICLONGFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2400                       , HOTSPOT_JNI_SETSTATICLONGFIELD_ENTRY(env, clazz, (uintptr_t) fieldID, value),
  2401                       HOTSPOT_JNI_SETSTATICLONGFIELD_RETURN())
  2401                       HOTSPOT_JNI_SETSTATICLONGFIELD_RETURN())
  2402 // Float and double probes don't return value because dtrace doesn't currently support it
  2402 // Float and double probes don't return value because dtrace doesn't currently support it
  2403 DEFINE_SETSTATICFIELD(jfloat,   float,  Float,   'F', f
  2403 DEFINE_SETSTATICFIELD(jfloat,   float,  Float,   JVM_SIGNATURE_FLOAT, f
  2404                       , HOTSPOT_JNI_SETSTATICFLOATFIELD_ENTRY(env, clazz, (uintptr_t) fieldID),
  2404                       , HOTSPOT_JNI_SETSTATICFLOATFIELD_ENTRY(env, clazz, (uintptr_t) fieldID),
  2405                       HOTSPOT_JNI_SETSTATICFLOATFIELD_RETURN())
  2405                       HOTSPOT_JNI_SETSTATICFLOATFIELD_RETURN())
  2406 DEFINE_SETSTATICFIELD(jdouble,  double, Double,  'D', d
  2406 DEFINE_SETSTATICFIELD(jdouble,  double, Double,  JVM_SIGNATURE_DOUBLE, d
  2407                       , HOTSPOT_JNI_SETSTATICDOUBLEFIELD_ENTRY(env, clazz, (uintptr_t) fieldID),
  2407                       , HOTSPOT_JNI_SETSTATICDOUBLEFIELD_ENTRY(env, clazz, (uintptr_t) fieldID),
  2408                       HOTSPOT_JNI_SETSTATICDOUBLEFIELD_RETURN())
  2408                       HOTSPOT_JNI_SETSTATICDOUBLEFIELD_RETURN())
  2409 
  2409 
  2410 //
  2410 //
  2411 // String Operations
  2411 // String Operations