795 796 return features_string; 797 WB_END 798 799 800 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 801 ResourceMark rm(THREAD); 802 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 803 CHECK_JNI_EXCEPTION_(env, NULL); 804 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 805 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); 806 jobjectArray result = NULL; 807 if (code == NULL) { 808 return result; 809 } 810 int insts_size = code->insts_size(); 811 812 ThreadToNativeFromVM ttn(thread); 813 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string()); 814 CHECK_JNI_EXCEPTION_(env, NULL); 815 result = env->NewObjectArray(2, clazz, NULL); 816 if (result == NULL) { 817 return result; 818 } 819 820 jobject obj = integerBox(thread, env, code->comp_level()); 821 CHECK_JNI_EXCEPTION_(env, NULL); 822 env->SetObjectArrayElement(result, 0, obj); 823 824 jbyteArray insts = env->NewByteArray(insts_size); 825 CHECK_JNI_EXCEPTION_(env, NULL); 826 env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin()); 827 env->SetObjectArrayElement(result, 1, insts); 828 829 return result; 830 WB_END 831 832 WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o)) 833 return (jlong) Thread::current()->stack_size(); 834 WB_END 835 836 WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o)) 837 JavaThread* t = JavaThread::current(); 838 return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong) StackShadowPages * os::vm_page_size(); 839 WB_END 840 841 int WhiteBox::array_bytes_to_length(size_t bytes) { 842 return Array<u1>::bytes_to_length(bytes); 843 } 844 845 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size)) 846 if (size < 0) { 847 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), 848 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size)); | 795 796 return features_string; 797 WB_END 798 799 800 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) 801 ResourceMark rm(THREAD); 802 jmethodID jmid = reflected_method_to_jmid(thread, env, method); 803 CHECK_JNI_EXCEPTION_(env, NULL); 804 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); 805 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); 806 jobjectArray result = NULL; 807 if (code == NULL) { 808 return result; 809 } 810 int insts_size = code->insts_size(); 811 812 ThreadToNativeFromVM ttn(thread); 813 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string()); 814 CHECK_JNI_EXCEPTION_(env, NULL); 815 result = env->NewObjectArray(3, clazz, NULL); 816 if (result == NULL) { 817 return result; 818 } 819 820 jobject level = integerBox(thread, env, code->comp_level()); 821 CHECK_JNI_EXCEPTION_(env, NULL); 822 env->SetObjectArrayElement(result, 0, level); 823 824 jbyteArray insts = env->NewByteArray(insts_size); 825 CHECK_JNI_EXCEPTION_(env, NULL); 826 env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin()); 827 env->SetObjectArrayElement(result, 1, insts); 828 829 jobject id = integerBox(thread, env, code->compile_id()); 830 CHECK_JNI_EXCEPTION_(env, NULL); 831 env->SetObjectArrayElement(result, 2, id); 832 833 return result; 834 WB_END 835 836 WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o)) 837 return (jlong) Thread::current()->stack_size(); 838 WB_END 839 840 WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o)) 841 JavaThread* t = JavaThread::current(); 842 return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong) StackShadowPages * os::vm_page_size(); 843 WB_END 844 845 int WhiteBox::array_bytes_to_length(size_t bytes) { 846 return Array<u1>::bytes_to_length(bytes); 847 } 848 849 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size)) 850 if (size < 0) { 851 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), 852 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size)); |