Commit Graph

123 Commits

Author SHA1 Message Date
e83e87ecc7 DwarfReader: fixed linetable mapping
This change alters/corrects DwarfReader's way of determining the size of
linetable entries (i.e. their "range size"); the interface (e.g. to
ElfReader) stays the same. Prior to this, it was assumed that static
instructions within "the linetable" were sorted in ascending order. This
assumption turned out to be false, as every compilation unit's  header has
its own linetable and the compilation unit headers are not sorted by their
static instructions.
Furthermore this change implements normalization of file names.

Change-Id: Ia4beb7bf9cfb6f1a499aeebd01228335b70ab52d
2014-12-03 19:29:12 +01:00
5378573b1d util/DwarfReader, ElfImporter: import address ranges
This change implements the following:
-DwarfReader now exports the address range of linetable-entries instead of
	only the first address
-ElfImporter saves this range alongside the mapping

Change-Id: I7fe6361178f761a8f605a44bb0183c56a236cc95
2014-10-22 15:42:05 +02:00
d94b005be2 util/DwarfReader, ElfImporter: use unsigned addresses
This change alters DwarfReader and import-trace's ElfImporter so that they use
unsigned int for static address and line numbers instead of signed int.

Change-Id: I84ebbb500afd7cd4d93b137a35dcf736dc679fab
2014-10-22 14:30:43 +02:00
66408e83ce Merge branch 'llvm-rtti' 2014-10-01 15:02:00 +02:00
ebbf35c509 Merge branch 'tools-report-unknown-parameters' 2014-10-01 13:58:57 +02:00
d69ac98654 util: MemoryMap test case for hex/octal support
+ abort() on test failure

Change-Id: I3bd4f19615b1234dae8854950e9d3e1b5810c101
2014-09-30 15:12:31 +02:00
2d1b19ea0f Merge "util: hex and octal number support for MemoryMap" 2014-09-29 16:07:31 +02:00
744ae1b7d7 util: hex and octal number support for MemoryMap
The import-trace tool supports a memorymap file as argument. Currently the
import tool accepts only decimal values, but the hexadecimal system is more
common to specify a memory address or range. To avoid a manual translation
between hex and dec values the patch extends the import tool to handle both
types according to the prefix of a value.

Change-Id: I79d0bc03ecf296dfbced8fb33518e8f5a5790366
2014-09-25 19:40:46 +02:00
3fd94abcd3 cmdline: parse parameters in GNU mode
This change sets the option parser to GNU mode, that is, allows
further option parameters after non-option parameters, e.g.:

dump-trace foo.tc -s

instead of

dump-trace -s foo.tc

As Fail* currently works on GNU platforms only, this behavior is the
one presumably expected from users.

Change-Id: I9c55eaf4560cde81ebd0b94214201c8ad02c2b74
2014-09-25 17:14:08 +02:00
6d3ab14365 DatabaseProtobufAdapter: fix translation of unsigned fields
Independent of the protocol specification all integer fields in the
result table are signed. For instance, if I store a kernel IP (e.g.
0xf1....) the value in the database is 0x7fffffff because of the wrong
type.

Therefore, the data fields of the result table should have the same
types as specified in the protocol.

Change-Id: I9154251e4ad67ba70fe86155ebda378c4a9982c2
2014-09-24 16:16:21 +02:00
d962a322ea DatabaseProtobufAdapter: fix string insertion
This change fixes the Protobuf->MySQL bridge for strings, which were
corrupted in rare cases, especially with debug builds of the
DatabaseCampaign.  String columns in result tables from any campaign
up to this point may contain corrupted data.

The core reason for the corruption was that the TypeBridge_string
bound a temporary (a nameless local variable) to the prepared
statement.  This temporary is destroyed before the subsequent call to
mysql_stmt_bind_param(), and the string within can only be referenced
successfully if it has not been overwritten yet.  The solution is to
copy the string to a bridge-internal variable.

Although it might seem that TypeBridge_enum has the same problem, the
protobuf library seems to return references to internal string
constants when retrieving the enum values.

Change-Id: Id127e6b3333d7c304d688e45de9bea44bbc610b0
2014-09-18 19:40:59 +02:00
e87ace65ef util: SumTree test build fix
This fixes a "funny" conflict between the SumTreeTest and
weather-monitor's experiment.hpp.

Note to self: Preprocessor macros are evil.

Change-Id: I3f8c95fe086357db77110c0c53d3120ca839f30a
2014-08-29 11:35:45 +02:00
42182591e5 fix compiler warnings
(DatabaseCampaign; llvmdisassembler)

Change-Id: Ic31758018a0a1ff0ceac81f781eecfc5f8060f89
2014-08-28 12:12:38 +02:00
84cfa2ae42 Merge commit '0da8ba0dec111d78292455bb5f17c6045820db25' 2014-08-28 12:04:34 +02:00
0426970dff llvmdisas.: Do not put side-effect code into assert(...)
assert(...) can be optimized away, therefore side-effect code should not
be placed inside an assertion.

Change-Id: I28aee42e53cb105333094d0042a3f6e2cc5b5a30
2014-08-25 12:48:10 +02:00
87008a05b6 util: LLVM test code compilation fix
This change removes an unnecessary "#ifndef __puma" from the LLVM
disassembler test code and fixes compilation with the latest AspectC++
binaries.

Change-Id: Ibe835a4a6df69255555c668985f15b9cf8fb82b4
2014-07-13 18:43:39 +02:00
9a81ab4222 Database: more flexible get_variants()
This change moves prune-trace's --variants-exclude / --benchmarks-exclude
capabilities to Database::get_variants() to make it available to all users.

Change-Id: Icbc6bb1a3ae7c846d2de40b881f47a9cc1ed7bbf
2014-07-03 15:42:25 +02:00
6300a2b364 util: SumTree implementation
The SumTree implements an efficient tree data structure for
"roulette-wheel" sampling, or "sampling with fault expansion", i.e.,
sampling of trace entries / pilots without replacement and with a
picking probability proportional to the entries' sizes.

For every sample, the naive approach picks a random number between 0
and the sum of all entry sizes minus one.  It then iterates over all
entries and sums their sizes until the sum exceeds the random number.
The current entry gets picked.  The main disadvantage is the linear
complexity, which gets unpleasant for millions of entries.

The core idea behind the SumTree implementation is to maintain the
size sum of groups of entries, kept in "buckets".  Thereby, a bucket
can be quickly jumped over.  To keep bucket sizes (and thereby linear
search times) bounded, more bucket hierarchy levels are introduced
when a defined bucket size limit is reached.

Note that the current implementation is built for a pure growth phase
(when the tree gets filled with pilots from the database), followed by
a sampling phase when the tree gets emptied.  It does not handle a
mixed add/remove case very smartly, although it should remain
functional.

Change-Id: If05e9700bc84761b5bc31006402641e7112b3a72
2014-07-03 15:42:25 +02:00
b92df6592f util: BlackholeLogger, a quiet Logger drop-in replacement
The compiler should be able to completely optimize away side-effect
free usage of this logger.  Can be used as a drop-in replacement for
Loggers to silence logging output for known-good code without having
to remove the corresponding "LOG << ..." code.

Change-Id: Ifb276223f61686773dd6108aafd567e99c88b223
2014-07-03 15:42:25 +02:00
960f0881a2 util/smarthops: missing linker dependency
Change-Id: I3017a8824b3bd7ae9547b6c91db6847e5f5b8694
2014-06-27 13:16:25 +02:00
e73ac88d1b util: LLVM disassembler off-by-one
The disassembled memory region's end (variable "End") is exclusive
now.  Up to now, the two branches defining this variable disagreed on
inclusiveness, leading to an infinite loop in one case.

Change-Id: I055fc240f6ec2f4a1d1937e48617c86612cff5c5
2014-06-25 16:43:28 +02:00
c827750090 Merge branch 'failpanda'
Conflicts:
	src/core/comm/DatabaseCampaignMessage.proto.in
	src/core/cpn/CMakeLists.txt
	src/core/cpn/DatabaseCampaign.cc
	src/core/sal/ConcreteCPU.hpp
	src/core/sal/SALConfig.hpp
	src/core/util/CMakeLists.txt

Change-Id: Id86b93d0e3ea4d9963fcc88605eec0603575ec83
2014-06-03 12:24:49 +02:00
c6655c0dbb util/smarthops: don't redefine address_t
Change-Id: I702c2fe8824dfe13c4e99f9400d6dacb3ae63f53
2014-06-03 11:47:21 +02:00
277958b31b cleanups
Change-Id: I8022d937477668253c613e97c3a579ae65084b1e
2014-06-03 11:47:20 +02:00
3869cebde3 util/llvmdisassembler: build with ac++-clang
This change updates the documentation on how to manually build LLVM
3.3 or 3.4, and removes the forced -fno-rtti compiler flag from
util/llvmdisassembler/: The flag breaks compilation with (not yet
released) AspectC++ 2.0, which complains about dynamic_cast (used in
some active aspect headers that should not affect llvmdisassembler at
all) being unusable with -fno-rtti.  It's probably not a good idea to
compile only a part of Fail* with -fno-rtti anyways.

Note that the Debian and Ubuntu LLVM packages are built with
REQUIRES_RTTI=1, too.

Change-Id: I9891cf074d4201df786f7f5a9b96033e18832562
2014-04-27 17:31:47 +02:00
af92a751d9 import-trace: alias-based (importer) registry
This change implements a generic registry in order to clean up import-trace's
code - it's possible (and reasonable) to use the registry for pruners as well.
Importer now extends AliasedRegisterable; all importers have been adapted
to suit the interface/abstract methods.
Each AliasedRegisterable should have at least one alias (the class' name
is a sensible choice) but can have several. The first specified alias is
the class' prime alias which can be used e.g. to list all registered objects.

Change-Id: If6daa34edce35a3b0194e4ba67ed3b44b74a49b0
2014-04-25 08:34:01 +02:00
b500873bbb Merge branch 'ubuntu-trusty-fixes'
Conflicts:
	src/core/util/CMakeLists.txt

Change-Id: I94811612bcd31406c0e275f72058c331a99c8943
2014-04-11 15:05:32 +02:00
9113d7c2fa cmake: find libiberty headers via cmake module
The libiberty headers moved from /usr/include (and a part of binutils-dev)
to /usr/include/libiberty (libiberty-dev) between Ubuntu 13.10 and 14.04,
which made a proper cmake search module necessary.  Searching still
continues working well on Debian 7.

Change-Id: I324e5ccb847e4664442d6fa7d7a027705a4f0587
2014-04-11 14:42:00 +02:00
799bdd4c64 Merge branch 'database_config_file' 2014-04-11 13:51:48 +02:00
c6344af189 Database: commandline option for alt. config file
This change adds an optional command line argument "--database-option-file",
which can be used to override the default database configuration file ~/.my.cnf

Change-Id: I5c71523e1c31dead26f3fedb0ca7354ca99892d4
2014-04-11 13:51:37 +02:00
c384894a4e Merge branch 'find_libdwarf_libelf_via_cmake'
Conflicts:
	src/core/util/CMakeLists.txt

Change-Id: I510578482e30a88981fba0774b66dfcf4812e07f
2014-04-11 13:24:23 +02:00
ba774a258c util/llvmdisassembler: fix section end symbols
Somehow, while iterating symbols in a section, it can happen that the last
symbol start address is equal to the section size, which means it is beyond
the section end.
In this case the LLVM getInstruction() method does not return a failure, but a
zero-size instruction, resulting in an infinite loop.

Now, if beyond section limits, the iteration is aborted.
Additionally, an assertion checks for disassembled zero-size instructions.

Change-Id: Id8a355475161150d3ee919cd6cf603d4ff26b228
2014-04-03 15:02:57 +02:00
da839c9765 util: find libdwarf/libelf via cmake itself
Instead of hardcoded -lelf/-ldwarf use cmake modules FindLibElf/-Dwarf
and link the found libraries accordingly. This enables the user to have those
libs in arbitrary locations and link them from there.

Change-Id: I2cea3ef648a46f11b0d49d2fe0b006f76a9d4140
2014-03-30 18:20:49 +02:00
0799e52fde util/llvmdisassembler: map registers by names
Internal LLVM register IDs can and did change between LLVM versions.
These magic integers are replaced by iterating over all LLVM registers
and mapping them to FAIL* registers by name.
As this iteration requires a LLVM object created from a binary, a static
convenience function is added to LLVMtoFailTranslator which creates a
translator given the binary filename. Building this functionality inside
libfail-llvmdisassembler prevents experiments from needing to add LLVM
includes and library definitions.

Change-Id: I27927f40d5cb6d9a22bb2caf21ca2450f6bcb0b8
2014-03-24 15:01:09 +01:00
396e00ce59 cmake: static library dependencies
CMake does not support linker groups, which were used to "automatically"
fix circular dependencies between different static FAIL* libraries and
the ordering of dynamic external libraries broke linking.
CMake can however correctly invoke the linker if dependencies are decribed
correctly (even if circular). This required changing all add_dependencies
calls between libraries to target_link_libraries (which creates a link-time
dependency) and linking all experiments to fail-sal.

Change-Id: I3a0d5dddb9b3d963ef538814e20d6b3de85d4ec5
2014-03-24 11:47:46 +01:00
7b12442117 util: find libdwarf/libelf via cmake itself
Instead of hardcoded -lelf/-ldwarf use cmake modules FindLibElf/-Dwarf
and link the found libraries accordingly. This enables the user to have those
libs in arbitrary locations and link them from there.

Change-Id: I2cea3ef648a46f11b0d49d2fe0b006f76a9d4140
2014-03-19 13:56:59 +01:00
9df6d983bf util/llvmdisassembler: compile with -fno-rtti
For some reason, this is required even when LLVM is not built using
-fno-rtti.

Change-Id: I992799c8b54135a0a87b2de7c4a3d57f2d3670d9
2014-02-26 14:46:23 +01:00
1df43e9726 import-trace: major speedup
Using Database::insert_multiple() instead of prepared statements
speeds up trace import by a factor of 3-4.  While being there, we now
properly deal with nonexistent extended trace values (i.e., put NULLs
into the DB).

Side note: The ElfImporter should switch to insert_multiple(), too.

Change-Id: I96785e9775e3ef4f242fd50720d5c34adb4e88a1
2014-02-25 13:32:55 +01:00
4b921a5fe3 util: MemoryMap test
Change-Id: I54680685326a85cfd723a47e8aef8d71662c9aeb
2014-01-30 15:26:20 +01:00
4bcce14659 util: space-efficient MemoryMap
We now use boost::icl::interval_set internally, consuming extremely
lower amounts of memory.  boost::icl was introduced with Boost 1.46;
Debian 7.0 comes with 1.49, so this dependency should be no problem
anymore.

Both the class interface and the memory-map file format stay the same.

Change-Id: I38e8148384c90aa493984d0f6280817df00f1702
2014-01-30 15:26:12 +01:00
119ae40be9 util/Database: added a wrapper function for mysql_real_escape_string()
Change-Id: I999aad3c35c5f389fa3acfe8d7a11c417c478787
2014-01-28 11:07:34 +01:00
13175c259b import-trace: import debug info
If the --debug option is set, the line number table of the elf binary will
be imported into the database. The information will be stored in the
"dbg_mapping" table.

If the --sources option is set, the source files will be imported
into the database. Only the files that were actually used in the
elf binary will be imported.

Change-Id: I0e9de6b456bc42b329c1700c25e5839d9552cdbb
2014-01-28 11:07:34 +01:00
c48c7296fb util/WallclockTimer: bugfix: include ostream
This only compiled everywhere because all users included (i)ostream.

Change-Id: I29b0fb13a01606fdffd8ebdb9701eff652065916
2014-01-24 20:33:32 +01:00
85e3911202 Merge branch 'ubuntu-saucy-fixes' 2014-01-24 17:02:44 +01:00
286a28e7ae smarthops: calculate target instruction & allow zero input
As we might need information of target instruction (in case of
checkpoint, etc.) this information is now added to the output
protobuf message.

Trace-Events are generated also for position zero, so this case is
also regarded.

Change-Id: I69ff4818e7f8d6771923802f65bf0aa1b81883c5
2014-01-23 18:53:19 +01:00
8b5098abdd tools: added compute-hops and dump-hops tools
As these tools work closely together with fail components, its
easiest, to build them in this context. As these tools don't
really matter for fail use, they might never be pushed to the
master branch.

Change-Id: I8c8bd80376d0475f08a531a995d829e85032371b
2014-01-23 18:53:11 +01:00
c142818325 cpn: Generic wrapper for injection point
As for the pandaboard to navigate fast to the injection
instruction we need to deliver a hop chain to the fail-client,
this commit adds a generic wrapper for a injection point.
For now we have only the two options hop chain and instruction
offset, so it is activated via a cmake ON/OFF switch.

Change-Id: Ic01a07a30ac386d4316e6d6d271baf1549db966a
2014-01-22 18:04:29 +01:00
4cb97a7fa5 formatting, typos, comments, details
Change-Id: Iae5f1acb653a694622e9ac2bad93efcfca588f3a
2014-01-22 13:08:13 +01:00
813414984c util: boost::thread 1.53 depends on boost::system
Unfortunately this implicit dependency is currently not resolved anywhere
else (e.g., FindBoost.cmake), although the 'net heavily discusses this
issue.

Change-Id: I8a7c8518394cdba27e591fed250623011d988067
2014-01-21 00:29:34 +01:00
8505ddbb04 jobserver: synchronization cleanup
This change cleans up in/out queue synchronization in the job server.
End-of-jobs conditions are now properly signaled through the
SynchronizedQueue, allowing to resume and abort blocked readers when
no more input is expected.

Change-Id: I3eaf37115ccf8c5b5afe3d971c7109cd62b68906
2014-01-20 22:48:08 +01:00