aboutsummaryrefslogtreecommitdiffstats
path: root/bruiser
diff options
context:
space:
mode:
authorbloodstalker <thabogre@gmail.com>2017-06-27 19:18:15 +0000
committerbloodstalker <thabogre@gmail.com>2017-06-27 19:18:15 +0000
commit01df791b1356097232996e125a202759fc27ed7f (patch)
treef90f610c794b3f27744b470a08364a69e724ba89 /bruiser
parentadded the new source file (diff)
downloadmutator-01df791b1356097232996e125a202759fc27ed7f.tar.gz
mutator-01df791b1356097232996e125a202759fc27ed7f.zip
trying to see how many cool things i can do with orcs...
Diffstat (limited to 'bruiser')
-rw-r--r--bruiser/ORCmutation.cpp0
-rw-r--r--bruiser/ORCmutation.h73
2 files changed, 73 insertions, 0 deletions
diff --git a/bruiser/ORCmutation.cpp b/bruiser/ORCmutation.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bruiser/ORCmutation.cpp
diff --git a/bruiser/ORCmutation.h b/bruiser/ORCmutation.h
new file mode 100644
index 0000000..8cc29ae
--- /dev/null
+++ b/bruiser/ORCmutation.h
@@ -0,0 +1,73 @@
+
+/***************************************************Project Mutator****************************************************/
+//-*-c++-*-
+/*first line intentionally left blank.*/
+/*a second way of running the mutants. experimental.*/
+/*Copyright (C) 2017 Farzad Sadeghi
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.*/
+/*code structure inspired by Eli Bendersky's tutorial on Rewriters.*/
+/**********************************************************************************************************************/
+/*inclusion guard*/
+#ifndef ORC_MUTATION_H
+#define ORC_MUTATION_H
+/**********************************************************************************************************************/
+/*included modules*/
+/*project headers*/
+/*standard library headers*/
+#include <vector>
+/*clang headers*/
+/*llvm headers*/
+#include "llvm/ExecutionEngine/SectionMemoryManager.h"
+#include "llvm/ExecutionEngine/ExecutionEngine.h"
+#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"
+#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
+#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
+#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"
+#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"
+#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
+#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
+#include "llvm/IR/Mangler.h"
+#include "llvm/Support/DynamicLibrary.h"
+/**********************************************************************************************************************/
+/*using*/
+using namespace llvm;
+/**********************************************************************************************************************/
+/*globals*/
+/**********************************************************************************************************************/
+class MutatorJIT
+{
+ private:
+ std::unique_ptr<TargetMachine> TM;
+ const DataLayout DL;
+ std::unique_ptr<orc::JITCompileCallbackManager> CompileCallbackManager;
+ orc::RTDyldObjectLinkingLayer<> ObjectLinkingLayer;
+ orc::IRCompileLayer<decltype(ObjectLinkingLayer)> CompileLayer;
+
+ typedef std::function<std::unique_ptr<llvm::Module>(std::unique_ptr<llvm::Module>)> OptimizeFunction;
+
+ orc::IRTransformLayer<decltype(CompileLayer), OptimizeFunction> OptimizeLayer;
+ orc::CompileOnDemandLayer<decltype(OptimizeLayer)> CODL;
+
+ public:
+ typedef decltype(CODL)::ModuleSetHandleT ModuleHandle;
+};
+/**********************************************************************************************************************/
+/**********************************************************************************************************************/
+/**********************************************************************************************************************/
+/**********************************************************************************************************************/
+#endif
+/*last line intentionally left blank*/
+