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()
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

View File

@ -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

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 )
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

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")
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

View File

@ -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/

View File

@ -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()

View File

@ -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 === */

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

View File

@ -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

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
- 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

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
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

View File

@ -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

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
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)

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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} &

View File

@ -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

View File

@ -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 = '''
{

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
# 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 "")

View File

@ -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)

View File

@ -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) { }

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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,

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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) { }

View File

@ -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)

View File

@ -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

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
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);
}

View File

@ -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) { }
/**

View File

@ -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);

View File

@ -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) {

View File

@ -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&);

View File

@ -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}

View File

@ -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;

View File

@ -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.

View File

@ -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">

View File

@ -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

View File

@ -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">
&copy; Fail* - Fault Injection Leveraged
&copy; FAIL* - Fault Injection Leveraged
</div>
</body>
</html>

View File

@ -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