Mercurial > hg > graal-compiler
changeset 10861:6872c61c1d3e
Fix null reference access when dumping raw data patches.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Tue, 23 Jul 2013 18:23:52 +0200 |
parents | 1b11e3c8529c |
children | 8c570011b86f |
files | graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CompilationResult.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCompiledRuntimeStub.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/TargetMethodAssembler.java |
diffstat | 4 files changed, 26 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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[<data patch referring to %d bytes raw data>]", pcOffset, rawConstant.length); - } else { - return String.format("%d[<data patch referring to data %s>]", pcOffset, constant); - } + return String.format("%d[<data patch referring to data %s>]", pcOffset, getDataString()); } }
--- 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;
--- 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));
--- 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();