24
25 #include "precompiled.hpp"
26
27 #include <new>
28
29 #include "classfile/classLoaderDataGraph.hpp"
30 #include "classfile/javaClasses.inline.hpp"
31 #include "classfile/modules.hpp"
32 #include "classfile/protectionDomainCache.hpp"
33 #include "classfile/stringTable.hpp"
34 #include "classfile/symbolTable.hpp"
35 #include "code/codeCache.hpp"
36 #include "compiler/compilationPolicy.hpp"
37 #include "compiler/methodMatcher.hpp"
38 #include "compiler/directivesParser.hpp"
39 #include "gc/shared/concurrentGCBreakpoints.hpp"
40 #include "gc/shared/gcConfig.hpp"
41 #include "gc/shared/genArguments.hpp"
42 #include "gc/shared/genCollectedHeap.hpp"
43 #include "jvmtifiles/jvmtiEnv.hpp"
44 #include "memory/filemap.hpp"
45 #include "memory/heapShared.inline.hpp"
46 #include "memory/metaspaceShared.hpp"
47 #include "memory/metadataFactory.hpp"
48 #include "memory/iterator.hpp"
49 #include "memory/resourceArea.hpp"
50 #include "memory/universe.hpp"
51 #include "memory/oopFactory.hpp"
52 #include "oops/array.hpp"
53 #include "oops/compressedOops.hpp"
54 #include "oops/constantPool.inline.hpp"
55 #include "oops/method.inline.hpp"
56 #include "oops/objArrayKlass.hpp"
57 #include "oops/objArrayOop.inline.hpp"
58 #include "oops/oop.inline.hpp"
59 #include "oops/typeArrayOop.inline.hpp"
60 #include "prims/resolvedMethodTable.hpp"
61 #include "prims/wbtestmethods/parserTests.hpp"
62 #include "prims/whitebox.inline.hpp"
63 #include "runtime/arguments.hpp"
461
462 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
463 if (UseG1GC) {
464 G1CollectedHeap* g1h = G1CollectedHeap::heap();
465 size_t nr = g1h->num_free_regions();
466 return (jlong)nr;
467 }
468 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NumFreeRegions: G1 GC is not enabled");
469 WB_END
470
471 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
472 if (UseG1GC) {
473 G1CollectedHeap* g1h = G1CollectedHeap::heap();
474 return g1h->concurrent_mark()->cm_thread()->during_cycle();
475 }
476 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1InConcurrentMark: G1 GC is not enabled");
477 WB_END
478
479 WB_ENTRY(jboolean, WB_G1StartMarkCycle(JNIEnv* env, jobject o))
480 if (UseG1GC) {
481 if (AsyncDeflateIdleMonitors) {
482 // AsyncDeflateIdleMonitors needs to know when System.gc() or
483 // the equivalent is called so any special clean up can be done
484 // at a safepoint, e.g., TestHumongousClassLoader.java.
485 ObjectSynchronizer::set_is_special_deflation_requested(true);
486 }
487 G1CollectedHeap* g1h = G1CollectedHeap::heap();
488 if (!g1h->concurrent_mark()->cm_thread()->during_cycle()) {
489 g1h->collect(GCCause::_wb_conc_mark);
490 return true;
491 }
492 return false;
493 }
494 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1StartMarkCycle: G1 GC is not enabled");
495 WB_END
496
497 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
498 if (UseG1GC) {
499 return (jint)HeapRegion::GrainBytes;
500 }
501 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1RegionSize: G1 GC is not enabled");
502 WB_END
503
504 #endif // INCLUDE_G1GC
505
506 #if INCLUDE_G1GC || INCLUDE_PARALLELGC
1438
1439 WB_ENTRY(void, WB_UnlockCompilation(JNIEnv* env, jobject o))
1440 MonitorLocker mo(Compilation_lock, Mutex::_no_safepoint_check_flag);
1441 WhiteBox::compilation_locked = false;
1442 mo.notify_all();
1443 WB_END
1444
1445 WB_ENTRY(void, WB_ForceNMethodSweep(JNIEnv* env, jobject o))
1446 // Force a code cache sweep and block until it finished
1447 NMethodSweeper::force_sweep();
1448 WB_END
1449
1450 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
1451 ResourceMark rm(THREAD);
1452 int len;
1453 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false);
1454 return (StringTable::lookup(name, len) != NULL);
1455 WB_END
1456
1457 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
1458 if (AsyncDeflateIdleMonitors) {
1459 // AsyncDeflateIdleMonitors needs to know when System.gc() or
1460 // the equivalent is called so any special clean up can be done
1461 // at a safepoint, e.g., TestHumongousClassLoader.java.
1462 ObjectSynchronizer::set_is_special_deflation_requested(true);
1463 }
1464 Universe::heap()->soft_ref_policy()->set_should_clear_all_soft_refs(true);
1465 Universe::heap()->collect(GCCause::_wb_full_gc);
1466 #if INCLUDE_G1GC
1467 if (UseG1GC) {
1468 // Needs to be cleared explicitly for G1
1469 Universe::heap()->soft_ref_policy()->set_should_clear_all_soft_refs(false);
1470 }
1471 #endif // INCLUDE_G1GC
1472 WB_END
1473
1474 WB_ENTRY(void, WB_YoungGC(JNIEnv* env, jobject o))
1475 Universe::heap()->collect(GCCause::_wb_young_gc);
1476 WB_END
1477
1478 WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o))
1479 // static+volatile in order to force the read to happen
1480 // (not be eliminated by the compiler)
1481 static char c;
1482 static volatile char* p;
1483
1792
1793 WB_ENTRY(void, WB_AssertSpecialLock(JNIEnv* env, jobject o, jboolean allowVMBlock, jboolean safepointCheck))
1794 // Create a special lock violating condition in value
1795 Mutex::SafepointCheckRequired sfpt_check_required = safepointCheck ?
1796 Mutex::_safepoint_check_always :
1797 Mutex::_safepoint_check_never;
1798 Mutex::SafepointCheckFlag safepoint_check = safepointCheck ?
1799 Monitor::_safepoint_check_flag :
1800 Monitor::_no_safepoint_check_flag;
1801
1802 MutexLocker ml(new Mutex(Mutex::special, "SpecialTest_lock", allowVMBlock, sfpt_check_required), safepoint_check);
1803 // If the lock above succeeds, try to safepoint to test the NSV implied with this special lock.
1804 ThreadBlockInVM tbivm(JavaThread::current());
1805 WB_END
1806
1807 WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
1808 oop obj_oop = JNIHandles::resolve(obj);
1809 return (jboolean) obj_oop->mark().has_monitor();
1810 WB_END
1811
1812 WB_ENTRY(void, WB_ForceSafepoint(JNIEnv* env, jobject wb))
1813 if (AsyncDeflateIdleMonitors) {
1814 // AsyncDeflateIdleMonitors needs to know when System.gc() or
1815 // the equivalent is called so any special clean up can be done
1816 // at a safepoint, e.g., TestRTMTotalCountIncrRate.java or
1817 // TestUseRTMForStackLocks.java.
1818 ObjectSynchronizer::set_is_special_deflation_requested(true);
1819 }
1820 VM_ForceSafepoint force_safepoint_op;
1821 VMThread::execute(&force_safepoint_op);
1822 WB_END
1823
1824 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1825 InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1826 return (jlong) ik->constants();
1827 WB_END
1828
1829 WB_ENTRY(jint, WB_GetConstantPoolCacheIndexTag(JNIEnv* env, jobject wb))
1830 return ConstantPool::CPCACHE_INDEX_TAG;
1831 WB_END
1832
1833 WB_ENTRY(jint, WB_GetConstantPoolCacheLength(JNIEnv* env, jobject wb, jclass klass))
1834 InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1835 ConstantPool* cp = ik->constants();
1836 if (cp->cache() == NULL) {
1837 return -1;
1838 }
1839 return cp->cache()->length();
2463 {CC"getCodeHeapEntries", CC"(I)[Ljava/lang/Object;",(void*)&WB_GetCodeHeapEntries },
2464 {CC"getCompilationActivityMode",
2465 CC"()I", (void*)&WB_GetCompilationActivityMode},
2466 {CC"getMethodData0", CC"(Ljava/lang/reflect/Executable;)J",
2467 (void*)&WB_GetMethodData },
2468 {CC"getCodeBlob", CC"(J)[Ljava/lang/Object;",(void*)&WB_GetCodeBlob },
2469 {CC"getThreadStackSize", CC"()J", (void*)&WB_GetThreadStackSize },
2470 {CC"getThreadRemainingStackSize", CC"()J", (void*)&WB_GetThreadRemainingStackSize },
2471 {CC"DefineModule", CC"(Ljava/lang/Object;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V",
2472 (void*)&WB_DefineModule },
2473 {CC"AddModuleExports", CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V",
2474 (void*)&WB_AddModuleExports },
2475 {CC"AddReadsModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)V",
2476 (void*)&WB_AddReadsModule },
2477 {CC"AddModuleExportsToAllUnnamed", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
2478 (void*)&WB_AddModuleExportsToAllUnnamed },
2479 {CC"AddModuleExportsToAll", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
2480 (void*)&WB_AddModuleExportsToAll },
2481 {CC"assertMatchingSafepointCalls", CC"(ZZ)V", (void*)&WB_AssertMatchingSafepointCalls },
2482 {CC"assertSpecialLock", CC"(ZZ)V", (void*)&WB_AssertSpecialLock },
2483 {CC"isMonitorInflated0", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated },
2484 {CC"forceSafepoint", CC"()V", (void*)&WB_ForceSafepoint },
2485 {CC"getConstantPool0", CC"(Ljava/lang/Class;)J", (void*)&WB_GetConstantPool },
2486 {CC"getConstantPoolCacheIndexTag0", CC"()I", (void*)&WB_GetConstantPoolCacheIndexTag},
2487 {CC"getConstantPoolCacheLength0", CC"(Ljava/lang/Class;)I", (void*)&WB_GetConstantPoolCacheLength},
2488 {CC"remapInstructionOperandFromCPCache0",
2489 CC"(Ljava/lang/Class;I)I", (void*)&WB_ConstantPoolRemapInstructionOperandFromCache},
2490 {CC"encodeConstantPoolIndyIndex0",
2491 CC"(I)I", (void*)&WB_ConstantPoolEncodeIndyIndex},
2492 {CC"getMethodBooleanOption",
2493 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",
2494 (void*)&WB_GetMethodBooleaneOption},
2495 {CC"getMethodIntxOption",
2496 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
2497 (void*)&WB_GetMethodIntxOption},
2498 {CC"getMethodUintxOption",
2499 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
2500 (void*)&WB_GetMethodUintxOption},
2501 {CC"getMethodDoubleOption",
2502 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
|
24
25 #include "precompiled.hpp"
26
27 #include <new>
28
29 #include "classfile/classLoaderDataGraph.hpp"
30 #include "classfile/javaClasses.inline.hpp"
31 #include "classfile/modules.hpp"
32 #include "classfile/protectionDomainCache.hpp"
33 #include "classfile/stringTable.hpp"
34 #include "classfile/symbolTable.hpp"
35 #include "code/codeCache.hpp"
36 #include "compiler/compilationPolicy.hpp"
37 #include "compiler/methodMatcher.hpp"
38 #include "compiler/directivesParser.hpp"
39 #include "gc/shared/concurrentGCBreakpoints.hpp"
40 #include "gc/shared/gcConfig.hpp"
41 #include "gc/shared/genArguments.hpp"
42 #include "gc/shared/genCollectedHeap.hpp"
43 #include "jvmtifiles/jvmtiEnv.hpp"
44 #include "logging/log.hpp"
45 #include "memory/filemap.hpp"
46 #include "memory/heapShared.inline.hpp"
47 #include "memory/metaspaceShared.hpp"
48 #include "memory/metadataFactory.hpp"
49 #include "memory/iterator.hpp"
50 #include "memory/resourceArea.hpp"
51 #include "memory/universe.hpp"
52 #include "memory/oopFactory.hpp"
53 #include "oops/array.hpp"
54 #include "oops/compressedOops.hpp"
55 #include "oops/constantPool.inline.hpp"
56 #include "oops/method.inline.hpp"
57 #include "oops/objArrayKlass.hpp"
58 #include "oops/objArrayOop.inline.hpp"
59 #include "oops/oop.inline.hpp"
60 #include "oops/typeArrayOop.inline.hpp"
61 #include "prims/resolvedMethodTable.hpp"
62 #include "prims/wbtestmethods/parserTests.hpp"
63 #include "prims/whitebox.inline.hpp"
64 #include "runtime/arguments.hpp"
462
463 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
464 if (UseG1GC) {
465 G1CollectedHeap* g1h = G1CollectedHeap::heap();
466 size_t nr = g1h->num_free_regions();
467 return (jlong)nr;
468 }
469 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1NumFreeRegions: G1 GC is not enabled");
470 WB_END
471
472 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
473 if (UseG1GC) {
474 G1CollectedHeap* g1h = G1CollectedHeap::heap();
475 return g1h->concurrent_mark()->cm_thread()->during_cycle();
476 }
477 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1InConcurrentMark: G1 GC is not enabled");
478 WB_END
479
480 WB_ENTRY(jboolean, WB_G1StartMarkCycle(JNIEnv* env, jobject o))
481 if (UseG1GC) {
482 G1CollectedHeap* g1h = G1CollectedHeap::heap();
483 if (!g1h->concurrent_mark()->cm_thread()->during_cycle()) {
484 g1h->collect(GCCause::_wb_conc_mark);
485 return true;
486 }
487 return false;
488 }
489 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1StartMarkCycle: G1 GC is not enabled");
490 WB_END
491
492 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
493 if (UseG1GC) {
494 return (jint)HeapRegion::GrainBytes;
495 }
496 THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1RegionSize: G1 GC is not enabled");
497 WB_END
498
499 #endif // INCLUDE_G1GC
500
501 #if INCLUDE_G1GC || INCLUDE_PARALLELGC
1433
1434 WB_ENTRY(void, WB_UnlockCompilation(JNIEnv* env, jobject o))
1435 MonitorLocker mo(Compilation_lock, Mutex::_no_safepoint_check_flag);
1436 WhiteBox::compilation_locked = false;
1437 mo.notify_all();
1438 WB_END
1439
1440 WB_ENTRY(void, WB_ForceNMethodSweep(JNIEnv* env, jobject o))
1441 // Force a code cache sweep and block until it finished
1442 NMethodSweeper::force_sweep();
1443 WB_END
1444
1445 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
1446 ResourceMark rm(THREAD);
1447 int len;
1448 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false);
1449 return (StringTable::lookup(name, len) != NULL);
1450 WB_END
1451
1452 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
1453 Universe::heap()->soft_ref_policy()->set_should_clear_all_soft_refs(true);
1454 Universe::heap()->collect(GCCause::_wb_full_gc);
1455 #if INCLUDE_G1GC
1456 if (UseG1GC) {
1457 // Needs to be cleared explicitly for G1
1458 Universe::heap()->soft_ref_policy()->set_should_clear_all_soft_refs(false);
1459 }
1460 #endif // INCLUDE_G1GC
1461 WB_END
1462
1463 WB_ENTRY(void, WB_YoungGC(JNIEnv* env, jobject o))
1464 Universe::heap()->collect(GCCause::_wb_young_gc);
1465 WB_END
1466
1467 WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o))
1468 // static+volatile in order to force the read to happen
1469 // (not be eliminated by the compiler)
1470 static char c;
1471 static volatile char* p;
1472
1781
1782 WB_ENTRY(void, WB_AssertSpecialLock(JNIEnv* env, jobject o, jboolean allowVMBlock, jboolean safepointCheck))
1783 // Create a special lock violating condition in value
1784 Mutex::SafepointCheckRequired sfpt_check_required = safepointCheck ?
1785 Mutex::_safepoint_check_always :
1786 Mutex::_safepoint_check_never;
1787 Mutex::SafepointCheckFlag safepoint_check = safepointCheck ?
1788 Monitor::_safepoint_check_flag :
1789 Monitor::_no_safepoint_check_flag;
1790
1791 MutexLocker ml(new Mutex(Mutex::special, "SpecialTest_lock", allowVMBlock, sfpt_check_required), safepoint_check);
1792 // If the lock above succeeds, try to safepoint to test the NSV implied with this special lock.
1793 ThreadBlockInVM tbivm(JavaThread::current());
1794 WB_END
1795
1796 WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
1797 oop obj_oop = JNIHandles::resolve(obj);
1798 return (jboolean) obj_oop->mark().has_monitor();
1799 WB_END
1800
1801 WB_ENTRY(jboolean, WB_DeflateIdleMonitors(JNIEnv* env, jobject wb))
1802 log_info(monitorinflation)("WhiteBox initiated DeflateIdleMonitors");
1803 return ObjectSynchronizer::request_deflate_idle_monitors();
1804 WB_END
1805
1806 WB_ENTRY(void, WB_ForceSafepoint(JNIEnv* env, jobject wb))
1807 VM_ForceSafepoint force_safepoint_op;
1808 VMThread::execute(&force_safepoint_op);
1809 WB_END
1810
1811 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1812 InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1813 return (jlong) ik->constants();
1814 WB_END
1815
1816 WB_ENTRY(jint, WB_GetConstantPoolCacheIndexTag(JNIEnv* env, jobject wb))
1817 return ConstantPool::CPCACHE_INDEX_TAG;
1818 WB_END
1819
1820 WB_ENTRY(jint, WB_GetConstantPoolCacheLength(JNIEnv* env, jobject wb, jclass klass))
1821 InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1822 ConstantPool* cp = ik->constants();
1823 if (cp->cache() == NULL) {
1824 return -1;
1825 }
1826 return cp->cache()->length();
2450 {CC"getCodeHeapEntries", CC"(I)[Ljava/lang/Object;",(void*)&WB_GetCodeHeapEntries },
2451 {CC"getCompilationActivityMode",
2452 CC"()I", (void*)&WB_GetCompilationActivityMode},
2453 {CC"getMethodData0", CC"(Ljava/lang/reflect/Executable;)J",
2454 (void*)&WB_GetMethodData },
2455 {CC"getCodeBlob", CC"(J)[Ljava/lang/Object;",(void*)&WB_GetCodeBlob },
2456 {CC"getThreadStackSize", CC"()J", (void*)&WB_GetThreadStackSize },
2457 {CC"getThreadRemainingStackSize", CC"()J", (void*)&WB_GetThreadRemainingStackSize },
2458 {CC"DefineModule", CC"(Ljava/lang/Object;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V",
2459 (void*)&WB_DefineModule },
2460 {CC"AddModuleExports", CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V",
2461 (void*)&WB_AddModuleExports },
2462 {CC"AddReadsModule", CC"(Ljava/lang/Object;Ljava/lang/Object;)V",
2463 (void*)&WB_AddReadsModule },
2464 {CC"AddModuleExportsToAllUnnamed", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
2465 (void*)&WB_AddModuleExportsToAllUnnamed },
2466 {CC"AddModuleExportsToAll", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
2467 (void*)&WB_AddModuleExportsToAll },
2468 {CC"assertMatchingSafepointCalls", CC"(ZZ)V", (void*)&WB_AssertMatchingSafepointCalls },
2469 {CC"assertSpecialLock", CC"(ZZ)V", (void*)&WB_AssertSpecialLock },
2470 {CC"deflateIdleMonitors", CC"()Z", (void*)&WB_DeflateIdleMonitors },
2471 {CC"isMonitorInflated0", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated },
2472 {CC"forceSafepoint", CC"()V", (void*)&WB_ForceSafepoint },
2473 {CC"getConstantPool0", CC"(Ljava/lang/Class;)J", (void*)&WB_GetConstantPool },
2474 {CC"getConstantPoolCacheIndexTag0", CC"()I", (void*)&WB_GetConstantPoolCacheIndexTag},
2475 {CC"getConstantPoolCacheLength0", CC"(Ljava/lang/Class;)I", (void*)&WB_GetConstantPoolCacheLength},
2476 {CC"remapInstructionOperandFromCPCache0",
2477 CC"(Ljava/lang/Class;I)I", (void*)&WB_ConstantPoolRemapInstructionOperandFromCache},
2478 {CC"encodeConstantPoolIndyIndex0",
2479 CC"(I)I", (void*)&WB_ConstantPoolEncodeIndyIndex},
2480 {CC"getMethodBooleanOption",
2481 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",
2482 (void*)&WB_GetMethodBooleaneOption},
2483 {CC"getMethodIntxOption",
2484 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
2485 (void*)&WB_GetMethodIntxOption},
2486 {CC"getMethodUintxOption",
2487 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
2488 (void*)&WB_GetMethodUintxOption},
2489 {CC"getMethodDoubleOption",
2490 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
|