# HG changeset patch # User Paul Woegerer # Date 1422364312 -3600 # Node ID afa70d3e81594b3a0cc92c7216ad4552b9d3ac43 # Parent 858b1e3ab2eed887ac786106e2a174e8d2fa3cb1 Allow users to provide their own TruffleRuntime implementation and add ForceInterpreter option to TruffleOptions. diff -r 858b1e3ab2ee -r afa70d3e8159 graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Tue Jan 27 12:05:41 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Tue Jan 27 14:11:52 2015 +0100 @@ -63,7 +63,10 @@ */ public final class HotSpotTruffleRuntime extends GraalTruffleRuntime { - public static HotSpotTruffleRuntime makeInstance() { + public static TruffleRuntime makeInstance() { + if (GraalTruffleRuntime.alternateRuntime != null) { + return GraalTruffleRuntime.alternateRuntime; + } return new HotSpotTruffleRuntime(); } diff -r 858b1e3ab2ee -r afa70d3e8159 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Tue Jan 27 12:05:41 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Tue Jan 27 14:11:52 2015 +0100 @@ -41,6 +41,8 @@ public abstract class GraalTruffleRuntime implements TruffleRuntime { + public static TruffleRuntime alternateRuntime; + private ArrayList includes; private ArrayList excludes; diff -r 858b1e3ab2ee -r afa70d3e8159 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java Tue Jan 27 12:05:41 2015 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java Tue Jan 27 14:11:52 2015 +0100 @@ -49,6 +49,14 @@ } private static TruffleRuntime initRuntime() { + if (TruffleOptions.ForceInterpreter) { + /* + * Force Truffle to run in interpreter mode even if we have a specialized implementation + * of TruffleRuntime available. + */ + return new DefaultTruffleRuntime(); + } + try { return AccessController.doPrivileged(new PrivilegedAction() { public TruffleRuntime run() { diff -r 858b1e3ab2ee -r afa70d3e8159 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Tue Jan 27 12:05:41 2015 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Tue Jan 27 14:11:52 2015 +0100 @@ -34,6 +34,13 @@ public class TruffleOptions { /** + * Force truffle to run in interpreter mode. + *

+ * Can be set with {@code -Dtruffle.ForceInterpreter=true}. + */ + public static boolean ForceInterpreter = Boolean.getBoolean("truffle.ForceInterpreter"); + + /** * Enables/disables the rewriting of traces in the Truffle runtime to stdout. *

* Can be set with {@code -Dtruffle.TraceRewrites=true}. diff -r 858b1e3ab2ee -r afa70d3e8159 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Tue Jan 27 12:05:41 2015 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Tue Jan 27 14:11:52 2015 +0100 @@ -44,9 +44,6 @@ private final Map callTargets = Collections.synchronizedMap(new WeakHashMap()); public DefaultTruffleRuntime() { - if (Truffle.getRuntime() != null) { - throw new IllegalArgumentException("Cannot instantiate DefaultTruffleRuntime. Use Truffle.getRuntime() instead."); - } } @Override diff -r 858b1e3ab2ee -r afa70d3e8159 src/share/vm/graal/graalRuntime.cpp --- a/src/share/vm/graal/graalRuntime.cpp Tue Jan 27 12:05:41 2015 +0100 +++ b/src/share/vm/graal/graalRuntime.cpp Tue Jan 27 14:11:52 2015 +0100 @@ -684,7 +684,7 @@ KlassHandle klass = GraalRuntime::resolve_or_fail(name, CHECK_NULL); TempNewSymbol makeInstance = SymbolTable::new_symbol("makeInstance", CHECK_NULL); - TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime;", CHECK_NULL); + TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/truffle/api/TruffleRuntime;", CHECK_NULL); JavaValue result(T_OBJECT); JavaCalls::call_static(&result, klass, makeInstance, sig, CHECK_NULL); return JNIHandles::make_local((oop) result.get_jobject());