comparison src/share/vm/prims/jni.cpp @ 13086:096c224171c4

Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
author Doug Simon <doug.simon@oracle.com>
date Wed, 20 Nov 2013 00:10:38 +0100
parents 359f7e70ae7f 1d1ea10fe09f
children b00553202ec2
comparison
equal deleted inserted replaced
12782:92b7ec34ddfa 13086:096c224171c4
1592 } else { 1592 } else {
1593 m = NULL; 1593 m = NULL;
1594 } 1594 }
1595 } else { 1595 } else {
1596 m = klass->lookup_method(name, signature); 1596 m = klass->lookup_method(name, signature);
1597 // Look up interfaces 1597 if (m == NULL && klass->oop_is_instance()) {
1598 if (m == NULL && klass->oop_is_instance()) { 1598 m = InstanceKlass::cast(klass())->lookup_method_in_ordered_interfaces(name, signature);
1599 m = InstanceKlass::cast(klass())->lookup_method_in_all_interfaces(name,
1600 signature);
1601 } 1599 }
1602 } 1600 }
1603 if (m == NULL || (m->is_static() != is_static)) { 1601 if (m == NULL || (m->is_static() != is_static)) {
1604 THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), name_str); 1602 THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), name_str);
1605 } 1603 }
3211 DTRACE_PROBE2(hotspot_jni, GetStringLength__entry, env, string); 3209 DTRACE_PROBE2(hotspot_jni, GetStringLength__entry, env, string);
3212 #else /* USDT2 */ 3210 #else /* USDT2 */
3213 HOTSPOT_JNI_GETSTRINGLENGTH_ENTRY( 3211 HOTSPOT_JNI_GETSTRINGLENGTH_ENTRY(
3214 env, string); 3212 env, string);
3215 #endif /* USDT2 */ 3213 #endif /* USDT2 */
3216 jsize ret = java_lang_String::length(JNIHandles::resolve_non_null(string)); 3214 jsize ret = 0;
3215 oop s = JNIHandles::resolve_non_null(string);
3216 if (java_lang_String::value(s) != NULL) {
3217 ret = java_lang_String::length(s);
3218 }
3217 #ifndef USDT2 3219 #ifndef USDT2
3218 DTRACE_PROBE1(hotspot_jni, GetStringLength__return, ret); 3220 DTRACE_PROBE1(hotspot_jni, GetStringLength__return, ret);
3219 #else /* USDT2 */ 3221 #else /* USDT2 */
3220 HOTSPOT_JNI_GETSTRINGLENGTH_RETURN( 3222 HOTSPOT_JNI_GETSTRINGLENGTH_RETURN(
3221 ret); 3223 ret);
3231 DTRACE_PROBE3(hotspot_jni, GetStringChars__entry, env, string, isCopy); 3233 DTRACE_PROBE3(hotspot_jni, GetStringChars__entry, env, string, isCopy);
3232 #else /* USDT2 */ 3234 #else /* USDT2 */
3233 HOTSPOT_JNI_GETSTRINGCHARS_ENTRY( 3235 HOTSPOT_JNI_GETSTRINGCHARS_ENTRY(
3234 env, string, (uintptr_t *) isCopy); 3236 env, string, (uintptr_t *) isCopy);
3235 #endif /* USDT2 */ 3237 #endif /* USDT2 */
3238 jchar* buf = NULL;
3236 oop s = JNIHandles::resolve_non_null(string); 3239 oop s = JNIHandles::resolve_non_null(string);
3237 int s_len = java_lang_String::length(s);
3238 typeArrayOop s_value = java_lang_String::value(s); 3240 typeArrayOop s_value = java_lang_String::value(s);
3239 int s_offset = java_lang_String::offset(s); 3241 if (s_value != NULL) {
3240 jchar* buf = NEW_C_HEAP_ARRAY_RETURN_NULL(jchar, s_len + 1, mtInternal); // add one for zero termination 3242 int s_len = java_lang_String::length(s);
3241 /* JNI Specification states return NULL on OOM */ 3243 int s_offset = java_lang_String::offset(s);
3242 if (buf != NULL) { 3244 buf = NEW_C_HEAP_ARRAY_RETURN_NULL(jchar, s_len + 1, mtInternal); // add one for zero termination
3243 if (s_len > 0) { 3245 /* JNI Specification states return NULL on OOM */
3244 memcpy(buf, s_value->char_at_addr(s_offset), sizeof(jchar)*s_len); 3246 if (buf != NULL) {
3245 } 3247 if (s_len > 0) {
3246 buf[s_len] = 0; 3248 memcpy(buf, s_value->char_at_addr(s_offset), sizeof(jchar)*s_len);
3247 //%note jni_5 3249 }
3248 if (isCopy != NULL) { 3250 buf[s_len] = 0;
3249 *isCopy = JNI_TRUE; 3251 //%note jni_5
3252 if (isCopy != NULL) {
3253 *isCopy = JNI_TRUE;
3254 }
3250 } 3255 }
3251 } 3256 }
3252 #ifndef USDT2 3257 #ifndef USDT2
3253 DTRACE_PROBE1(hotspot_jni, GetStringChars__return, buf); 3258 DTRACE_PROBE1(hotspot_jni, GetStringChars__return, buf);
3254 #else /* USDT2 */ 3259 #else /* USDT2 */
3314 DTRACE_PROBE2(hotspot_jni, GetStringUTFLength__entry, env, string); 3319 DTRACE_PROBE2(hotspot_jni, GetStringUTFLength__entry, env, string);
3315 #else /* USDT2 */ 3320 #else /* USDT2 */
3316 HOTSPOT_JNI_GETSTRINGUTFLENGTH_ENTRY( 3321 HOTSPOT_JNI_GETSTRINGUTFLENGTH_ENTRY(
3317 env, string); 3322 env, string);
3318 #endif /* USDT2 */ 3323 #endif /* USDT2 */
3319 jsize ret = java_lang_String::utf8_length(JNIHandles::resolve_non_null(string)); 3324 jsize ret = 0;
3325 oop java_string = JNIHandles::resolve_non_null(string);
3326 if (java_lang_String::value(java_string) != NULL) {
3327 ret = java_lang_String::utf8_length(java_string);
3328 }
3320 #ifndef USDT2 3329 #ifndef USDT2
3321 DTRACE_PROBE1(hotspot_jni, GetStringUTFLength__return, ret); 3330 DTRACE_PROBE1(hotspot_jni, GetStringUTFLength__return, ret);
3322 #else /* USDT2 */ 3331 #else /* USDT2 */
3323 HOTSPOT_JNI_GETSTRINGUTFLENGTH_RETURN( 3332 HOTSPOT_JNI_GETSTRINGUTFLENGTH_RETURN(
3324 ret); 3333 ret);
3333 DTRACE_PROBE3(hotspot_jni, GetStringUTFChars__entry, env, string, isCopy); 3342 DTRACE_PROBE3(hotspot_jni, GetStringUTFChars__entry, env, string, isCopy);
3334 #else /* USDT2 */ 3343 #else /* USDT2 */
3335 HOTSPOT_JNI_GETSTRINGUTFCHARS_ENTRY( 3344 HOTSPOT_JNI_GETSTRINGUTFCHARS_ENTRY(
3336 env, string, (uintptr_t *) isCopy); 3345 env, string, (uintptr_t *) isCopy);
3337 #endif /* USDT2 */ 3346 #endif /* USDT2 */
3347 char* result = NULL;
3338 oop java_string = JNIHandles::resolve_non_null(string); 3348 oop java_string = JNIHandles::resolve_non_null(string);
3339 size_t length = java_lang_String::utf8_length(java_string); 3349 if (java_lang_String::value(java_string) != NULL) {
3340 /* JNI Specification states return NULL on OOM */ 3350 size_t length = java_lang_String::utf8_length(java_string);
3341 char* result = AllocateHeap(length + 1, mtInternal, 0, AllocFailStrategy::RETURN_NULL); 3351 /* JNI Specification states return NULL on OOM */
3342 if (result != NULL) { 3352 result = AllocateHeap(length + 1, mtInternal, 0, AllocFailStrategy::RETURN_NULL);
3343 java_lang_String::as_utf8_string(java_string, result, (int) length + 1); 3353 if (result != NULL) {
3344 if (isCopy != NULL) { 3354 java_lang_String::as_utf8_string(java_string, result, (int) length + 1);
3345 *isCopy = JNI_TRUE; 3355 if (isCopy != NULL) {
3356 *isCopy = JNI_TRUE;
3357 }
3346 } 3358 }
3347 } 3359 }
3348 #ifndef USDT2 3360 #ifndef USDT2
3349 DTRACE_PROBE1(hotspot_jni, GetStringUTFChars__return, result); 3361 DTRACE_PROBE1(hotspot_jni, GetStringUTFChars__return, result);
3350 #else /* USDT2 */ 3362 #else /* USDT2 */
5048 // Forward declaration 5060 // Forward declaration
5049 void TestReservedSpace_test(); 5061 void TestReservedSpace_test();
5050 void TestReserveMemorySpecial_test(); 5062 void TestReserveMemorySpecial_test();
5051 void TestVirtualSpace_test(); 5063 void TestVirtualSpace_test();
5052 void TestMetaspaceAux_test(); 5064 void TestMetaspaceAux_test();
5065 void TestMetachunk_test();
5066 void TestVirtualSpaceNode_test();
5053 #if INCLUDE_ALL_GCS 5067 #if INCLUDE_ALL_GCS
5054 void TestG1BiasedArray_test(); 5068 void TestG1BiasedArray_test();
5055 #endif 5069 #endif
5056 5070
5057 void execute_internal_vm_tests() { 5071 void execute_internal_vm_tests() {
5059 tty->print_cr("Running internal VM tests"); 5073 tty->print_cr("Running internal VM tests");
5060 run_unit_test(TestReservedSpace_test()); 5074 run_unit_test(TestReservedSpace_test());
5061 run_unit_test(TestReserveMemorySpecial_test()); 5075 run_unit_test(TestReserveMemorySpecial_test());
5062 run_unit_test(TestVirtualSpace_test()); 5076 run_unit_test(TestVirtualSpace_test());
5063 run_unit_test(TestMetaspaceAux_test()); 5077 run_unit_test(TestMetaspaceAux_test());
5078 run_unit_test(TestMetachunk_test());
5079 run_unit_test(TestVirtualSpaceNode_test());
5064 run_unit_test(GlobalDefinitions::test_globals()); 5080 run_unit_test(GlobalDefinitions::test_globals());
5065 run_unit_test(GCTimerAllTest::all()); 5081 run_unit_test(GCTimerAllTest::all());
5066 run_unit_test(arrayOopDesc::test_max_array_length()); 5082 run_unit_test(arrayOopDesc::test_max_array_length());
5067 run_unit_test(CollectedHeap::test_is_in()); 5083 run_unit_test(CollectedHeap::test_is_in());
5068 run_unit_test(QuickSort::test_quick_sort()); 5084 run_unit_test(QuickSort::test_quick_sort());