change the debug mode for capturing null dereference to a global compilar option
authorjjenista <jjenista>
Thu, 28 Apr 2011 18:00:55 +0000 (18:00 +0000)
committerjjenista <jjenista>
Thu, 28 Apr 2011 18:00:55 +0000 (18:00 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/State.java
Robust/src/Main/Main.java
Robust/src/buildscript

index c6e5a22da867ee6b7a3020df59aec11b13accd18..3468bd5f257a237f504b7cc4adfae10828f2b8d8 100644 (file)
@@ -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())+";");
index 5fa82146ddd2b138c88b0cb0d4c579b5d3fda39d..a5d048b2632df9ed1105c165d342dfd019b2e984 100644 (file)
@@ -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;
index d573dabfbb8bf1db9655e57ee1cecb07033b1b77..b1b8fd336cebbf818e33d84a2ce1f5e8a2add2b2 100644 (file)
@@ -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"))
index 7e0c565a26d4c1234892f55c4dd4d6c00d98a9f7..e6fbc1d5172275d9597e3084a70c202e0e3e054c 100755 (executable)
@@ -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