# HG changeset patch # User Thomas Wuerthinger # Date 1397566900 -7200 # Node ID 2c940b1a48d8d61e82973695545d4ac077157afe # Parent a47e68e146a2d3c4ff5f089996a763a4d391df45 Convert InstalledCode from an interface into an abstract class. diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/InstalledCode.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/InstalledCode.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/InstalledCode.java Tue Apr 15 15:01:40 2014 +0200 @@ -22,41 +22,54 @@ */ package com.oracle.graal.api.code; -import com.oracle.graal.api.meta.*; - /** * Represents a compiled instance of a method. It may have been invalidated or removed in the * meantime. */ -public interface InstalledCode { +public abstract class InstalledCode { /** - * Returns the method (if any) to which the installed code belongs. + * Raw address of this code blob. */ - ResolvedJavaMethod getMethod(); + private long address; + + /** + * @return the address of this code blob + */ + public long getAddress() { + return address; + } /** * Returns the start address of this installed code if it is {@linkplain #isValid() valid}, 0 * otherwise. */ - long getStart(); + public long getStart() { + return 0; + } /** * Returns a copy of this installed code if it is {@linkplain #isValid() valid}, null otherwise. */ - byte[] getCode(); + public byte[] getCode() { + return null; + } /** * @return true if the code represented by this object is still valid, false otherwise (may * happen due to deopt, etc.) */ - boolean isValid(); + public boolean isValid() { + return address != 0; + } /** * Invalidates this installed code such that any subsequent invocation will throw an * {@link InvalidInstalledCodeException}. */ - void invalidate(); + public void invalidate() { + + } /** * Executes the installed code with a variable number of arguments. @@ -64,5 +77,7 @@ * @param args the array of object arguments * @return the value returned by the executed code */ - Object executeVarargs(Object... args) throws InvalidInstalledCodeException; + public Object executeVarargs(Object... args) throws InvalidInstalledCodeException { + return null; + } } diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Tue Apr 15 15:01:40 2014 +0200 @@ -127,9 +127,8 @@ * * @param graph the graph to be compiled * @param cc the calling convention for calls to the code compiled for {@code graph} - * @param installedCodeOwner the method the compiled code will be - * {@linkplain InstalledCode#getMethod() associated} with once installed. This - * argument can be null. + * @param installedCodeOwner the method the compiled code will be associated with once + * installed. This argument can be null. * @return the result of the compilation */ public static T compileGraph(StructuredGraph graph, Object stub, CallingConvention cc, ResolvedJavaMethod installedCodeOwner, Providers providers, Backend backend, diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Tue Apr 15 15:01:40 2014 +0200 @@ -102,9 +102,8 @@ /** * Emits the code for a given graph. * - * @param installedCodeOwner the method the compiled code will be - * {@linkplain InstalledCode#getMethod() associated} with once installed. This - * argument can be null. + * @param installedCodeOwner the method the compiled code will be associated with once + * installed. This argument can be null. */ public abstract void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod installedCodeOwner); diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java Tue Apr 15 15:01:40 2014 +0200 @@ -226,7 +226,7 @@ * @param code the details of the installed CodeBlob are written to this object * @return the outcome of the installation as a {@link CodeInstallResult}. */ - CodeInstallResult installCode(HotSpotCompiledCode compiledCode, HotSpotInstalledCode code, SpeculationLog speculationLog); + CodeInstallResult installCode(HotSpotCompiledCode compiledCode, InstalledCode code, SpeculationLog speculationLog); /** * Notifies the VM of statistics for a completed compilation. @@ -240,7 +240,7 @@ * @param timeUnitsPerSecond the granularity of the units for the {@code time} value * @param installedCode the nmethod installed as a result of the compilation */ - void notifyCompilationStatistics(int id, HotSpotResolvedJavaMethod method, boolean osr, int processedBytecodes, long time, long timeUnitsPerSecond, HotSpotInstalledCode installedCode); + void notifyCompilationStatistics(int id, HotSpotResolvedJavaMethod method, boolean osr, int processedBytecodes, long time, long timeUnitsPerSecond, InstalledCode installedCode); void printCompilationStatistics(boolean perCompiler, boolean aggregate); @@ -270,9 +270,9 @@ StackTraceElement getStackTraceElement(long metaspaceMethod, int bci); - Object executeCompiledMethod(Object arg1, Object arg2, Object arg3, HotSpotInstalledCode hotspotInstalledCode) throws InvalidInstalledCodeException; + Object executeCompiledMethod(Object arg1, Object arg2, Object arg3, InstalledCode hotspotInstalledCode) throws InvalidInstalledCodeException; - Object executeCompiledMethodVarargs(Object[] args, HotSpotInstalledCode hotspotInstalledCode) throws InvalidInstalledCodeException; + Object executeCompiledMethodVarargs(Object[] args, InstalledCode hotspotInstalledCode) throws InvalidInstalledCodeException; long[] getLineNumberTable(long metaspaceMethod); @@ -297,7 +297,7 @@ */ void reprofile(long metaspaceMethod); - void invalidateInstalledCode(HotSpotInstalledCode hotspotInstalledCode); + void invalidateInstalledCode(InstalledCode hotspotInstalledCode); /** * Collects the current values of all Graal benchmark counters, summed up over all threads. diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java Tue Apr 15 15:01:40 2014 +0200 @@ -33,10 +33,10 @@ */ public class CompilerToVMImpl implements CompilerToVM { - private native int installCode0(HotSpotCompiledCode compiledCode, HotSpotInstalledCode code, SpeculationLog speculationLog); + private native int installCode0(HotSpotCompiledCode compiledCode, InstalledCode code, SpeculationLog speculationLog); @Override - public CodeInstallResult installCode(HotSpotCompiledCode compiledCode, HotSpotInstalledCode code, SpeculationLog speculationLog) { + public CodeInstallResult installCode(HotSpotCompiledCode compiledCode, InstalledCode code, SpeculationLog speculationLog) { return CodeInstallResult.getEnum(installCode0(compiledCode, code, speculationLog)); } @@ -121,7 +121,7 @@ public native StackTraceElement getStackTraceElement(long metaspaceMethod, int bci); @Override - public native Object executeCompiledMethodVarargs(Object[] args, HotSpotInstalledCode hotspotInstalledCode); + public native Object executeCompiledMethodVarargs(Object[] args, InstalledCode hotspotInstalledCode); @Override public native long[] getLineNumberTable(long metaspaceMethod); @@ -139,7 +139,7 @@ public native void reprofile(long metaspaceMethod); @Override - public native void invalidateInstalledCode(HotSpotInstalledCode hotspotInstalledCode); + public native void invalidateInstalledCode(InstalledCode hotspotInstalledCode); @Override public native Class getJavaMirror(long metaspaceKlass); @@ -154,12 +154,12 @@ public native void doNotInlineOrCompile(long metaspaceMethod); @Override - public Object executeCompiledMethod(Object arg1, Object arg2, Object arg3, HotSpotInstalledCode hotspotInstalledCode) throws InvalidInstalledCodeException { + public Object executeCompiledMethod(Object arg1, Object arg2, Object arg3, InstalledCode hotspotInstalledCode) throws InvalidInstalledCodeException { return executeCompiledMethodVarargs(new Object[]{arg1, arg2, arg3}, hotspotInstalledCode); } public synchronized native void notifyCompilationStatistics(int id, HotSpotResolvedJavaMethod method, boolean osr, int processedBytecodes, long time, long timeUnitsPerSecond, - HotSpotInstalledCode installedCode); + InstalledCode installedCode); public synchronized native void printCompilationStatistics(boolean perCompiler, boolean aggregate); diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Tue Apr 15 15:01:40 2014 +0200 @@ -273,7 +273,7 @@ public String disassemble(InstalledCode code) { if (code.isValid()) { - long codeBlob = ((HotSpotInstalledCode) code).getCodeBlob(); + long codeBlob = ((HotSpotInstalledCode) code).getAddress(); return runtime.getCompilerToVM().disassembleCodeBlob(codeBlob); } return null; diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Tue Apr 15 15:01:40 2014 +0200 @@ -38,7 +38,7 @@ public String disassemble(InstalledCode code) { if (code.isValid()) { - long codeBlob = ((HotSpotInstalledCode) code).getCodeBlob(); + long codeBlob = ((HotSpotInstalledCode) code).getAddress(); return runtime.getCompilerToVM().disassembleCodeBlob(codeBlob); } return null; diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java Tue Apr 15 15:01:40 2014 +0200 @@ -26,19 +26,11 @@ import sun.misc.*; import com.oracle.graal.api.code.*; -import com.oracle.graal.hotspot.*; /** * Implementation of {@link InstalledCode} for HotSpot. */ -public abstract class HotSpotInstalledCode extends CompilerObject implements InstalledCode { - - private static final long serialVersionUID = 156632908220561612L; - - /** - * Raw address of this code blob. - */ - private long codeBlob; +public abstract class HotSpotInstalledCode extends InstalledCode { /** * Total size of the code blob. @@ -56,13 +48,6 @@ 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() { @@ -77,13 +62,14 @@ return null; } byte[] blob = new byte[size]; - unsafe.copyMemory(null, codeBlob, blob, Unsafe.ARRAY_BYTE_BASE_OFFSET, size); + unsafe.copyMemory(null, getAddress(), blob, Unsafe.ARRAY_BYTE_BASE_OFFSET, size); return blob; } @Override public abstract String toString(); + @Override public long getStart() { return codeStart; } @@ -92,6 +78,7 @@ return codeSize; } + @Override public byte[] getCode() { if (!isValid()) { return null; diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Tue Apr 15 15:01:40 2014 +0200 @@ -40,8 +40,6 @@ */ public final class HotSpotNmethod extends HotSpotInstalledCode { - private static final long serialVersionUID = -1784683588947054103L; - /** * This (indirect) Method* reference is safe since class redefinition preserves all methods * associated with nmethods in the code cache. @@ -71,24 +69,18 @@ return isExternal; } - @Override public ResolvedJavaMethod getMethod() { return method; } @Override - public boolean isValid() { - return getCodeBlob() != 0; - } - - @Override public void invalidate() { runtime().getCompilerToVM().invalidateInstalledCode(this); } @Override public String toString() { - return String.format("InstalledNmethod[method=%s, codeBlob=0x%x, isDefault=%b, name=%s]", method, getCodeBlob(), isDefault, name); + return String.format("InstalledNmethod[method=%s, codeBlob=0x%x, isDefault=%b, name=%s]", method, getAddress(), isDefault, name); } protected boolean checkThreeObjectArgs() { diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java Tue Apr 15 15:01:40 2014 +0200 @@ -32,8 +32,6 @@ */ public class HotSpotRuntimeStub extends HotSpotInstalledCode { - private static final long serialVersionUID = -6388648408298441748L; - private final Stub stub; public HotSpotRuntimeStub(Stub stub) { @@ -44,18 +42,21 @@ return null; } + @Override public boolean isValid() { return true; } + @Override public void invalidate() { } @Override public String toString() { - return String.format("InstalledRuntimeStub[stub=%s, codeBlob=0x%x]", stub, getCodeBlob()); + return String.format("InstalledRuntimeStub[stub=%s, codeBlob=0x%x]", stub, getAddress()); } + @Override public Object executeVarargs(Object... args) throws InvalidInstalledCodeException { throw new GraalInternalError("Cannot call stub %s", stub); } diff -r a47e68e146a2 -r 2c940b1a48d8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Tue Apr 15 13:27:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Tue Apr 15 15:01:40 2014 +0200 @@ -95,7 +95,7 @@ /** * Creates a new stub. - * + * * @param linkage linkage details for a call to the stub */ public Stub(HotSpotProviders providers, HotSpotForeignCallLinkage linkage) { @@ -125,8 +125,7 @@ } /** - * Gets the method the stub's code will be {@linkplain InstalledCode#getMethod() associated} - * with once installed. This may be null. + * Gets the method the stub's code will be associated with once installed. This may be null. */ protected abstract ResolvedJavaMethod getInstalledCodeOwner(); diff -r a47e68e146a2 -r 2c940b1a48d8 src/gpu/hsail/vm/gpu_hsail.cpp --- a/src/gpu/hsail/vm/gpu_hsail.cpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/gpu/hsail/vm/gpu_hsail.cpp Tue Apr 15 15:01:40 2014 +0200 @@ -137,7 +137,7 @@ jobject donor_threads, jint allocBytesPerWorkitem)) ResourceMark rm; - jlong nmethodValue = HotSpotInstalledCode::codeBlob(kernel_handle); + jlong nmethodValue = InstalledCode::address(kernel_handle); if (nmethodValue == 0) { SharedRuntime::throw_and_post_jvmti_exception(JavaThread::current(), vmSymbols::com_oracle_graal_api_code_InvalidInstalledCodeException(), NULL); } diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/classfile/systemDictionary.hpp --- a/src/share/vm/classfile/systemDictionary.hpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/classfile/systemDictionary.hpp Tue Apr 15 15:01:40 2014 +0200 @@ -227,6 +227,7 @@ do_klass(CompilationResult_Site_klass, com_oracle_graal_api_code_CompilationResult_Site, Opt) \ do_klass(ExternalCompilationResult_klass, com_oracle_graal_gpu_ExternalCompilationResult, Opt) \ do_klass(InfopointReason_klass, com_oracle_graal_api_code_InfopointReason, Opt) \ + do_klass(InstalledCode_klass, com_oracle_graal_api_code_InstalledCode, Opt) \ do_klass(code_Register_klass, com_oracle_graal_api_code_Register, Opt) \ do_klass(RegisterValue_klass, com_oracle_graal_api_code_RegisterValue, Opt) \ do_klass(StackSlot_klass, com_oracle_graal_api_code_StackSlot, Opt) \ diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/classfile/vmSymbols.hpp --- a/src/share/vm/classfile/vmSymbols.hpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/classfile/vmSymbols.hpp Tue Apr 15 15:01:40 2014 +0200 @@ -344,6 +344,7 @@ template(com_oracle_graal_api_code_CompilationResult_Infopoint, "com/oracle/graal/api/code/CompilationResult$Infopoint") \ template(com_oracle_graal_api_code_CompilationResult_Site, "com/oracle/graal/api/code/CompilationResult$Site") \ template(com_oracle_graal_api_code_InfopointReason, "com/oracle/graal/api/code/InfopointReason") \ + template(com_oracle_graal_api_code_InstalledCode, "com/oracle/graal/api/code/InstalledCode") \ template(com_oracle_graal_api_code_BytecodeFrame, "com/oracle/graal/api/code/BytecodeFrame") \ template(com_oracle_graal_api_code_BytecodePosition, "com/oracle/graal/api/code/BytecodePosition") \ template(com_oracle_graal_api_code_DebugInfo, "com/oracle/graal/api/code/DebugInfo") \ diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/code/nmethod.cpp --- a/src/share/vm/code/nmethod.cpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/code/nmethod.cpp Tue Apr 15 15:01:40 2014 +0200 @@ -1330,7 +1330,7 @@ // Java wrapper is no longer alive. Here we need to clear out this weak // reference to the dead object. if (_graal_installed_code != NULL) { - HotSpotInstalledCode::set_codeBlob(_graal_installed_code, 0); + InstalledCode::set_address(_graal_installed_code, 0); _graal_installed_code = NULL; } #endif @@ -1510,8 +1510,8 @@ } #ifdef GRAAL if (_graal_installed_code != NULL) { - // Break the link between nmethod and HotSpotInstalledCode such that the nmethod can subsequently be flushed safely. - HotSpotInstalledCode::set_codeBlob(_graal_installed_code, 0); + // Break the link between nmethod and InstalledCode such that the nmethod can subsequently be flushed safely. + InstalledCode::set_address(_graal_installed_code, 0); } #endif diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Tue Apr 15 15:01:40 2014 +0200 @@ -210,6 +210,7 @@ #undef set_boolean #undef set_int #undef set_long +#undef set_address C2V_END @@ -530,15 +531,15 @@ assert(cb == NULL, "should be"); } else { if (!installed_code_handle.is_null()) { - assert(installed_code_handle->is_a(HotSpotInstalledCode::klass()), "wrong type"); - HotSpotInstalledCode::set_codeBlob(installed_code_handle, (jlong) cb); + assert(installed_code_handle->is_a(InstalledCode::klass()), "wrong type"); + InstalledCode::set_address(installed_code_handle, (jlong) cb); oop comp_result = HotSpotCompiledCode::comp(compiled_code_handle); if (comp_result->is_a(ExternalCompilationResult::klass())) { if (TraceGPUInteraction) { tty->print_cr("installCode0: ExternalCompilationResult"); } HotSpotInstalledCode::set_codeStart(installed_code_handle, ExternalCompilationResult::entryPoint(comp_result)); - } else { + } else if (installed_code_handle->is_a(HotSpotInstalledCode::klass())) { 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()); @@ -560,8 +561,10 @@ stats->_standard.update(timer, processedBytecodes); } Handle installed_code_handle = JNIHandles::resolve(installed_code); - stats->_nmethods_size += HotSpotInstalledCode::size(installed_code_handle); - stats->_nmethods_code_size += HotSpotInstalledCode::codeSize(installed_code_handle); + if (installed_code_handle->is_a(HotSpotInstalledCode::klass())) { + stats->_nmethods_size += HotSpotInstalledCode::size(installed_code_handle); + stats->_nmethods_code_size += HotSpotInstalledCode::codeSize(installed_code_handle); + } if (CITimeEach) { methodHandle method = asMethod(HotSpotResolvedJavaMethod::metaspaceMethod(hotspot_method)); @@ -633,7 +636,7 @@ ResourceMark rm; HandleMark hm; - jlong nmethodValue = HotSpotInstalledCode::codeBlob(hotspotInstalledCode); + jlong nmethodValue = InstalledCode::address(hotspotInstalledCode); if (nmethodValue == 0L) { THROW_(vmSymbols::com_oracle_graal_api_code_InvalidInstalledCodeException(), NULL); } @@ -724,14 +727,14 @@ C2V_VMENTRY(void, invalidateInstalledCode, (JNIEnv *env, jobject, jobject hotspotInstalledCode)) - jlong nativeMethod = HotSpotInstalledCode::codeBlob(hotspotInstalledCode); + jlong nativeMethod = InstalledCode::address(hotspotInstalledCode); nmethod* m = (nmethod*)nativeMethod; if (m != NULL && !m->is_not_entrant()) { m->mark_for_deoptimization(); VM_Deoptimize op; VMThread::execute(&op); } - HotSpotInstalledCode::set_codeBlob(hotspotInstalledCode, 0); + InstalledCode::set_address(hotspotInstalledCode, 0); C2V_END C2V_VMENTRY(jobject, getJavaMirror, (JNIEnv *env, jobject, jlong metaspace_klass)) @@ -1046,7 +1049,7 @@ #define RESOLVED_METHOD "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;" #define HS_COMPILED_CODE "Lcom/oracle/graal/hotspot/HotSpotCompiledCode;" #define HS_CONFIG "Lcom/oracle/graal/hotspot/HotSpotVMConfig;" -#define HS_INSTALLED_CODE "Lcom/oracle/graal/hotspot/meta/HotSpotInstalledCode;" +#define INSTALLED_CODE "Lcom/oracle/graal/api/code/InstalledCode;" #define NODE_CLASS "Lcom/oracle/graal/graph/NodeClass;" #define HS_STACK_FRAME_REF "Lcom/oracle/graal/hotspot/HotSpotStackFrameReference;" #define METASPACE_KLASS "J" @@ -1086,17 +1089,17 @@ {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, {CC"getMetaspaceMethod", CC"("CLASS"I)"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)}, {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)}, - {CC"installCode0", CC"("HS_COMPILED_CODE HS_INSTALLED_CODE SPECULATION_LOG")I", FN_PTR(installCode0)}, - {CC"notifyCompilationStatistics", CC"(I"HS_RESOLVED_METHOD"ZIJJ"HS_INSTALLED_CODE")V", FN_PTR(notifyCompilationStatistics)}, + {CC"installCode0", CC"("HS_COMPILED_CODE INSTALLED_CODE SPECULATION_LOG")I", FN_PTR(installCode0)}, + {CC"notifyCompilationStatistics", CC"(I"HS_RESOLVED_METHOD"ZIJJ"INSTALLED_CODE")V", FN_PTR(notifyCompilationStatistics)}, {CC"printCompilationStatistics", CC"(ZZ)V", FN_PTR(printCompilationStatistics)}, {CC"resetCompilationStatistics", CC"()V", FN_PTR(resetCompilationStatistics)}, {CC"disassembleCodeBlob", CC"(J)"STRING, FN_PTR(disassembleCodeBlob)}, - {CC"executeCompiledMethodVarargs", CC"(["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, + {CC"executeCompiledMethodVarargs", CC"(["OBJECT INSTALLED_CODE")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, {CC"getLineNumberTable", CC"("METASPACE_METHOD")[J", FN_PTR(getLineNumberTable)}, {CC"getLocalVariableTableStart", CC"("METASPACE_METHOD")J", FN_PTR(getLocalVariableTableStart)}, {CC"getLocalVariableTableLength", CC"("METASPACE_METHOD")I", FN_PTR(getLocalVariableTableLength)}, {CC"reprofile", CC"("METASPACE_METHOD")V", FN_PTR(reprofile)}, - {CC"invalidateInstalledCode", CC"("HS_INSTALLED_CODE")V", FN_PTR(invalidateInstalledCode)}, + {CC"invalidateInstalledCode", CC"("INSTALLED_CODE")V", FN_PTR(invalidateInstalledCode)}, {CC"getJavaMirror", CC"("METASPACE_KLASS")"CLASS, FN_PTR(getJavaMirror)}, {CC"setNodeClass", CC"("CLASS NODE_CLASS")V", FN_PTR(setNodeClass)}, {CC"readUnsafeKlassPointer", CC"("OBJECT")J", FN_PTR(readUnsafeKlassPointer)}, diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/graal/graalJavaAccess.cpp --- a/src/share/vm/graal/graalJavaAccess.cpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/graal/graalJavaAccess.cpp Tue Apr 15 15:01:40 2014 +0200 @@ -63,7 +63,7 @@ void graal_compute_offsets() { COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, STATIC_OOP_FIELD) - guarantee(HotSpotInstalledCode::_codeBlob_offset == sizeof(oopDesc), "codeBlob must be first field!"); + guarantee(InstalledCode::_address_offset == sizeof(oopDesc), "codeBlob must be first field!"); } #define EMPTY0 diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/graal/graalJavaAccess.hpp Tue Apr 15 15:01:40 2014 +0200 @@ -49,7 +49,7 @@ #define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, static_oop_field) \ start_class(HotSpotResolvedObjectType) \ - oop_field(HotSpotResolvedObjectType, javaClass, "Ljava/lang/Class;") \ + oop_field(HotSpotResolvedObjectType, javaClass, "Ljava/lang/Class;") \ end_class \ start_class(HotSpotResolvedJavaMethod) \ oop_field(HotSpotResolvedJavaMethod, name, "Ljava/lang/String;") \ @@ -59,8 +59,10 @@ start_class(HotSpotJavaType) \ oop_field(HotSpotJavaType, name, "Ljava/lang/String;") \ end_class \ + start_class(InstalledCode) \ + long_field(InstalledCode, address) \ + end_class \ start_class(HotSpotInstalledCode) \ - long_field(HotSpotInstalledCode, codeBlob) \ int_field(HotSpotInstalledCode, size) \ long_field(HotSpotInstalledCode, codeStart) \ int_field(HotSpotInstalledCode, codeSize) \ diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/runtime/deoptimization.cpp --- a/src/share/vm/runtime/deoptimization.cpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/runtime/deoptimization.cpp Tue Apr 15 15:01:40 2014 +0200 @@ -1485,7 +1485,10 @@ #ifdef GRAAL oop installedCode = nm->graal_installed_code(); if (installedCode != NULL) { - oop installedCodeName = HotSpotNmethod::name(installedCode); + oop installedCodeName = NULL; + if (installedCode->is_a(HotSpotNmethod::klass())) { + installedCodeName = HotSpotNmethod::name(installedCode); + } if (installedCodeName != NULL) { tty->print(" (Graal: installedCodeName=%s) ", java_lang_String::as_utf8_string(installedCodeName)); } else { diff -r a47e68e146a2 -r 2c940b1a48d8 src/share/vm/runtime/javaCalls.cpp --- a/src/share/vm/runtime/javaCalls.cpp Tue Apr 15 13:27:16 2014 +0200 +++ b/src/share/vm/runtime/javaCalls.cpp Tue Apr 15 15:01:40 2014 +0200 @@ -412,7 +412,7 @@ if (nm->is_alive()) { ((JavaThread*) THREAD)->set_graal_alternate_call_target(nm->verified_entry_point()); oop graalInstalledCode = nm->graal_installed_code(); - if (graalInstalledCode != NULL && HotSpotNmethod::isExternal(graalInstalledCode)) { + if (graalInstalledCode != NULL && graalInstalledCode->is_a(HotSpotNmethod::klass()) && HotSpotNmethod::isExternal(graalInstalledCode)) { entry_point = GraalCompiler::instance()->get_external_deopt_i2c_entry(); } else { entry_point = method->adapter()->get_i2c_entry();