src/share/vm/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/prims/whitebox.cpp	Mon Mar 24 21:53:35 2014
--- new/src/share/vm/prims/whitebox.cpp	Mon Mar 24 21:53:35 2014

*** 508,517 **** --- 508,539 ---- CHECK_JNI_EXCEPTION_(env, NULL); return features_string; WB_END + + WB_ENTRY(jbyteArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) + jmethodID jmid = reflected_method_to_jmid(thread, env, method); + CHECK_JNI_EXCEPTION_(env, NULL); + methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); + nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); + jbyteArray result = NULL; + if (code == NULL) { + return result; + } + address code_data = code->insts_begin(); + int code_size = code->insts_size(); + + ThreadToNativeFromVM ttn(thread); + result = env->NewByteArray(code_size); + if (result != NULL) { + env->SetByteArrayRegion(result, 0, code_size, (jbyte*) code_data); + } + return result; + WB_END + + //Some convenience methods to deal with objects from java int WhiteBox::offset_for_field(const char* field_name, oop object, Symbol* signature_symbol) { assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); Thread* THREAD = Thread::current();
*** 620,629 **** --- 642,653 ---- CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState}, {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, {CC"fullGC", CC"()V", (void*)&WB_FullGC }, {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, + {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[B", + (void*)&WB_GetNMethod }, }; #undef CC JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))

src/share/vm/prims/whitebox.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File