Added BasicBlock- and CallRegionPruner

Implemented two instantiations of Fault-Space Regions (FSR) as a program-structure-guided approximation of fault spaces based on the precise Def/Use-Pruning using basic blocks or function calls.

Further reading:
Program-Structure-Guided Approximation of Large Fault Spaces
Oskar Pusz and Daniel Kiechle and Christian Dietrich and Daniel Lohmann
In: 24th Pacific Rim International Symposium on Dependable Computing (PRDC'19)
IEEE Computer Science Press, 2019

Some configurations for bochs and generic-experiment
This commit is contained in:
Oskar Pusz
2019-10-28 09:51:07 +01:00
parent aec09d1565
commit 956112cc01
7 changed files with 552 additions and 3 deletions

View File

@ -15,9 +15,11 @@ using std::endl;
#include "BasicPruner.hpp"
#include "FESamplingPruner.hpp"
#include "SamplingPruner.hpp"
#include "BasicBlockPruner.hpp"
#include "CallRegionPruner.hpp"
int main(int argc, char *argv[]) {
std::string username, hostname, database;
std::string username, hostname, database, trace_file;
// register possible Pruners
AliasedRegistry registry;
@ -29,6 +31,10 @@ int main(int argc, char *argv[]) {
registry.add(&fesamplingpruner);
SamplingPruner samplingpruner;
registry.add(&samplingpruner);
BasicBlockPruner basicblockpruner;
registry.add(&basicblockpruner);
CallRegionPruner callregionpruner;
registry.add(&callregionpruner);
std::string pruners = registry.getPrimeAliasesCSV();
@ -68,6 +74,9 @@ int main(int argc, char *argv[]) {
CommandLine::option_handle INCREMENTAL =
cmd.addOption("", "incremental", Arg::None,
"--incremental \tTell the pruner to work incrementally (if supported)");
CommandLine::option_handle TRACE_FILE =
cmd.addOption("t", "trace-file", Arg::Required,
"-t/--trace-file \tFile to load the execution trace from\n");
if (!cmd.parse()) {
std::cerr << "Error parsing arguments." << std::endl;
@ -155,7 +164,15 @@ int main(int argc, char *argv[]) {
benchmarks_exclude.push_back(std::string(o->arg));
}
}
if (cmd[TRACE_FILE]) {
trace_file = std::string(cmd[TRACE_FILE].first()->arg);
} else {
trace_file = "trace.pb";
}
pruner->set_traceFile(trace_file);
// fallback
if (benchmarks.size() == 0) {
benchmarks.push_back("%");