< prev index next >

src/hotspot/share/prims/whitebox.cpp

Print this page

  35 #include "classfile/javaClasses.inline.hpp"
  36 #include "classfile/modules.hpp"
  37 #include "classfile/stringTable.hpp"
  38 #include "classfile/symbolTable.hpp"
  39 #include "classfile/systemDictionary.hpp"
  40 #include "classfile/vmSymbols.hpp"
  41 #include "code/codeCache.hpp"
  42 #include "compiler/compilationPolicy.hpp"
  43 #include "compiler/compilerOracle.hpp"
  44 #include "compiler/directivesParser.hpp"
  45 #include "compiler/methodMatcher.hpp"
  46 #include "gc/shared/concurrentGCBreakpoints.hpp"
  47 #include "gc/shared/gcConfig.hpp"
  48 #include "gc/shared/genArguments.hpp"
  49 #include "jvm.h"
  50 #include "jvmtifiles/jvmtiEnv.hpp"
  51 #include "logging/log.hpp"
  52 #include "memory/iterator.hpp"
  53 #include "memory/memoryReserver.hpp"
  54 #include "memory/metadataFactory.hpp"

  55 #include "memory/metaspace/testHelpers.hpp"
  56 #include "memory/metaspaceUtils.hpp"
  57 #include "memory/oopFactory.hpp"
  58 #include "memory/resourceArea.hpp"
  59 #include "memory/universe.hpp"
  60 #include "nmt/mallocSiteTable.hpp"

  61 #include "oops/array.hpp"
  62 #include "oops/compressedOops.hpp"

  63 #include "oops/constantPool.inline.hpp"
  64 #include "oops/klass.inline.hpp"
  65 #include "oops/method.inline.hpp"
  66 #include "oops/methodData.inline.hpp"
  67 #include "oops/objArrayKlass.hpp"
  68 #include "oops/objArrayOop.inline.hpp"
  69 #include "oops/oop.inline.hpp"

  70 #include "oops/typeArrayOop.inline.hpp"
  71 #include "prims/jvmtiEnvBase.hpp"
  72 #include "prims/resolvedMethodTable.hpp"
  73 #include "prims/wbtestmethods/parserTests.hpp"
  74 #include "prims/whitebox.inline.hpp"
  75 #include "runtime/arguments.hpp"
  76 #include "runtime/atomic.hpp"
  77 #include "runtime/deoptimization.hpp"
  78 #include "runtime/fieldDescriptor.inline.hpp"
  79 #include "runtime/flags/jvmFlag.hpp"
  80 #include "runtime/flags/jvmFlagAccess.hpp"
  81 #include "runtime/frame.inline.hpp"
  82 #include "runtime/handles.inline.hpp"
  83 #include "runtime/handshake.hpp"
  84 #include "runtime/interfaceSupport.inline.hpp"
  85 #include "runtime/javaCalls.hpp"
  86 #include "runtime/javaThread.inline.hpp"
  87 #include "runtime/jniHandles.inline.hpp"

  88 #include "runtime/lockStack.hpp"
  89 #include "runtime/os.hpp"
  90 #include "runtime/stackFrameStream.inline.hpp"
  91 #include "runtime/synchronizer.hpp"
  92 #include "runtime/threadSMR.hpp"
  93 #include "runtime/vframe.hpp"
  94 #include "runtime/vm_version.hpp"
  95 #include "services/memoryService.hpp"
  96 #include "utilities/align.hpp"
  97 #include "utilities/checkedCast.hpp"
  98 #include "utilities/debug.hpp"
  99 #include "utilities/elfFile.hpp"
 100 #include "utilities/exceptions.hpp"
 101 #include "utilities/macros.hpp"
 102 #include "utilities/nativeCallStack.hpp"
 103 #include "utilities/ostream.hpp"
 104 #if INCLUDE_G1GC
 105 #include "gc/g1/g1Arguments.hpp"
 106 #include "gc/g1/g1CollectedHeap.inline.hpp"
 107 #include "gc/g1/g1ConcurrentMark.hpp"

1929   VMThread::execute(&force_safepoint_op);
1930 WB_END
1931 
1932 WB_ENTRY(void, WB_ForceClassLoaderStatsSafepoint(JNIEnv* env, jobject wb))
1933   nullStream dev_null;
1934   ClassLoaderStatsVMOperation force_op(&dev_null);
1935   VMThread::execute(&force_op);
1936 WB_END
1937 
1938 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1939   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1940   return (jlong) ik->constants();
1941 WB_END
1942 
1943 WB_ENTRY(jobjectArray, WB_GetResolvedReferences(JNIEnv* env, jobject wb, jclass klass))
1944   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1945   objArrayOop resolved_refs= ik->constants()->resolved_references();
1946   return (jobjectArray)JNIHandles::make_local(THREAD, resolved_refs);
1947 WB_END
1948 







































































































1949 WB_ENTRY(jint, WB_getFieldEntriesLength(JNIEnv* env, jobject wb, jclass klass))
1950   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1951   ConstantPool* cp = ik->constants();
1952   if (cp->cache() == nullptr) {
1953     return -1;
1954   }
1955   return cp->resolved_field_entries_length();
1956 WB_END
1957 
1958 WB_ENTRY(jint, WB_getFieldCPIndex(JNIEnv* env, jobject wb, jclass klass, jint index))
1959   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1960   ConstantPool* cp = ik->constants();
1961   if (cp->cache() == nullptr) {
1962       return -1;
1963   }
1964   return cp->resolved_field_entry_at(index)->constant_pool_index();
1965 WB_END
1966 
1967 WB_ENTRY(jint, WB_getMethodEntriesLength(JNIEnv* env, jobject wb, jclass klass))
1968   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));

2891   {CC"getThreadRemainingStackSize", CC"()J",          (void*)&WB_GetThreadRemainingStackSize },
2892   {CC"DefineModule",       CC"(Ljava/lang/Object;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V",
2893                                                       (void*)&WB_DefineModule },
2894   {CC"AddModuleExports",   CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V",
2895                                                       (void*)&WB_AddModuleExports },
2896   {CC"AddReadsModule",     CC"(Ljava/lang/Object;Ljava/lang/Object;)V",
2897                                                       (void*)&WB_AddReadsModule },
2898   {CC"AddModuleExportsToAllUnnamed", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
2899                                                       (void*)&WB_AddModuleExportsToAllUnnamed },
2900   {CC"AddModuleExportsToAll", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
2901                                                       (void*)&WB_AddModuleExportsToAll },
2902   {CC"deflateIdleMonitors", CC"()Z",                  (void*)&WB_DeflateIdleMonitors },
2903   {CC"isMonitorInflated0", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated  },
2904   {CC"getInUseMonitorCount", CC"()J", (void*)&WB_getInUseMonitorCount  },
2905   {CC"getLockStackCapacity", CC"()I",                 (void*)&WB_getLockStackCapacity },
2906   {CC"supportsRecursiveLightweightLocking", CC"()Z",  (void*)&WB_supportsRecursiveLightweightLocking },
2907   {CC"forceSafepoint",     CC"()V",                   (void*)&WB_ForceSafepoint     },
2908   {CC"forceClassLoaderStatsSafepoint", CC"()V",       (void*)&WB_ForceClassLoaderStatsSafepoint },
2909   {CC"getConstantPool0",   CC"(Ljava/lang/Class;)J",  (void*)&WB_GetConstantPool    },
2910   {CC"getResolvedReferences0", CC"(Ljava/lang/Class;)[Ljava/lang/Object;", (void*)&WB_GetResolvedReferences},






2911   {CC"getFieldEntriesLength0", CC"(Ljava/lang/Class;)I",  (void*)&WB_getFieldEntriesLength},
2912   {CC"getFieldCPIndex0",    CC"(Ljava/lang/Class;I)I", (void*)&WB_getFieldCPIndex},
2913   {CC"getMethodEntriesLength0", CC"(Ljava/lang/Class;)I",  (void*)&WB_getMethodEntriesLength},
2914   {CC"getMethodCPIndex0",    CC"(Ljava/lang/Class;I)I", (void*)&WB_getMethodCPIndex},
2915   {CC"getIndyInfoLength0", CC"(Ljava/lang/Class;)I",  (void*)&WB_getIndyInfoLength},
2916   {CC"getIndyCPIndex0",    CC"(Ljava/lang/Class;I)I", (void*)&WB_getIndyCPIndex},
2917   {CC"printClasses0",      CC"(Ljava/lang/String;I)Ljava/lang/String;", (void*)&WB_printClasses},
2918   {CC"printMethods0",      CC"(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;", (void*)&WB_printMethods},
2919   {CC"getMethodBooleanOption",
2920       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",
2921                                                       (void*)&WB_GetMethodBooleaneOption},
2922   {CC"getMethodIntxOption",
2923       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
2924                                                       (void*)&WB_GetMethodIntxOption},
2925   {CC"getMethodUintxOption",
2926       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
2927                                                       (void*)&WB_GetMethodUintxOption},
2928   {CC"getMethodDoubleOption",
2929       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
2930                                                       (void*)&WB_GetMethodDoubleOption},

  35 #include "classfile/javaClasses.inline.hpp"
  36 #include "classfile/modules.hpp"
  37 #include "classfile/stringTable.hpp"
  38 #include "classfile/symbolTable.hpp"
  39 #include "classfile/systemDictionary.hpp"
  40 #include "classfile/vmSymbols.hpp"
  41 #include "code/codeCache.hpp"
  42 #include "compiler/compilationPolicy.hpp"
  43 #include "compiler/compilerOracle.hpp"
  44 #include "compiler/directivesParser.hpp"
  45 #include "compiler/methodMatcher.hpp"
  46 #include "gc/shared/concurrentGCBreakpoints.hpp"
  47 #include "gc/shared/gcConfig.hpp"
  48 #include "gc/shared/genArguments.hpp"
  49 #include "jvm.h"
  50 #include "jvmtifiles/jvmtiEnv.hpp"
  51 #include "logging/log.hpp"
  52 #include "memory/iterator.hpp"
  53 #include "memory/memoryReserver.hpp"
  54 #include "memory/metadataFactory.hpp"
  55 #include "memory/iterator.inline.hpp"
  56 #include "memory/metaspace/testHelpers.hpp"
  57 #include "memory/metaspaceUtils.hpp"
  58 #include "memory/oopFactory.hpp"
  59 #include "memory/resourceArea.hpp"
  60 #include "memory/universe.hpp"
  61 #include "nmt/mallocSiteTable.hpp"
  62 #include "oops/access.hpp"
  63 #include "oops/array.hpp"
  64 #include "oops/compressedOops.hpp"
  65 #include "oops/compressedOops.inline.hpp"
  66 #include "oops/constantPool.inline.hpp"
  67 #include "oops/klass.inline.hpp"
  68 #include "oops/method.inline.hpp"
  69 #include "oops/methodData.inline.hpp"
  70 #include "oops/objArrayKlass.hpp"
  71 #include "oops/objArrayOop.inline.hpp"
  72 #include "oops/oop.inline.hpp"
  73 #include "oops/objArrayOop.inline.hpp"
  74 #include "oops/typeArrayOop.inline.hpp"
  75 #include "prims/jvmtiEnvBase.hpp"
  76 #include "prims/resolvedMethodTable.hpp"
  77 #include "prims/wbtestmethods/parserTests.hpp"
  78 #include "prims/whitebox.inline.hpp"
  79 #include "runtime/arguments.hpp"
  80 #include "runtime/atomic.hpp"
  81 #include "runtime/deoptimization.hpp"
  82 #include "runtime/fieldDescriptor.inline.hpp"
  83 #include "runtime/flags/jvmFlag.hpp"
  84 #include "runtime/flags/jvmFlagAccess.hpp"
  85 #include "runtime/frame.inline.hpp"
  86 #include "runtime/handles.inline.hpp"
  87 #include "runtime/handshake.hpp"
  88 #include "runtime/interfaceSupport.inline.hpp"
  89 #include "runtime/javaCalls.hpp"
  90 #include "runtime/javaThread.inline.hpp"
  91 #include "runtime/jniHandles.inline.hpp"
  92 #include "runtime/keepStackGCProcessed.hpp"
  93 #include "runtime/lockStack.hpp"
  94 #include "runtime/os.hpp"
  95 #include "runtime/stackFrameStream.inline.hpp"
  96 #include "runtime/synchronizer.hpp"
  97 #include "runtime/threadSMR.hpp"
  98 #include "runtime/vframe.hpp"
  99 #include "runtime/vm_version.hpp"
 100 #include "services/memoryService.hpp"
 101 #include "utilities/align.hpp"
 102 #include "utilities/checkedCast.hpp"
 103 #include "utilities/debug.hpp"
 104 #include "utilities/elfFile.hpp"
 105 #include "utilities/exceptions.hpp"
 106 #include "utilities/macros.hpp"
 107 #include "utilities/nativeCallStack.hpp"
 108 #include "utilities/ostream.hpp"
 109 #if INCLUDE_G1GC
 110 #include "gc/g1/g1Arguments.hpp"
 111 #include "gc/g1/g1CollectedHeap.inline.hpp"
 112 #include "gc/g1/g1ConcurrentMark.hpp"

1934   VMThread::execute(&force_safepoint_op);
1935 WB_END
1936 
1937 WB_ENTRY(void, WB_ForceClassLoaderStatsSafepoint(JNIEnv* env, jobject wb))
1938   nullStream dev_null;
1939   ClassLoaderStatsVMOperation force_op(&dev_null);
1940   VMThread::execute(&force_op);
1941 WB_END
1942 
1943 WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
1944   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1945   return (jlong) ik->constants();
1946 WB_END
1947 
1948 WB_ENTRY(jobjectArray, WB_GetResolvedReferences(JNIEnv* env, jobject wb, jclass klass))
1949   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
1950   objArrayOop resolved_refs= ik->constants()->resolved_references();
1951   return (jobjectArray)JNIHandles::make_local(THREAD, resolved_refs);
1952 WB_END
1953 
1954 WB_ENTRY(jobjectArray, WB_getObjectsViaKlassOopMaps(JNIEnv* env, jobject wb, jobject thing))
1955   oop aoop = JNIHandles::resolve(thing);
1956   if (!aoop->is_instance()) {
1957     return nullptr;
1958   }
1959   instanceHandle ih(THREAD, (instanceOop) aoop);
1960   InstanceKlass* klass = InstanceKlass::cast(ih->klass());
1961   if (klass->nonstatic_oop_map_count() == 0) {
1962     return nullptr;
1963   }
1964   const OopMapBlock* map = klass->start_of_nonstatic_oop_maps();
1965   const OopMapBlock* const end = map + klass->nonstatic_oop_map_count();
1966   int oop_count = 0;
1967   while (map < end) {
1968     oop_count += map->count();
1969     map++;
1970   }
1971 
1972   objArrayHandle result_array =
1973       oopFactory::new_objArray_handle(vmClasses::Object_klass(), oop_count, CHECK_NULL);
1974   map = klass->start_of_nonstatic_oop_maps();
1975   int index = 0;
1976   while (map < end) {
1977     int offset = map->offset();
1978     for (unsigned int j = 0; j < map->count(); j++) {
1979       result_array->obj_at_put(index++, ih->obj_field(offset));
1980       offset += heapOopSize;
1981     }
1982     map++;
1983   }
1984   return (jobjectArray)JNIHandles::make_local(THREAD, result_array());
1985 WB_END
1986 
1987 // Collect Object oops but not value objects...loaded from heap
1988 class CollectObjectOops : public BasicOopIterateClosure {
1989   public:
1990   GrowableArray<Handle>* _array;
1991 
1992   CollectObjectOops() {
1993       _array = new GrowableArray<Handle>(128);
1994   }
1995 
1996   void add_oop(oop o) {
1997     Handle oh = Handle(Thread::current(), o);
1998     if (oh != nullptr && oh->is_inline_type()) {
1999       oh->oop_iterate(this);
2000     } else {
2001       _array->append(oh);
2002     }
2003   }
2004 
2005   template <class T> inline void add_oop(T* p) { add_oop(HeapAccess<>::oop_load(p)); }
2006   void do_oop(oop* o) { add_oop(o); }
2007   void do_oop(narrowOop* v) { add_oop(v); }
2008 
2009   jobjectArray create_jni_result(JNIEnv* env, TRAPS) {
2010     objArrayHandle result_array =
2011         oopFactory::new_objArray_handle(vmClasses::Object_klass(), _array->length(), CHECK_NULL);
2012     for (int i = 0 ; i < _array->length(); i++) {
2013       result_array->obj_at_put(i, _array->at(i)());
2014     }
2015     return (jobjectArray)JNIHandles::make_local(THREAD, result_array());
2016   }
2017 };
2018 
2019 // Collect Object oops but not value objects...loaded from frames
2020 class CollectFrameObjectOops : public BasicOopIterateClosure {
2021  public:
2022   CollectObjectOops _collect;
2023 
2024   template <class T> inline void add_oop(T* p) { _collect.add_oop(RawAccess<>::oop_load(p)); }
2025   void do_oop(oop* o) { add_oop(o); }
2026   void do_oop(narrowOop* v) { add_oop(v); }
2027 
2028   jobjectArray create_jni_result(JNIEnv* env, TRAPS) {
2029     return _collect.create_jni_result(env, THREAD);
2030   }
2031 };
2032 
2033 // Collect Object oops for the given oop, iterate through value objects
2034 WB_ENTRY(jobjectArray, WB_getObjectsViaOopIterator(JNIEnv* env, jobject wb, jobject thing))
2035   ResourceMark rm(thread);
2036   Handle objh(thread, JNIHandles::resolve(thing));
2037   CollectObjectOops collectOops;
2038   objh->oop_iterate(&collectOops);
2039   return collectOops.create_jni_result(env, THREAD);
2040 WB_END
2041 
2042 // Collect Object oops for the given frame deep, iterate through value objects
2043 WB_ENTRY(jobjectArray, WB_getObjectsViaFrameOopIterator(JNIEnv* env, jobject wb, jint depth))
2044   KeepStackGCProcessedMark ksgcpm(THREAD);
2045   ResourceMark rm(THREAD);
2046   CollectFrameObjectOops collectOops;
2047   StackFrameStream sfs(thread, true /* update */, true /* process_frames */);
2048   while (depth > 0) { // Skip the native WB API frame
2049     sfs.next();
2050     frame* f = sfs.current();
2051     f->oops_do(&collectOops, nullptr, sfs.register_map());
2052     depth--;
2053   }
2054   return collectOops.create_jni_result(env, THREAD);
2055 WB_END
2056 
2057 WB_ENTRY(jint, WB_getFieldEntriesLength(JNIEnv* env, jobject wb, jclass klass))
2058   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
2059   ConstantPool* cp = ik->constants();
2060   if (cp->cache() == nullptr) {
2061     return -1;
2062   }
2063   return cp->resolved_field_entries_length();
2064 WB_END
2065 
2066 WB_ENTRY(jint, WB_getFieldCPIndex(JNIEnv* env, jobject wb, jclass klass, jint index))
2067   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
2068   ConstantPool* cp = ik->constants();
2069   if (cp->cache() == nullptr) {
2070       return -1;
2071   }
2072   return cp->resolved_field_entry_at(index)->constant_pool_index();
2073 WB_END
2074 
2075 WB_ENTRY(jint, WB_getMethodEntriesLength(JNIEnv* env, jobject wb, jclass klass))
2076   InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));

2999   {CC"getThreadRemainingStackSize", CC"()J",          (void*)&WB_GetThreadRemainingStackSize },
3000   {CC"DefineModule",       CC"(Ljava/lang/Object;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V",
3001                                                       (void*)&WB_DefineModule },
3002   {CC"AddModuleExports",   CC"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V",
3003                                                       (void*)&WB_AddModuleExports },
3004   {CC"AddReadsModule",     CC"(Ljava/lang/Object;Ljava/lang/Object;)V",
3005                                                       (void*)&WB_AddReadsModule },
3006   {CC"AddModuleExportsToAllUnnamed", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
3007                                                       (void*)&WB_AddModuleExportsToAllUnnamed },
3008   {CC"AddModuleExportsToAll", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
3009                                                       (void*)&WB_AddModuleExportsToAll },
3010   {CC"deflateIdleMonitors", CC"()Z",                  (void*)&WB_DeflateIdleMonitors },
3011   {CC"isMonitorInflated0", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated  },
3012   {CC"getInUseMonitorCount", CC"()J", (void*)&WB_getInUseMonitorCount  },
3013   {CC"getLockStackCapacity", CC"()I",                 (void*)&WB_getLockStackCapacity },
3014   {CC"supportsRecursiveLightweightLocking", CC"()Z",  (void*)&WB_supportsRecursiveLightweightLocking },
3015   {CC"forceSafepoint",     CC"()V",                   (void*)&WB_ForceSafepoint     },
3016   {CC"forceClassLoaderStatsSafepoint", CC"()V",       (void*)&WB_ForceClassLoaderStatsSafepoint },
3017   {CC"getConstantPool0",   CC"(Ljava/lang/Class;)J",  (void*)&WB_GetConstantPool    },
3018   {CC"getResolvedReferences0", CC"(Ljava/lang/Class;)[Ljava/lang/Object;", (void*)&WB_GetResolvedReferences},
3019   {CC"getObjectsViaKlassOopMaps0",
3020       CC"(Ljava/lang/Object;)[Ljava/lang/Object;",    (void*)&WB_getObjectsViaKlassOopMaps},
3021   {CC"getObjectsViaOopIterator0",
3022           CC"(Ljava/lang/Object;)[Ljava/lang/Object;",(void*)&WB_getObjectsViaOopIterator},
3023   {CC"getObjectsViaFrameOopIterator",
3024       CC"(I)[Ljava/lang/Object;",                     (void*)&WB_getObjectsViaFrameOopIterator},
3025   {CC"getFieldEntriesLength0", CC"(Ljava/lang/Class;)I",  (void*)&WB_getFieldEntriesLength},
3026   {CC"getFieldCPIndex0",    CC"(Ljava/lang/Class;I)I", (void*)&WB_getFieldCPIndex},
3027   {CC"getMethodEntriesLength0", CC"(Ljava/lang/Class;)I",  (void*)&WB_getMethodEntriesLength},
3028   {CC"getMethodCPIndex0",    CC"(Ljava/lang/Class;I)I", (void*)&WB_getMethodCPIndex},
3029   {CC"getIndyInfoLength0", CC"(Ljava/lang/Class;)I",  (void*)&WB_getIndyInfoLength},
3030   {CC"getIndyCPIndex0",    CC"(Ljava/lang/Class;I)I", (void*)&WB_getIndyCPIndex},
3031   {CC"printClasses0",      CC"(Ljava/lang/String;I)Ljava/lang/String;", (void*)&WB_printClasses},
3032   {CC"printMethods0",      CC"(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;", (void*)&WB_printMethods},
3033   {CC"getMethodBooleanOption",
3034       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",
3035                                                       (void*)&WB_GetMethodBooleaneOption},
3036   {CC"getMethodIntxOption",
3037       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
3038                                                       (void*)&WB_GetMethodIntxOption},
3039   {CC"getMethodUintxOption",
3040       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
3041                                                       (void*)&WB_GetMethodUintxOption},
3042   {CC"getMethodDoubleOption",
3043       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
3044                                                       (void*)&WB_GetMethodDoubleOption},
< prev index next >