Kcov (35): * Only build the system daemon if libelf isn't available * Issue #208: Allow covering multiple binaries with the same name in the same report -- Simon Kagstrom , Kcov (34): * Issue #215: Correct build with binutils >= 2.29 * Issue #216: Don't use SIGUNUSED (Dridi Boukelmoune) * Issue #211: Avoid blocking bash write (Mike Bland) * Issue #198: Correct skipped breakpoint count * Issue #92: kcov can now perform full-system instrumentation via a daemon and statically instrumented binaries * Issue #193: Handle all available bash output (Ashley Straw) * Issue #187: Fix crash regression due to address verifier changes * Issue #166, Issue #209: Describe workaround for OSX build problems * Issue #183: python: Quote argument strings to avoid argv issues (Bashkar Rana) * Unit tests build again * Issue #165: bash: Provide basic parser mode to workaround bugs in the parser * Issue #178: Port to AArch64 (though untested!) * Issue #180: kcov now honors LCOV_EXCL_LINE/START/STOP, so that regions of code can be excluded from the report. Command-line options can also set custom patterns (Me, Keith Wansbrough) * Issue #175: kcov can now ignore unreachable lines (Thomas Neumann) -- Simon Kagstrom , Sun Sep 10 13:11:34 CEST 2017 Kcov (33): * Issue #167: Writers: Add pure JSON writer for gitlabCI (http://gitlab.com) integration (Bryce Fisher-Fleig) * Issue #162: Use Xcode build in addtion to Make for Travis * Issue #163: Correct attaching to processes which create threads (ptrace) -- Simon Kagstrom , Fri Jan 13 09:59:53 CET 2017 Kcov (32): * Issue #135: Covering binaries on OSX is now possible as well! * Issue #114, Issue #150, Kcov also works with codecov without changes! * Issue #152, Issue #154: bash: Correct handling heredoc special cases * Re-enable coverity for Travis CI builds again * Issue #148: Correct handling of PTRACE events (Niklas Ă–gren) * Issue #139: Create kcov-solib.pipe in a tempdir if out-dir is unfifoable * Issue #141: Make [merged] name configurable via --configure * Issue #138: Allow setting a different css file via --configure * Issue #140: Allow specifying command name via --configure * Issue #144: Allow setting configuration options manually with --configure -- Simon Kagstrom , Tue Nov 22 12:32:41 CET 2016 Kcov (31): * Exit with 0 when running --version (Pietro Monteiro) * travis: Run regression tests on OS X as well * Issue #130: bash: Correct handling of data accumulation with absolute paths * Issue #127: Add output support for the SonarQube coverage plugin * Refactor travis tests to use pyunit instead of Robot Framework * Allow --repace-src when running with --merge -- Simon Kagstrom , Sun Apr 17 09:42:12 CEST 2016 Kcov (30): * Issue #121: Add --version to display the current kcov version * Issue #119: Allow merged output to serve as input to another merge session * Issue #21: Allow builds on Mac OSX as well (Python and Bash only) * Issue #122: Fix memory leak when adding shared libraries (jba31) * Issue #118: Correct merging of reports collected on another machine * Issue #116/#117: bash: Correct corner-cases for herecdocs and arithmetic (Phil Whineray) * Fix various spelling errors (Veres Lajos) * Issue #110: Correct handling of vfork() * --pid= requires an executable, actually say that as well (Vincent Gibert) * Issue #105: Warn about --verify without binutils * Issue #104: Correct handling of shared libraries with build-id debug information * Fix --skip-solibs handling -- Simon Kagstrom , Fri Nov 27 06:51:40 CET 2015 kcov (29): * Tagged v28 by mistake :-) Kcov (28): * Don't report each invalid breakpoint on --verify (give a summary instead) * Issue #103: html: Display error message if JavaScript is disabled in the browser * Issue #101: Fix regression which caused --collect-only to work only if the source code was available. * Coveralls: Use source_digest instead of source (current API?) * Issue #99: Add support for looking up debug info from .gnu_debuglink sections (Vincent Brillault) * Issue #98: Show execution order in the HTML output and add headings for the source view * Issue #26: Don't warn for non-existing ELFs (typically linux-vdso.so.1) * Issue #91: Correctly generate [merged] output after running two programs -- Simon Kagstrom , Sat Jul 4 05:16:21 CEST 2015 Kcov (27): * Issue #90: coveralls: Publish merged results if available * Issue #88: bash: Correct handling of ${var#} * Issue #87: Allow coveralls uploads when using --merge (Ricardo Martins) * Issue #86: Fix build on distros with Python 3 as default (David Barnett) * python: Improve handling of some corner-cases for '''-strings * Issue #76: bash: Handle multi-line quoted strings * Issue #60: Add --merge option to merge output of multiple runs (i.e., what the kcov-merge script did, but now integrated) * Issue #81: Make --include-path= combined with --include-pattern= coexist more naturally (i.e., consider both) * Lookup realpath of the paths passed to --include/exclude-path= * Issue #18: Add --verify option that checks that all breakpoints are set on proper addresses (i.e., instruction boundaries) * Issue #80: Fix coverage accumulation for PIE executables -- Simon Kagstrom , Fri May 1 19:44:04 CEST 2015 Kcov (26): * Issue #77: Collect coverage for Position-Independent Executables (Kang Seonghoon) * Issue #72: Don't crash on filenames <3 characters long (Kang Seonghoon) * Issue #71: Don't skip instructions on SIGSTOP (unbreaks PowerPC) * Issue #70: bash: Handle $# ad ${#var ..} (not comments) * Issue #66: bash: Unbreak handling of arithmetic shifts (conflict with heredocs) * Issue #65: merge-parser: Don't panic on non-existing files (e.g., if moved) * Issue #64: bash: Always parse the file given on the command line * Issue #63: bash: Correct check for empty braces * Issue #62: bash: Check for balenced parenthesis (e.g., in cases) * Issue #51: bash: Collect coverage for #!/bin/sh executables via preloading (off by default) * bash: Add ability to use DEBUG trap instead of PS4 (off by default, not stable) * Unbreak accumulation (for certain programs) * Fix hanging regression introduced in v23 (don't take solib semaphore before open/read) * Report file-not-found or file-not-executable errors more clearly * Issue #61: bash-engine: Output trace data via BASH_XTRACEFD when possible (bash >= 4.2) and filter stdout to catch redirections otherwise * Issue #58: Lookup program in $PATH if it's not given on the command line * Issue #57: bash-engine: Correct handling of quoted multiline variables -- Simon Kagstrom , Tue Mar 17 19:16:46 CET 2015 Kcov (25): * Make database files smaller by storing only executed addresses * Issue #52: Don't include bash-helper.sh in the output * Issue #54: Implement handling of coverage accumulation for shared libraries * Issue #50: Make sure that Bash "heredoc" markers are words * Fix some failure handling coverity errors * Issue #49 (WIP): Implement broken gcov engine (multiple issues still pending) * Refactor configuration handling to be more generic (avoid setters, use key/value pairs via strings instead) * Add "capabilities" class to make parts of the implementation clearer * HTML-writer: Correct off-by-one access to static data -- Simon Kagstrom , Tue Feb 10 19:38:04 CET 2015 Kcov (24): * Misc performance improvements here and there * Build: Use the travis-ci.org build service to make tests more reliable. * Unbreak Python and Bash coverage collection on 32-bit builds * Correct clang build (well, in Fedora 20 it still fails) * Issue #43: Clarify elfutils dependency * Issue #46: Add support for uploading to coveralls.io via the --coveralls-id= option * Issue #45: Bash: Fix coverage collection when executing sub-scripts as programs. * Issue #31: Fix handling of attaching to pid in a multithreaded process. Implementation taken from GDB: kcov now loops through all threads in a process and attaches to each one. * Issue #44: Bash: Fix issues with <<< redirection, which were parsed as here documents * Update the HTML/Cobertura output to display single-shot, limited and unlimited output in a logical way * Allow three hit modes for parsers/engines: Single-shot (covered or not, as in the merge parser), limited (as in ptrace) and unlimited (line execution count used in Python/Bash) * Remove some ptrace-specific stuff from the Engine interface * Document classes better -- Simon Kagstrom , Mon Jan 5 09:46:29 CET 2015 Kcov (23): * Correct use-after-free case when the solib thread is killed * Default to 5s output interval to avoid costly write-to-disk sessions too often * Performance improvements for the Cobertura writer by reducing the amount of string operations * Add a kcov-merge command which merges data from multiple kcov directories into a single report (Chris Love) * Issue #39: Reduce the amount of extra output files by using filename as a tie breaker instead of file data. * Issue #38: Fix several bugs which caused merged output to miss data present in the regular output * Issue #37: Correct coverage accumulation for Python/bash * Issue #36: Collect coverage from dlopen:ed libraries (through unconditional breakpoints in the dlopen call). Should also improve reliability of general shared library coverage collection -- Simon Kagstrom , Tue Dec 2 20:42:04 CET 2014 Kcov (22): * Issue #35: Support installation RPATH for build (Chris Love) * Issue #32: Fix problems when running Python unittest modules * Various coverity resource leak fixes * Peek into files to improve performance for matching (also see Issue #33) * Break out solib handling from ptrace (not really related) * Improve ptrace performance a bit, while also simplifying code -- Simon Kagstrom , Wed Oct 29 12:58:18 CET 2014 Kcov (21): * Fix regression for coverage-of-32-bit-binaries-on-64-bit-systems introduced in kcov 20 * Slightly better file stat caching (slight performance improvement) * Avoid outputting merged cobertura output for single coverage runs -- Simon Kagstrom , Thu Aug 7 20:00:20 CEST 2014 Kcov (20): * Issue #25: Fix starvation bug where long report generation time could starve the actual application. The bug was caused by a timestamp issue. * Issue #18: Provide explanation and possible workaround for SIGILL problems with GCC 4.1.2 * Issue #23: Warn if a binary has no debug symbols * Replace std::list/std::map with std::list/std::unordered_map where possible (slight performance improvement) * Remove C++11 constructs (auto, nullptr, range-based for-loops) to allow building with older compilers * Correct bug in --report-only (crash in ptrace upon termination) * Slight performance improvement and simplification in the lineid code -- Simon Kagstrom , Mon Aug 4 12:57:19 CEST 2014 Kcov (19): * bash coverage: Implemented support for collecting shell script (sh/bash) coverage! Loosely based on shcov, which is now deprecated because of this * html-writer: Correct executable lines/covered lines in the summary (was wrong in some cases) -- Simon Kagstrom , Mon Jun 30 18:30:37 CEST 2014 Kcov (18): * Performance: Improve performance by cacheing realpath() * HTML: Always put merged results last and don't include them in sorting * HTML: Coloring improvements (?) of the HTML output * HTML: Refactor HTML output completely to use javascript-based pages. This allows selecting how to sort directly from the web page, and greatly simplifies the generating C++ code * Correct filtering bug in the merged output, where the last run would filter out data from the previous runs * Issue #20: Fix hanging-on-killed-by-signal -- Simon Kagstrom , Mon Jun 9 19:12:38 CEST 2014 Kcov (17): * Issue #19: Fix bug where kcov would let children which called setpgid live even after terminating kcov itself (Oliver) * Issue #16: Output: Implement a merged mode, which shows a combination of all covered programs under the [merged] link * Fix an HTML output bug introduced in kcov 14 where the summary counts in the index page would be wrong. * Issue #15: Fix a crash when source lines are > ~2000 characters long * Issue #17: Fix parsing of multiple include/exclude patterns (Jamie Kirkpatrick) * Split usage in common/uncommon options * Improve unit tests and robot framework tests * Various work on the kernel-engine and general refactoring -- Simon Kagstrom , Sun May 18 19:24:14 CEST 2014 Kcov (16): * kernel-engine: Implement an engine to handle kernel code coverage collection (not finished) * kprobe-coverage: Refactor the kernel module so that it basically works now * Code refactoring and more C++11-izing * Python: Filter out some false negatives (i.e., non-executable lines marked as red) * Python: Report absolute paths so that output filtering works * Python: Catch exceptions in the python helper to avoid EOF etc being propagated upwards (and coverage collection to fail) * Python: Fix a case where the engine would simply hang on waiting for more data -- Simon Kagstrom , Fri Mar 21 16:38:28 CET 2014 Kcov (15): * Workaround a shared-library issue where kcov would sometimes hang on the malloc. The workaround uses a static memory buffer instead. * Implemented support for collecting Python code coverage! Usage is the same as for compiled code. * Code-restructuring to allow multiple "engines", which makes it possible to add the python support above. * More C++11-izing of the code -- Simon Kagstrom , Sun Mar 2 10:50:00 CET 2014 Kcov (14): * Add two options, --collect-only and --report-only to only collect coverage and produce Cobertura/HTML output respectively. Can be used for example on embedded systems where the source code isn't available. * PowerPC support has been added (thanks to Aleksandr Vilchinskii and Konstantin Polivtsev for testing this) -- Simon Kagstrom , Wed Feb 5 19:42:03 CET 2014 Kcov (13): * Don't hang the kcov main process if a breakpoint comes in before the solib handler constructor has executed (depends on the construction order) * Correct bug with realloc in solib handling (malloc all data once only) -- Simon Kagstrom , Sun Dec 8 19:34:37 CET 2013 Kcov (12): * Fix lockup bug in the solib code path (where processes with many solibs would hang at startup) * Correct a crash in the reporter * Add test case for signals * Report from main thread to avoid threading issues * Fairly major refactoring of ptrace code to avoid an issue where two PTRACE_CONTINUE calls could be done without waitpid() in between. This would cause crashes in the traced program. * Add support for looking for debug info in separate files via build-id (Alexander Larsson) * Add --exit-first-process option to fork kcov when covering daemons (otherwise kcov will wait for all children to finish) * Add --skip-solibs option to disable processing of shared libraries, which also works around a bug which sometimes triggers * Add --replace-source-path option for cases where the sources have been moved (James Warner) * Fix linking (Igor Murzov) * Some build fixes to make it build with clang++ * Fix various warnings * Add experimental profiler based on kcov * Add sorting by reverse-percent (high -> low, -u option) * Cache non-existing files to avoid doing lstat calls all the time (slight performance improvement) * closedir() was not called from the html-writer, which creates a resource leak (Karl Vogel) -- Simon Kagstrom , Sat Oct 19 11:06:42 CEST 2013 Kcov (11): * Fix handling of common paths in HTML writer * Fix bug in shared library handling where repeated exec()s would cause strange hangs. Fixed by unsetting the KCOV_SOLIB_PATH environment variable after the first executable has been started. Add test-popen test case to check for this. * Expand ~'s in the --include-path and --exclude-path options * Unbreak accumulating data from multiple runs again (introduced sometime during refactoring), and add test case for this -- Simon Kagstrom , Sat Aug 18 08:45:03 CEST 2012 Kcov (10): * Fix bug where multiple files with the same name would only be shown once in the HTML output. * Fix icache conflict bug (present while instrumenting shared libraries) on multi-CPU systems by forcing all traced processes to one CPU * Re-enable the --pid=PID argument to trace a running process again * Fix race condition in the reporter * Only set breakpoints in executable sections. This avoids problems where the DWARF line information points to non-code sections (which can happen) * Fix coverage reporting of orphaned children (where the parent does not wait(2) for the child * Use std::unordered_map for breakpoints (improves performance somewhat) * Improve unit tests * Add robot-framework testsuite that can be run from a Jenkins server -- Simon Kagstrom , Mon Jul 23 13:28:43 CEST 2012 Kcov (9): * Completely refactor the source code (yes, everything!), and add unit tests to verify kcov itself. The code is now in C++. * Implement transparent coverage instrumentation for shared libraries (done automatically) * Implement a Cobertura-compatible XML backend. This allows integrating kcov coverage information in Jenkins. * Improve performance a lot by filtering out files already at the instrumentation step (and not only during HTML generation). This means that --include-pattern/--include-path can improve kcov performance by quite a bit. -- Simon Kagstrom , Fri Jun 15 17:39:17 CEST 2012 Kcov (8): * Import the man-page from Debian and update it. * Simplify parts of the ptrace code * Correct the sorting of files-by-percentage when the difference is less than 0.5% (thanks Martin!). * Correct the percentage-bar color according to the configured limits in the report. -- Simon Kagstrom , Sun Dec 4 14:13:47 CET 2011 Kcov (7): * Weed out common parts of source paths from the report, display the full path as the HTML title= tag * Fix crash bug in argument passing * Handle hit count a bit better -- Simon Kagstrom , 2011-07-10 Kcov (6): * Correct hit count. The hit count is no longer over the number of possible hits * Better error reporting when stripped or otherwise broken binaries are passed to kcov * Handle files with relative directory paths (lookup the absolute path via DWARF source files). Otherwise, some files are not reported in the output. * Add test program to detect regressions * Detect stripped binaries and report that you'll need to build with -g * Correct --include/exclude-path behavior. The previous version will match PATH*/* instead of just PATH/* (Igor Murzov) * Various small fixes -- Simon Kagstrom , Sat Apr 16 08:28:27 CEST 2011 Kcov (5): * Switch from libdwarf to libdw (from elfutils) for building kcov. libdw is a bit more logical than libdwarf. * Implement actual path matching (Igor Murzov) * Rename path-matching to pattern matching (which is what it does) and set it up using long options. * Parse options with getopt * Don't escape all multibyte characters in the report. That will break display of UTF-8 etc (Igor Murzov) * Improve cmake packaging support (Igor Murzov) -- Simon Kagstrom , Sat Feb 12 15:25:57 CET 2011 Kcov (4): * Build system is now based on cmake (Igor Murzov) * Add MIPS32, ARM and PowerPC architecture support. This is untested though and might very well not work at all. * Add -t option to set the title of the program to test (otherwise it will be the filename) * Refactored the architecture support to allow running i386 programs on x86_64 machines, and easier add other architectures * Make it possible to collect coverage from multiple programs in a single directory, useful for example when running a test suite * Add coverage color to the header as well * Misc refactoring -- Simon Kagstrom , Tue Dec 7 18:20:28 CET 2010 Kcov (3): * Various bug fixes * Add ability to trace running processes by PID * Fix copyright headers -- Simon Kagstrom , Sat Nov 13 08:13:03 CET 2010 Kcov (2): * Misc fixes * Add ability to specify low/high limits * Add state saving between runs. Re-starting the same program will then add to existing coverage instead of starting from scratch. * Link to web page in the report * Add option to sort by percentage or file name -- Simon Kagstrom , Sun Oct 24 09:15:39 CEST 2010 Kcov (1): * Initial release -- Simon Kagstrom