diff src/share/vm/graal/graalCompilerToVM.cpp @ 5275:290b3025b66f

added support for disassembling code after installation (so that the result of patching and relocation can be seen)
author Doug Simon <doug.simon@oracle.com>
date Mon, 23 Apr 2012 15:49:11 +0200
parents af8958fe5a3a
children b5cd7bc05695
line wrap: on
line diff
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Mon Apr 23 15:42:30 2012 +0200
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Mon Apr 23 15:49:11 2012 +0200
@@ -877,7 +877,7 @@
 }
 
 // public HotSpotCompiledMethod installMethod(HotSpotTargetMethod targetMethod, boolean installCode);
-JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_installMethod(JNIEnv *jniEnv, jobject, jobject targetMethod, jboolean install_code) {
+JNIEXPORT jobject JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_installMethod(JNIEnv *jniEnv, jobject, jobject targetMethod, jboolean install_code, jobject info) {
   VM_ENTRY_MARK;
   ResourceMark rm;
   HandleMark hm;
@@ -887,6 +887,13 @@
   ciEnv env(&arena);
   CodeInstaller installer(targetMethodHandle, nm, install_code != 0);
 
+  if (info != NULL) {
+    arrayOop codeCopy = oopFactory::new_byteArray(nm->code_size(), CHECK_0);
+    memcpy(codeCopy->base(T_BYTE), nm->code_begin(), nm->code_size());
+    HotSpotCodeInfo::set_code(info, codeCopy);
+    HotSpotCodeInfo::set_start(info, (jlong) nm->code_begin());
+  }
+
   // if install_code is true then we installed the code into the given method, no need to return an RiCompiledMethod
   if (!install_code && nm != NULL) {
     instanceKlass::cast(HotSpotCompiledMethod::klass())->initialize(CHECK_NULL);
@@ -903,7 +910,7 @@
 }
 
 // public long installStub(HotSpotTargetMethod targetMethod, String name);
-JNIEXPORT jlong JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_installStub(JNIEnv *jniEnv, jobject, jobject targetMethod) {
+JNIEXPORT jlong JNICALL Java_com_oracle_graal_hotspot_bridge_CompilerToVMImpl_installStub(JNIEnv *jniEnv, jobject, jobject targetMethod, jobject info) {
   VM_ENTRY_MARK;
   ResourceMark rm;
   HandleMark hm;
@@ -911,7 +918,16 @@
   jlong id;
   Arena arena;
   ciEnv env(&arena);
-  CodeInstaller installer(targetMethodHandle, id);
+  BufferBlob* blob;
+  CodeInstaller installer(targetMethodHandle, blob, id);
+
+  if (info != NULL) {
+    arrayOop codeCopy = oopFactory::new_byteArray(blob->code_size(), CHECK_0);
+    memcpy(codeCopy->base(T_BYTE), blob->code_begin(), blob->code_size());
+    HotSpotCodeInfo::set_code(info, codeCopy);
+    HotSpotCodeInfo::set_start(info, (jlong) blob->code_begin());
+  }
+
   return id;
 }
 
@@ -1114,6 +1130,7 @@
 #define CONFIG          "Lcom/oracle/graal/hotspot/HotSpotVMConfig;"
 #define HS_METHOD       "Lcom/oracle/graal/hotspot/ri/HotSpotMethod;"
 #define HS_COMP_METHOD  "Lcom/oracle/graal/hotspot/ri/HotSpotCompiledMethod;"
+#define HS_CODE_INFO    "Lcom/oracle/graal/hotspot/ri/HotSpotCodeInfo;"
 #define METHOD_DATA     "Lcom/oracle/graal/hotspot/ri/HotSpotMethodData;"
 #define CI_CONSTANT     "Lcom/oracle/max/cri/ci/CiConstant;"
 #define CI_KIND         "Lcom/oracle/max/cri/ci/CiKind;"
@@ -1153,8 +1170,8 @@
   {CC"getMaxCallTargetOffset",            CC"("CI_RUNTIME_CALL")J",                             FN_PTR(getMaxCallTargetOffset)},
   {CC"getType",                           CC"("CLASS")"TYPE,                                    FN_PTR(getType)},
   {CC"getConfiguration",                  CC"()"CONFIG,                                         FN_PTR(getConfiguration)},
-  {CC"installMethod",                     CC"("TARGET_METHOD"Z)"HS_COMP_METHOD,                 FN_PTR(installMethod)},
-  {CC"installStub",                       CC"("TARGET_METHOD")"PROXY,                           FN_PTR(installStub)},
+  {CC"installMethod",                     CC"("TARGET_METHOD"Z"HS_CODE_INFO")"HS_COMP_METHOD,   FN_PTR(installMethod)},
+  {CC"installStub",                       CC"("TARGET_METHOD HS_CODE_INFO")"PROXY,              FN_PTR(installStub)},
   {CC"disassembleNative",                 CC"([BJ)"STRING,                                      FN_PTR(disassembleNative)},
   {CC"disassembleJava",                   CC"("RESOLVED_METHOD")"STRING,                        FN_PTR(disassembleJava)},
   {CC"RiMethod_toStackTraceElement",      CC"("RESOLVED_METHOD"I)"STACK_TRACE_ELEMENT,          FN_PTR(RiMethod_1toStackTraceElement)},