850
851 return features_string;
852 WB_END
853
854
855 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
856 ResourceMark rm(THREAD);
857 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
858 CHECK_JNI_EXCEPTION_(env, NULL);
859 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
860 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
861 jobjectArray result = NULL;
862 if (code == NULL) {
863 return result;
864 }
865 int insts_size = code->insts_size();
866
867 ThreadToNativeFromVM ttn(thread);
868 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string());
869 CHECK_JNI_EXCEPTION_(env, NULL);
870 result = env->NewObjectArray(2, clazz, NULL);
871 if (result == NULL) {
872 return result;
873 }
874
875 jobject obj = integerBox(thread, env, code->comp_level());
876 CHECK_JNI_EXCEPTION_(env, NULL);
877 env->SetObjectArrayElement(result, 0, obj);
878
879 jbyteArray insts = env->NewByteArray(insts_size);
880 CHECK_JNI_EXCEPTION_(env, NULL);
881 env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin());
882 env->SetObjectArrayElement(result, 1, insts);
883
884 return result;
885 WB_END
886
887
888 int WhiteBox::array_bytes_to_length(size_t bytes) {
889 return Array<u1>::bytes_to_length(bytes);
890 }
891
892 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
893 if (size < 0) {
894 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
895 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
896 }
897
898 oop class_loader_oop = JNIHandles::resolve(class_loader);
899 ClassLoaderData* cld = class_loader_oop != NULL
900 ? java_lang_ClassLoader::loader_data(class_loader_oop)
901 : ClassLoaderData::the_null_class_loader_data();
902
|
850
851 return features_string;
852 WB_END
853
854
855 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
856 ResourceMark rm(THREAD);
857 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
858 CHECK_JNI_EXCEPTION_(env, NULL);
859 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
860 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
861 jobjectArray result = NULL;
862 if (code == NULL) {
863 return result;
864 }
865 int insts_size = code->insts_size();
866
867 ThreadToNativeFromVM ttn(thread);
868 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string());
869 CHECK_JNI_EXCEPTION_(env, NULL);
870 result = env->NewObjectArray(3, clazz, NULL);
871 if (result == NULL) {
872 return result;
873 }
874
875 jobject level = integerBox(thread, env, code->comp_level());
876 CHECK_JNI_EXCEPTION_(env, NULL);
877 env->SetObjectArrayElement(result, 0, level);
878
879 jobject id = integerBox(thread, env, code->compile_id());
880 CHECK_JNI_EXCEPTION_(env, NULL);
881 env->SetObjectArrayElement(result, 1, id);
882
883 jbyteArray insts = env->NewByteArray(insts_size);
884 CHECK_JNI_EXCEPTION_(env, NULL);
885 env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin());
886 env->SetObjectArrayElement(result, 2, insts);
887
888 return result;
889 WB_END
890
891
892 int WhiteBox::array_bytes_to_length(size_t bytes) {
893 return Array<u1>::bytes_to_length(bytes);
894 }
895
896 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
897 if (size < 0) {
898 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
899 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
900 }
901
902 oop class_loader_oop = JNIHandles::resolve(class_loader);
903 ClassLoaderData* cld = class_loader_oop != NULL
904 ? java_lang_ClassLoader::loader_data(class_loader_oop)
905 : ClassLoaderData::the_null_class_loader_data();
906
|