From 33aa0abebaf0a604d0f9d1e69a519d16f22a4a4d Mon Sep 17 00:00:00 2001 From: jjenista Date: Thu, 28 Apr 2011 18:00:55 +0000 Subject: [PATCH] change the debug mode for capturing null dereference to a global compilar option --- Robust/src/IR/Flat/BuildCode.java | 42 ++++++++++++++++++------------- Robust/src/IR/State.java | 1 + Robust/src/Main/Main.java | 4 ++- Robust/src/buildscript | 5 ++++ 4 files changed, 33 insertions(+), 19 deletions(-) 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 -- 2.34.1