From 72c9ba6363a7a4402802f15fe0880b7c4433ad6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20B=C3=B6ckenkamp?= Date: Wed, 24 Apr 2013 14:26:11 +0200 Subject: [PATCH] Added abo-simple-arm experiment code It is a simple and short experiment that performs single stepping through the target. It is designed to be used with gem5 (+ ARM). Change-Id: Id48b2b087a3650bd0298454ff168c0dbdaaae0c8 --- src/experiments/abo-simple-arm/CMakeLists.txt | 17 ++++++++ src/experiments/abo-simple-arm/experiment.cc | 40 +++++++++++++++++++ src/experiments/abo-simple-arm/experiment.hpp | 13 ++++++ 3 files changed, 70 insertions(+) create mode 100644 src/experiments/abo-simple-arm/CMakeLists.txt create mode 100644 src/experiments/abo-simple-arm/experiment.cc create mode 100644 src/experiments/abo-simple-arm/experiment.hpp diff --git a/src/experiments/abo-simple-arm/CMakeLists.txt b/src/experiments/abo-simple-arm/CMakeLists.txt new file mode 100644 index 00000000..71fa28a4 --- /dev/null +++ b/src/experiments/abo-simple-arm/CMakeLists.txt @@ -0,0 +1,17 @@ +set(EXPERIMENT_NAME abo-simple-arm) +set(EXPERIMENT_TYPE ABOSimpleARMExperiment) +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +#experiment sources +set(MY_EXPERIMENT_SRCS + experiment.hpp + experiment.cc +) + +#### include directories #### +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +## build library +add_library(fail-${EXPERIMENT_NAME} ${MY_EXPERIMENT_SRCS}) diff --git a/src/experiments/abo-simple-arm/experiment.cc b/src/experiments/abo-simple-arm/experiment.cc new file mode 100644 index 00000000..593df46c --- /dev/null +++ b/src/experiments/abo-simple-arm/experiment.cc @@ -0,0 +1,40 @@ +#include "util/Logger.hpp" +#include "experiment.hpp" +#include "sal/SALConfig.hpp" +#include "sal/SALInst.hpp" +#include "sal/Listener.hpp" +#include "config/FailConfig.hpp" + +using namespace std; +using namespace fail; + +// Check if configuration dependencies are satisfied: +#if !defined(CONFIG_EVENT_BREAKPOINTS) && !defined(CONFIG_EVENT_BREAKPOINTS_RANGE) + #error This experiment needs: breakpoints. Enable them in the configuration. +#endif + +bool ABOSimpleARMExperiment::run() +{ + Logger log("abo-simple", false); + log << "Startup!" << endl; + + BPSingleListener* ret; + BPSingleListener bp(0x800334); + ret = (BPSingleListener*)simulator.addListenerAndResume(&bp); + log << hex << ret->getTriggerInstructionPointer() << ": " + << simulator.getMnemonic() << endl; + bp.setWatchInstructionPointer(ANY_ADDR); + simulator.clearListeners(); + while ((ret = (BPSingleListener*)simulator.addListenerAndResume(&bp)) != 0) { + log << hex << ret->getTriggerInstructionPointer() << ": " + << simulator.getMnemonic() << " => Abort? " << flush; + char ch; + cin.clear(); cin.sync(); cin >> ch; + cout << endl; + if (ch == 'y' || ch == 'Y') + break; + } + + // Explicitly terminate, or the simulator will continue to run. + simulator.terminate(); +} diff --git a/src/experiments/abo-simple-arm/experiment.hpp b/src/experiments/abo-simple-arm/experiment.hpp new file mode 100644 index 00000000..dd73b7bc --- /dev/null +++ b/src/experiments/abo-simple-arm/experiment.hpp @@ -0,0 +1,13 @@ +#ifndef __ABO_SIMPLE_ARM_EXPERIMENT_HPP__ + #define __ABO_SIMPLE_ARM_EXPERIMENT_HPP__ + +#include "efw/ExperimentFlow.hpp" +#include "efw/JobClient.hpp" + +class ABOSimpleARMExperiment : public fail::ExperimentFlow { +public: + ABOSimpleARMExperiment() { } + bool run(); +}; + +#endif // __ABO_SIMPLE_ARM_EXPERIMENT_HPP__