# HG changeset patch # User Roland Schatz # Date 1374596632 -7200 # Node ID 6872c61c1d3e0276be7b7e5751fee1bf55f1eb8b # Parent 1b11e3c8529c95806c2a218b3045eb10a2a77555 Fix null reference access when dumping raw data patches. diff -r 1b11e3c8529c -r 6872c61c1d3e graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CompilationResult.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CompilationResult.java Tue Jul 23 17:48:17 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CompilationResult.java Tue Jul 23 18:23:52 2013 +0200 @@ -171,13 +171,23 @@ this.inlined = inlined; } + public String getDataString() { + if (constant != null) { + return constant.toString(); + } else { + Formatter ret = new Formatter(); + boolean first = true; + for (byte b : rawConstant) { + ret.format(first ? "%02X" : " %02X", b); + first = false; + } + return ret.toString(); + } + } + @Override public String toString() { - if (constant == null) { - return String.format("%d[]", pcOffset, rawConstant.length); - } else { - return String.format("%d[]", pcOffset, constant); - } + return String.format("%d[]", pcOffset, getDataString()); } } diff -r 1b11e3c8529c -r 6872c61c1d3e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java Tue Jul 23 17:48:17 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java Tue Jul 23 18:23:52 2013 +0200 @@ -51,8 +51,10 @@ assert compResult.getExceptionHandlers().isEmpty(); for (DataPatch data : compResult.getDataReferences()) { Constant constant = data.constant; - assert constant.getKind() != Kind.Object : this + " cannot have embedded object constant: " + constant; - assert constant.getPrimitiveAnnotation() == null : this + " cannot have embedded metadata: " + constant; + if (constant != null) { + assert constant.getKind() != Kind.Object : this + " cannot have embedded object constant: " + constant; + assert constant.getPrimitiveAnnotation() == null : this + " cannot have embedded metadata: " + constant; + } } for (Infopoint infopoint : compResult.getInfopoints()) { assert infopoint instanceof Call : this + " cannot have non-call infopoint: " + infopoint; diff -r 1b11e3c8529c -r 6872c61c1d3e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Tue Jul 23 17:48:17 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Tue Jul 23 18:23:52 2013 +0200 @@ -377,7 +377,7 @@ } } for (DataPatch site : compResult.getDataReferences()) { - hcf.addOperandComment(site.pcOffset, "{" + site.constant + "}"); + hcf.addOperandComment(site.pcOffset, "{" + site.getDataString() + "}"); } for (Mark mark : compResult.getMarks()) { hcf.addComment(mark.pcOffset, getMarkName(mark)); diff -r 1b11e3c8529c -r 6872c61c1d3e graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java Tue Jul 23 17:48:17 2013 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java Tue Jul 23 18:23:52 2013 +0200 @@ -107,9 +107,14 @@ for (int i = 0; i < dms.length; i++) { dms[i] = Debug.metric("DataPatches-" + Kind.values()[i].toString()); } + DebugMetric dmRaw = Debug.metric("DataPatches-raw"); for (DataPatch dp : ldp) { - dms[dp.constant.getKind().ordinal()].add(1); + if (dp.constant != null) { + dms[dp.constant.getKind().ordinal()].add(1); + } else { + dmRaw.add(1); + } } Debug.metric("TargetMethods").increment();