}
if( doEffectsAnalysis ) {
- effectsAnalysis.writeEffectsPerMethod( "effects-per-method.txt" );
+ effectsAnalysis.writeEffectsPerMethodAndRBlock( "effects.txt" );
}
}
//rg.nullifyDeadVars( liveness.getLiveInTemps( fmContaining, fn ) );
/*
- if( doEffectsAnalysis &&
+ if( doEffectsAnalysis && && fmContaining != fmAnalysisEntry
rra.isEndOfRegion(fn)){
rg.clearAccessibleVarSet();
also need to clear stall mapping
lhs = fon.getDest();
rhs = fon.getLeft();
rg.assignTempXEqualToTempY( lhs, rhs );
-
- /*
- if( doEffectsAnalysis ) {
- // current sese is top of stack at this program point
- FlatSESEEnterNode sese =
- rblockRel.getRBlockStacks( fmContaining, fn ).peek();
-
- // if we are assigning to an out-set var, the taint
- // on the out-set var edges should be TRUE (and propagate
- // back to callers
-
- rg.taintTemp( sese,
- null,
- lhs,
- ReachGraph.predsTrue
- );
- }
- */
}
break;
if( shouldAnalysisTrack( fld.getType() ) ) {
rg.assignTempXEqualToTempYFieldF( lhs, rhs, fld );
- if( doEffectsAnalysis ) {
- effectsAnalysis.analyzeFlatFieldNode( fmContaining, rg, rhs, fld );
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ FlatSESEEnterNode seseContaining =
+ rblockRel.getRBlockStacks( fmContaining, fn ).peek();
+
+ effectsAnalysis.analyzeFlatFieldNode( fmContaining,
+ seseContaining,
+ rg, rhs, fld );
}
}
break;
if( shouldAnalysisTrack( fld.getType() ) ) {
boolean strongUpdate = rg.assignTempXFieldFEqualToTempY( lhs, fld, rhs );
- if( doEffectsAnalysis ) {
- effectsAnalysis.analyzeFlatSetFieldNode( fmContaining, rg, lhs, fld, strongUpdate );
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ FlatSESEEnterNode seseContaining =
+ rblockRel.getRBlockStacks( fmContaining, fn ).peek();
+
+ effectsAnalysis.analyzeFlatSetFieldNode( fmContaining,
+ seseContaining,
+ rg, lhs, fld, strongUpdate );
}
}
break;
FieldDescriptor fdElement = getArrayField( tdElement );
rg.assignTempXEqualToTempYFieldF( lhs, rhs, fdElement );
+
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ FlatSESEEnterNode seseContaining =
+ rblockRel.getRBlockStacks( fmContaining, fn ).peek();
+
+ effectsAnalysis.analyzeFlatFieldNode( fmContaining,
+ seseContaining,
+ rg, rhs, fdElement );
+ }
}
break;
FieldDescriptor fdElement = getArrayField( tdElement );
rg.assignTempXFieldFEqualToTempY( lhs, fdElement, rhs );
+
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ FlatSESEEnterNode seseContaining =
+ rblockRel.getRBlockStacks( fmContaining, fn ).peek();
+
+ effectsAnalysis.analyzeFlatSetFieldNode( fmContaining,
+ seseContaining,
+ rg, lhs, fdElement,
+ false );
+ }
}
break;
break;
case FKind.FlatSESEEnterNode:
- if( doEffectsAnalysis ) {
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
FlatSESEEnterNode sese = (FlatSESEEnterNode) fn;
rg.taintInSetVars( sese );
}
break;
case FKind.FlatSESEExitNode:
- if( doEffectsAnalysis ) {
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
FlatSESEExitNode fsexn = (FlatSESEExitNode) fn;
rg.removeInContextTaints( fsexn.getFlatEnter() );
}
Hashtable<Taint, TaintSet> tCallee2tsCaller = null;
- if( doEffectsAnalysis ) {
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
tCallee2tsCaller = new Hashtable<Taint, TaintSet>();
}
writeDebugDOTs
);
- if( doEffectsAnalysis ) {
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+
+ FlatSESEEnterNode seseContaining =
+ rblockRel.getRBlockStacks( fmContaining, fn ).peek();
+
effectsAnalysis.analyzeFlatCall( fmContaining,
+ seseContaining,
fmPossible,
tCallee2tsCaller );
}