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();