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