From: jjenista <jjenista>
Date: Thu, 28 Apr 2011 18:00:55 +0000 (+0000)
Subject: change the debug mode for capturing null dereference to a global compilar option
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=33aa0abebaf0a604d0f9d1e69a519d16f22a4a4d;p=IRC.git

change the debug mode for capturing null dereference to a global compilar option
---

diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java
index c6e5a22d..3468bd5f 100644
--- a/Robust/src/IR/Flat/BuildCode.java
+++ b/Robust/src/IR/Flat/BuildCode.java
@@ -2669,16 +2669,18 @@ fldloop:
       // an Enum value, directly replace the field access as int
       output.println(generateTemp(fm, ffn.getDst()) + "=" + ffn.getField().enumValue() + ";");
     } else {
-      output.println("#ifdef MULTICORE_DEBUG");
-      output.println("if (" + generateTemp(fm,ffn.getSrc()) + " == NULL) {");
-      output.println("printf(\" NULL ptr error: %s, %s, %d \\n\", __FILE__, __func__, __LINE__);");
-      if(state.MULTICOREGC) {
-        output.println("failednullptr(&___locals___);");
-      } else {
-        output.println("failednullptr(NULL);");
+      if( state.CAPTURE_NULL_DEREFERENCES ) {
+        output.println("#ifdef CAPTURE_NULL_DEREFERENCES");
+        output.println("if (" + generateTemp(fm,ffn.getSrc()) + " == NULL) {");
+        output.println("printf(\" NULL ptr error: %s, %s, %d \\n\", __FILE__, __func__, __LINE__);");
+        if(state.MULTICOREGC) {
+          output.println("failednullptr(&___locals___);");
+        } else {
+          output.println("failednullptr(NULL);");
+        }
+        output.println("}");
+        output.println("#endif //CAPTURE_NULL_DEREFERENCES");
       }
-      output.println("}");
-      output.println("#endif //MULTICORE_DEBUG");
       output.println(generateTemp(fm, ffn.getDst())+"="+ generateTemp(fm,ffn.getSrc())+"->"+ ffn.getField().getSafeSymbol()+";");
     }
   }
@@ -2740,16 +2742,20 @@ fldloop:
         output.println("global_defsprim_p->" +
                        fsfn.getField().getSafeSymbol()+"="+ generateTemp(fm,fsfn.getSrc())+";");
     } else {
-      output.println("#ifdef MULTICORE_DEBUG");
-      output.println("if (" + generateTemp(fm,fsfn.getDst()) + " == NULL) {");
-      output.println("printf(\" NULL ptr error: %s, %s, %d \\n\", __FILE__, __func__, __LINE__);");
-      if(state.MULTICOREGC) {
-        output.println("failednullptr(&___locals___);");
-      } else {
-        output.println("failednullptr(NULL);");
+      
+      if( state.CAPTURE_NULL_DEREFERENCES ) {
+        output.println("#ifdef CAPTURE_NULL_DEREFERENCES");
+        output.println("if (" + generateTemp(fm,fsfn.getDst()) + " == NULL) {");
+        output.println("printf(\" NULL ptr error: %s, %s, %d \\n\", __FILE__, __func__, __LINE__);");
+        if(state.MULTICOREGC) {
+          output.println("failednullptr(&___locals___);");
+        } else {
+          output.println("failednullptr(NULL);");
+        }
+        output.println("}");
+        output.println("#endif //CAPTURE_NULL_DEREFERENCES");
       }
-      output.println("}");
-      output.println("#endif //MULTICORE_DEBUG");
+
       if (fsfn.getSrc().getType().isPtr()&&fsfn.getSrc().getType()!=fsfn.getField().getType())
         output.println(generateTemp(fm, fsfn.getDst())+"->"+
                        fsfn.getField().getSafeSymbol()+"=(struct "+ fsfn.getField().getType().getSafeSymbol()+"*)"+generateTemp(fm,fsfn.getSrc())+";");
diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java
index 5fa82146..a5d048b2 100644
--- a/Robust/src/IR/State.java
+++ b/Robust/src/IR/State.java
@@ -70,6 +70,7 @@ public class State {
   /** Boolean flag which indicates whether compiler is compiling a task-based
    * program. */
   public boolean JNI=false;
+  public boolean CAPTURE_NULL_DEREFERENCES=false;
   public boolean POINTER=false;
   public boolean COREPROF=false;
   public boolean WEBINTERFACE=false;
diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java
index d573dabf..b1b8fd33 100644
--- a/Robust/src/Main/Main.java
+++ b/Robust/src/Main/Main.java
@@ -83,7 +83,9 @@ public class Main {
       if (option.equals("-precise"))
         IR.Flat.BuildCode.GENERATEPRECISEGC=true;
       else if (option.equals("-jni"))
-        state.JNI=true;
+	state.JNI=true;
+      else if (option.equals("-capture-null-dereferences"))
+        state.CAPTURE_NULL_DEREFERENCES=true;
       else if (option.equals("-prefetch"))
         state.PREFETCH=true;
       else if (option.equals("-dir"))
diff --git a/Robust/src/buildscript b/Robust/src/buildscript
index 7e0c565a..e6fbc1d5 100755
--- a/Robust/src/buildscript
+++ b/Robust/src/buildscript
@@ -150,6 +150,7 @@ echo -recovery compile recovery code
 echo -dsmtask support work and task class library
 echo -recoverystats print out recovery record 
 echo -src-after-pp prints source code after preprocessor to tmp.c
+echo -capture-null-dereferences generates code to warn before derefencing null
 echo -printlinenum print out line numbers in generated C codes
 echo -help help
 }
@@ -262,6 +263,10 @@ EXTRAOPTIONS="$EXTRAOPTIONS -DJNI -I$ROBUSTROOT/Runtime/jni"
 elif [[ $1 = '-justanalyze' ]]
 then
 EXITAFTERANALYSIS=true
+elif [[ $1 = '-capture-null-dereferences' ]]
+then
+JAVAOPTS="$JAVAOPTS -capture-null-dereferences"
+EXTRAOPTIONS="$EXTRAOPTIONS -DCAPTURE_NULL_DEREFERENCES"
 elif [[ $1 = '-src-after-pp' ]]
 then
 SRCAFTERPP=true