Release 5.4.0.19 of IBM Binary Prober (aka BProber) includes the following new features:
Functionality:
Enhanced code coverage (action -cci) capabilities and integration with FuCuS. The bprober2focus utility that comes with the package provides import of basic block coverage into FoCuS and viewing coverage at the source level when debug information is available.
Enhancing the code coverage flexibility by enabling selective coverage using the instrumentation directives file (-idf option). This enables partial coverage testing of functions of interest as well as mixing function level coverage with full basic block coverage at selected functions.
Enhancing user instrumentation (action -ui) with Gated Function to improve instrumentation overhead.
Enhance user instrumentation with in-module stubs. This enables the user to use stubs that are within the binary itself. The user must statically link these stubs with the application. This can be useful for instrumenting statically linked code where shared libraries for stub cannot be used. In addition it can be used to reduce the overhead as calling in-module stub is with lower overhead (typically single direct branch instruction instruction) compare to shared library call that uses linkage stub and indirect branch.
Adding embedded instrumentation (-ei) where profile file is placed within the global data area of the binary instead of file mapped to shared memory. This option can be used in cases where the operating system does not support shared memory (e.g. embedded systems).
Stability and robustness
Supporting statically linked executables
Improve the support for multi-threaded applications.
Adding -ptm and -shmkey options to use key based mapping of profile (use in -pi and -cci) instead of file descriptor based (-fd).
Faster processing time. Various internal algorithms have been optimized.
Support new compiler versions: gcc 4.3, XLC9.0 and XLF11.1.
Numerous bug fixes.
User Interface:
Messages produced during profiling. Instead of sending these messages to stdout, where they can be lost or otherwise mistakenly ignored, they are logged in <profile file>.errors<pid>_<tid>.
Additional and better text format of code coverage data. Two format are available 1) formatted text 2) and XML file.
Adding statistics output file including on bprober processing.
Options:
--code-coverage-generate-info (-ccgi) - produce coverage information with source level annotations in 2 formats: 1) formatted text 2) XML
--statistics stat_file (-st) - Output statistics information to stat_file.
--verbose (-v) - when set, various statistics about bprober processing are printed into the file program.stat.
--embedded-instrumentation (-ei) - perform embedded instrumentation. The profile will be collected into the application's global data area.
--dump-initial-ascii-profile (-diap) - dump the given profile information in ASCII format into program.aprof.init (replacing -dap)
--instrumentation-stack-offset (-iso) - sets the offset from the runtime stack where instrumentation's registers are saved. Use with care.
--instrumentation-safe-stack-usage (-issu) - provide safer use of stack for saving registers. Note that this option adds extra overhead.
--profile-to-memory (-ptm) - use shared memory key instead of file mapping to obtain a shared memory area for the profile data.
--shared-memory-key (-shmkey) - specify a shared memory key to use when creating a shared memory area for the profile.
--dump-mapper (-dm) - print a map of basic blocks and static variables with their respective new -> old addresses into a program.mapper file.
--profile-map (-M) - set the shared memory segment address for profiling.
--binary-code-dump-file (-bcdf) - create a binary dump of the code (opcodes) with annotations of addresses.
options -ccm and -dap
were removed.
For detailed information consult the man page. bprober man page is placed under "/opt/man". Make sure MANPATH
includes this path.