Loading include/moduleReverser.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ private: void runPreprocessingPasses(); void cloneModuleHeader(Module* revModule); /// @brief Create a module with a single main function that only returns 0. To be used if the /// module to reverse contains no asserts. /// @return empty module Loading src/moduleReverser.cpp +20 −8 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ // includes based on version #endif void ModuleReverser::runPreprocessingPasses() { void ModuleReverser::runPreprocessingPasses() { // PassDriver driver(*origModule); // driver.simplifyCFG(); } Loading Loading @@ -89,7 +90,10 @@ ReversedModule ModuleReverser::reverse(Module& revModule) initReversedFunctions(mod); bool assertFound = findAsserts(mod); assert(assertFound); // this should be handled in the initial assert scan if (!assertFound) { outs() << "WARNING: no assert found in the module, no error will be added to the end of " "main, and the main function will have a reversed type\n"; } // outs() << mod.revModule; initReversedBlocks(mod); Loading Loading @@ -160,18 +164,25 @@ std::unique_ptr<Module> ModuleReverser::reverseAndCustomSimplify() return std::move(revModule); } void ModuleReverser::cloneModuleHeader(Module* revModule) { revModule->setTargetTriple(origModule->getTargetTriple()); revModule->setDataLayout(origModule->getDataLayout()); revModule->setSourceFileName(origModule->getSourceFileName()); revModule->setModuleInlineAsm(origModule->getModuleInlineAsm()); } std::unique_ptr<Module> ModuleReverser::run() { if (!areFeaturesSupported(*origModule)) { return nullptr; } if (!scanForAsserts(*origModule)) { if (options.printStatus) { outs() << "WARNING: no assert found in the module, skipping reversing\n"; } return createEmptyModule(); } // if (!scanForAsserts(*origModule)) { // if (options.printStatus) { // outs() << "WARNING: no assert found in the module, skipping reversing\n"; // } // return createEmptyModule(); // } preprocessOrigModule(); Loading @@ -184,6 +195,7 @@ std::unique_ptr<Module> ModuleReverser::run() } auto revModule = reverseAndCustomSimplify(); cloneModuleHeader(revModule.get()); // verify before the LLVM passes bool broken = verifyModule(*revModule, &errs()); Loading Loading
include/moduleReverser.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ private: void runPreprocessingPasses(); void cloneModuleHeader(Module* revModule); /// @brief Create a module with a single main function that only returns 0. To be used if the /// module to reverse contains no asserts. /// @return empty module Loading
src/moduleReverser.cpp +20 −8 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ // includes based on version #endif void ModuleReverser::runPreprocessingPasses() { void ModuleReverser::runPreprocessingPasses() { // PassDriver driver(*origModule); // driver.simplifyCFG(); } Loading Loading @@ -89,7 +90,10 @@ ReversedModule ModuleReverser::reverse(Module& revModule) initReversedFunctions(mod); bool assertFound = findAsserts(mod); assert(assertFound); // this should be handled in the initial assert scan if (!assertFound) { outs() << "WARNING: no assert found in the module, no error will be added to the end of " "main, and the main function will have a reversed type\n"; } // outs() << mod.revModule; initReversedBlocks(mod); Loading Loading @@ -160,18 +164,25 @@ std::unique_ptr<Module> ModuleReverser::reverseAndCustomSimplify() return std::move(revModule); } void ModuleReverser::cloneModuleHeader(Module* revModule) { revModule->setTargetTriple(origModule->getTargetTriple()); revModule->setDataLayout(origModule->getDataLayout()); revModule->setSourceFileName(origModule->getSourceFileName()); revModule->setModuleInlineAsm(origModule->getModuleInlineAsm()); } std::unique_ptr<Module> ModuleReverser::run() { if (!areFeaturesSupported(*origModule)) { return nullptr; } if (!scanForAsserts(*origModule)) { if (options.printStatus) { outs() << "WARNING: no assert found in the module, skipping reversing\n"; } return createEmptyModule(); } // if (!scanForAsserts(*origModule)) { // if (options.printStatus) { // outs() << "WARNING: no assert found in the module, skipping reversing\n"; // } // return createEmptyModule(); // } preprocessOrigModule(); Loading @@ -184,6 +195,7 @@ std::unique_ptr<Module> ModuleReverser::run() } auto revModule = reverseAndCustomSimplify(); cloneModuleHeader(revModule.get()); // verify before the LLVM passes bool broken = verifyModule(*revModule, &errs()); Loading