globally rename Fail* to FAIL*
Change-Id: Ief2cb687cc69dd92c2e04f9314f0f1347e0a84ed
This commit is contained in:
@ -11,9 +11,9 @@ if(NOT ("${CMAKE_VERSION}" VERSION_LESS 3.0)) # >= 3.0?
|
||||
endif()
|
||||
ENABLE_TESTING()
|
||||
|
||||
PROJECT(Fail*)
|
||||
PROJECT(FAIL*)
|
||||
|
||||
set(PROJECT_VERSION "1.0.1" CACHE INTERNAL "Fail* version number" FORCE)
|
||||
set(PROJECT_VERSION "1.0.1" CACHE INTERNAL "FAIL* version number" FORCE)
|
||||
|
||||
#### Put all resulting library files in <your_build_dir>/lib ####
|
||||
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
|
||||
@ -49,7 +49,7 @@ OPTION( BUILD_X86 "Build for x86 guests?" ON)
|
||||
OPTION( BUILD_ARM "Build for ARM guests?" OFF)
|
||||
|
||||
# FIXME: only add simulators/ to include_directories, and include, e.g.,
|
||||
# bochs/bochs.h in Fail*. -> avoids naming conflicts (e.g., /usr/include/elf.h
|
||||
# bochs/bochs.h in FAIL*. -> avoids naming conflicts (e.g., /usr/include/elf.h
|
||||
# vs. qemu/elf.h)
|
||||
if(BUILD_BOCHS)
|
||||
## add necessary additional header search paths.
|
||||
@ -68,7 +68,7 @@ elseif(BUILD_PANDA)
|
||||
include_directories(debuggers/openocd/src debuggers/openocd/jimtcl src/core)
|
||||
endif(BUILD_BOCHS)
|
||||
|
||||
## Tell the linker where to find the Fail* libraries
|
||||
## Tell the linker where to find the FAIL* libraries
|
||||
link_directories("${LIBRARY_OUTPUT_PATH}")
|
||||
|
||||
# Add "simulators"-directory to the include path. This allows
|
||||
|
||||
@ -111,7 +111,7 @@ docker instance.
|
||||
|
||||
Mailing list
|
||||
------------
|
||||
The Fail* developers, and some of its previous and current users, can be
|
||||
The FAIL* developers, and some of its previous and current users, can be
|
||||
contacted on the
|
||||
[fail@lists.cs.tu-dortmund.de](mailto:fail@lists.cs.tu-dortmund.de)
|
||||
mailing list
|
||||
|
||||
@ -3,7 +3,7 @@ find_program(LLVMCONFIG NAMES llvm-config-3.4 llvm-config-3.3 llvm-config-3.2 ll
|
||||
if( NOT LLVMCONFIG )
|
||||
message(FATAL_ERROR "llvm-config not found, try installing llvm-dev llvm")
|
||||
else()
|
||||
message(STATUS "[Fail*] LLVM Disassembler: Found llvm-config @ ${LLVMCONFIG}")
|
||||
message(STATUS "[FAIL*] LLVM Disassembler: Found llvm-config @ ${LLVMCONFIG}")
|
||||
endif()
|
||||
|
||||
# examine LLVM include directory
|
||||
|
||||
@ -13,14 +13,14 @@ set(FAIL_DOC_SOURCE "${FAIL_DOC_SOURCE} ${PROJECT_SOURCE_DIR}/src/plugins")
|
||||
set(FAIL_DOC_EXCLUDE_PATTERNS "*/util/pstream.h */util/optionparser/optionparser.h")
|
||||
file(MAKE_DIRECTORY ${FAIL_DOC_OUTPUT})
|
||||
# FIXME: The find command does not quote the paths to be processed by doxygen. That
|
||||
# means, the path to your Fail* directory should not contain any blanks.
|
||||
# means, the path to your FAIL* directory should not contain any blanks.
|
||||
|
||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/Doxyfile.in
|
||||
${PROJECT_BINARY_DIR}/Doxyfile @ONLY}
|
||||
)
|
||||
|
||||
## call make doc to generate documentation
|
||||
set(line0 "[${PROJECT_NAME}] Generating Fail* documentation with Doxygen")
|
||||
set(line0 "[${PROJECT_NAME}] Generating FAIL* documentation with Doxygen")
|
||||
set(line1 " Directories: ${FAIL_DOC_SOURCE}")
|
||||
set(line2 " Excluded patterns: ${FAIL_DOC_EXCLUDE_PATTERNS}")
|
||||
add_custom_target(doc
|
||||
|
||||
@ -85,7 +85,7 @@ if(BUILD_GEM5)
|
||||
|
||||
# Cleans up everything (gem5 and Fail related):
|
||||
add_custom_target(gem5-allclean
|
||||
COMMAND @echo "Cleaning Fail* and gem5 ..."
|
||||
COMMAND @echo "Cleaning FAIL* and gem5 ..."
|
||||
COMMAND cd "${PROJECT_BINARY_DIR}/" && make clean
|
||||
COMMAND cd "${gem5_src_dir}/" && scons -c build/ARM
|
||||
COMMAND cd "${gem5_src_dir}/" && rm -rf build/
|
||||
|
||||
@ -45,7 +45,7 @@ if(BUILD_PANDA)
|
||||
|
||||
# ensure, elf path is set for enabling openocd to read elf symbols
|
||||
if(EXISTS $ENV{FAIL_ELF_PATH})
|
||||
message(STATUS "[Fail*] PandaBoard ELF under test: $ENV{FAIL_ELF_PATH}")
|
||||
message(STATUS "[FAIL*] PandaBoard ELF under test: $ENV{FAIL_ELF_PATH}")
|
||||
else()
|
||||
message(FATAL_ERROR "Please set the FAIL_ELF_PATH environment variable to the binary under test.")
|
||||
endif()
|
||||
|
||||
@ -326,7 +326,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
init_symbols();
|
||||
|
||||
LOG << "OpenOCD 0.7.0 for Fail* and Pandaboard initialized" << endl;
|
||||
LOG << "OpenOCD 0.7.0 for FAIL* and Pandaboard initialized" << endl;
|
||||
|
||||
/* === INITIALIZATION COMPLETE => MAIN LOOP === */
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
Coding Style for Fail*
|
||||
Coding Style for FAIL*
|
||||
======================
|
||||
|
||||
You may violate/break any of the following rules if you have a good reason to
|
||||
|
||||
@ -4,21 +4,20 @@ Directory structure:
|
||||
|
||||
The folders are nested as follow:
|
||||
**********************************************************************
|
||||
fail: Fail* parent directory, containing all source & configuration files (${FAIL_DIR})
|
||||
fail: FAIL* parent directory, containing all source & configuration files (${FAIL_DIR})
|
||||
|-cmake: CMake-related configuration files (e.g. compiler-flags, dependencies, ...)
|
||||
|-doc: Fail*-Framework documentation (e.g., diagrams, howtos, ...)
|
||||
|-deprecated: temporal and old (source) files, which will probably be deleted
|
||||
|-scripts: python/shell scripts for Fail*-compilation and experiment distribution
|
||||
|-simulators: parent directory of simulators supported by Fail* (may still be WIP)
|
||||
|-doc: FAIL*-Framework documentation (e.g., diagrams, howtos, ...)
|
||||
|-scripts: python/shell scripts for FAIL*-compilation and experiment distribution
|
||||
|-simulators: parent directory of simulators supported by FAIL* (may still be WIP)
|
||||
|-bochs: source files of the (modified) Bochs x86 simulator backend
|
||||
|-gem5: source files of the gem5 simulator backend
|
||||
|-debuggers: parent directory of debuggers supported by Fail* (may still be WIP)
|
||||
|-debuggers: parent directory of debuggers supported by FAIL* (may still be WIP)
|
||||
|-gdb: source files related to the GNU gdb debugger
|
||||
|-t32: source files related to the Lauterbach T32 debugger
|
||||
|-src: C/C++/AspectC++ source files related to Fail*, experiments and plugins
|
||||
|-core: core source files forming the Fail* framework
|
||||
|-src: C/C++/AspectC++ source files related to FAIL*, experiments and plugins
|
||||
|-core: core source files forming the FAIL* framework
|
||||
|-util: utility classes and miscellaneous helper functions
|
||||
|-config: CMake configuration files, defining the Fail* components and variant
|
||||
|-config: CMake configuration files, defining the FAIL* components and variant
|
||||
|-sal: source file forming the Simulator Abstraction Layer (backend-interface)
|
||||
|-bochs: backend source files of the Bochs simulator
|
||||
|-gem5: backend source files of the gem5 simulator
|
||||
@ -27,14 +26,14 @@ fail: Fail* parent directory, containing all source & configuration files (${FA
|
||||
|-arm: ARM-specific platform source files
|
||||
|-x86: x86-specific platform source files
|
||||
|-perf: performance-related source files (extensions); speeds up
|
||||
Fail* <-> simulator interaction (e.g., when using breakpoints)
|
||||
FAIL* <-> simulator interaction (e.g., when using breakpoints)
|
||||
|-cpn: campaign- (and therefore server-)related source files
|
||||
|-efw: experiment-framework- (and therefore client-)related source files
|
||||
|-comm: communication related source files (these files are used by cpn and efw), incl.
|
||||
protobuf message definitions used for communication purposes
|
||||
|-experiments: experiment code files (within a new dir) need to be located here
|
||||
|-plugins: plugin code files (within a new dir) need to be located here
|
||||
|-tools: Fail*-related tools, e.g., for tracing or fault-space pruning
|
||||
|-tools: FAIL*-related tools, e.g., for tracing or fault-space pruning
|
||||
|-[build]: recommended location of your build-tree, generated files will be placed here
|
||||
|
||||
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
=========================================================================================
|
||||
Additional libraries/packages/tools needed for Fail*:
|
||||
Additional libraries/packages/tools needed for FAIL*:
|
||||
=========================================================================================
|
||||
|
||||
Required for Fail*:
|
||||
Required for FAIL*:
|
||||
**********************************************************************
|
||||
- libmysqlclient-dev or libmariadbclient-dev
|
||||
- libprotobuf-dev
|
||||
@ -79,10 +79,10 @@ For distribution/parallelization:
|
||||
it exists.
|
||||
|
||||
=========================================================================================
|
||||
Compiling, building and modifying: Simulators and Fail*
|
||||
Compiling, building and modifying: Simulators and FAIL*
|
||||
=========================================================================================
|
||||
|
||||
Building Fail*:
|
||||
Building FAIL*:
|
||||
**********************************************************************
|
||||
|
||||
For the first time:
|
||||
@ -101,7 +101,7 @@ For the first time:
|
||||
$ ccmake .
|
||||
Select "BUILD_BOCHS" or "BUILD_GEM5". Select an experiment to enable by
|
||||
naming its "experiments/" subdirectory under "EXPERIMENTS_ACTIVATED".
|
||||
Configure Fail* features you need for this experiment by enabling
|
||||
Configure FAIL* features you need for this experiment by enabling
|
||||
"CONFIG_*" options. Press 'c', 'g' to regenerate the build system.
|
||||
(Alternatively use
|
||||
$ cmake-gui .
|
||||
@ -111,18 +111,18 @@ For the first time:
|
||||
for your need.
|
||||
|
||||
|
||||
After changes to Fail* code:
|
||||
After changes to FAIL* code:
|
||||
------------------------------------------------------------
|
||||
Compile (in ${BUILD_DIR}, optionally "add -jN" for parallel building):
|
||||
$ make
|
||||
CMake will build all Fail* libraries and link them with the simulator backend
|
||||
CMake will build all FAIL* libraries and link them with the simulator backend
|
||||
library to a binary called "fail-client". You may use the shell script
|
||||
$ ${FAIL_DIR}/scripts/rebuild-bochs.sh [-]
|
||||
to speed up repetitive tasks regarding Fail/Bochs builds. This script contains
|
||||
a concise documentation on itself.
|
||||
|
||||
|
||||
Add new Fail* sources to build chain:
|
||||
Add new FAIL* sources to build chain:
|
||||
------------------------------------------------------------
|
||||
To add new source files to the build, see CMakeLists.txt in the subdirectory of the
|
||||
corresponding component in "${FAIL_DIR}/src/core/", and probably consultate the
|
||||
@ -136,7 +136,7 @@ new subdirectory in "experiments/", activate it in the CMake configuration step
|
||||
above).
|
||||
|
||||
|
||||
Generating the Doxygen documentation for Fail*:
|
||||
Generating the Doxygen documentation for FAIL*:
|
||||
**********************************************************************
|
||||
To generate the Doxygen documentation, type:
|
||||
$ make doc
|
||||
@ -151,7 +151,7 @@ to be compiled previously:
|
||||
FailBochs: Bochs configuration features
|
||||
**********************************************************************
|
||||
|
||||
The autotools-based bochs is configured within the Fail* build run.
|
||||
The autotools-based bochs is configured within the FAIL* build run.
|
||||
The configuration flags can be set within the ccmake configuration (ccmake ${FAIL_DIR}/build)
|
||||
- Sufficient:
|
||||
--enable-cpu-level=6;--enable-ne2000;--enable-trace-cache;--enable-gdb-stub;--disable-docbook;--with-nogui
|
||||
@ -160,7 +160,7 @@ FailBochs: Bochs configuration features
|
||||
The --with-nogui flag suffices for for "headless" experiments, with the
|
||||
advantage of removing lots of library dependencies (thus reducing startup
|
||||
overhead). --with-x11 enables only the "x" (X11), --with-wx only the "wx"
|
||||
(wxWidgets) GUI. Note that "wx" does not play well together with Fail*'s
|
||||
(wxWidgets) GUI. Note that "wx" does not play well together with FAIL*'s
|
||||
"restore" feature (FailBochs will fall back to "x" if available, or die
|
||||
trying.)
|
||||
Once you know everything works as it should, you may want to add the
|
||||
@ -189,7 +189,7 @@ Debug build:
|
||||
Configure Bochs to use debugging-related compiler flags (expects to be in ${BUILD_DIR}):
|
||||
$ cd ../simulator/bochs
|
||||
$ CFLAGS="-g -O0" CXXFLAGS="-g -O0" ./configure --prefix=... ... (see above)
|
||||
You might additionally want to configure the rest of Fail* into debug mode by
|
||||
You might additionally want to configure the rest of FAIL* into debug mode by
|
||||
setting CMAKE_BUILD_TYPE to "Debug" (ccmake, see above).
|
||||
FIXME: Does this still work?
|
||||
|
||||
@ -220,7 +220,7 @@ Building gem5:
|
||||
|
||||
For the first time (incl. selecting an experiment):
|
||||
------------------------------------------------------------
|
||||
1. Change to the Fail* directory (expects to be in ${FAIL_DIR}) and
|
||||
1. Change to the FAIL* directory (expects to be in ${FAIL_DIR}) and
|
||||
create a new build directory.
|
||||
$ cd ${FAIL_DIR}; mkdir build; cd build
|
||||
3. Start the configuration by typing
|
||||
@ -233,7 +233,7 @@ For the first time (incl. selecting an experiment):
|
||||
BUILD_BOCHS and BUILD_X86.
|
||||
5. Typing
|
||||
$ make (or nice make -jN)
|
||||
will start the build process of Fail* and gem5. This automatically
|
||||
will start the build process of FAIL* and gem5. This automatically
|
||||
builds the debug variant for ARM targets. (Note that this build will
|
||||
automatically include the ${FAIL_DIR}/src/core/sal/gem5 as an
|
||||
"EXTRAS" feature, see gem5/scons build system documentation for
|
||||
@ -248,13 +248,13 @@ For the first time (incl. selecting an experiment):
|
||||
NOTE: gem5 currently does not compile with the newer clang-based daily builds
|
||||
of AspectC++ (ac++). You may need to use the ac++ 1.2 release instead.
|
||||
|
||||
After changes to Fail*/gem5 code (incl. aspect headers):
|
||||
After changes to FAIL*/gem5 code (incl. aspect headers):
|
||||
------------------------------------------------------------
|
||||
1. Clean the current build by typing
|
||||
$ make gem5-allclean
|
||||
(in your build dir ${FAIL_DIR}/build). This cleans the current
|
||||
Fail* and gem5 build directories. Note that "make clean" only cleans
|
||||
the Fail* build directory. Furthermore, all remaining CMake remnants
|
||||
FAIL* and gem5 build directories. Note that "make clean" only cleans
|
||||
the FAIL* build directory. Furthermore, all remaining CMake remnants
|
||||
should be deleted:
|
||||
$ find -name CMakeCache.txt | xargs rm
|
||||
2. Rebuild by typing
|
||||
@ -290,7 +290,7 @@ Database backend setup: MySQL / MariaDB
|
||||
Building LLVM from sources
|
||||
=========================================================================================
|
||||
If your Linux distribution does not provide a library package for LLVM 3.3 or
|
||||
newer, and you need LLVM support in Fail*, you may need to build LLVM from the
|
||||
newer, and you need LLVM support in FAIL*, you may need to build LLVM from the
|
||||
sources and install it, e.g., locally in your home.
|
||||
|
||||
1. Download the source tarball of LLVM 3.4 from http://llvm.org (or use the git
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
=========================================================================================
|
||||
Steps to run a boot image in Fail* using the Bochs simulator backend:
|
||||
Steps to run a boot image in FAIL* using the Bochs simulator backend:
|
||||
=========================================================================================
|
||||
Follow the Bochs documentation, and start your own "bochsrc" configuration file
|
||||
based on the "${PREFIX}/share/doc/bochs/bochsrc-sample.txt" template (or
|
||||
@ -15,17 +15,17 @@ based on the "${PREFIX}/share/doc/bochs/bochsrc-sample.txt" template (or
|
||||
- For an X11 GUI:
|
||||
config_interface: textconfig
|
||||
display_library: x
|
||||
- For a wxWidgets GUI (does not play well with Fail*'s "restore" feature):
|
||||
- For a wxWidgets GUI (does not play well with FAIL*'s "restore" feature):
|
||||
config_interface: wx
|
||||
display_library: wx
|
||||
- Reduce the guest system's RAM to a minimum to reduce Fail*'s memory footprint
|
||||
- Reduce the guest system's RAM to a minimum to reduce FAIL*'s memory footprint
|
||||
and save/restore overhead, e.g.:
|
||||
memory: guest=16, host=16
|
||||
- If you want to redirect FailBochs's output to a file using the shell's
|
||||
redirection operator '>', make sure "/dev/stdout" is not used as a target
|
||||
file for logging. (The Debian "bochsrc" template unfortunately does this
|
||||
in two places. It suffices to comment out these entries.)
|
||||
- To make Fail* terminate if something unexpected happens in a larger
|
||||
- To make FAIL* terminate if something unexpected happens in a larger
|
||||
campaign, be sure it doesn't "ask" in these cases, e.g.:
|
||||
panic: action=fatal
|
||||
error: action=fatal
|
||||
@ -63,7 +63,7 @@ An example of a DatabaseCampaign with separate experiment.
|
||||
CONFIG_EVENT_MEMWRITE, CONFIG_EVENT_TRAP, CONFIG_SR_RESTORE and CONFIG_SR_SAVE
|
||||
The options BUILD_BOCHS, BUILD_X86 are needed as well, but are defaults.
|
||||
3. In weather-monitor/experimentInfo.hpp set "PREREQUISITES" to 1 and build
|
||||
Fail*/Bochs using e.g. fail/scripts/rebuild-bochs.sh (-> how-to-build.txt).
|
||||
FAIL*/Bochs using e.g. fail/scripts/rebuild-bochs.sh (-> how-to-build.txt).
|
||||
Upon minor changes (i.e. not e.g. to aspects), append " -" to the call to
|
||||
the script. This will rebuild only parts that changed.
|
||||
4. Enter experiment_targets/weathermonitor and run:
|
||||
@ -76,7 +76,7 @@ An example of a DatabaseCampaign with separate experiment.
|
||||
being VARIANT.trace
|
||||
6. Use "import-trace" (using correct -b & -v, -t is VARIANT.trace) to get the
|
||||
trace into the database and "prune-trace" to (obviously) prune the data.
|
||||
7. Change PREREQUISITES (see 5) back to "0" and rebuild Fail*/Bochs.
|
||||
7. Change PREREQUISITES (see 5) back to "0" and rebuild FAIL*/Bochs.
|
||||
8. Run the "weather-monitor-server" (Don't forget -v & -b!) and "fail-client -q"
|
||||
from within experiment_targets/weathermonitor/.
|
||||
You'll need several clients to finish the campaign.
|
||||
@ -87,7 +87,7 @@ A simple standalone experiment (without a separate campaign). To compile this
|
||||
experiment, the following steps are required:
|
||||
1. Add "hsc-simple" to ccmake's EXPERIMENTS_ACTIVATED.
|
||||
2. Enable CONFIG_EVENT_BREAKPOINTS, CONFIG_SR_RESTORE and CONFIG_SR_SAVE.
|
||||
3. Build Fail* and Bochs, see "how-to-build.txt" for details.
|
||||
3. Build FAIL* and Bochs, see "how-to-build.txt" for details.
|
||||
4. Enter experiment_targets/hscsimple/, bunzip2 -k *.bz2
|
||||
5. Start the Bochs simulator by typing
|
||||
$ fail-client -q
|
||||
@ -130,7 +130,7 @@ fail-client for the next 2k experiments.
|
||||
|
||||
The experiments can be significantly sped up by
|
||||
a) parallelization (run more FailBochs clients and
|
||||
b) a headless (and more optimized) Fail* configuration (see above).
|
||||
b) a headless (and more optimized) FAIL* configuration (see above).
|
||||
|
||||
|
||||
Experiment "MHTestCampaign":
|
||||
@ -211,7 +211,7 @@ To compile this experiment, the following steps are required:
|
||||
CONFIG_EVENT_MEMREAD, CONFIG_EVENT_MEMWRITE, CONFIG_EVENT_TRAP, CONFIG_SR_RESTORE
|
||||
and CONFIG_SR_SAVE.
|
||||
6. Enable STEP1 in fail/src/experiments/weather-monitor/experiment.cc
|
||||
7. Build Fail* and gem5, see "how-to-build.txt" for details.
|
||||
7. Build FAIL* and gem5, see "how-to-build.txt" for details.
|
||||
8. Start the gem5-fail-client by typing
|
||||
"../scripts/run-gem5.sh ../../experiment_targets/weathermonitor_arm/weather.elf
|
||||
weathermonitor_arm/weather.elf"
|
||||
@ -222,7 +222,7 @@ To compile this experiment, the following steps are required:
|
||||
10. Prune the trace with
|
||||
"prune-trace -d YOUR_DB -v baseline -b weather"
|
||||
11. Enable STEP3 in fail/src/experiments/weather-monitor/experiment.cc
|
||||
12. Build Fail* and gem5, see "how-to-build.txt" for details.
|
||||
12. Build FAIL* and gem5, see "how-to-build.txt" for details.
|
||||
13. Start the campaign-server
|
||||
"bin/weather-monitor-server -v baseline -b weather"
|
||||
14. Start the gem5-fail-client by typing
|
||||
@ -231,18 +231,18 @@ To compile this experiment, the following steps are required:
|
||||
=========================================================================================
|
||||
Parallelization
|
||||
=========================================================================================
|
||||
Fail* is designed to allow parallelization of experiment execution allowing to reduce
|
||||
FAIL* is designed to allow parallelization of experiment execution allowing to reduce
|
||||
the time needed to execute the experiments on a (larger) set of experiment data (aka
|
||||
input parameters for the experiment execution, e.g. instruction pointer, registers, bit
|
||||
numbers, ...). We call such "experiment data" the parameter sets. The so called "campaign"
|
||||
is responsible for managing the parameter sets (i.e., the data to be used by the experiment
|
||||
flows), inquired by the clients. As a consequence, the campaign is running on the server-
|
||||
side and the experiment flows are running on the (distributed) clients.
|
||||
First of all, the Fail* instances (and other required files, e.g. saved state) are
|
||||
First of all, the FAIL* instances (and other required files, e.g. saved state) are
|
||||
distributed to the clients. In the second step the campaign(-server) is started, preparing
|
||||
its parameter sets in order to be able to answer the requests from the clients. (Once
|
||||
there are available parameter sets, the clients can request them.) In the final step,
|
||||
the distributed Fail* clients have to be started. As soon as this setup is finished,
|
||||
the distributed FAIL* clients have to be started. As soon as this setup is finished,
|
||||
the clients request new parameter sets, execute their experiment code and return their
|
||||
results to the server (aka campaign) in an iterative way, until all paremeter sets have
|
||||
been processed successfully. If all (new) parameter sets have been distributed, the
|
||||
|
||||
@ -211,7 +211,7 @@ Erledigt:
|
||||
-> benenne Events um ("Listener")
|
||||
-> Erstelle neue Klassenhierarchie, die den "Informationsanteil" der "Events"
|
||||
repräsentiert. Diese kapseln dann die Informationen in den Events und
|
||||
werden zudem intern im Fail*-Framework verwendet (genauer: kommuniziert).
|
||||
werden zudem intern im FAIL*-Framework verwendet (genauer: kommuniziert).
|
||||
|
||||
==========================================================================================
|
||||
Theorie TODO
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
This file documents ideas/wishes especially from a Fail* *user* perspective.
|
||||
This file documents ideas/wishes especially from a FAIL* *user* perspective.
|
||||
|
||||
- Recurring Fail* API usage patterns in experiment/campaign implementations
|
||||
- Recurring FAIL* API usage patterns in experiment/campaign implementations
|
||||
(that could be implemented in a reusable way, e.g. in a library that sits
|
||||
between the Fail* API and the experiment)
|
||||
between the FAIL* API and the experiment)
|
||||
* Fault-space pruning (FIXME elaborate)
|
||||
* Preparation vs. final experiment steps -> cmake-driven, automatically
|
||||
build 2 fail-client binaries? (FIXME elaborate)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# fail-env.sh
|
||||
# default values for several Fail* environment variables
|
||||
# default values for several FAIL* environment variables
|
||||
# If you want to set your own defaults, or need a script to source from, e.g.,
|
||||
# your ~/.bashrc, please copy this file and do not edit it in-place.
|
||||
#
|
||||
@ -17,7 +17,7 @@ export FAIL_DISTRIBUTE_HOSTS=${FAIL_DISTRIBUTE_HOSTS:-"ios kos virtuos plutonium
|
||||
export FAIL_EXPERIMENT_HOSTS=${FAIL_EXPERIMENT_HOSTS:-"bigbox.informatik.uni-erlangen.de plutonium:4 uran:4 virtuos ios:32 kos:16 bohrium:12 polonium:12 radon $(for hostnr in $(seq 100 254); do echo -n fiws$hostnr\ ; done) $(for hostnr in $(seq 39 58); do echo -n cloudhost$hostnr\ ; done)"}
|
||||
|
||||
# A homedir-relative directory on the distribution hosts where all necessary
|
||||
# Fail* ingredients reside (see multiple-clients.sh).
|
||||
# FAIL* ingredients reside (see multiple-clients.sh).
|
||||
export FAIL_EXPERIMENT_TARGETDIR=${FAIL_EXPERIMENT_TARGETDIR:-.fail-experiment}
|
||||
|
||||
# Number of parallel build processes. If unset, #CPUs+1.
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# ab-fail-env.sh (Adrian Böckenkamp)
|
||||
# default values for several Fail* environment variables
|
||||
# default values for several FAIL* environment variables
|
||||
#
|
||||
|
||||
# A whitespace-separated list of hosts to rsync the experiment data to. This
|
||||
@ -15,5 +15,5 @@ export FAIL_DISTRIBUTE_HOSTS=${FAIL_DISTRIBUTE_HOSTS:='kos plutonium'}
|
||||
export FAIL_EXPERIMENT_HOSTS=${FAIL_EXPERIMENT_HOSTS:="plutonium uran kos:6 bohrium polonium radon $(for hostnr in $(seq 100 254); do echo fiws$hostnr; done)"}
|
||||
|
||||
# A homedir-relative directory on the distribution hosts where all necessary
|
||||
# Fail* ingredients reside (see multiple-clients.sh).
|
||||
# FAIL* ingredients reside (see multiple-clients.sh).
|
||||
export FAIL_EXPERIMENT_TARGETDIR=.fail-experiment
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# - needs to be called from within your build directory
|
||||
# - "rebuild-bochs.sh": rebuild all of both Fail* and Bochs
|
||||
# - "rebuild-bochs.sh": rebuild all of both FAIL* and Bochs
|
||||
# (e.g., possibly necessary if you don't understand what was changed by others)
|
||||
# - "rebuild-bochs.sh fail": rebuild all of Fail* and link fail-client
|
||||
# - "rebuild-bochs.sh fail": rebuild all of FAIL* and link fail-client
|
||||
# (e.g., possibly necessary if you changed Fail-affecting aspects or the
|
||||
# build system)
|
||||
# - "rebuild-bochs.sh bochs": rebuild all of Bochs and link fail-client
|
||||
# (e.g., necessary if you changed Bochs-affecting aspects/code that must be
|
||||
# inlined in Bochs)
|
||||
# - "rebuild-bochs.sh -": rebuild only changed parts of Fail* and Bochs
|
||||
# - "rebuild-bochs.sh -": rebuild only changed parts of FAIL* and Bochs
|
||||
# (e.g., sufficient if you only changed experiment code)
|
||||
#
|
||||
set -e
|
||||
|
||||
@ -2,16 +2,16 @@
|
||||
|
||||
if(EXISTS $ENV{T32SYS})
|
||||
SET(T32_SYS $ENV{T32SYS})
|
||||
message(STATUS "[Fail*] T32 base directory: T32SYS=${T32_SYS}")
|
||||
message(STATUS "[FAIL*] T32 base directory: T32SYS=${T32_SYS}")
|
||||
else()
|
||||
SET(T32_SYS "/proj/i4ciao/tools/t32-20130226-qt") ## defaulting to I4 installation
|
||||
#message(FATAL_ERROR "Please set env variable T32SYS to a valid T32 installation base directory.")
|
||||
endif()
|
||||
message(STATUS "[Fail*] T32 base directory: T32SYS=${T32_SYS}")
|
||||
message(STATUS "[FAIL*] T32 base directory: T32SYS=${T32_SYS}")
|
||||
|
||||
if(EXISTS $ENV{FAIL_ELF_PATH})
|
||||
SET(T32_ELF_PATH $ENV{FAIL_ELF_PATH})
|
||||
message(STATUS "[Fail*] T32 ELF under test: ${T32_ELF_PATH}")
|
||||
message(STATUS "[FAIL*] T32 ELF under test: ${T32_ELF_PATH}")
|
||||
else()
|
||||
message(FATAL_ERROR "Please set the FAIL_ELF_PATH enviroment variable to the binary under test.")
|
||||
endif()
|
||||
@ -34,9 +34,9 @@ set(T32_EXE "${T32_SYS}/bin/pc_linux64/" CACHE INTERNAL "") # TODO: set pc_linux
|
||||
add_subdirectory(${T32_ARCHITECTURE})
|
||||
|
||||
|
||||
message(STATUS "[Fail*] T32 Architecture: ${T32_ARCHITECTURE}")
|
||||
message(STATUS "[Fail*] T32 CPU name: ${T32_CPUNAME}")
|
||||
message(STATUS "[Fail*] T32 Executable: ${T32_EXE}")
|
||||
message(STATUS "[FAIL*] T32 Architecture: ${T32_ARCHITECTURE}")
|
||||
message(STATUS "[FAIL*] T32 CPU name: ${T32_CPUNAME}")
|
||||
message(STATUS "[FAIL*] T32 Executable: ${T32_EXE}")
|
||||
|
||||
add_custom_target(runt32
|
||||
COMMAND T32CONFIG=${PROJECT_BINARY_DIR}/cmm/config.t32 T32SYS=${T32_SYS} ${T32_EXE} &
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# --------------------------------------------------------------
|
||||
# This script invokes the gem5 simulator. It is written to be used
|
||||
# with the Fail* framework. For further information, see
|
||||
# with the FAIL* framework. For further information, see
|
||||
# http://www.m5sim.org/Simulation_Scripts_Explained
|
||||
# This script is based on $FAIL/simulators/gem5/configs/example/fs.py
|
||||
#
|
||||
@ -33,7 +33,7 @@ Options.addFSOptions(parser) # TODO: dito
|
||||
if args:
|
||||
print "Error: script doesn't take any positional arguments"
|
||||
sys.exit(1)
|
||||
print "[Fail*] Welcome to the FULL SYSTEM simulation script for gem5!"
|
||||
print "[FAIL*] Welcome to the FULL SYSTEM simulation script for gem5!"
|
||||
|
||||
# Sets up the low-level system parameter:
|
||||
class FailArmSystem(System):
|
||||
@ -130,10 +130,10 @@ test_sys = makeFailArmSystem(test_mem_mode, options.machine_type)
|
||||
# experiment target (e.g., the abo-simple-arm.elf file). It should
|
||||
# contain the bootload code as well.
|
||||
if options.kernel is not None:
|
||||
print "[Fail*] Using target: " + options.kernel
|
||||
print "[FAIL*] Using target: " + options.kernel
|
||||
test_sys.kernel = options.kernel
|
||||
else:
|
||||
print "[Fail*] No kernel target given, exiting!"
|
||||
print "[FAIL*] No kernel target given, exiting!"
|
||||
sys.exit(1)
|
||||
|
||||
test_sys.init_param = options.init_param
|
||||
|
||||
@ -584,7 +584,7 @@ class FloatRegOperand(Operand):
|
||||
return self.buildWriteCode(func)
|
||||
# (DanceOS hack begin...
|
||||
if self.ctype == 'int32_t' or self.ctype == 'int16_t':
|
||||
print "Applying Fail* hack in %s@%s ... :-)" % \
|
||||
print "Applying FAIL* hack in %s@%s ... :-)" % \
|
||||
(__file__, inspect.currentframe().f_lineno)
|
||||
wb = '''
|
||||
{
|
||||
|
||||
@ -15,10 +15,10 @@ SET(PROTOBUF_IMPORT_DIRS "/usr/include;${CMAKE_CURRENT_SOURCE_DIR}/core/comm"
|
||||
# is generated by CMake from config/FailConfig.hpp.in and stored in
|
||||
# your build-dir. (The same goes for "FailControlMessage.pb.h", etc.)
|
||||
# This is done in the "src"-folder because experiments need to include
|
||||
# Fail* headers as well (see hierarchy of CMakeLists.txt's).
|
||||
# FAIL* headers as well (see hierarchy of CMakeLists.txt's).
|
||||
|
||||
## Add CMakeLists from subdirectories ##
|
||||
# The Fail* core source files (and it's subdirectories):
|
||||
# The FAIL* core source files (and it's subdirectories):
|
||||
add_subdirectory(core)
|
||||
|
||||
# Here we add all user-defined experiments (which fills the target list)
|
||||
@ -39,8 +39,8 @@ endforeach(plugin_name)
|
||||
# (probably there's a smarter way to do that with cmake?)
|
||||
add_library(fail dummy.cc)
|
||||
|
||||
## Setup build dependencies of the Fail* lib
|
||||
## -> the Fail* targets and user defined experiment targets
|
||||
## Setup build dependencies of the FAIL* lib
|
||||
## -> the FAIL* targets and user defined experiment targets
|
||||
# start/end-group: ld must iterate over these archives more than once to figure
|
||||
# out which objects are needed
|
||||
set(experiment_libraries "")
|
||||
|
||||
@ -7,7 +7,7 @@ link_directories(${Boost_LIBRARY_DIRS})
|
||||
# The autogenerated header files
|
||||
add_subdirectory(config)
|
||||
|
||||
# Fail* targets
|
||||
# FAIL* targets
|
||||
add_subdirectory(comm)
|
||||
add_subdirectory(cpn)
|
||||
add_subdirectory(efw)
|
||||
|
||||
@ -53,7 +53,7 @@ public:
|
||||
* the subclasses.
|
||||
* @param trigger the triggering address of the breakpoint event
|
||||
* @param address_space the address space identifier for this event
|
||||
* @param cpu the Fail* CPU object that triggered the breakpoint
|
||||
* @param cpu the FAIL* CPU object that triggered the breakpoint
|
||||
*/
|
||||
BPEvent(address_t trigger, address_t address_space, ConcreteCPU* cpu = NULL)
|
||||
: BaseEvent(cpu), m_TriggerInstrPtr(trigger), m_AddressSpace(address_space) { }
|
||||
|
||||
@ -231,7 +231,7 @@ BP_CTOR_SCOPE:
|
||||
*/
|
||||
BPSingleListener(address_t ip = 0, address_t address_space = ANY_ADDR, ConcreteCPU* cpu = NULL)
|
||||
: BPListener(address_space, cpu), m_WatchInstrPtr(ip) { }
|
||||
public: // reset scope in order to allow compiling the various other Fail* sources
|
||||
public: // reset scope in order to allow compiling the various other FAIL* sources
|
||||
/**
|
||||
* Returns the instruction pointer this listener waits for.
|
||||
* @return the instruction pointer specified in the constructor or by
|
||||
|
||||
@ -33,7 +33,7 @@ typedef std::vector<BaseListener*> deletelist_t;
|
||||
/**
|
||||
* \class ListenerManager
|
||||
*
|
||||
* \brief This class manages the listeners of the Fail* implementation.
|
||||
* \brief This class manages the listeners of the FAIL* implementation.
|
||||
*
|
||||
* If a listener is triggered, the internal data structure will be updated (i.e.,
|
||||
* the listener will be removed from the so called buffer-list and added to the
|
||||
|
||||
@ -50,7 +50,7 @@ void SimulatorController::startup()
|
||||
std::cout << "[SimulatorController] Initializing..." << std::endl;
|
||||
// TODO: Log-Level?
|
||||
|
||||
// Set Fail* as initialized
|
||||
// Set FAIL* as initialized
|
||||
m_isInitialized = true;
|
||||
|
||||
// Activate previously added experiments to allow initialization:
|
||||
|
||||
@ -30,10 +30,10 @@ typedef ArmArchitecture Architecture;
|
||||
* simulators/gem5/src/arch/arm/miscregs.hh and
|
||||
* simulators/gem5/src/arch/arm/intregs.hh
|
||||
* which we cannot include because they are generated (probably after we need
|
||||
* them). As integer and "misc" register IDs overlap in gem5, and Fail* needs
|
||||
* them). As integer and "misc" register IDs overlap in gem5, and FAIL* needs
|
||||
* unique IDs, we split at RI_INTREGS_MAX and map to the original IDs in
|
||||
* sal/gem5/Gem5Wrapper.cc . If more ARM backends emerge, we may need to find
|
||||
* more sophisticated backend<->Fail* register ID mappings.
|
||||
* more sophisticated backend<->FAIL* register ID mappings.
|
||||
*/
|
||||
enum GPRegIndex {
|
||||
RI_R0,
|
||||
|
||||
@ -42,7 +42,7 @@ aspect BochsListener {
|
||||
bx_pc_system.register_timer(pev, fail::onTimerTrigger,
|
||||
pev->getTimeout() /*timeout in microseconds*/,
|
||||
false /*non-continuous*/,
|
||||
true /*start immediately*/, "Fail*: BochsController"/*name*/));
|
||||
true /*start immediately*/, "FAIL*: BochsController"/*name*/));
|
||||
}
|
||||
bool m_unregisterTimer(TimerListener* pev)
|
||||
{
|
||||
|
||||
@ -38,7 +38,7 @@ private:
|
||||
return static_cast<timer_id_t>(
|
||||
oocdw_register_timer(pev, fail::onTimerTrigger,
|
||||
pev->getTimeout() /*timeout in microseconds*/,
|
||||
true /*start immediately*/, "Fail*: PandaController"/*name*/));
|
||||
true /*start immediately*/, "FAIL*: PandaController"/*name*/));
|
||||
}
|
||||
bool m_unregisterTimer(TimerListener* pev)
|
||||
{
|
||||
|
||||
@ -12,7 +12,7 @@ namespace fail {
|
||||
*/
|
||||
class BlackholeLogger {
|
||||
public:
|
||||
Logger(const std::string& description = "Fail*", bool show_time = true,
|
||||
Logger(const std::string& description = "FAIL*", bool show_time = true,
|
||||
std::ostream& dest = std::cout) { }
|
||||
void setDescription(const std::string& descr) { }
|
||||
void showTime(bool choice) { }
|
||||
|
||||
@ -66,7 +66,7 @@ find_program(FAIL_OBJDUMP "${THE_OBJDUMP}" DOC "binutils object dump tool")
|
||||
if(${FAIL_OBJDUMP} STREQUAL FAIL_OBJDUMP-NOTFOUND)
|
||||
message(FATAL_ERROR "Cannot find objdump exeuctable (tried: ${THE_OBJDUMP}")
|
||||
else()
|
||||
message(STATUS "[Fail*] objdump binary -> ${FAIL_OBJDUMP}")
|
||||
message(STATUS "[FAIL*] objdump binary -> ${FAIL_OBJDUMP}")
|
||||
endif()
|
||||
mark_as_advanced(FAIL_OBJDUMP)
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ namespace fail {
|
||||
|
||||
const std::string DISASSEMBLER::FAILED = "[Disassembler] Disassemble failed.";
|
||||
|
||||
Disassembler::Disassembler() : m_log("Fail*Disassembler", false) { }
|
||||
Disassembler::Disassembler() : m_log("FAIL*Disassembler", false) { }
|
||||
|
||||
int Disassembler::init() {
|
||||
// try to open elf file from environment variable
|
||||
|
||||
@ -26,7 +26,7 @@ std::ostream& operator<< (std::ostream &out, const ElfSymbol &symbol) {
|
||||
|
||||
|
||||
|
||||
ElfReader::ElfReader() : m_log("Fail*Elfinfo", false) {
|
||||
ElfReader::ElfReader() : m_log("FAIL*Elfinfo", false) {
|
||||
// try to open elf file from environment variable
|
||||
char * elfpath = getenv("FAIL_ELF_PATH");
|
||||
if (elfpath == NULL) {
|
||||
@ -36,7 +36,7 @@ ElfReader::ElfReader() : m_log("Fail*Elfinfo", false) {
|
||||
}
|
||||
}
|
||||
|
||||
ElfReader::ElfReader(const char* path) : m_log("Fail*Elfinfo", false) {
|
||||
ElfReader::ElfReader(const char* path) : m_log("FAIL*Elfinfo", false) {
|
||||
setup(path);
|
||||
}
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ public:
|
||||
* @param show_time Show a timestamp with each log entry.
|
||||
* @param dest Stream to log into.
|
||||
*/
|
||||
Logger(const std::string& description = "Fail*", bool show_time = true,
|
||||
Logger(const std::string& description = "FAIL*", bool show_time = true,
|
||||
std::ostream& dest = std::cout)
|
||||
: m_pDest(&dest), m_description(description), m_showTime(show_time) { }
|
||||
/**
|
||||
|
||||
@ -9,7 +9,7 @@ namespace fail {
|
||||
|
||||
/**
|
||||
* Translates LLVM disassembler ids
|
||||
* to Fail* SAL representations.
|
||||
* to FAIL* SAL representations.
|
||||
*/
|
||||
class LLVMtoFailTranslator {
|
||||
public:
|
||||
@ -51,7 +51,7 @@ public:
|
||||
/**
|
||||
* Translates a backend-specific register ID to a Fail register ID.
|
||||
* @param regid A backend-specific register ID.
|
||||
* @return A Fail* register ID, or LLVMtoFailTranslator::notfound if no
|
||||
* @return A FAIL* register ID, or LLVMtoFailTranslator::notfound if no
|
||||
* mapping was found.
|
||||
*/
|
||||
const reginfo_t & getFailRegisterID(unsigned int regid);
|
||||
|
||||
@ -93,7 +93,7 @@ bool CoolChecksumExperiment::run()
|
||||
#endif
|
||||
|
||||
#elif 1
|
||||
// FIXME consider moving experiment repetition into Fail* or even the
|
||||
// FIXME consider moving experiment repetition into FAIL* or even the
|
||||
// SAL -- whether and how this is possible with the chosen backend is
|
||||
// backend specific
|
||||
for (int i = 0; i < 2000; ++i) {
|
||||
|
||||
@ -152,7 +152,7 @@ private:
|
||||
/**
|
||||
* Adds the value of the config file to the parameter list and
|
||||
* parse the parameter list. This function makes use of the
|
||||
* CommandLine Parser from the fail* framework.
|
||||
* CommandLine Parser from the FAIL* framework.
|
||||
*/
|
||||
void parseOptions(L4SysConfig&);
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ you to read this whole document before investigating further.
|
||||
\section{Overview}
|
||||
|
||||
This is the user manual of the \lfs{} generic system test framework.
|
||||
The framework builds on Fail* and provides means to perform fault injection
|
||||
The framework builds on FAIL* and provides means to perform fault injection
|
||||
experiments for applications running on top of the Fiasco.OC/L4Re
|
||||
microkernel-based operating system as well as the underlying microkernel.
|
||||
|
||||
@ -47,13 +47,13 @@ microkernel-based operating system as well as the underlying microkernel.
|
||||
\noindent \lfs{} currently works for x86/32 running in Fail/Bochs only.
|
||||
This is partly due to some issues with timing --- as soon as a valid model of
|
||||
time in the target emulator as well as an assembler/disassembler functionality
|
||||
in the Fail* framework are established, I would recommend a backend change, as
|
||||
in the FAIL* framework are established, I would recommend a backend change, as
|
||||
Bochs' reliability is very limited.
|
||||
|
||||
\section{Framework Setup}
|
||||
|
||||
To prepare a fault injection campaign you will first need to configure and
|
||||
build Fail* itself. This process is described in \texttt{doc/how-to-build.txt}.
|
||||
build FAIL* itself. This process is described in \texttt{doc/how-to-build.txt}.
|
||||
The following CMake flags need to be set:
|
||||
|
||||
\begin{itemize}[itemsep=0em]
|
||||
@ -94,7 +94,7 @@ in Bochs.
|
||||
|
||||
\section{Client Setup}
|
||||
|
||||
Now that we have Fail* and the L4Re setup running, we can prepare our fault
|
||||
Now that we have FAIL* and the L4Re setup running, we can prepare our fault
|
||||
injection campaign. This requires three (+ one optional) steps:
|
||||
\begin{enumerate}[topsep=0em,itemsep=0em]
|
||||
\item \emph{OPTIONAL:} If we want to perform a campaign that only targets
|
||||
@ -203,7 +203,7 @@ be added to specify the host name or ip addr. of the machine running
|
||||
|
||||
Each experiment client processes exactly one experiment
|
||||
and exits. To complete your campaign, you should use the \verb+client.sh+
|
||||
script in the \texttt{scripts} subdirectory of Fail*.
|
||||
script in the \texttt{scripts} subdirectory of FAIL*.
|
||||
|
||||
|
||||
\section{Get your results}
|
||||
|
||||
@ -126,7 +126,7 @@ bool NanoJPEGCampaign::run()
|
||||
// all IN registers close an equivalence class and generate experiments
|
||||
for (Udis86Helper::UDRegisterSet::const_iterator it = in_regs.begin();
|
||||
it != in_regs.end(); ++it) {
|
||||
// determine Fail* register ID and bitmask
|
||||
// determine FAIL* register ID and bitmask
|
||||
uint64_t access_mask;
|
||||
fail::GPRegisterId reg = udis_helper.udisGPRToFailBochsGPR(*it, access_mask);
|
||||
uint64_t remaining_access_mask = access_mask;
|
||||
@ -168,7 +168,7 @@ bool NanoJPEGCampaign::run()
|
||||
// special case: empty EC!
|
||||
for (Udis86Helper::UDRegisterSet::const_iterator it = out_regs.begin();
|
||||
it != out_regs.end(); ++it) {
|
||||
// determine Fail* register ID and bitmask
|
||||
// determine FAIL* register ID and bitmask
|
||||
uint64_t access_mask;
|
||||
fail::GPRegisterId reg = udis_helper.udisGPRToFailBochsGPR(*it, access_mask);
|
||||
uint64_t remaining_access_mask = access_mask;
|
||||
@ -213,7 +213,7 @@ bool NanoJPEGCampaign::run()
|
||||
// close all open ECs
|
||||
for (map<GPRegisterId, std::list<std::pair<unsigned, uint64_t> > >::iterator it = reg_cascade.begin();
|
||||
it != reg_cascade.end(); ++it) {
|
||||
// determine Fail* register ID and bitmask
|
||||
// determine FAIL* register ID and bitmask
|
||||
uint64_t access_mask = 0xffffffffULL;
|
||||
fail::GPRegisterId reg = it->first;
|
||||
uint64_t remaining_access_mask = access_mask;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
VisualFail*
|
||||
VisualFAIL*
|
||||
===========
|
||||
|
||||
Guest-system setup
|
||||
------------------
|
||||
For analysis with VisualFail*, the guest-system ELF binary must be compiled with
|
||||
For analysis with VisualFAIL*, the guest-system ELF binary must be compiled with
|
||||
debugging information (gcc/g++/clang/clang++ compiler flag "-g"). Note that
|
||||
debugging information quality/accuracy usually decreases with higher
|
||||
optimization levels.
|
||||
@ -16,7 +16,7 @@ Database preparation
|
||||
|
||||
Step 1 is the prerequisite to run the fault-injection campaign (you may use
|
||||
other importers as well, e.g., the RegisterImporter). Steps 2 and 3 are
|
||||
required for VisualFail* to work.
|
||||
required for VisualFAIL* to work.
|
||||
|
||||
Setup
|
||||
-----
|
||||
@ -25,20 +25,20 @@ database credentials and the result-table name (usually starting with
|
||||
"result...", "echo SHOW TABLES | mysql yourdatabase" on the command line should
|
||||
give you the correct table name).
|
||||
|
||||
(In a later version of VisualFail*, we will probably add automatic loading of
|
||||
(In a later version of VisualFAIL*, we will probably add automatic loading of
|
||||
~/.my.cnf if available.)
|
||||
|
||||
Running and using VisualFail*
|
||||
Running and using VisualFAIL*
|
||||
-----------------------------
|
||||
./StartVF.sh requires PHP 5.4.0 or newer and uses its simple built-in web
|
||||
server. You can connect to it by using http://localhost:1234 in a web browser
|
||||
on the same machine. (If you need to connect from another machine, manually run
|
||||
"php -S 0.0.0.0:1234 -t .")
|
||||
|
||||
Alternatively, VisualFail* can be set up using a "real" web server with a recent
|
||||
Alternatively, VisualFAIL* can be set up using a "real" web server with a recent
|
||||
PHP version (5.x should suffice).
|
||||
|
||||
Once the web server runs, you can use VisualFail*:
|
||||
Once the web server runs, you can use VisualFAIL*:
|
||||
|
||||
- Pick a coloring (currently, only "Right margin" really makes sense), a
|
||||
benchmark and a variant from the drop-down menus. Click "Analyze". Wait.
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
</button>
|
||||
<!--<div class="container"> -->
|
||||
<!--<a class="navbar-brand" href="#">Visual FAIL*</a>-->
|
||||
<img class="navbar-brand logo" src="images/logos/visualfaillogo_klein.png" alt="Visual Fail* logo" />
|
||||
<img class="navbar-brand logo" src="images/logos/visualfaillogo_klein.png" alt="Visual FAIL* logo" />
|
||||
<!--</div>-->
|
||||
</div>
|
||||
<div class="container">
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
Fail* Result Browser
|
||||
FAIL* Result Browser
|
||||
|
||||
Requirements:
|
||||
* Python
|
||||
@ -9,7 +9,7 @@ Requirements:
|
||||
Based on Flask web microframework (Werkzeug, Jinja 2)
|
||||
and old school MySQL bindings.
|
||||
|
||||
Connects to a Fail* result database given by a mysql config file.
|
||||
Connects to a FAIL* result database given by a mysql config file.
|
||||
|
||||
Usage:
|
||||
./run.py
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Fail* Results</title>
|
||||
<title>FAIL* Results</title>
|
||||
<strong><link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}"></strong>
|
||||
<strong><link rel="stylesheet" href="{{ url_for('static', filename='css/barchart.css') }}"></strong>
|
||||
</head>
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
<header>
|
||||
<div class="container">
|
||||
<h1 class="logo">Fail*</h1>
|
||||
<h1 class="logo">FAIL*</h1>
|
||||
<strong><nav>
|
||||
<ul class="menu">
|
||||
<li><a href="{{ url_for('index') }}">Home</a></li>
|
||||
@ -26,7 +26,7 @@
|
||||
|
||||
<hr>
|
||||
<div id="footer">
|
||||
© Fail* - Fault Injection Leveraged
|
||||
© FAIL* - Fault Injection Leveraged
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -24,7 +24,7 @@ fi
|
||||
echo "importing $VARIANT/$BENCHMARK symbols from $ELF ..."
|
||||
|
||||
|
||||
# get fail*'s variant_id
|
||||
# get FAIL*'s variant_id
|
||||
ID=$(echo "SELECT id FROM variant WHERE variant='$VARIANT' AND benchmark='$BENCHMARK'" | $MYSQL -N)
|
||||
if [ -z $ID ]; then
|
||||
echo "no such variant/benchmark!" >&2
|
||||
|
||||
Reference in New Issue
Block a user