diff --git a/tools/transforms/PNMain.cpp b/tools/transforms/PNMain.cpp index ed09a6869a33a51947853d14d20a3fb119c910e4..0c9c1ee064cbb6ef703ed2a19fdecaa506e141ab 100644 --- a/tools/transforms/PNMain.cpp +++ b/tools/transforms/PNMain.cpp @@ -21,9 +21,6 @@ #include <set> #include <cstdlib> - -bool DO_CANARIES = true; - using namespace std; using namespace libIRDB; using namespace MEDS_Annotation; @@ -61,7 +58,6 @@ static double p1threshold; void pn_init() { - DO_CANARIES=true; p1threshold=0.0; } @@ -155,6 +151,7 @@ int main(int argc, char **argv) char *coverage_file=NULL; char *only_validate=NULL; bool validate_p1=true; + bool do_canaries=true; while((c = getopt_long(argc, argv, "", long_options, NULL)) != -1) { switch(c) @@ -193,11 +190,11 @@ int main(int argc, char **argv) { if(strcasecmp("on",optarg)==0) { - DO_CANARIES=true; + do_canaries=true; } else if(strcasecmp("off",optarg)==0) { - DO_CANARIES=false; + do_canaries=false; } else { @@ -272,6 +269,7 @@ int main(int argc, char **argv) transform_driver.AddBlacklist(blackListOfFunctions); transform_driver.AddOnlyValidateList(onlyValidateFunctions); + transform_driver.SetDoCanaries(do_canaries); OffsetInference *offset_inference = new OffsetInference(); diff --git a/tools/transforms/PNTransformDriver.cpp b/tools/transforms/PNTransformDriver.cpp index 476e8bc71dd7fc537e18b9e66a16ae278e81cbeb..b256d88fa81bd0150248dda391e157a8166ed881 100644 --- a/tools/transforms/PNTransformDriver.cpp +++ b/tools/transforms/PNTransformDriver.cpp @@ -11,7 +11,6 @@ using namespace std; using namespace libIRDB; //TODO: this var is a hack for TNE -extern bool DO_CANARIES; extern map<string, set<Instruction_t*> > inserted_instr; extern map<string, set<AddressID_t*> > inserted_addr; @@ -43,6 +42,7 @@ PNTransformDriver::PNTransformDriver(VariantID_t *pidp,string BED_script) orig_progid = pidp->GetOriginalVariantID(); orig_virp = new VariantIR_t(*pidp); this->BED_script = BED_script; + do_canaries = true; } PNTransformDriver::~PNTransformDriver() @@ -70,6 +70,11 @@ void PNTransformDriver::AddInference(PNStackLayoutInference *inference, int leve transform_hierarchy[level].push_back(inference); } +void PNTransformDriver::SetDoCanaries(bool do_canaries) +{ + this->do_canaries = do_canaries; +} + void PNTransformDriver::AddBlacklist(set<string> &blacklist) { set<string>::iterator it; @@ -222,7 +227,7 @@ void PNTransformDriver::GenerateTransformsInit() bool PNTransformDriver::CanaryTransformHandler(PNStackLayout *layout, Function_t *func, bool validate) { //TODO: hack for TNE: if not doing canaries, use padding transform handler instead - if(!DO_CANARIES) + if(!do_canaries) { cerr<<"PNTransformDriver: canary transformations turned off, attempting padding transformation."<<endl; return PaddingTransformHandler(layout, func, validate); diff --git a/tools/transforms/PNTransformDriver.hpp b/tools/transforms/PNTransformDriver.hpp index adc737ff90652bec2a412f5c977eb46d80ef5dea..dbcf3bf097b1f79cb90a8f455a3b839083882b30 100644 --- a/tools/transforms/PNTransformDriver.hpp +++ b/tools/transforms/PNTransformDriver.hpp @@ -23,6 +23,7 @@ protected: libIRDB::VariantIR_t *orig_virp; std::string BED_script; int orig_progid; + bool do_canaries; std::vector< std::vector<PNStackLayoutInference*> > transform_hierarchy; PNRegularExpressions pn_regex; @@ -76,6 +77,7 @@ public: virtual void AddBlacklist(std::set<std::string> &blacklist); virtual void AddBlacklistFunction(std::string func_name); virtual void AddOnlyValidateList(std::set<std::string> &only_validate_list); + virtual void SetDoCanaries(bool do_canaries); virtual void GenerateTransforms(); virtual void GenerateTransforms(std::map<std::string,double> coverage_map, double threshold, int threshold_level, int never_validate_level); };