From 12ffcf813efb340592fce904ebacf5ce16df3c4c Mon Sep 17 00:00:00 2001 From: jjenista Date: Sat, 22 Oct 2011 01:20:29 +0000 Subject: [PATCH] decouple ssjava code gen to prevent crashes from the analysis, so we can turn it on just for error injection --- .../src/Benchmarks/SSJava/EyeTracking/makefile | 2 +- Robust/src/IR/Flat/BCXSSJavaInjectError.java | 5 ++++- Robust/src/IR/Flat/BuildCode.java | 16 ++++++++-------- Robust/src/IR/State.java | 1 + Robust/src/Main/Main.java | 10 ++++++++++ Robust/src/buildscript | 7 +++++-- 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Robust/src/Benchmarks/SSJava/EyeTracking/makefile b/Robust/src/Benchmarks/SSJava/EyeTracking/makefile index 328bc5da..dbdb3236 100644 --- a/Robust/src/Benchmarks/SSJava/EyeTracking/makefile +++ b/Robust/src/Benchmarks/SSJava/EyeTracking/makefile @@ -3,7 +3,7 @@ BUILDSCRIPT=../../../buildscript PROGRAM=LEA SOURCE_FILES=LEA.java -BSFLAGS= -32bit -ssjava -ssjava-inject-error 1 12345 -mainclass $(PROGRAM) -heapsize-mb 1000 -debug -garbagestats -ssjavadebug -printlinenum -joptimize #-optimize +BSFLAGS= -32bit -ssjava -mainclass $(PROGRAM) -heapsize-mb 1000 -debug -garbagestats -ssjavadebug -printlinenum -joptimize -optimize default: $(PROGRAM)s.bin diff --git a/Robust/src/IR/Flat/BCXSSJavaInjectError.java b/Robust/src/IR/Flat/BCXSSJavaInjectError.java index d71c9a20..e4841114 100644 --- a/Robust/src/IR/Flat/BCXSSJavaInjectError.java +++ b/Robust/src/IR/Flat/BCXSSJavaInjectError.java @@ -20,6 +20,10 @@ public class BCXSSJavaInjectError implements BuildCodeExtension { this.buildCode = buildCode; } + public void additionalIncludesMethodsImplementation( PrintWriter outmethod ) { + outmethod.println("#include "); + outmethod.println("#include "); + } // the reason for errorInjectionInit is that some code (like static initializers // in the compiled program) actually run before the GENERATED MAIN runs! Not the @@ -80,7 +84,6 @@ public class BCXSSJavaInjectError implements BuildCodeExtension { - public void additionalIncludesMethodsImplementation( PrintWriter outmethod ){} public void printExtraArrayFields(PrintWriter outclassdefs){} public void outputTransCode(PrintWriter output){} public void buildCodeSetup(){} diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index e5179e62..9482735f 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -537,7 +537,7 @@ public class BuildCode { if (state.main!=null) { outmethod.println("#include "); } - if (state.SSJAVA){ + if (state.SSJAVA_GENCODE_PREVENT_CRASHES){ outmethod.println("#include "); } if (state.CONSCHECK) { @@ -2769,7 +2769,7 @@ fldloop: } } // redirect to the global_defs_p structure - if(state.SSJAVA){ + if(state.SSJAVA_GENCODE_PREVENT_CRASHES){ if (ffn.getField().getType().isPtr()){ output.println("if ( global_defs_p == NULL) {"); output.println("printf(\"SSJAVA: Dereferencing NULL Pointer at file:%s, func:%s, line:%d \\n\", __FILE__, __func__, __LINE__);"); @@ -2794,7 +2794,7 @@ fldloop: } else if (ffn.getField().isEnum()) { // an Enum value, directly replace the field access as int output.println(generateTemp(fm, ffn.getDst()) + "=" + ffn.getField().enumValue() + ";"); - } else if(state.SSJAVA){ + } else if(state.SSJAVA_GENCODE_PREVENT_CRASHES){ output.println("if (" + generateTemp(fm,ffn.getSrc()) + " == NULL) {"); output.println("printf(\"SSJAVA: Dereferencing NULL Pointer at file:%s, func:%s, line:%d \\n\", __FILE__, __func__, __LINE__);"); if(ffn.getDst().getType().isPrimitive()){ @@ -2868,7 +2868,7 @@ fldloop: } } // redirect to the global_defs_p structure - if(state.SSJAVA){ + if(state.SSJAVA_GENCODE_PREVENT_CRASHES){ if (fsfn.getField().getType().isPtr()) { output.println("if ( global_defs_p == NULL) {"); output.println("printf(\"SSJAVA: Discard a write due to dereferencing NULL Pointer at file:%s, func:%s, line:%d \\n\", __FILE__, __func__, __LINE__);"); @@ -2901,7 +2901,7 @@ fldloop: output.println("global_defsprim_p->" + fsfn.getField().getSafeSymbol()+"="+ generateTemp(fm,fsfn.getSrc())+";"); } - } else if(state.SSJAVA){ + } else if(state.SSJAVA_GENCODE_PREVENT_CRASHES){ output.println("if (" + generateTemp(fm,fsfn.getDst()) + " == NULL) {"); output.println("printf(\"SSJAVA: Dereferencing NULL Pointer at file:%s, func:%s, line:%d \\n\", __FILE__, __func__, __LINE__);"); output.println("}else{"); @@ -2947,7 +2947,7 @@ fldloop: else type=elementtype.getSafeSymbol()+" "; - if(state.SSJAVA){ + if(state.SSJAVA_GENCODE_PREVENT_CRASHES){ output.println("if (" + generateTemp(fm,fen.getSrc()) + " == NULL) {"); output.println("printf(\"SSJAVA: Dereferencing NULL Pointer at file:%s, func:%s, line:%d \\n\", __FILE__, __func__, __LINE__);"); output.println("}else{"); @@ -2987,7 +2987,7 @@ fldloop: else type=elementtype.getSafeSymbol()+" "; - if(state.SSJAVA){ + if(state.SSJAVA_GENCODE_PREVENT_CRASHES){ output.println("if ("+generateTemp(fm,fsen.getDst())+"==NULL){"); output.println("printf(\"SSJAVA: Dereferencing NULL Pointer at file:%s, func:%s, line:%d \\n\", __FILE__, __func__, __LINE__);"); output.println("}else{"); @@ -3064,7 +3064,7 @@ fldloop: output.println(generateTemp(fm, fon.getDest())+" = ((unsigned int)"+generateTemp(fm, fon.getLeft())+")>>"+generateTemp(fm,fon.getRight())+";"); } else { - if(state.SSJAVA && fon.getOp().getOp()==Operation.DIV){ + if(state.SSJAVA_GENCODE_PREVENT_CRASHES && fon.getOp().getOp()==Operation.DIV){ output.println("if (unlikely("+generateTemp(fm,fon.getRight())+"==0)){"); output.println("printf(\"SSJAVA: Divided by zero at file:%s, func:%s, line:%d \\n\", __FILE__, __func__, __LINE__);"); output.println(generateTemp(fm, fon.getDest())+" = 0;"); diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java index c7d9a3d6..7f754482 100644 --- a/Robust/src/IR/State.java +++ b/Robust/src/IR/State.java @@ -143,6 +143,7 @@ public class State { //SSJava public boolean SSJAVA=false; public boolean SSJAVADEBUG=false; + public boolean SSJAVA_GENCODE_PREVENT_CRASHES=false; public boolean SSJAVA_INJECT_ERROR=false; public int SSJAVA_INV_ERROR_PROB=0; public int SSJAVA_ERROR_SEED=0; diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index 019e7e40..8ac20190 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -364,16 +364,26 @@ public class Main { state.KEEP_RG_FOR_ALL_PROGRAM_POINTS=true; } else if (option.equals("-nostalltr")) { state.NOSTALLTR = true; + } else if (option.equals("-ssjava")) { state.SSJAVA = true; + state.SSJAVA_GENCODE_PREVENT_CRASHES = true; + } else if (option.equals("-ssjavadebug")) { state.SSJAVADEBUG = true; } else if( option.equals( "-ssjava-inject-error" ) ) { + state.SSJAVA_GENCODE_PREVENT_CRASHES = true; state.SSJAVA_INJECT_ERROR = true; state.SSJAVA_INV_ERROR_PROB = Integer.parseInt( args[++i] ); state.SSJAVA_ERROR_SEED = Integer.parseInt( args[++i] ); + // special case, if the inverse prob is 0, turn off errors + if( state.SSJAVA_INV_ERROR_PROB == 0 ) { + state.SSJAVA_INJECT_ERROR = false; + } + + }else if (option.equals("-printlinenum")) { state.LINENUM=true; } else if (option.equals("-help")) { diff --git a/Robust/src/buildscript b/Robust/src/buildscript index 8e1475af..1cdf1d92 100755 --- a/Robust/src/buildscript +++ b/Robust/src/buildscript @@ -172,6 +172,7 @@ echo -help help tmpbuilddirectory="tmpbuilddirectory" JNI=false SSJAVA=false +USE_SSJAVA_CLASSPATH=false SRCAFTERPP=false; COREPROF=false; NUMA=false; @@ -666,6 +667,7 @@ EXTRAOPTIONS="$EXTRAOPTIONS -DOOO_DISABLE_TASKMEMPOOL" elif [[ $1 = '-ssjava' ]] then SSJAVA=true +USE_SSJAVA_CLASSPATH=true JAVAOPTS="$JAVAOPTS -ssjava" elif [[ $1 = '-ssjavadebug' ]] @@ -674,6 +676,7 @@ JAVAOPTS="$JAVAOPTS -ssjavadebug" elif [[ $1 = '-ssjava-inject-error' ]] then +USE_SSJAVA_CLASSPATH=true JAVAOPTS="$JAVAOPTS -ssjava-inject-error $2 $3" shift shift @@ -876,7 +879,7 @@ elif $MGCFLAG #base multicore gc files JAVAOPTS="$JAVAOPTS -classlibrary $ROBUSTROOT/ClassLibrary/MGC/ -classlibrary $ROBUSTROOT/ClassLibrary/MGC/gnu/" -elif $SSJAVA +elif $USE_SSJAVA_CLASSPATH then JAVAOPTS="$JAVAOPTS -classlibrary $ROBUSTROOT/ClassLibrary/SSJava" @@ -913,7 +916,7 @@ else fi # everyone gets this except ssjava! -if ! $SSJAVA +if ! $USE_SSJAVA_CLASSPATH then JAVAOPTS="$JAVAOPTS -classlibrary $ROBUSTROOT/ClassLibrary/ -classlibrary $ROBUSTROOT/ClassLibrary/gnu/" fi -- 2.34.1