Mercurial > hg > truffle
changeset 11381:001c41b01d13
HotSpotInstalledCode: moved getCode to Java and added the ability to get the whole blob
author | twisti |
---|---|
date | Tue, 20 Aug 2013 12:48:28 -0700 |
parents | d9bcf8789d57 |
children | 423c53e2fa7e |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java src/share/vm/graal/graalCompilerToGPU.cpp src/share/vm/graal/graalCompilerToVM.cpp src/share/vm/graal/graalJavaAccess.hpp |
diffstat | 6 files changed, 68 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java Tue Aug 20 20:04:33 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java Tue Aug 20 12:48:28 2013 -0700 @@ -22,11 +22,13 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; +import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.code.*; import com.oracle.graal.hotspot.*; +import sun.misc.*; + /** * Implementation of {@link InstalledCode} for HotSpot. */ @@ -34,21 +36,69 @@ private static final long serialVersionUID = 156632908220561612L; - long codeBlob; - long start; + /** + * Raw address of this code blob. + */ + private long codeBlob; + + /** + * Total size of the code blob. + */ + private int size; + /** + * Start address of the code. + */ + private long codeStart; + + /** + * Size of the code. + */ + private int codeSize; + + /** + * @return the address of this code blob + */ public long getCodeBlob() { return codeBlob; } + /** + * @return the total size of this code blob + */ + public int getSize() { + return size; + } + + /** + * @returns a copy of this code blob if it is {@linkplain #isValid() valid}, null otherwise. + */ + public byte[] getBlob() { + if (!isValid()) { + return null; + } + byte[] blob = new byte[size]; + unsafe.copyMemory(null, codeBlob, blob, Unsafe.ARRAY_BYTE_BASE_OFFSET, size); + return blob; + } + @Override public abstract String toString(); public long getStart() { - return start; + return codeStart; + } + + public long getCodeSize() { + return codeSize; } public byte[] getCode() { - return graalRuntime().getCompilerToVM().getCode(codeBlob); + if (!isValid()) { + return null; + } + byte[] code = new byte[codeSize]; + unsafe.copyMemory(null, codeStart, code, Unsafe.ARRAY_BYTE_BASE_OFFSET, codeSize); + return code; } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Tue Aug 20 20:04:33 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Tue Aug 20 12:48:28 2013 -0700 @@ -82,7 +82,7 @@ @Override public boolean isValid() { - return codeBlob != 0; + return getCodeBlob() != 0; } @Override @@ -92,7 +92,7 @@ @Override public String toString() { - return String.format("InstalledNmethod[method=%s, codeBlob=0x%x, isDefault=%b]", method, codeBlob, isDefault); + return String.format("InstalledNmethod[method=%s, codeBlob=0x%x, isDefault=%b]", method, getCodeBlob(), isDefault); } @Override @@ -135,6 +135,6 @@ @Override public long getStart() { - return isValid() ? start : 0; + return isValid() ? super.getStart() : 0; } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java Tue Aug 20 20:04:33 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java Tue Aug 20 12:48:28 2013 -0700 @@ -53,7 +53,7 @@ @Override public String toString() { - return String.format("InstalledRuntimeStub[stub=%s, codeBlob=0x%x]", stub, codeBlob); + return String.format("InstalledRuntimeStub[stub=%s, codeBlob=0x%x]", stub, getCodeBlob()); } public Object execute(Object arg1, Object arg2, Object arg3) throws InvalidInstalledCodeException {
--- a/src/share/vm/graal/graalCompilerToGPU.cpp Tue Aug 20 20:04:33 2013 +0200 +++ b/src/share/vm/graal/graalCompilerToGPU.cpp Tue Aug 20 12:48:28 2013 -0700 @@ -88,7 +88,7 @@ jca.set_alternative_target(nm); // start value is the kernel - jlong startValue = HotSpotInstalledCode::start(hotspotInstalledCode); + jlong startValue = HotSpotInstalledCode::codeStart(hotspotInstalledCode); if (!gpu::execute_kernel((address)startValue, &jca)) { return NULL;
--- a/src/share/vm/graal/graalCompilerToVM.cpp Tue Aug 20 20:04:33 2013 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Tue Aug 20 12:48:28 2013 -0700 @@ -928,9 +928,11 @@ if (TraceGPUInteraction) { tty->print_cr("installCode0: ExternalCompilationResult"); } - HotSpotInstalledCode::set_start(installed_code_handle, ExternalCompilationResult::entryPoint(comp_result)); + HotSpotInstalledCode::set_codeStart(installed_code_handle, ExternalCompilationResult::entryPoint(comp_result)); } else { - HotSpotInstalledCode::set_start(installed_code_handle, (jlong) cb->code_begin()); + HotSpotInstalledCode::set_size(installed_code_handle, cb->size()); + HotSpotInstalledCode::set_codeStart(installed_code_handle, (jlong) cb->code_begin()); + HotSpotInstalledCode::set_codeSize(installed_code_handle, cb->code_size()); } nmethod* nm = cb->as_nmethod_or_null(); assert(nm == NULL || !installed_code_handle->is_scavengable() || nm->on_scavenge_root_list(), "nm should be scavengable if installed_code is scavengable"); @@ -939,26 +941,6 @@ return result; C2V_END -C2V_VMENTRY(jobject, getCode, (JNIEnv *jniEnv, jobject, jlong codeBlob)) - ResourceMark rm; - HandleMark hm; - - CodeBlob* cb = (CodeBlob*) (address) codeBlob; - if (cb == NULL) { - return NULL; - } - if (cb->is_nmethod()) { - nmethod* nm = (nmethod*) cb; - if (!nm->is_alive()) { - return NULL; - } - } - int length = cb->code_size(); - arrayOop codeCopy = oopFactory::new_byteArray(length, CHECK_0); - memcpy(codeCopy->base(T_BYTE), cb->code_begin(), length); - return JNIHandles::make_local(codeCopy); -C2V_END - C2V_VMENTRY(jobject, disassembleCodeBlob, (JNIEnv *jniEnv, jobject, jlong codeBlob)) ResourceMark rm; HandleMark hm; @@ -1244,7 +1226,6 @@ {CC"getJavaField", CC"("REFLECT_FIELD")"HS_RESOLVED_FIELD, FN_PTR(getJavaField)}, {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)}, {CC"installCode0", CC"("HS_COMPILED_CODE HS_INSTALLED_CODE"[Z)I", FN_PTR(installCode0)}, - {CC"getCode", CC"(J)[B", FN_PTR(getCode)}, {CC"disassembleCodeBlob", CC"(J)"STRING, FN_PTR(disassembleCodeBlob)}, {CC"executeCompiledMethodVarargs", CC"(["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)},
--- a/src/share/vm/graal/graalJavaAccess.hpp Tue Aug 20 20:04:33 2013 +0200 +++ b/src/share/vm/graal/graalJavaAccess.hpp Tue Aug 20 12:48:28 2013 -0700 @@ -78,11 +78,13 @@ end_class \ start_class(HotSpotInstalledCode) \ long_field(HotSpotInstalledCode, codeBlob) \ - long_field(HotSpotInstalledCode, start) \ + int_field(HotSpotInstalledCode, size) \ + long_field(HotSpotInstalledCode, codeStart) \ + int_field(HotSpotInstalledCode, codeSize) \ end_class \ start_class(HotSpotNmethod) \ boolean_field(HotSpotNmethod, isDefault) \ - boolean_field(HotSpotNmethod, isExternal) \ + boolean_field(HotSpotNmethod, isExternal) \ end_class \ start_class(HotSpotCompiledCode) \ oop_field(HotSpotCompiledCode, comp, "Lcom/oracle/graal/api/code/CompilationResult;") \