The SConscript in src/core/sal/gem5 is now generated via CMake
(SConscript.in). No more hardcoded relative paths -> Fail* build
folder can now be anywhere. Experiment and Plugin libraries are now
set automagically (using ${EXPERIMENTS_ACTIVATED} /
${PLUGINS_ACTIVATED})
Generated SConscript now resides in binary dir.
Change-Id: I1bf2e17c83c95ffdcf6801c02481064fcb63bfb0
This commit introduces a virtual dtor in the ArmCPUState class to
prevent the compiler from producing the following warning:
"deleting object of polymorphic class type 'fail::Gem5ArmCPU' which
has non-virtual destructor might cause undefined behaviour"
Change-Id: I5029662064e72ae87a9f0e36aeaa309e4cb2291b
The InstructionImporter does disassemble the binary and generate read
traces for every instruction byte executed.
Change-Id: I6b8697c711c009e106ed733c74c6ff8f9bbf8ac5
The variant/benchmark selection now can use SQL LIKE syntax, all unfinished
pilots from all selected variants are sent to the clients. E.g.:
./cored-voter-server -v x86-cored-voter -b simple-% -p basic
Will select the fsppilots in the variants:
- x86-cored-voter/simple-ip/basic
- x86-cored-voter/simple-instr/basic
The variant and benchmark information is now sent within the
fsppilot.
Change-Id: I287bfcddc478d0b79d89e156d6f5bf8188674532
The LLVM Disassembler infrastructure can be used to analyze many kinds
of ELF Binaries. For every instruction the used and defined registers
is available as well as information about the instruction itself.
Change-Id: I9cc89b6c116ceff7b5143a6f179ae31c4e994d2d
The build system now allows incremental gem5 builds. Unfortunately,
the current solution always requires re-linking the executable.
Without the enforcement of re-linking, the fail code will be rebuilt
but not linked into gem5.
The number of cores for building gem5 is derived from /proc/cpuinfo.
As before, only the gem5.debug configuration is supported.
Change-Id: Ib13b15d1ecd62196eb251e0fd00953f4eb052feb
This does enable % patterns in variant and benchmark selections, like
it is already implemented in the prune-tool.
Change-Id: I7497bfd588d6ffdf851d767bafc660f4872ae92f
The correct flags accessor methods should be used to write the flags register,
since values (especially the arithmetic flags) might be cached.
Change-Id: I338927cfdd1f111966be539668914c9256b54c8f
The client sends results back earlier (i.e., before all jobs are
done) if the client response time (CLIENT_JOB_REQUEST_SEC) is
exceeded. This makes sure that extraordinarily long-running
experiments get reported back before, e.g., the LIDO job timeout
kills the Fail* instance.
Change-Id: I3ada0360ec54b63f80a7008570ca514449720220
It is no longer required (and recommended) to write a dependency
check (using conditional compilation) in the experiment code. Instead,
the Fail code performs these checks itself. If an experiment is
compiled without having the required configuration flags set to
enabled, the compiler emits an error. This is because the constructors
of unused listener classes are declared as protected. (Note that
this works only because the Fail code does not create any listeners.)
In a next step, one should remove all the dependency guards in the
existing experiments (not needed anymore).
Change-Id: I1331813a432a752322d510b4102da53ff53294f0
Quoting connect(3posix): "If connect() fails, the state of the socket is
unspecified. Conforming applications should close the file descriptor and
create a new socket before attempting to reconnect."
Change-Id: Ibcdcc0f546560a41009832894659a37947243f2f
The previous fault injection experiment was kind of bullshit. This one
is better in several ways:
- sanity check at injection time (correct IP)
- correct counting of kernel_transistions
- copy whole activation scheme
Change-Id: I014eea4d6fe103bc02ffd7bbca95dc56a1a4d9ea
Is now very similar to normal importer, and may be deleted in the future, but
at the moment, this should be merged, since it is the importer used in the
sobres-2013 paper.
This changes the MySQL Schema. instr1_absolute was introduced.
Change-Id: I1bc2919bd14c335beca6d586b7cc0f80767ad7d5
Doxygen skips undesired directories and files now. In addition, the
documentation of the "fail" namespace has been fixed. Note that there
are still several warnings (due to incomplete documentations) in the
Doxygen output.
Change-Id: Idad4f1ecff453765b307fa40a5c1cebc0c2ce2bb
The checkpoint which is produced by this save method is a little bit
different to the checkpoint which is produced by the --take-checkpoint
command. It differs in the save-parameters so_state, funcExeInst, intRegs,
_upc, _nupc, _when. Tests have shown that it probably does not affect the
course of the program execution.
Change-Id: Id776a10f2d40f71643e9edbb45d7368609309df4
The checkpoint which is produced by this save method is a little bit
different to the checkpoint which is produced by the --take-checkpoint
command. It differs in the save-parameters so_state, funcExeInst, intRegs,
_upc, _nupc, _when. Tests have shown that it probably does not affect the
course of the program execution.
Change-Id: I19b3fc809288224532e0ed6b7910a45115cb1c5d
The previous implementation wasn't in a working state because
the register content retrieval was buggy. (For example, RT_FP
does *not* denote a "floating point" register. Instead, it is
the frame pointer!)
Change-Id: I31fd80d374c945adaf35b47958d6437a8e2d48c3
This prevents client and server from being sent a SIGPIPE (and
terminating) when the other side unexpectedly closes the connection.
It's way easier to handle this condition when checking the write()
return value, than to do anything smart in a SIGPIPE handler. More
details:
<http://stackoverflow.com/questions/108183/how-to-prevent-sigpipes-or-handle-them-properly>
Change-Id: I1da5bf5ef79c8b7b00ede976e96ed4f1c560049d
Now, the gem5 implementation equals the Bochs variant. Note that it's
*not* necessary to enable CONFIG_EVENTS_BREAKPOINTS_RANGE in order to
use range breakpoints.
In addition, gem5 distinguishes between macro- and microops. With the
new implementation, onBreakpoint() is only called when a macroop
changes.
Change-Id: Ib86d1802fc70c20d22ca1a1ece0e8d1221b2e7db
This adds an interface for a backend-specific notion of time, e.g. CPU
cycles since simulator start, and a concrete implementation for the
Bochs backend. This is needed to record CPU idle times (e.g., HLT
instruction), and for target backends capable of more timing-accurate
execution.
This change also modifies the tracing plugin to add the time to all
trace events.
Change-Id: I93ac1d54c07f32b0b8f84f333417741d8e9c8288
Encapsulated gem5-specific code into wrapper functions to separate the
build process (Fail: CMake, gem5: scons). Added some gem5-related FIXMEs.
Another CMake related FIXME added. +some cosmetics.
Change-Id: Id84b480127b1f13aed6a0ee97f3583f410d531c5
The dciao-kernelstructs experiment does a trace imported by the
DCiAOKernelImporter:
bin/import-trace -t trace.pb -i DCiAOKernelImporter --elf-file app.elf
Pruned by the basic method:
bin/prune-trace
and does CiAO fault injection experiments, where the results are
stored in the database.
Change-Id: I485dc2e5097b3ebaf354241f474ee3d317213707