globally rename Fail* to FAIL*

Change-Id: Ief2cb687cc69dd92c2e04f9314f0f1347e0a84ed
This commit is contained in:
Horst Schirmeier
2016-03-15 23:38:49 +01:00
parent 94a56c43c8
commit d3d2faf680
43 changed files with 120 additions and 121 deletions

View File

@ -11,9 +11,9 @@ if(NOT ("${CMAKE_VERSION}" VERSION_LESS 3.0)) # >= 3.0?
endif() endif()
ENABLE_TESTING() 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 #### #### Put all resulting library files in <your_build_dir>/lib ####
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_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) OPTION( BUILD_ARM "Build for ARM guests?" OFF)
# FIXME: only add simulators/ to include_directories, and include, e.g., # 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) # vs. qemu/elf.h)
if(BUILD_BOCHS) if(BUILD_BOCHS)
## add necessary additional header search paths. ## add necessary additional header search paths.
@ -68,7 +68,7 @@ elseif(BUILD_PANDA)
include_directories(debuggers/openocd/src debuggers/openocd/jimtcl src/core) include_directories(debuggers/openocd/src debuggers/openocd/jimtcl src/core)
endif(BUILD_BOCHS) 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}") link_directories("${LIBRARY_OUTPUT_PATH}")
# Add "simulators"-directory to the include path. This allows # Add "simulators"-directory to the include path. This allows

View File

@ -111,7 +111,7 @@ docker instance.
Mailing list 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 contacted on the
[fail@lists.cs.tu-dortmund.de](mailto:fail@lists.cs.tu-dortmund.de) [fail@lists.cs.tu-dortmund.de](mailto:fail@lists.cs.tu-dortmund.de)
mailing list mailing list

View File

@ -3,7 +3,7 @@ find_program(LLVMCONFIG NAMES llvm-config-3.4 llvm-config-3.3 llvm-config-3.2 ll
if( NOT LLVMCONFIG ) if( NOT LLVMCONFIG )
message(FATAL_ERROR "llvm-config not found, try installing llvm-dev llvm") message(FATAL_ERROR "llvm-config not found, try installing llvm-dev llvm")
else() else()
message(STATUS "[Fail*] LLVM Disassembler: Found llvm-config @ ${LLVMCONFIG}") message(STATUS "[FAIL*] LLVM Disassembler: Found llvm-config @ ${LLVMCONFIG}")
endif() endif()
# examine LLVM include directory # examine LLVM include directory

View File

@ -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") set(FAIL_DOC_EXCLUDE_PATTERNS "*/util/pstream.h */util/optionparser/optionparser.h")
file(MAKE_DIRECTORY ${FAIL_DOC_OUTPUT}) file(MAKE_DIRECTORY ${FAIL_DOC_OUTPUT})
# FIXME: The find command does not quote the paths to be processed by doxygen. That # 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 configure_file(${PROJECT_SOURCE_DIR}/cmake/Doxyfile.in
${PROJECT_BINARY_DIR}/Doxyfile @ONLY} ${PROJECT_BINARY_DIR}/Doxyfile @ONLY}
) )
## call make doc to generate documentation ## 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(line1 " Directories: ${FAIL_DOC_SOURCE}")
set(line2 " Excluded patterns: ${FAIL_DOC_EXCLUDE_PATTERNS}") set(line2 " Excluded patterns: ${FAIL_DOC_EXCLUDE_PATTERNS}")
add_custom_target(doc add_custom_target(doc

View File

@ -85,7 +85,7 @@ if(BUILD_GEM5)
# Cleans up everything (gem5 and Fail related): # Cleans up everything (gem5 and Fail related):
add_custom_target(gem5-allclean 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 "${PROJECT_BINARY_DIR}/" && make clean
COMMAND cd "${gem5_src_dir}/" && scons -c build/ARM COMMAND cd "${gem5_src_dir}/" && scons -c build/ARM
COMMAND cd "${gem5_src_dir}/" && rm -rf build/ COMMAND cd "${gem5_src_dir}/" && rm -rf build/

View File

@ -45,7 +45,7 @@ if(BUILD_PANDA)
# ensure, elf path is set for enabling openocd to read elf symbols # ensure, elf path is set for enabling openocd to read elf symbols
if(EXISTS $ENV{FAIL_ELF_PATH}) 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() else()
message(FATAL_ERROR "Please set the FAIL_ELF_PATH environment variable to the binary under test.") message(FATAL_ERROR "Please set the FAIL_ELF_PATH environment variable to the binary under test.")
endif() endif()

View File

@ -326,7 +326,7 @@ int main(int argc, char *argv[])
init_symbols(); 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 === */ /* === INITIALIZATION COMPLETE => MAIN LOOP === */

View File

@ -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 You may violate/break any of the following rules if you have a good reason to

View File

@ -4,21 +4,20 @@ Directory structure:
The folders are nested as follow: 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, ...) |-cmake: CMake-related configuration files (e.g. compiler-flags, dependencies, ...)
|-doc: Fail*-Framework documentation (e.g., diagrams, howtos, ...) |-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
|-scripts: python/shell scripts for Fail*-compilation and experiment distribution |-simulators: parent directory of simulators supported by FAIL* (may still be WIP)
|-simulators: parent directory of simulators supported by Fail* (may still be WIP)
|-bochs: source files of the (modified) Bochs x86 simulator backend |-bochs: source files of the (modified) Bochs x86 simulator backend
|-gem5: source files of the gem5 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 |-gdb: source files related to the GNU gdb debugger
|-t32: source files related to the Lauterbach T32 debugger |-t32: source files related to the Lauterbach T32 debugger
|-src: C/C++/AspectC++ source files related to Fail*, experiments and plugins |-src: C/C++/AspectC++ source files related to FAIL*, experiments and plugins
|-core: core source files forming the Fail* framework |-core: core source files forming the FAIL* framework
|-util: utility classes and miscellaneous helper functions |-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) |-sal: source file forming the Simulator Abstraction Layer (backend-interface)
|-bochs: backend source files of the Bochs simulator |-bochs: backend source files of the Bochs simulator
|-gem5: backend source files of the gem5 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 |-arm: ARM-specific platform source files
|-x86: x86-specific platform source files |-x86: x86-specific platform source files
|-perf: performance-related source files (extensions); speeds up |-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 |-cpn: campaign- (and therefore server-)related source files
|-efw: experiment-framework- (and therefore client-)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. |-comm: communication related source files (these files are used by cpn and efw), incl.
protobuf message definitions used for communication purposes protobuf message definitions used for communication purposes
|-experiments: experiment code files (within a new dir) need to be located here |-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 |-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 |-[build]: recommended location of your build-tree, generated files will be placed here

View File

@ -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 - libmysqlclient-dev or libmariadbclient-dev
- libprotobuf-dev - libprotobuf-dev
@ -79,10 +79,10 @@ For distribution/parallelization:
it exists. it exists.
========================================================================================= =========================================================================================
Compiling, building and modifying: Simulators and Fail* Compiling, building and modifying: Simulators and FAIL*
========================================================================================= =========================================================================================
Building Fail*: Building FAIL*:
********************************************************************** **********************************************************************
For the first time: For the first time:
@ -101,7 +101,7 @@ For the first time:
$ ccmake . $ ccmake .
Select "BUILD_BOCHS" or "BUILD_GEM5". Select an experiment to enable by Select "BUILD_BOCHS" or "BUILD_GEM5". Select an experiment to enable by
naming its "experiments/" subdirectory under "EXPERIMENTS_ACTIVATED". 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. "CONFIG_*" options. Press 'c', 'g' to regenerate the build system.
(Alternatively use (Alternatively use
$ cmake-gui . $ cmake-gui .
@ -111,18 +111,18 @@ For the first time:
for your need. for your need.
After changes to Fail* code: After changes to FAIL* code:
------------------------------------------------------------ ------------------------------------------------------------
Compile (in ${BUILD_DIR}, optionally "add -jN" for parallel building): Compile (in ${BUILD_DIR}, optionally "add -jN" for parallel building):
$ make $ 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 library to a binary called "fail-client". You may use the shell script
$ ${FAIL_DIR}/scripts/rebuild-bochs.sh [-] $ ${FAIL_DIR}/scripts/rebuild-bochs.sh [-]
to speed up repetitive tasks regarding Fail/Bochs builds. This script contains to speed up repetitive tasks regarding Fail/Bochs builds. This script contains
a concise documentation on itself. 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 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 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). above).
Generating the Doxygen documentation for Fail*: Generating the Doxygen documentation for FAIL*:
********************************************************************** **********************************************************************
To generate the Doxygen documentation, type: To generate the Doxygen documentation, type:
$ make doc $ make doc
@ -151,7 +151,7 @@ to be compiled previously:
FailBochs: Bochs configuration features 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) The configuration flags can be set within the ccmake configuration (ccmake ${FAIL_DIR}/build)
- Sufficient: - Sufficient:
--enable-cpu-level=6;--enable-ne2000;--enable-trace-cache;--enable-gdb-stub;--disable-docbook;--with-nogui --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 The --with-nogui flag suffices for for "headless" experiments, with the
advantage of removing lots of library dependencies (thus reducing startup advantage of removing lots of library dependencies (thus reducing startup
overhead). --with-x11 enables only the "x" (X11), --with-wx only the "wx" 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 "restore" feature (FailBochs will fall back to "x" if available, or die
trying.) trying.)
Once you know everything works as it should, you may want to add the 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}): Configure Bochs to use debugging-related compiler flags (expects to be in ${BUILD_DIR}):
$ cd ../simulator/bochs $ cd ../simulator/bochs
$ CFLAGS="-g -O0" CXXFLAGS="-g -O0" ./configure --prefix=... ... (see above) $ 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). setting CMAKE_BUILD_TYPE to "Debug" (ccmake, see above).
FIXME: Does this still work? FIXME: Does this still work?
@ -220,7 +220,7 @@ Building gem5:
For the first time (incl. selecting an experiment): 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. create a new build directory.
$ cd ${FAIL_DIR}; mkdir build; cd build $ cd ${FAIL_DIR}; mkdir build; cd build
3. Start the configuration by typing 3. Start the configuration by typing
@ -233,7 +233,7 @@ For the first time (incl. selecting an experiment):
BUILD_BOCHS and BUILD_X86. BUILD_BOCHS and BUILD_X86.
5. Typing 5. Typing
$ make (or nice make -jN) $ 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 builds the debug variant for ARM targets. (Note that this build will
automatically include the ${FAIL_DIR}/src/core/sal/gem5 as an automatically include the ${FAIL_DIR}/src/core/sal/gem5 as an
"EXTRAS" feature, see gem5/scons build system documentation for "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 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. 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 1. Clean the current build by typing
$ make gem5-allclean $ make gem5-allclean
(in your build dir ${FAIL_DIR}/build). This cleans the current (in your build dir ${FAIL_DIR}/build). This cleans the current
Fail* and gem5 build directories. Note that "make clean" only cleans FAIL* and gem5 build directories. Note that "make clean" only cleans
the Fail* build directory. Furthermore, all remaining CMake remnants the FAIL* build directory. Furthermore, all remaining CMake remnants
should be deleted: should be deleted:
$ find -name CMakeCache.txt | xargs rm $ find -name CMakeCache.txt | xargs rm
2. Rebuild by typing 2. Rebuild by typing
@ -290,7 +290,7 @@ Database backend setup: MySQL / MariaDB
Building LLVM from sources Building LLVM from sources
========================================================================================= =========================================================================================
If your Linux distribution does not provide a library package for LLVM 3.3 or 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. 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. Download the source tarball of LLVM 3.4 from http://llvm.org (or use the git

View File

@ -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 Follow the Bochs documentation, and start your own "bochsrc" configuration file
based on the "${PREFIX}/share/doc/bochs/bochsrc-sample.txt" template (or 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: - For an X11 GUI:
config_interface: textconfig config_interface: textconfig
display_library: x 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 config_interface: wx
display_library: 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.: and save/restore overhead, e.g.:
memory: guest=16, host=16 memory: guest=16, host=16
- If you want to redirect FailBochs's output to a file using the shell's - 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 redirection operator '>', make sure "/dev/stdout" is not used as a target
file for logging. (The Debian "bochsrc" template unfortunately does this file for logging. (The Debian "bochsrc" template unfortunately does this
in two places. It suffices to comment out these entries.) 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.: campaign, be sure it doesn't "ask" in these cases, e.g.:
panic: action=fatal panic: action=fatal
error: 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 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. 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 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 Upon minor changes (i.e. not e.g. to aspects), append " -" to the call to
the script. This will rebuild only parts that changed. the script. This will rebuild only parts that changed.
4. Enter experiment_targets/weathermonitor and run: 4. Enter experiment_targets/weathermonitor and run:
@ -76,7 +76,7 @@ An example of a DatabaseCampaign with separate experiment.
being VARIANT.trace being VARIANT.trace
6. Use "import-trace" (using correct -b & -v, -t is VARIANT.trace) to get the 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. 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" 8. Run the "weather-monitor-server" (Don't forget -v & -b!) and "fail-client -q"
from within experiment_targets/weathermonitor/. from within experiment_targets/weathermonitor/.
You'll need several clients to finish the campaign. 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: experiment, the following steps are required:
1. Add "hsc-simple" to ccmake's EXPERIMENTS_ACTIVATED. 1. Add "hsc-simple" to ccmake's EXPERIMENTS_ACTIVATED.
2. Enable CONFIG_EVENT_BREAKPOINTS, CONFIG_SR_RESTORE and CONFIG_SR_SAVE. 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 4. Enter experiment_targets/hscsimple/, bunzip2 -k *.bz2
5. Start the Bochs simulator by typing 5. Start the Bochs simulator by typing
$ fail-client -q $ fail-client -q
@ -130,7 +130,7 @@ fail-client for the next 2k experiments.
The experiments can be significantly sped up by The experiments can be significantly sped up by
a) parallelization (run more FailBochs clients and 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": 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 CONFIG_EVENT_MEMREAD, CONFIG_EVENT_MEMWRITE, CONFIG_EVENT_TRAP, CONFIG_SR_RESTORE
and CONFIG_SR_SAVE. and CONFIG_SR_SAVE.
6. Enable STEP1 in fail/src/experiments/weather-monitor/experiment.cc 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 8. Start the gem5-fail-client by typing
"../scripts/run-gem5.sh ../../experiment_targets/weathermonitor_arm/weather.elf "../scripts/run-gem5.sh ../../experiment_targets/weathermonitor_arm/weather.elf
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 10. Prune the trace with
"prune-trace -d YOUR_DB -v baseline -b weather" "prune-trace -d YOUR_DB -v baseline -b weather"
11. Enable STEP3 in fail/src/experiments/weather-monitor/experiment.cc 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 13. Start the campaign-server
"bin/weather-monitor-server -v baseline -b weather" "bin/weather-monitor-server -v baseline -b weather"
14. Start the gem5-fail-client by typing 14. Start the gem5-fail-client by typing
@ -231,18 +231,18 @@ To compile this experiment, the following steps are required:
========================================================================================= =========================================================================================
Parallelization 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 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 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" 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 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- 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. 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 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 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, 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 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 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 been processed successfully. If all (new) parameter sets have been distributed, the

View File

@ -211,7 +211,7 @@ Erledigt:
-> benenne Events um ("Listener") -> benenne Events um ("Listener")
-> Erstelle neue Klassenhierarchie, die den "Informationsanteil" der "Events" -> Erstelle neue Klassenhierarchie, die den "Informationsanteil" der "Events"
repräsentiert. Diese kapseln dann die Informationen in den Events und 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 Theorie TODO

View File

@ -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 (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) * Fault-space pruning (FIXME elaborate)
* Preparation vs. final experiment steps -> cmake-driven, automatically * Preparation vs. final experiment steps -> cmake-driven, automatically
build 2 fail-client binaries? (FIXME elaborate) build 2 fail-client binaries? (FIXME elaborate)

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# #
# fail-env.sh # 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., # 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. # 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)"} 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 # 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} export FAIL_EXPERIMENT_TARGETDIR=${FAIL_EXPERIMENT_TARGETDIR:-.fail-experiment}
# Number of parallel build processes. If unset, #CPUs+1. # Number of parallel build processes. If unset, #CPUs+1.

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# #
# ab-fail-env.sh (Adrian Böckenkamp) # 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 # 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)"} 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 # 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 export FAIL_EXPERIMENT_TARGETDIR=.fail-experiment

View File

@ -1,15 +1,15 @@
#!/bin/bash #!/bin/bash
# #
# - needs to be called from within your build directory # - 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) # (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 # (e.g., possibly necessary if you changed Fail-affecting aspects or the
# build system) # build system)
# - "rebuild-bochs.sh bochs": rebuild all of Bochs and link fail-client # - "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 # (e.g., necessary if you changed Bochs-affecting aspects/code that must be
# inlined in Bochs) # 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) # (e.g., sufficient if you only changed experiment code)
# #
set -e set -e

View File

@ -2,16 +2,16 @@
if(EXISTS $ENV{T32SYS}) if(EXISTS $ENV{T32SYS})
SET(T32_SYS $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() else()
SET(T32_SYS "/proj/i4ciao/tools/t32-20130226-qt") ## defaulting to I4 installation 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.") #message(FATAL_ERROR "Please set env variable T32SYS to a valid T32 installation base directory.")
endif() 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}) if(EXISTS $ENV{FAIL_ELF_PATH})
SET(T32_ELF_PATH $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() else()
message(FATAL_ERROR "Please set the FAIL_ELF_PATH enviroment variable to the binary under test.") message(FATAL_ERROR "Please set the FAIL_ELF_PATH enviroment variable to the binary under test.")
endif() endif()
@ -34,9 +34,9 @@ set(T32_EXE "${T32_SYS}/bin/pc_linux64/" CACHE INTERNAL "") # TODO: set pc_linux
add_subdirectory(${T32_ARCHITECTURE}) add_subdirectory(${T32_ARCHITECTURE})
message(STATUS "[Fail*] T32 Architecture: ${T32_ARCHITECTURE}") message(STATUS "[FAIL*] T32 Architecture: ${T32_ARCHITECTURE}")
message(STATUS "[Fail*] T32 CPU name: ${T32_CPUNAME}") message(STATUS "[FAIL*] T32 CPU name: ${T32_CPUNAME}")
message(STATUS "[Fail*] T32 Executable: ${T32_EXE}") message(STATUS "[FAIL*] T32 Executable: ${T32_EXE}")
add_custom_target(runt32 add_custom_target(runt32
COMMAND T32CONFIG=${PROJECT_BINARY_DIR}/cmm/config.t32 T32SYS=${T32_SYS} ${T32_EXE} & COMMAND T32CONFIG=${PROJECT_BINARY_DIR}/cmm/config.t32 T32SYS=${T32_SYS} ${T32_EXE} &

View File

@ -1,6 +1,6 @@
# -------------------------------------------------------------- # --------------------------------------------------------------
# This script invokes the gem5 simulator. It is written to be used # 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 # http://www.m5sim.org/Simulation_Scripts_Explained
# This script is based on $FAIL/simulators/gem5/configs/example/fs.py # This script is based on $FAIL/simulators/gem5/configs/example/fs.py
# #
@ -33,7 +33,7 @@ Options.addFSOptions(parser) # TODO: dito
if args: if args:
print "Error: script doesn't take any positional arguments" print "Error: script doesn't take any positional arguments"
sys.exit(1) 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: # Sets up the low-level system parameter:
class FailArmSystem(System): 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 # experiment target (e.g., the abo-simple-arm.elf file). It should
# contain the bootload code as well. # contain the bootload code as well.
if options.kernel is not None: if options.kernel is not None:
print "[Fail*] Using target: " + options.kernel print "[FAIL*] Using target: " + options.kernel
test_sys.kernel = options.kernel test_sys.kernel = options.kernel
else: else:
print "[Fail*] No kernel target given, exiting!" print "[FAIL*] No kernel target given, exiting!"
sys.exit(1) sys.exit(1)
test_sys.init_param = options.init_param test_sys.init_param = options.init_param

View File

@ -584,7 +584,7 @@ class FloatRegOperand(Operand):
return self.buildWriteCode(func) return self.buildWriteCode(func)
# (DanceOS hack begin... # (DanceOS hack begin...
if self.ctype == 'int32_t' or self.ctype == 'int16_t': 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) (__file__, inspect.currentframe().f_lineno)
wb = ''' wb = '''
{ {

View File

@ -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 # is generated by CMake from config/FailConfig.hpp.in and stored in
# your build-dir. (The same goes for "FailControlMessage.pb.h", etc.) # your build-dir. (The same goes for "FailControlMessage.pb.h", etc.)
# This is done in the "src"-folder because experiments need to include # 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 ## ## 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) add_subdirectory(core)
# Here we add all user-defined experiments (which fills the target list) # 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?) # (probably there's a smarter way to do that with cmake?)
add_library(fail dummy.cc) add_library(fail dummy.cc)
## Setup build dependencies of the Fail* lib ## Setup build dependencies of the FAIL* lib
## -> the Fail* targets and user defined experiment targets ## -> the FAIL* targets and user defined experiment targets
# start/end-group: ld must iterate over these archives more than once to figure # start/end-group: ld must iterate over these archives more than once to figure
# out which objects are needed # out which objects are needed
set(experiment_libraries "") set(experiment_libraries "")

View File

@ -7,7 +7,7 @@ link_directories(${Boost_LIBRARY_DIRS})
# The autogenerated header files # The autogenerated header files
add_subdirectory(config) add_subdirectory(config)
# Fail* targets # FAIL* targets
add_subdirectory(comm) add_subdirectory(comm)
add_subdirectory(cpn) add_subdirectory(cpn)
add_subdirectory(efw) add_subdirectory(efw)

View File

@ -53,7 +53,7 @@ public:
* the subclasses. * the subclasses.
* @param trigger the triggering address of the breakpoint event * @param trigger the triggering address of the breakpoint event
* @param address_space the address space identifier for this 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) BPEvent(address_t trigger, address_t address_space, ConcreteCPU* cpu = NULL)
: BaseEvent(cpu), m_TriggerInstrPtr(trigger), m_AddressSpace(address_space) { } : BaseEvent(cpu), m_TriggerInstrPtr(trigger), m_AddressSpace(address_space) { }

View File

@ -231,7 +231,7 @@ BP_CTOR_SCOPE:
*/ */
BPSingleListener(address_t ip = 0, address_t address_space = ANY_ADDR, ConcreteCPU* cpu = NULL) BPSingleListener(address_t ip = 0, address_t address_space = ANY_ADDR, ConcreteCPU* cpu = NULL)
: BPListener(address_space, cpu), m_WatchInstrPtr(ip) { } : 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. * Returns the instruction pointer this listener waits for.
* @return the instruction pointer specified in the constructor or by * @return the instruction pointer specified in the constructor or by

View File

@ -33,7 +33,7 @@ typedef std::vector<BaseListener*> deletelist_t;
/** /**
* \class ListenerManager * \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., * 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 * the listener will be removed from the so called buffer-list and added to the

View File

@ -50,7 +50,7 @@ void SimulatorController::startup()
std::cout << "[SimulatorController] Initializing..." << std::endl; std::cout << "[SimulatorController] Initializing..." << std::endl;
// TODO: Log-Level? // TODO: Log-Level?
// Set Fail* as initialized // Set FAIL* as initialized
m_isInitialized = true; m_isInitialized = true;
// Activate previously added experiments to allow initialization: // Activate previously added experiments to allow initialization:

View File

@ -30,10 +30,10 @@ typedef ArmArchitecture Architecture;
* simulators/gem5/src/arch/arm/miscregs.hh and * simulators/gem5/src/arch/arm/miscregs.hh and
* simulators/gem5/src/arch/arm/intregs.hh * simulators/gem5/src/arch/arm/intregs.hh
* which we cannot include because they are generated (probably after we need * 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 * 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 * 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 { enum GPRegIndex {
RI_R0, RI_R0,

View File

@ -42,7 +42,7 @@ aspect BochsListener {
bx_pc_system.register_timer(pev, fail::onTimerTrigger, bx_pc_system.register_timer(pev, fail::onTimerTrigger,
pev->getTimeout() /*timeout in microseconds*/, pev->getTimeout() /*timeout in microseconds*/,
false /*non-continuous*/, false /*non-continuous*/,
true /*start immediately*/, "Fail*: BochsController"/*name*/)); true /*start immediately*/, "FAIL*: BochsController"/*name*/));
} }
bool m_unregisterTimer(TimerListener* pev) bool m_unregisterTimer(TimerListener* pev)
{ {

View File

@ -38,7 +38,7 @@ private:
return static_cast<timer_id_t>( return static_cast<timer_id_t>(
oocdw_register_timer(pev, fail::onTimerTrigger, oocdw_register_timer(pev, fail::onTimerTrigger,
pev->getTimeout() /*timeout in microseconds*/, pev->getTimeout() /*timeout in microseconds*/,
true /*start immediately*/, "Fail*: PandaController"/*name*/)); true /*start immediately*/, "FAIL*: PandaController"/*name*/));
} }
bool m_unregisterTimer(TimerListener* pev) bool m_unregisterTimer(TimerListener* pev)
{ {

View File

@ -12,7 +12,7 @@ namespace fail {
*/ */
class BlackholeLogger { class BlackholeLogger {
public: 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) { } std::ostream& dest = std::cout) { }
void setDescription(const std::string& descr) { } void setDescription(const std::string& descr) { }
void showTime(bool choice) { } void showTime(bool choice) { }

View File

@ -66,7 +66,7 @@ find_program(FAIL_OBJDUMP "${THE_OBJDUMP}" DOC "binutils object dump tool")
if(${FAIL_OBJDUMP} STREQUAL FAIL_OBJDUMP-NOTFOUND) if(${FAIL_OBJDUMP} STREQUAL FAIL_OBJDUMP-NOTFOUND)
message(FATAL_ERROR "Cannot find objdump exeuctable (tried: ${THE_OBJDUMP}") message(FATAL_ERROR "Cannot find objdump exeuctable (tried: ${THE_OBJDUMP}")
else() else()
message(STATUS "[Fail*] objdump binary -> ${FAIL_OBJDUMP}") message(STATUS "[FAIL*] objdump binary -> ${FAIL_OBJDUMP}")
endif() endif()
mark_as_advanced(FAIL_OBJDUMP) mark_as_advanced(FAIL_OBJDUMP)

View File

@ -15,7 +15,7 @@ namespace fail {
const std::string DISASSEMBLER::FAILED = "[Disassembler] Disassemble failed."; 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() { int Disassembler::init() {
// try to open elf file from environment variable // try to open elf file from environment variable

View File

@ -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 // try to open elf file from environment variable
char * elfpath = getenv("FAIL_ELF_PATH"); char * elfpath = getenv("FAIL_ELF_PATH");
if (elfpath == NULL) { 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); setup(path);
} }

View File

@ -24,7 +24,7 @@ public:
* @param show_time Show a timestamp with each log entry. * @param show_time Show a timestamp with each log entry.
* @param dest Stream to log into. * @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) std::ostream& dest = std::cout)
: m_pDest(&dest), m_description(description), m_showTime(show_time) { } : m_pDest(&dest), m_description(description), m_showTime(show_time) { }
/** /**

View File

@ -9,7 +9,7 @@ namespace fail {
/** /**
* Translates LLVM disassembler ids * Translates LLVM disassembler ids
* to Fail* SAL representations. * to FAIL* SAL representations.
*/ */
class LLVMtoFailTranslator { class LLVMtoFailTranslator {
public: public:
@ -51,7 +51,7 @@ public:
/** /**
* Translates a backend-specific register ID to a Fail register ID. * Translates a backend-specific register ID to a Fail register ID.
* @param regid A backend-specific 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. * mapping was found.
*/ */
const reginfo_t & getFailRegisterID(unsigned int regid); const reginfo_t & getFailRegisterID(unsigned int regid);

View File

@ -93,7 +93,7 @@ bool CoolChecksumExperiment::run()
#endif #endif
#elif 1 #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 // SAL -- whether and how this is possible with the chosen backend is
// backend specific // backend specific
for (int i = 0; i < 2000; ++i) { for (int i = 0; i < 2000; ++i) {

View File

@ -152,7 +152,7 @@ private:
/** /**
* Adds the value of the config file to the parameter list and * Adds the value of the config file to the parameter list and
* parse the parameter list. This function makes use of the * 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&); void parseOptions(L4SysConfig&);

View File

@ -34,7 +34,7 @@ you to read this whole document before investigating further.
\section{Overview} \section{Overview}
This is the user manual of the \lfs{} generic system test framework. 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 experiments for applications running on top of the Fiasco.OC/L4Re
microkernel-based operating system as well as the underlying microkernel. 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. \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 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 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. Bochs' reliability is very limited.
\section{Framework Setup} \section{Framework Setup}
To prepare a fault injection campaign you will first need to configure and 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: The following CMake flags need to be set:
\begin{itemize}[itemsep=0em] \begin{itemize}[itemsep=0em]
@ -94,7 +94,7 @@ in Bochs.
\section{Client Setup} \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: injection campaign. This requires three (+ one optional) steps:
\begin{enumerate}[topsep=0em,itemsep=0em] \begin{enumerate}[topsep=0em,itemsep=0em]
\item \emph{OPTIONAL:} If we want to perform a campaign that only targets \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 Each experiment client processes exactly one experiment
and exits. To complete your campaign, you should use the \verb+client.sh+ 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} \section{Get your results}

View File

@ -126,7 +126,7 @@ bool NanoJPEGCampaign::run()
// all IN registers close an equivalence class and generate experiments // all IN registers close an equivalence class and generate experiments
for (Udis86Helper::UDRegisterSet::const_iterator it = in_regs.begin(); for (Udis86Helper::UDRegisterSet::const_iterator it = in_regs.begin();
it != in_regs.end(); ++it) { it != in_regs.end(); ++it) {
// determine Fail* register ID and bitmask // determine FAIL* register ID and bitmask
uint64_t access_mask; uint64_t access_mask;
fail::GPRegisterId reg = udis_helper.udisGPRToFailBochsGPR(*it, access_mask); fail::GPRegisterId reg = udis_helper.udisGPRToFailBochsGPR(*it, access_mask);
uint64_t remaining_access_mask = access_mask; uint64_t remaining_access_mask = access_mask;
@ -168,7 +168,7 @@ bool NanoJPEGCampaign::run()
// special case: empty EC! // special case: empty EC!
for (Udis86Helper::UDRegisterSet::const_iterator it = out_regs.begin(); for (Udis86Helper::UDRegisterSet::const_iterator it = out_regs.begin();
it != out_regs.end(); ++it) { it != out_regs.end(); ++it) {
// determine Fail* register ID and bitmask // determine FAIL* register ID and bitmask
uint64_t access_mask; uint64_t access_mask;
fail::GPRegisterId reg = udis_helper.udisGPRToFailBochsGPR(*it, access_mask); fail::GPRegisterId reg = udis_helper.udisGPRToFailBochsGPR(*it, access_mask);
uint64_t remaining_access_mask = access_mask; uint64_t remaining_access_mask = access_mask;
@ -213,7 +213,7 @@ bool NanoJPEGCampaign::run()
// close all open ECs // close all open ECs
for (map<GPRegisterId, std::list<std::pair<unsigned, uint64_t> > >::iterator it = reg_cascade.begin(); for (map<GPRegisterId, std::list<std::pair<unsigned, uint64_t> > >::iterator it = reg_cascade.begin();
it != reg_cascade.end(); ++it) { it != reg_cascade.end(); ++it) {
// determine Fail* register ID and bitmask // determine FAIL* register ID and bitmask
uint64_t access_mask = 0xffffffffULL; uint64_t access_mask = 0xffffffffULL;
fail::GPRegisterId reg = it->first; fail::GPRegisterId reg = it->first;
uint64_t remaining_access_mask = access_mask; uint64_t remaining_access_mask = access_mask;

View File

@ -1,9 +1,9 @@
VisualFail* VisualFAIL*
=========== ===========
Guest-system setup 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 (gcc/g++/clang/clang++ compiler flag "-g"). Note that
debugging information quality/accuracy usually decreases with higher debugging information quality/accuracy usually decreases with higher
optimization levels. optimization levels.
@ -16,7 +16,7 @@ Database preparation
Step 1 is the prerequisite to run the fault-injection campaign (you may use 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 other importers as well, e.g., the RegisterImporter). Steps 2 and 3 are
required for VisualFail* to work. required for VisualFAIL* to work.
Setup 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 "result...", "echo SHOW TABLES | mysql yourdatabase" on the command line should
give you the correct table name). 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.) ~/.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 ./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 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 on the same machine. (If you need to connect from another machine, manually run
"php -S 0.0.0.0:1234 -t .") "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). 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 - Pick a coloring (currently, only "Right margin" really makes sense), a
benchmark and a variant from the drop-down menus. Click "Analyze". Wait. benchmark and a variant from the drop-down menus. Click "Analyze". Wait.

View File

@ -40,7 +40,7 @@
</button> </button>
<!--<div class="container"> --> <!--<div class="container"> -->
<!--<a class="navbar-brand" href="#">Visual FAIL*</a>--> <!--<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> </div>
<div class="container"> <div class="container">

View File

@ -1,4 +1,4 @@
Fail* Result Browser FAIL* Result Browser
Requirements: Requirements:
* Python * Python
@ -9,7 +9,7 @@ Requirements:
Based on Flask web microframework (Werkzeug, Jinja 2) Based on Flask web microframework (Werkzeug, Jinja 2)
and old school MySQL bindings. 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: Usage:
./run.py ./run.py

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <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/main.css') }}"></strong>
<strong><link rel="stylesheet" href="{{ url_for('static', filename='css/barchart.css') }}"></strong> <strong><link rel="stylesheet" href="{{ url_for('static', filename='css/barchart.css') }}"></strong>
</head> </head>
@ -9,7 +9,7 @@
<header> <header>
<div class="container"> <div class="container">
<h1 class="logo">Fail*</h1> <h1 class="logo">FAIL*</h1>
<strong><nav> <strong><nav>
<ul class="menu"> <ul class="menu">
<li><a href="{{ url_for('index') }}">Home</a></li> <li><a href="{{ url_for('index') }}">Home</a></li>
@ -26,7 +26,7 @@
<hr> <hr>
<div id="footer"> <div id="footer">
&copy; Fail* - Fault Injection Leveraged &copy; FAIL* - Fault Injection Leveraged
</div> </div>
</body> </body>
</html> </html>

View File

@ -24,7 +24,7 @@ fi
echo "importing $VARIANT/$BENCHMARK symbols from $ELF ..." 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) ID=$(echo "SELECT id FROM variant WHERE variant='$VARIANT' AND benchmark='$BENCHMARK'" | $MYSQL -N)
if [ -z $ID ]; then if [ -z $ID ]; then
echo "no such variant/benchmark!" >&2 echo "no such variant/benchmark!" >&2