The switch to MariaDB Connector/C 3.0 involves some subtle API
changes, including the fact that "~" is not expanded to the user's
home directory anymore. This change expands the HOME environment
variable within our code base.
Change-Id: I30bc0d4fba6f0c8001832a981aa99af7e6f2a369
Due to a typo (cast to regwidth_t instead of regdata_t), accesses to
register content beyond an offset of 32 bits via
LLVMtoFailTranslator::reginfo_t did not work correctly. Additionally, this
change fixes constructing reginfo_t with a bit width >= 64 (e.g. the whole
RAX register).
Change-Id: I24914cd64fa51118eeac38cc3fb47b76790d3aac
Using switch/case instead of an if cascade is more readable and has a
better chance to be optimized.
Change-Id: I41dc2cbdf8c14bd35c91520d74b476d7b522a3a4
The "--[Server] No workload, come again..." appears every time a
larger job set is loaded from the database, once for every client that
knocks. This isn't helpful and scrolls out relevant information,
hence I'm removing it for now.
Change-Id: Ic7ca5b3a0c096b384ba4803df5b482a96bf803b1
The -p parameter is already being used by several campaign servers for
the prune method to restrict to (which was broken in commit
6c120004e), hence allow only --port to choose a different server TCP
port at runtime.
Change-Id: Ia30e40d564e85a9702118dc28df4988ec628e491
std::chrono::system_clock is not monotonic, instead use
std::chrono::steady_clock for interval measurements.
Change-Id: I231affecfe8e89481720e47b59132fc838cdf73c
If the JobServer is provided a total number of experiments by the
campaign, it now prints a completion percentage and an estimated
remaining runtime along the usual progress reports.
Change-Id: Ibd781ba8bff9af3a85683bbd29728216e316da57
The JobServer progress-report output now shows the total number of
completed jobs instead of the (almost always zero) inbound queue fill
level. Additionally, the current number of incoming results per
second is shown, which also prepares for an ETA calculation in the
following commit.
Change-Id: I6b71c45f44b9e6b9b17c059959a90068b51c165c
When prefixing a symbol name with '?', the GenericExperiment does not abort
in case the symbol is not found in the provided ELF binary:
fail-client -Wf,--detected-marker=?eddiErrorHandler
[...]
[GenericExperiment] ELF Symbol not found, ignoring: eddiErrorHandler
Change-Id: Iec12416ce8e38ff0ee1704e3a725c2cadc97b756
The JobClient now resolves the server IP once (lazily, when needed) instead
on each connect attempt, reducing the amount of DNS requests sent out.
Change-Id: I9804048d3252da333cb3addbe94a01fdf3c707c8
This bugfix makes sure that from a set of symbols with the same
address, only the first one gets imported.
After an assessment whether analysis scripts can deal with multiple
symbols at the same address, an import of all symbols should be made
possible in the future. This will also require to relax the
primary-key constraint of the `symbols' table.
Change-Id: I61c4ddb1af1556d44eab54e53eaa3d0fc20de7c1
The import-trace tool now systematically collects statistics on which
LLVM -> FAIL* register ID mappings failed during import, and presents
those after the import finished.
Change-Id: Ied67853d754483277868fe21bf2c6efeaeb60f09
The generic-experiment now learned to record and compare output on an
arbitrary serial port. Using Bochs' port 0xe9 hack (parameter
--e9-file) is kept for compatibility reasons.
Change-Id: I5b1aa02d244e8b474919e1bdf043e523ea0e4f45
Calling the DatabaseCampaign with --inject-registers or
--force-inject-registers now injects into CPU registers. This is achieved
by reinterpreting data addresses in the DB as addresses within the register
file. (The mapping between registers and data addresses is implemented in
core/util/llvmdisassembler/LLVMtoFailTranslator.hpp.) The difference
between --inject-registers and --force-inject-registers is what the
experiment does when a data address is not interpretable as a register: the
former option then injects into memory (DatabaseCampaignMessage,
RegisterInjectionMode AUTO), the latter skips the injection altogether
(FORCE).
Currently only compiles together with the Bochs backend; the
DatabaseExperiment's redecodeCurrentInstruction() function must be
moved into the Bochs EEA to remedy this.
Change-Id: I23f152ac0adf4cb6fbe82377ac871e654263fe57
elfinfo was what ElfReader started from, but is not needed in itself
anymore. The code has been mostly rewritten, so an explicit mention
of the original authors is not necessary anymore.
Change-Id: Iea48c80f9174504bbb56cc02ee2de5eda4a81489
ElfReader now detects whether a 32- or 64-bit ELF is opened, and uses
the corresponding elf.h data structures. Internally maps 32-bit ELF
structures onto 64-bit structures to use common processing code.
Change-Id: Ib42a4b21701aeadac7568e369a80c08f2807694e
Instead of using assert() (which only does something in a Debug
build), explicitly fail when a user-specified symbol is not found.
Change-Id: I33ac59ca4483ee65ba70c264b5153a7766a919d2
faultspaceplot.sh now fails gracefully if the requested
variant/benchmark combination does not exist in the database.
Change-Id: Ied3b5a0e72cc5ae8e6ce352b65486f15bb13576b
This change adds global fault-coverage and occurrence count
measurement scripts that work with sampling results.
Change-Id: I14d94a2c549cff3256fc7b0800cfd4a702e6ad35
The *-onwrite.sh analysis scripts only work if import-trace was not
run with --no-write-ecs, i.e. they only work if writing memory
accesses were imported into the "trace" table.
Change-Id: Icb2ea4e72d2200c886d4f9074f2da0f9bfd6ac85
Depending on SQL-statement nesting, some scripts already correctly sorted
resulttypes alphabetically, but some sorted along the numeric ENUM value
behind the resulttype name. This change explicitly converts the resulttype
to a string before sorting.
Change-Id: Ia18aa4e75b94a6a9f7bb125953bc85b86b3cbd6e
In their current implementation, the data-aggregator scripts do not work
correctly on sampling results.
Change-Id: I1035970b352f513d725bd1a40ac9262368ffbcc0
As long as the JobServer only listens on IPv4 endpoints, it makes no
sense to attempt a connect to an IPv6 endpoint on the client side.
(However, it's 2018 and we should also be capable of using IPv6 on
both the client and server side ...)
Change-Id: I9c3916466c350ce74a31cef3b6ae0e7ac56367c7
MyISAM indexes are limited to 1000 bytes per index. Recently, Linux
distros (e.g. Debian 9) started to default MariaDB installations to
utf8mb4, which can use up to 4 bytes per character. Hence, two
varchar columns indexed in a single key have a total maximum length of
250. Instead, we use some lower, round numbers.
Change-Id: I4b53bc217912bc7070102a0af4938763e61b041d
This change removes support for earlier LLVM versions; making them
work as well is simply too tedious.
Change-Id: I372a151279ceb2bfd6de101c9e0c15f0a4b18c03
Clang 4.0.0, which ac++ links against since today, throws an error in
the Bochs code.
config.cc:3480:55: error: ordered comparison between pointer and zero ('char *' and 'int')
if (SIM->get_param_string("model", base)->getptr()>0) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
Change-Id: I8404a54acd468bf71cbf29867657f9458f3a4c3f
- search for libdwarf.h in new locations (e.g., /usr/include/libdwarf/)
- build Bochs with -std=gnu++98 (gnu++14 is default since GCC 6.1)
- specify "proto2" syntax for protobuf messages
- minor build-system and C++ namespace fixes
Change-Id: I16dbc622c797ef8e936fe3c0fb9b03029d27529d
This change removes the hard compile-time dependency from the
performance-improving dedicated listener-list implementation
(core/sal/perf/) to basic watchpoints / breakpoints being enabled in
the cmake config. This allows to keep the CONFIG_FAST_* switches
enabled in practically every experiment.
The primary reason for this change was the recent insight that enabled
breakpoints with disabled CONFIG_FAST_BREAKPOINTS can massively slow
down an experiment even if the latter does not use a single breakpoint
itself.
Change-Id: I5e3f5c1632ed1ee98a3ec887f18b174fa0e15773
The initialization value for ymin, which tracks the lower bound of
plotted rectangles (and is finally used for the preselected zoom
area), was chosen too small for Linux-kernel data structure addresses.
Change-Id: I7cd8dc690843394107e8aae7fffa90f27ca18153
Upstream SVN r12754: "Fixed PCI IDE controller DMA start (found with a
recent Linux version: "mode sense" command executed in DMA mode).
Updated output of "mode sense" page 0x2a (still reporting CD-ROM
drive)."
(data_ready part not backported due to missing dependency)
Change-Id: I392ba2b20a4138682fc34d6d2a78da0c6706e280
Upstream SVN r12563: "Bugfix: use memmove() if source and destination
range can overlap (found with valgrind)."
(Manually backported, the code structure has significantly changed
before this fix.)
Change-Id: Id176fb5b0aca806908cfb06f06bb5a7221ccc9c4
Upstream SVN r10244: "Fixed possible buffer overflow causing segfault
or memory corruption. The buffers are not large enough for the maximum
sector count in LBA48 mode. Now resetting buffer pointers after
processing a PRD (and move remaining data if necessary). This should
fix the SF bug items #3190970 and #3077616."
This happened to us when booting Debian 8 with a Linux 3.16 kernel
from "flat" or "volatile" disk images, in the end corrupting the VGA
card's ("theVga") internal state and segfaulting.
Change-Id: I6a80432093a547dc2eb5270845369d0918e1e49b
FindLLVM.cmake now starts searching for specific "llvm-config-x.y"
versions instead of using the system-wide default "llvm-config" first.
This avoids breaking builds on Debian 8, where LLVM 3.5 is the (yet
unsupported) default, but 3.4 is still installable.
Change-Id: I6fd577f515a233e30c6f803f87b9a680b5515a5b
Before this change, the GenericExperiment only recorded port 0xe9 output
*after* the fault was injected. When a fault was injected during the
workload's output loop, the output data before that point in time was
missing, and the experiment outcome was wrongly classified as SDC.
This change moves the logging activation to before the fast-forwarding
step (DatabaseExperiment::cb_before_fast_forward). It also makes sure the
DatabaseExperiment only clears its own listeners instead of also touching
the SerialOutputLogger's one.
Change-Id: I66bda4ee318d271ddda6f7ade4e817bf9d14cf46
Limit the serial-output logger buffer to prevent overly large memory
consumption in case the target system ends up, e.g., in an endless loop.
The buffer is limited to (golden-run output size)+1 to be able to detect
the case when the target system makes a correct output but faultily adds
extra characters afterwards.
Change-Id: I50c082f8fb09a702d87ab83732ca3e3463c46597
This change prevents an integer overflow in the memory-access listener
for WRITE_OUTERSPACE. Instead of matching all addresses above
maxima_data, l_mem_outerspace never matched in the
generic-experiment's "--catch-write-outerspace" mode.
Change-Id: I8f4ee4515af3998b7c2a8e83c7a18306c26d8d66
Before this change, ymin was rounded down to the nearest Y value
divisible by 1000, showing an empty, white area in the lower part of
the plot. With this change, the initial Y-axis zoom level is
maximized to exactly show all non-white areas.
Change-Id: I1aea52a3afc331e7f11fe76ff2c5de3c71c61c71
In the current configuration, OK_MARKER would be plotted in white
color and be indistinguishable from the background. Not plotting
these areas at all reduces output-file size. As a side effect, the
initial Y-axis zoom level (ymin, ymax) can change.
Change-Id: Ic7b1a22a5a6f58e4df0849bca5262c646051ae2c
By default, the data-aggregator scripts create machine-readable,
tab-separated output. The optional "-t" switch (passed to the
internally used `mysql' command-line client) creates human-readable
table output instead.
Change-Id: Ie448c21a4e82dea83f3e43e6642e67eb85f8b8e9
This change additionally allows to create a resulttype/occurrences summary
over all benchmarks in the database, instead of specifying a single one.
Change-Id: I4fc7fd735300168f1e4f9e24a51aba469a7269a8
Instead of using the address difference between two neighboring symbols as
an indication for the symbol's size, import the size as reported by
`nm -S'.
Additionally, this change fixes an off-by-one, which had the effect that
the last symbol in the list was not imported at all.
Change-Id: I3c8e139b788018702526bb968e36d248dc3fe8fc
- Debian 8 does not provide libsvga1-dev anymore, so Bochs cannot be
built --with-svga (which is included in --with-all-libs).
- The latest AspectC++ nightlies should work without any
-D__NO_MATH_INLINES -D__STRICT_ANSI__ tricks.
Change-Id: I56801a0735eb4922689dff812923d79faa94d26e
- Add missing iomanip header: Without this one, Fail/gem5 does not
compile.
- Remove unnecessary sal/bochs header: This seems to be a relic from
when the DatabaseExperiment was Bochs-specific.
Change-Id: I91c991795c2c2e76359e9d11415f5119d225a4ab
This quick fix is necessary to let gem5 compile again. Instead of passing
NULL to onInterrupt(), a proper fix should pass the currently active
ConcreteCPU instance.
Change-Id: Ie4322fd98cb7b12309a21a2dd431f9bdc84efaf8
This change makes MemoryAccessListeners deliver linear addresses
instead of virtual ones deprived of their segment selector. Even in
modern operating systems, segment selectors are still used for, e.g.,
thread-local storage.
The hooks within MemAccess.ah could maybe be implemented in a simpler
and less fragile way using the BX_INSTR_LIN_ACCESS instrumentation
hook, but this needs more investigation.
Change-Id: I0cee6271d6812d0a29b3a24f34d605a327ced7da