comparison src/share/vm/jvmci/jvmciCompilerToVM.cpp @ 23996:11f0412408cd

8173912: [JVMCI] fix memory overhead of JVMCI
author Doug Simon <doug.simon@oracle.com>
date Fri, 03 Feb 2017 21:08:05 +0100
parents ebce30b702eb
children 9a740aa0d87b
comparison
equal deleted inserted replaced
23995:988dc143e0bf 23996:11f0412408cd
281 do_intx_flag(MethodProfileWidth) \ 281 do_intx_flag(MethodProfileWidth) \
282 do_intx_flag(ObjectAlignmentInBytes) \ 282 do_intx_flag(ObjectAlignmentInBytes) \
283 do_bool_flag(PrintInlining) \ 283 do_bool_flag(PrintInlining) \
284 do_bool_flag(ReduceInitialCardMarks) \ 284 do_bool_flag(ReduceInitialCardMarks) \
285 do_bool_flag(RestrictContended) \ 285 do_bool_flag(RestrictContended) \
286 /*do_intx_flag(StackReservedPages) - JDK 9*/ \ 286 /* do_intx_flag(StackReservedPages) JDK 9 */ \
287 do_intx_flag(StackShadowPages) \ 287 do_intx_flag(StackShadowPages) \
288 do_bool_flag(TLABStats) \ 288 do_bool_flag(TLABStats) \
289 do_uintx_flag(TLABWasteIncrement) \ 289 do_uintx_flag(TLABWasteIncrement) \
290 do_intx_flag(TypeProfileWidth) \ 290 do_intx_flag(TypeProfileWidth) \
291 do_bool_flag(UseAESIntrinsics) \ 291 do_bool_flag(UseAESIntrinsics) \
292 do_intx_flag(UseAVX) \ 292 X86_ONLY(do_intx_flag(UseAVX)) \
293 do_bool_flag(UseBiasedLocking) \ 293 do_bool_flag(UseBiasedLocking) \
294 do_bool_flag(UseCRC32Intrinsics) \ 294 do_bool_flag(UseCRC32Intrinsics) \
295 do_bool_flag(UseCompressedClassPointers) \ 295 do_bool_flag(UseCompressedClassPointers) \
296 do_bool_flag(UseCompressedOops) \ 296 do_bool_flag(UseCompressedOops) \
297 do_bool_flag(UseConcMarkSweepGC) \ 297 do_bool_flag(UseConcMarkSweepGC) \
298 do_bool_flag(UseCountLeadingZerosInstruction) \ 298 X86_ONLY(do_bool_flag(UseCountLeadingZerosInstruction)) \
299 do_bool_flag(UseCountTrailingZerosInstruction) \ 299 X86_ONLY(do_bool_flag(UseCountTrailingZerosInstruction)) \
300 do_bool_flag(UseG1GC) \ 300 do_bool_flag(UseG1GC) \
301 COMPILER2_PRESENT(do_bool_flag(UseMontgomeryMultiplyIntrinsic)) \ 301 COMPILER2_PRESENT(do_bool_flag(UseMontgomeryMultiplyIntrinsic)) \
302 COMPILER2_PRESENT(do_bool_flag(UseMontgomerySquareIntrinsic)) \ 302 COMPILER2_PRESENT(do_bool_flag(UseMontgomerySquareIntrinsic)) \
303 COMPILER2_PRESENT(do_bool_flag(UseMulAddIntrinsic)) \ 303 COMPILER2_PRESENT(do_bool_flag(UseMulAddIntrinsic)) \
304 COMPILER2_PRESENT(do_bool_flag(UseMultiplyToLenIntrinsic)) \ 304 COMPILER2_PRESENT(do_bool_flag(UseMultiplyToLenIntrinsic)) \
310 COMPILER2_PRESENT(do_bool_flag(UseSquareToLenIntrinsic)) \ 310 COMPILER2_PRESENT(do_bool_flag(UseSquareToLenIntrinsic)) \
311 do_bool_flag(UseStackBanging) \ 311 do_bool_flag(UseStackBanging) \
312 do_bool_flag(UseTLAB) \ 312 do_bool_flag(UseTLAB) \
313 do_bool_flag(VerifyOops) \ 313 do_bool_flag(VerifyOops) \
314 314
315 #define BOXED_BOOLEAN(name, value) oop name = ((jboolean)(value) ? boxedTrue() : boxedFalse())
315 #define BOXED_DOUBLE(name, value) oop name; do { jvalue p; p.d = (jdouble) (value); name = java_lang_boxing_object::create(T_DOUBLE, &p, CHECK_NULL);} while(0) 316 #define BOXED_DOUBLE(name, value) oop name; do { jvalue p; p.d = (jdouble) (value); name = java_lang_boxing_object::create(T_DOUBLE, &p, CHECK_NULL);} while(0)
316 #define BOXED_LONG(name, value) \ 317 #define BOXED_LONG(name, value) \
317 oop name; \ 318 oop name; \
318 do { \ 319 do { \
319 jvalue p; p.j = (jlong) (value); \ 320 jvalue p; p.j = (jlong) (value); \
341 } \ 342 } \
342 } \ 343 } \
343 } while (0) 344 } while (0)
344 345
345 C2V_VMENTRY(jobjectArray, readConfiguration, (JNIEnv *env)) 346 C2V_VMENTRY(jobjectArray, readConfiguration, (JNIEnv *env))
346
347 ResourceMark rm; 347 ResourceMark rm;
348 HandleMark hm; 348 HandleMark hm;
349 349
350 // Used to canonicalize Long and String values. 350 // Used to canonicalize Long and String values.
351 ResourceHashtable<jlong, Handle> longs; 351 ResourceHashtable<jlong, Handle> longs;
352 ResourceHashtable<const char*, Handle, &CompilerToVM::cstring_hash, &CompilerToVM::cstring_equals> strings; 352 ResourceHashtable<const char*, Handle, &CompilerToVM::cstring_hash, &CompilerToVM::cstring_equals> strings;
353
354 jvalue prim;
355 prim.z = true; Handle boxedTrue = java_lang_boxing_object::create(T_BOOLEAN, &prim, CHECK_NULL);
356 prim.z = false; Handle boxedFalse = java_lang_boxing_object::create(T_BOOLEAN, &prim, CHECK_NULL);
353 357
354 CompilerToVM::Data::initialize(CHECK_NULL); 358 CompilerToVM::Data::initialize(CHECK_NULL);
355 359
356 VMField::klass()->initialize(CHECK_NULL); 360 VMField::klass()->initialize(CHECK_NULL);
357 VMFlag::klass()->initialize(CHECK_NULL); 361 VMFlag::klass()->initialize(CHECK_NULL);
371 VMField::set_type(vmFieldObj, type()); 375 VMField::set_type(vmFieldObj, type());
372 VMField::set_offset(vmFieldObj, vmField.offset); 376 VMField::set_offset(vmFieldObj, vmField.offset);
373 VMField::set_address(vmFieldObj, (jlong) vmField.address); 377 VMField::set_address(vmFieldObj, (jlong) vmField.address);
374 if (vmField.isStatic && vmField.typeString != NULL) { 378 if (vmField.isStatic && vmField.typeString != NULL) {
375 if (strcmp(vmField.typeString, "bool") == 0) { 379 if (strcmp(vmField.typeString, "bool") == 0) {
376 BOXED_LONG(value, *(jbyte*) vmField.address); 380 BOXED_BOOLEAN(box, *(jbyte*) vmField.address);
377 VMField::set_value(vmFieldObj, value); 381 VMField::set_value(vmFieldObj, box);
378 } else if (strcmp(vmField.typeString, "int") == 0 || 382 } else if (strcmp(vmField.typeString, "int") == 0 ||
379 strcmp(vmField.typeString, "jint") == 0) { 383 strcmp(vmField.typeString, "jint") == 0) {
380 BOXED_LONG(value, *(jint*) vmField.address); 384 BOXED_LONG(box, *(jint*) vmField.address);
381 VMField::set_value(vmFieldObj, value); 385 VMField::set_value(vmFieldObj, box);
382 } else if (strcmp(vmField.typeString, "uint64_t") == 0) { 386 } else if (strcmp(vmField.typeString, "uint64_t") == 0) {
383 BOXED_LONG(value, *(uint64_t*) vmField.address); 387 BOXED_LONG(box, *(uint64_t*) vmField.address);
384 VMField::set_value(vmFieldObj, value); 388 VMField::set_value(vmFieldObj, box);
385 } else if (strcmp(vmField.typeString, "address") == 0 || 389 } else if (strcmp(vmField.typeString, "address") == 0 ||
386 strcmp(vmField.typeString, "intptr_t") == 0 || 390 strcmp(vmField.typeString, "intptr_t") == 0 ||
387 strcmp(vmField.typeString, "uintptr_t") == 0 || 391 strcmp(vmField.typeString, "uintptr_t") == 0 ||
388 strcmp(vmField.typeString, "size_t") == 0 || 392 strcmp(vmField.typeString, "size_t") == 0 ||
389 // All foo* types are addresses. 393 // All foo* types are addresses.
390 vmField.typeString[strlen(vmField.typeString) - 1] == '*') { 394 vmField.typeString[strlen(vmField.typeString) - 1] == '*') {
391 BOXED_LONG(value, *((address*) vmField.address)); 395 BOXED_LONG(box, *((address*) vmField.address));
392 VMField::set_value(vmFieldObj, value); 396 VMField::set_value(vmFieldObj, box);
393 } 397 }
394 } 398 }
395 vmFields->obj_at_put(i, vmFieldObj()); 399 vmFields->obj_at_put(i, vmFieldObj());
396 } 400 }
397 401
427 } 431 }
428 432
429 #define COUNT_FLAG(ignore) +1 433 #define COUNT_FLAG(ignore) +1
430 #ifdef ASSERT 434 #ifdef ASSERT
431 #define CHECK_FLAG(type, name) { \ 435 #define CHECK_FLAG(type, name) { \
432 Flag* flag = Flag::find_flag(#name, strlen(#name), /*allow_locked*/ true, /* return_flag */ true); \ 436 Flag* flag = Flag::find_flag(#name, strlen(#name), /*allow_locked*/ true, /* return_flag */ true); \
433 assert(flag != NULL, "No such flag named " #name); \ 437 assert(flag != NULL, "No such flag named " #name); \
434 assert(flag->is_##type(), "Flag " #name " is not of type " #type); \ 438 assert(flag->is_##type(), "Flag " #name " is not of type " #type); \
435 } 439 }
436 #else 440 #else
437 #define CHECK_FLAG(type, name) 441 #define CHECK_FLAG(type, name)
438 #endif 442 #endif
439 443
440 #define ADD_FLAG(type, name, convert) { \ 444 #define ADD_FLAG(type, name, convert) { \
441 CHECK_FLAG(type, name) \ 445 CHECK_FLAG(type, name) \
442 instanceHandle vmFlagObj = InstanceKlass::cast(VMFlag::klass())->allocate_instance_handle(CHECK_NULL); \ 446 instanceHandle vmFlagObj = InstanceKlass::cast(VMFlag::klass())->allocate_instance_handle(CHECK_NULL); \
443 STRING(fname, #name); \ 447 STRING(fname, #name); \
444 STRING(ftype, #type); \ 448 STRING(ftype, #type); \
445 VMFlag::set_name(vmFlagObj, fname()); \ 449 VMFlag::set_name(vmFlagObj, fname()); \
446 VMFlag::set_type(vmFlagObj, ftype()); \ 450 VMFlag::set_type(vmFlagObj, ftype()); \
447 convert(value, name); \ 451 convert(value, name); \
448 VMFlag::set_value(vmFlagObj, value); \ 452 VMFlag::set_value(vmFlagObj, value); \
449 vmFlags->obj_at_put(i++, vmFlagObj()); \ 453 vmFlags->obj_at_put(i++, vmFlagObj()); \
450 } 454 }
451 #define ADD_BOOL_FLAG(name) ADD_FLAG(bool, name, BOXED_LONG) 455 #define ADD_BOOL_FLAG(name) ADD_FLAG(bool, name, BOXED_BOOLEAN)
452 #define ADD_INTX_FLAG(name) ADD_FLAG(intx, name, BOXED_LONG) 456 #define ADD_INTX_FLAG(name) ADD_FLAG(intx, name, BOXED_LONG)
453 #define ADD_UINTX_FLAG(name) ADD_FLAG(uintx, name, BOXED_LONG) 457 #define ADD_UINTX_FLAG(name) ADD_FLAG(uintx, name, BOXED_LONG)
454 458
455 len = 0 + PREDEFINED_CONFIG_FLAGS(COUNT_FLAG, COUNT_FLAG, COUNT_FLAG); 459 len = 0 + PREDEFINED_CONFIG_FLAGS(COUNT_FLAG, COUNT_FLAG, COUNT_FLAG);
456 objArrayHandle vmFlags = oopFactory::new_objArray(VMFlag::klass(), len, CHECK_NULL); 460 objArrayHandle vmFlags = oopFactory::new_objArray(VMFlag::klass(), len, CHECK_NULL);
457 int i = 0; 461 int i = 0;
458 PREDEFINED_CONFIG_FLAGS(ADD_BOOL_FLAG, ADD_INTX_FLAG, ADD_UINTX_FLAG) 462 PREDEFINED_CONFIG_FLAGS(ADD_BOOL_FLAG, ADD_INTX_FLAG, ADD_UINTX_FLAG)
459 463
460 objArrayHandle vmIntrinsics = CompilerToVM::initialize_intrinsics(CHECK_NULL); 464 objArrayHandle vmIntrinsics = CompilerToVM::initialize_intrinsics(CHECK_NULL);
461 465
462 objArrayOop data = oopFactory::new_objArray(SystemDictionary::Object_klass(), 5, CHECK_NULL); 466 objArrayOop data = oopFactory::new_objArray(SystemDictionary::Object_klass(), 5, CHECK_NULL);
473 #undef ADD_INTX_FLAG 477 #undef ADD_INTX_FLAG
474 #undef ADD_UINTX_FLAG 478 #undef ADD_UINTX_FLAG
475 #undef CHECK_FLAG 479 #undef CHECK_FLAG
476 C2V_END 480 C2V_END
477 481
478 C2V_VMENTRY(jobject, getFlagValue, (JNIEnv *, jobject, jobject name_handle)) 482 C2V_VMENTRY(jobject, getFlagValue, (JNIEnv *, jobject c2vm, jobject name_handle))
479 #define RETURN_BOXED_LONG(value) oop box; jvalue p; p.j = (jlong) (value); box = java_lang_boxing_object::create(T_LONG, &p, CHECK_NULL); return JNIHandles::make_local(THREAD, box); 483 #define RETURN_BOXED_LONG(value) oop box; jvalue p; p.j = (jlong) (value); box = java_lang_boxing_object::create(T_LONG, &p, CHECK_NULL); return JNIHandles::make_local(THREAD, box);
480 #define RETURN_BOXED_DOUBLE(value) oop box; jvalue p; p.d = (jdouble) (value); box = java_lang_boxing_object::create(T_DOUBLE, &p, CHECK_NULL); return JNIHandles::make_local(THREAD, box); 484 #define RETURN_BOXED_DOUBLE(value) oop box; jvalue p; p.d = (jdouble) (value); box = java_lang_boxing_object::create(T_DOUBLE, &p, CHECK_NULL); return JNIHandles::make_local(THREAD, box);
481 Handle name = JNIHandles::resolve(name_handle); 485 Handle name = JNIHandles::resolve(name_handle);
482 if (name.is_null()) { 486 if (name.is_null()) {
483 THROW_0(vmSymbols::java_lang_NullPointerException()); 487 THROW_0(vmSymbols::java_lang_NullPointerException());
484 } 488 }
485 const char* cstring = java_lang_String::as_utf8_string(name()); 489 const char* cstring = java_lang_String::as_utf8_string(name());
486 Flag* flag = Flag::find_flag(cstring, strlen(cstring), /* allow_locked */ true, /* return_flag */ true); 490 Flag* flag = Flag::find_flag(cstring, strlen(cstring), /* allow_locked */ true, /* return_flag */ true);
487 if (flag == NULL) { 491 if (flag == NULL) {
488 return NULL; 492 return c2vm;
489 } 493 }
490 if (flag->is_bool()) { 494 if (flag->is_bool()) {
491 RETURN_BOXED_LONG(flag->get_bool()); 495 jvalue prim;
496 prim.z = flag->get_bool();
497 oop box = java_lang_boxing_object::create(T_BOOLEAN, &prim, CHECK_NULL);
498 return JNIHandles::make_local(THREAD, box);
492 } else if (flag->is_ccstr()) { 499 } else if (flag->is_ccstr()) {
493 Handle value = java_lang_String::create_from_str(flag->get_ccstr(), CHECK_NULL); 500 Handle value = java_lang_String::create_from_str(flag->get_ccstr(), CHECK_NULL);
494 return JNIHandles::make_local(THREAD, value()); 501 return JNIHandles::make_local(THREAD, value());
495 } else if (flag->is_intx()) { 502 } else if (flag->is_intx()) {
496 RETURN_BOXED_LONG(flag->get_intx()); 503 RETURN_BOXED_LONG(flag->get_intx());
504 /*} else if (flag->is_int()) {
505 RETURN_BOXED_LONG(flag->get_int());
506 } else if (flag->is_uint()) {
507 RETURN_BOXED_LONG(flag->get_uint());*/
497 } else if (flag->is_uint64_t()) { 508 } else if (flag->is_uint64_t()) {
498 RETURN_BOXED_LONG(flag->get_uint64_t()); 509 RETURN_BOXED_LONG(flag->get_uint64_t());
510 /*} else if (flag->is_size_t()) {
511 RETURN_BOXED_LONG(flag->get_size_t());*/
499 } else if (flag->is_uintx()) { 512 } else if (flag->is_uintx()) {
500 RETURN_BOXED_LONG(flag->get_uintx()); 513 RETURN_BOXED_LONG(flag->get_uintx());
501 } else if (flag->is_double()) { 514 } else if (flag->is_double()) {
502 RETURN_BOXED_DOUBLE(flag->get_double()); 515 RETURN_BOXED_DOUBLE(flag->get_double());
503 } else { 516 } else {
879 892
880 C2V_VMENTRY(jobject, resolveFieldInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode, jintArray info_handle)) 893 C2V_VMENTRY(jobject, resolveFieldInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode, jintArray info_handle))
881 ResourceMark rm; 894 ResourceMark rm;
882 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool); 895 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
883 Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF); 896 Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF);
884 fieldDescriptor result; 897 fieldDescriptor fd;
885 LinkResolver::resolve_field_access(result, cp, index, Bytecodes::java_code(code), true, false, CHECK_0); 898 LinkResolver::resolve_field_access(fd, cp, index, Bytecodes::java_code(code), true, false, CHECK_0);
886 typeArrayOop info = (typeArrayOop) JNIHandles::resolve(info_handle); 899 typeArrayOop info = (typeArrayOop) JNIHandles::resolve(info_handle);
887 assert(info != NULL && info->length() == 2, "must be"); 900 if (info == NULL || info->length() != 3) {
888 info->int_at_put(0, result.access_flags().as_int()); 901 JVMCI_ERROR_NULL("info must not be null and have a length of 3");
889 info->int_at_put(1, result.offset()); 902 }
890 info->int_at_put(2, result.index()); 903 info->int_at_put(0, fd.access_flags().as_int());
891 oop field_holder = CompilerToVM::get_jvmci_type(result.field_holder(), CHECK_NULL); 904 info->int_at_put(1, fd.offset());
905 info->int_at_put(2, fd.index());
906 oop field_holder = CompilerToVM::get_jvmci_type(fd.field_holder(), CHECK_NULL);
892 return JNIHandles::make_local(THREAD, field_holder); 907 return JNIHandles::make_local(THREAD, field_holder);
893 C2V_END 908 C2V_END
894 909
895 C2V_VMENTRY(jint, getVtableIndexForInterfaceMethod, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method)) 910 C2V_VMENTRY(jint, getVtableIndexForInterfaceMethod, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method))
896 ResourceMark rm; 911 ResourceMark rm;
1239 C2V_END 1254 C2V_END
1240 1255
1241 C2V_VMENTRY(jobject, getSymbol, (JNIEnv*, jobject, jlong symbol)) 1256 C2V_VMENTRY(jobject, getSymbol, (JNIEnv*, jobject, jlong symbol))
1242 Handle sym = java_lang_String::create_from_symbol((Symbol*)(address)symbol, CHECK_NULL); 1257 Handle sym = java_lang_String::create_from_symbol((Symbol*)(address)symbol, CHECK_NULL);
1243 return JNIHandles::make_local(THREAD, sym()); 1258 return JNIHandles::make_local(THREAD, sym());
1244 C2V_END
1245
1246 C2V_VMENTRY(jobject, getFieldName, (JNIEnv*, jobject, jobject jvmci_type, jint index))
1247 InstanceKlass* klass = (InstanceKlass*) CompilerToVM::asKlass(jvmci_type);
1248 if (index < 0 || index >= klass->fields()->length()) {
1249 THROW_NULL(vmSymbols::java_lang_ArrayIndexOutOfBoundsException());
1250 }
1251 Handle name = java_lang_String::create_from_symbol(klass->field_name(index), CHECK_NULL);
1252 return JNIHandles::make_local(THREAD, name());
1253 C2V_END
1254
1255 C2V_VMENTRY(jobject, getMethodName, (JNIEnv*, jobject, jobject jvmci_method))
1256 Method* method = CompilerToVM::asMethod(jvmci_method);
1257 Handle name = java_lang_String::create_from_symbol(method->name(), CHECK_NULL);
1258 return JNIHandles::make_local(THREAD, name());
1259 C2V_END 1259 C2V_END
1260 1260
1261 bool matches(jobjectArray methods, Method* method) { 1261 bool matches(jobjectArray methods, Method* method) {
1262 objArrayOop methods_oop = (objArrayOop) JNIHandles::resolve(methods); 1262 objArrayOop methods_oop = (objArrayOop) JNIHandles::resolve(methods);
1263 1263
1707 {CC"collectCounters", CC"()[J", FN_PTR(collectCounters)}, 1707 {CC"collectCounters", CC"()[J", FN_PTR(collectCounters)},
1708 {CC"allocateCompileId", CC"("HS_RESOLVED_METHOD"I)I", FN_PTR(allocateCompileId)}, 1708 {CC"allocateCompileId", CC"("HS_RESOLVED_METHOD"I)I", FN_PTR(allocateCompileId)},
1709 {CC"isMature", CC"("METASPACE_METHOD_DATA")Z", FN_PTR(isMature)}, 1709 {CC"isMature", CC"("METASPACE_METHOD_DATA")Z", FN_PTR(isMature)},
1710 {CC"hasCompiledCodeForOSR", CC"("HS_RESOLVED_METHOD"II)Z", FN_PTR(hasCompiledCodeForOSR)}, 1710 {CC"hasCompiledCodeForOSR", CC"("HS_RESOLVED_METHOD"II)Z", FN_PTR(hasCompiledCodeForOSR)},
1711 {CC"getSymbol", CC"(J)"STRING, FN_PTR(getSymbol)}, 1711 {CC"getSymbol", CC"(J)"STRING, FN_PTR(getSymbol)},
1712 {CC"getFieldName", CC"("HS_RESOLVED_KLASS"I)"STRING, FN_PTR(getFieldName)},
1713 {CC"getMethodName", CC"("HS_RESOLVED_METHOD")"STRING, FN_PTR(getMethodName)},
1714 {CC"getNextStackFrame", CC"("HS_STACK_FRAME_REF "["RESOLVED_METHOD"I)"HS_STACK_FRAME_REF, FN_PTR(getNextStackFrame)}, 1712 {CC"getNextStackFrame", CC"("HS_STACK_FRAME_REF "["RESOLVED_METHOD"I)"HS_STACK_FRAME_REF, FN_PTR(getNextStackFrame)},
1715 {CC"materializeVirtualObjects", CC"("HS_STACK_FRAME_REF"Z)V", FN_PTR(materializeVirtualObjects)}, 1713 {CC"materializeVirtualObjects", CC"("HS_STACK_FRAME_REF"Z)V", FN_PTR(materializeVirtualObjects)},
1716 {CC"shouldDebugNonSafepoints", CC"()Z", FN_PTR(shouldDebugNonSafepoints)}, 1714 {CC"shouldDebugNonSafepoints", CC"()Z", FN_PTR(shouldDebugNonSafepoints)},
1717 {CC"writeDebugOutput", CC"([BII)V", FN_PTR(writeDebugOutput)}, 1715 {CC"writeDebugOutput", CC"([BII)V", FN_PTR(writeDebugOutput)},
1718 {CC"flushDebugOutput", CC"()V", FN_PTR(flushDebugOutput)}, 1716 {CC"flushDebugOutput", CC"()V", FN_PTR(flushDebugOutput)},