Commit Graph

602 Commits

Author SHA1 Message Date
85fffe007e tracing: bugfix for enabled memory maps
With the recent updates to record one additional instruction at the trace
start, I broke memory-map handling (restrictMemoryAddresses() and
restrictInstructionAddresses()).  This change repairs this functionality.

Change-Id: I0daf9f474d0efe3f8e30a168c0ccc1e993e7ddc6
2013-11-18 15:49:06 +01:00
bd91549367 Merge "gem5: restore works now" 2013-11-13 17:20:53 +01:00
45e0b41022 gem5: restore works now
The function restore(PATH) can now be used to restore a checkpoint.

Change-Id: I25faf9f6335261d2b3ade4185eae93983ece9f97
2013-11-13 17:15:19 +01:00
f31548c026 Merge "core/sal: register issue fixed" 2013-11-13 16:08:40 +01:00
cf95437e65 RealtimeLogger: Fixed coding guideline issues.
Change-Id: I1172e0c60e2d6e895b4d3f99eb1a023c348bd3b3
2013-11-11 13:18:26 +01:00
8f0db45dfe Exp: Base system for the real time systems lecture
Change-Id: I3e5b8c6e60b57e6ec03500e9ee109fd5fb322cb2
2013-11-11 13:08:26 +01:00
4c7fcae6ad plugins: A simple signal generator
Listens on a configurable SUT's global variable.
On read access a signal pattern value is calculated and sent back
to the SUT.

Currently, only a superimposable sine wave signal form is implemented.
Further signal forms can be implemented by inheriting from the
abstract SignalForm class.

Change-Id: I2e6cf49cd44797999691c9e9cf0c54dd3c96875e
2013-11-11 13:07:42 +01:00
5d867be83b plugins: RealtimeLogger plugin
Logs access to a given global variable of the SUT, given by
a symbol name, and outputs value when variable is written to file.
Format:
<Simulation time>;<Value of variable>

Change-Id: I81b581e571be4255a1a2200c41e7c16657ddfd3d
2013-11-11 12:30:52 +01:00
443b3e4919 L4Sys: termination shortcuts
Add two new breakpoints to L4Sys experiment that allow detecting that
execution terminated with an error: vga_console_blink() is called by the
kernel if JDB was entered (meaning we are hanging, e.g., due to an
assertion); also longjmp() is only used by PF handling code after no
valid page fault handling could be performed

Change-Id: Ice61039c4bd07815a316bbc0bdb39f3483d9a1da
2013-11-06 17:37:20 +01:00
d4f22a38ff L4Sys: EIP deviation tracking
* after injecting a fault, track how many instructions it takes until
  execution deviates from original execution
* also track what the first deviating EIP value is

Change-Id: I18a9250517ca90214728c2c4b036b412f5dbf224
2013-11-06 17:37:20 +01:00
3db5d034a2 InstructionFilter: make unused EIP a default 0 parameter
Change-Id: I972be71af70934eef98bc67b27e32a98ecb8be3b
2013-11-06 17:37:20 +01:00
a5866a68a2 add l4-sys ignore file
Change-Id: Iea2228d8bafc2a3ecb4b6e26e2552813821a3d0b
2013-11-06 17:37:19 +01:00
71170145e0 Adapt l4-sys experiment to importer fix
no need to decrement instruction offset before setting bp anymore

Change-Id: I7f9c02349663899fa8f496a46bcb357bd567ac5c
2013-11-06 17:37:19 +01:00
63610d0652 L4sys: build fix
experiment.hpp is parsed before l4sys.ph.h is generated
-> remove dependency

Change-Id: I128108e562877caca732ad43fdb65b12e56951f8
2013-11-06 17:37:19 +01:00
3bf64351a4 core/sal: register issue fixed
Before, it was not possible to add registers in arbitrary order.

Change-Id: I952c03ea4339da2cdaf34bd4546c76c33cecd4cd
2013-11-01 17:26:26 +01:00
c000b50101 Merge branch 'tracing-off-by-one' 2013-10-28 18:37:07 +01:00
5171645d9a plugin/tracing: fix extended trace on umapped memory areas
When a register in the extended trace was dereferenced and the value
was smaller than the memory pool size, but the address was not mapped
an assertion occured and the tracing plugin terminated the
simulator. Now the dereferenced memory address is checked for being
mapped and not being smaller than the memory pool.

Change-Id: I9ac954988ef860969679f9f360814c5e4b66f473
2013-10-28 15:09:35 +01:00
77b2e208d0 L4Sys Experiment: more on address space tracing
* introduce L4SYS_ADDRESS_SPACE_TRACE to indicate that we want
  to trace instructions in a different AS from the one we are starting
  the experiment in
* add CR3Run() to determine address space ID

Change-Id: I7bdaf1e858a6dd369af5175bd56e1b4e2d5f05ef
2013-10-21 15:28:07 +02:00
523f4a465b add injection address to results
Change-Id: I7966f97b8c09bbd6510ca6066dd40be398b54de3
2013-10-21 15:28:07 +02:00
f2d0919553 tracing: simplify confusing iponly/memonly configuration
The internal m_iponly / m_memonly bools are a bit hackish; especially it's
unclear what should happen if both are set.  The m_tracetype enum now
encompasses all possible configurations, while the plugin's user interface
remains unchanged.

Change-Id: Ibdd872b5cc5781836428b27bfb2db3825700e671
2013-10-17 19:09:54 +02:00
64034e29b4 tracing: bugfix: advance prevtime only if delta was recorded
This change implements what the source-code comment already promised but
didn't keep: As we only record time deltas instead of absolute time values,
prevtime must not be overwritten unless the current delta was really added
to the trace.  This has caused timing information to be stored incorrectly
if certain events were skipped (e.g., because they didn't match the memory
map configured by the user).

Change-Id: Id40271d117dd91b1122136c62329d64174f304b0
2013-10-17 19:07:35 +02:00
3dc752cd09 tracing: fix loss of first dynamic instruction
When starting the tracing plugin (simulator.addFlow()), at the moment
the *current* dynamic instruction (e.g., the one the start symbol
points to) is skipped, and tracing commences with the second
instruction.  This change records an additional instruction event at
the trace begin.

Note that this change affects all tracing-plugin users.  The first
event gets recorded when starting the plugin (simulator.addFlow()).
This avoids compatibility/off-by-one issues when recording traces with
the generic-tracing experiment vs. with custom experiments.

Change-Id: Ic24e17a68b8a44edad3be994e9edd6d6712bfda1
2013-10-17 18:28:28 +02:00
090125a283 Revert "generic-tracing: fix lossage of first event"
This reverts commit 036e340bd9.

Problems with this one were:
 -  Broken event timings.  m_prevtime wasn't reset to m_curtime in
    TracingPlugin::handleSingleIP(), resulting in a large deltatime
    being recorded for the second event, too.  This effectively
    doubled the experiment's start time.
 -  Code repetition (copy/pasted for special handling of first event),
    making planned changes (advanced tracing for IP events) more
    difficult.
 -  Unnecessary additional tracing-plugin interface method.

Change-Id: I4b74d1a3f4563aabe6626399f9b30a2171b4c285
2013-10-17 17:44:43 +02:00
036e340bd9 generic-tracing: fix lossage of first event
When using the generic-tracing experiment for generating a trace, the
first event, after the tracing is started (the start-symbol) is lost
in the trace. This patch handles this special case seperately.

Change-Id: Ia131a8559d67161532504160826fdb100247ed75
2013-09-19 15:57:11 +02:00
ee6ffef828 Merge "experiments: new cored-voter experiment" 2013-09-18 16:07:14 +02:00
014684ae1c L4Sys: check Bochs AS ID for mem accesses, too
Change-Id: Ifa2b38dc0e762ff4f956dc0b98c78b43f0d139cb
2013-09-12 20:29:08 +02:00
ff19bec52d L4Sys: some bug fixes
* Fowler's Law of Refactoring: Have test cases available.
* BjoernD's Corollary to Fowler's Law: Use these tests!

Change-Id: I3d3e48ffe08209891c6204655323cd26a0eaaebd
2013-09-12 18:19:04 +02:00
37eda90971 L4Sys campaign: GPRFLIP and MEM injections
Change-Id: I0c4a6bf6b80d6620c035595c11663121f504f4d5
2013-09-11 18:02:03 +02:00
b7d03f64d4 docs
Change-Id: Ic46dfc6c59c7bee796c2e3e8e97376859391b342
2013-09-11 18:02:03 +02:00
560860cb99 L4Sys: consult instruction list for breakpoints
Change-Id: Ic8163cc84bad9b0074a9d6489127d0ef09eb3c21
2013-09-11 18:02:03 +02:00
8caa63397a L4Sys: refactoring
* more more stuff into functions
* try to have generic experiment code only once

Change-Id: I4f037bd972243665a10941fcc3607f015b0bb1f9
2013-09-11 18:02:02 +02:00
0b2ab41c2f first working mem experiment
Change-Id: I928ee0c38f12f6dfe3f661ee60cccad11f35ad6a
2013-09-11 18:02:02 +02:00
20a9904032 start memory experiment
Change-Id: Ice7921a02f899c7381d15ead10b27e21df7019fb
2013-09-11 18:02:02 +02:00
32efc604e7 use MEM FI type
Change-Id: If149c4fdeaaf6fef96a99d6fe2a424d8ad0f2916
2013-09-11 18:02:02 +02:00
ec969603d5 Merge commit 'dcd2c021a5ac91d38187d397914e5f51e2fc8819'
Conflicts:
	tools/import-trace/RegisterImporter.cc

Change-Id: I4f49c976bd60badba73c15746aa03c420cb9f77b
2013-09-11 14:38:55 +02:00
844e15293d experiments: new cored-voter experiment
The experiment does support
- 1 bit faults in registers/memory/IP
- 2 bit faults in registers (all)
- n bit faults monte-carlo in registers

Change-Id: Ifdd7df6ec4bc88cfc75391b5e19e0d648fd0d087
2013-09-11 13:47:47 +02:00
d26fc28fa4 cpn/database: include data_width in the fsppilot during prune step
During the prune step the data_width of the injected location was not
propagated before. It is now stored in fsppilot (database layout change!) and
sent in the fsppilot protobuf message.

Change-Id: I0562f6fc8957adea0f8a9fb63469ca5e3f4b7b2d
2013-09-11 10:27:04 +02:00
dcd2c021a5 util: global lock for certain MySQL operations
Even the reentrant libmysqlclient_r has some non-threadsafe operations,
which need to be protected by a global mutex.
<http://dev.mysql.com/doc/refman/5.5/en/c-api-threaded-clients.html>

Change-Id: I444e42f82cf982a6c8f8f2596e8991d0a5009b28
2013-09-10 18:35:44 +02:00
ba7c663551 import-trace: introduce AdvancedMemoryImporter
A MemoryImporter that additionally imports Relyzer-style conditional
branch history, instruction opcodes, and a virtual
duration=time2-time1+1 column (MariaDB 5.2+ only) for fault-space
pruning purposes.

Change-Id: I6764a26fa8aae21655be44134b88fdee85e67ff6
2013-09-10 17:37:26 +02:00
12b539ff75 misc cleanups
This change touches several subsystems, tools and experiments
(sal, util, cmake, import-trace, generic-tracing, nanojpeg), and
changes details not worth separate commits.

Change-Id: Icd1d664d1be5cfc2212dbf77801c271183214d08
2013-09-10 17:37:25 +02:00
25d88bf93a import-trace: import extended traces
This tool can now import extended trace information with the
--extended-trace command-line parameter.  The existing importers cease
using artificial access_info_t objects in favor of passing through the
original Trace_Event wherever possible.  This allows us to import
extended trace information for all importers.

Change-Id: I3613e9d05d5e69ad49e96f4dc5ba0b1c4ef95a11
2013-09-10 17:37:25 +02:00
60bf0bae69 L4Sys: uhoh -> build fix
Change-Id: I9b3f9bdc961d03e49965230f9a5222d4103c94c5
2013-09-10 11:58:23 +02:00
bbe97f2d1b Merge branch 'master' of ssh://vamos.informatik.uni-erlangen.de:29418/fail 2013-09-10 11:54:29 +02:00
0c0f19fbcb L4Sys: also trace memory accesses
Change-Id: I20d8fea1f0f6cfee42804296515e50fdabf12f81
2013-09-10 11:54:05 +02:00
96f2f56d5e Merge branch 'register-mapping-fixes' 2013-09-10 11:46:58 +02:00
11513ef78d util: handle missing register mapping gracefully
It's OK if we cannot map every register LLVM knows to a Fail register
ID, but we need to explicitly skip these cases in the
RegisterImporter.

Change-Id: I2152f819fb94aa4de5720c5798b229b66988d382
2013-09-09 16:14:35 +02:00
e4a5a7a592 util: gzstream needs zlib
This change is needed to build on Ubuntu 13.04.

Change-Id: I683ed4427044264f58bc8f7c94cb5fbbff89cd95
2013-09-08 22:15:14 +02:00
f33789b1ac Merge branch 'find-mysql' 2013-09-04 13:09:48 +02:00
6d4dfeb913 shutdown cleanups revisited
This change became necessary as we observed weird fail-client SIGSEGV
crashes with both Bochs and Gem5 backends and different experiments.

Some Fail* components are instantiated statically: the
SimulatorController instance "simulator", containing the
ListenerManager and the CoroutineManager, and the active
ExperimentFlow subclass(es)
(experiments/instantiate-experiment*.ah.in).  The experiment(s) is
registered as an active flow in the CoroutineManager at startup.

As plugins (which are ExperimentFlows themselves) are often created on
an experiment's stack, ExperimentFlows deregister themselves on
destruction (e.g., when leaving the plugin variable's scope).  The
core problem is, that the creation and destruction order of statically
instantiated objects depends on the link order; if the experiment is
destroyed after the CoroutineManager, its automatic self-deregistering
feature talks to the smoking ruins of the latter.

This change removes all static instantiations of ExperimentFlow and
replaces them with constructions on the heap.  Additionally it makes
sure that the CoroutineManager recognizes that a shutdown is in
progress, and refrains from touching potentially already destroyed
data structures when a (mistakenly globally instantiated)
ExperimentFlow deregisters in this case.

Change-Id: I8a7d42fb141222cd2cce6040ab1a01f9de61be24
2013-09-04 10:13:48 +02:00
203ec6c5cc remove #ifndef __puma from code using LLVM
Contemporary AspectC++ versions can deal with the LLVM headers very
well, and #ifdef __puma stuff in Fail* headers results in
unmaintainable #ifdef __puma blocks in other parts of Fail* (e.g., the
trace importer).

Make sure you're using a 64-bit ac++ when living in a 64-bit userland
(the 32-bit version doesn't know about __int128), and be aware that
AspectC++ r325 introduced a regression that has not been fixed yet.

Change-Id: I5bb759b08995a74b020d44a2b40e9d7a6e18111c
2013-09-04 10:13:48 +02:00