Hard Crash on OS X and Linux (but somewhat environment dependent)
Stefan Marr
java at stefan-marr.de
Tue Dec 9 22:35:06 UTC 2014
Hi:
In one of my experiments, I got a hard crash of the Graal VM.
Error below.
The error is somewhat dependent on either environment or for instance whether -ea and/or -esa are passed to the VM.
Though, I haven’t managed to find a way to avoid crashes reliably.
To reproduced, you’ll need with a little API change (see patch below) or my version of GraalVM.
git clone https://github.com/smarr/GraalVM.git
cd GraalVM
./mx.sh --vm server build -p
cd ../
git clone -b mt-vs-pe/without-control-specialization https://github.com/smarr/TruffleSOM.git
cd TruffleSOM
ant
../GraalVM/mxtool/mx --vm server vm -Xbootclasspath/a:build/classes som.vm.Universe -cp Smalltalk:Examples/Benchmarks/DeltaBlue Examples/Benchmarks/BenchmarkHarness.som DeltaBlue 1500 0 6000
Best regards
Stefan
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x000000010d601e5b, pid=68949, tid=4867
#
# JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26)
# Java VM: OpenJDK 64-Bit Server VM (25.25-b02-internal-graal-unknown-venus-2-2014-12-09_22-44-20_CET mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# J 7192 Graal com.oracle.graal.truffle.OptimizedCallTarget.callRoot([Ljava/lang/Object;)Ljava/lang/Object; (191 bytes) @ 0x000000010d601e5b [0x000000010d601e20+0x3b]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/smarr/Projects/PostDoc/Truffle/som/hs_err_pid68949.log
Loaded disassembler from /Users/smarr/Projects/PostDoc/Truffle/graal/jdk1.8.0_20/product/jre/lib/hsdis-amd64.dylib
Compiled method (Graal) 12445 7192 4 com.oracle.graal.truffle.OptimizedCallTarget::callRoot (191 bytes)
total in heap [0x000000010d601cd0,0x000000010d601f50] = 640
relocation [0x000000010d601e08,0x000000010d601e20] = 24
main code [0x000000010d601e20,0x000000010d601edd] = 189
stub code [0x000000010d601edd,0x000000010d601ee0] = 3
oops [0x000000010d601ee0,0x000000010d601ef8] = 24
metadata [0x000000010d601ef8,0x000000010d601f00] = 8
scopes data [0x000000010d601f00,0x000000010d601f18] = 24
scopes pcs [0x000000010d601f18,0x000000010d601f48] = 48
dependencies [0x000000010d601f48,0x000000010d601f50] = 8
Compiled method (c2) 12445 2114 4 com.oracle.graal.truffle.OptimizedCallTarget::doInvoke (6 bytes)
total in heap [0x000000010c77b910,0x000000010c77bb58] = 584
relocation [0x000000010c77ba48,0x000000010c77ba60] = 24
main code [0x000000010c77ba60,0x000000010c77bac0] = 96
stub code [0x000000010c77bac0,0x000000010c77bae8] = 40
oops [0x000000010c77bae8,0x000000010c77baf0] = 8
metadata [0x000000010c77baf0,0x000000010c77baf8] = 8
scopes data [0x000000010c77baf8,0x000000010c77bb08] = 16
scopes pcs [0x000000010c77bb08,0x000000010c77bb38] = 48
dependencies [0x000000010c77bb38,0x000000010c77bb40] = 8
handler table [0x000000010c77bb40,0x000000010c77bb58] = 24
diff --git a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java
index 8d00194..0670fad 100644
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java
@@ -104,7 +104,7 @@ public class OptimizedCallTarget extends InstalledCode implements RootCallTarget
if (root == null || !root.isCloningAllowed()) {
return null;
}
- return NodeUtil.cloneNode(root);
+ return root.cloneRootNode();
}
public Assumption getNodeRewritingAssumption() {
diff --git a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java
index aebf748..2552eea 100644
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java
@@ -79,6 +79,10 @@ public abstract class RootNode extends Node {
return false;
}
+ public RootNode cloneRootNode() {
+ return NodeUtil.cloneNode(this);
+ }
+
/**
* Reports the execution count of a loop that is a child of this node. The optimization
* heuristics can use the loop count to guide compilation and inlining.
--
Stefan Marr
INRIA Lille - Nord Europe
http://stefan-marr.de/research/
More information about the graal-dev
mailing list