< prev index next >

src/hotspot/share/prims/whitebox.cpp

Print this page
rev 59757 : Add whitebox support for deflating idle monitors including ObjectSynchronizer::request_deflate_idle_monitors(); drop ObjectSynchronizer::_is_special_deflation_requested flag, functions and uses; switch to ObjectSynchronizer::request_deflate_idle_monitors() as needed; _last_async_deflation_time_ns should be set at the end of async deflation;


  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;",


< prev index next >