2.0.0-1.11 (Nov 9th, 2022)

Eleventh errata of the standalone userspace implementation.

This is a pre-release with limited functionality.

New features:

  • The args[] built-in variable has been implemented.

  • Support loading scalars from kernel space addresses.

  • The copyin(), copyinto(), and copyinstr() subroutines have been implemented.

  • A -xlockmem option has been added to adjust the kernel locked-memory limit. When loading BPF maps or programs fails in a way that might indicate that the locked-memory limit is too low, an error message is printed to suggests using this new option.

  • Support for aggregations indexed by a key (tuple) has been added.

  • Disassembler annotations have been added for aggregation variables.

  • The setopt() action has been implemented. A limited number of options is currently supported.

  • The pid provider has been changed to ignore compiler-generated internal function names.

  • The USDT provider has been implemented for basic use cases. Regular, non-is-enabled probes are supported for executables that are referenced explicitly (by pid) in the probe script. Argument mapping and wildcard probe specifications are not supported yet.

New dependencies:

  • The USDT provider support depends on the availability of libfuse version 2 or 3. At build time, preference is given to libfuse 3 if available. The build process supports forcing building against libfuse 2 by passing 'libfuse2=yes' to the make command.

Upgrading:

  • The USDT implementation depends on an always-running daemon (dtprobed): the corresponding systemd dtprobed.service is automatically started in relatively early boot in non-rescue scenarios, but when DTrace is first installed, or if it is upgraded from a version before the daemon existed (before 2.0.0-1.11), any probes in programs that were already running before that point will not appear in DTrace's list of available probes until such programs are restarted.

Bugfixes:

  • Arguments of sdt-provider probes are now correctly populated using the tracepoint data.

  • Argument handling for dtrace:::, fbt:::return, pid:::, and syscall:::return probes has been cleaned up.

  • The dtrace utility is now able to handle multiple args after --.

  • The -xcpp, -xctfpath, and -xverbose options have been fixed.

  • Some bugs with typecasting and internal integer storage have been fixed.

  • The libproc search of rtld_global has been improved for glibc changes.

  • In procfs.d, projid_t was renamed to resolve a conflict with the kernel.

  • In the parser, support has been added for slices of typedefs.

  • String comparison involving non-DTrace pointers has been fixed.

  • The value of the execname built-in variable is now correctly recognized as a non-DTrace pointer.

Internal changes:

  • The code generator is able to adapt to BPF-helper-function availability differences between runtime kernels.

  • Read-only blocks of zeros for initializing BPF maps have been consolidated.

  • Tuples are now constructed with their component values at predictable offsets based on their datatype rather than their value..

  • Support for the BPF dt_bpf_map_next_key() helper to iterate over the keys in a BPF map has been added.

  • Support for multiple copies of aggregation data (DT_AGG_NUM_COPIES) is no longer needed and has been removed.

  • Support for creating a map (array or hash) of maps has been added, including functions to perform lookups and updates of inner maps.

  • The storage of aggregation data has been modified to make use of an array of BPF hash maps, indexed by CPU id. As a result, aggregation data for each CPU is stored in its own BPF hash map and can be modified without affecting the data for other CPUs.

  • Error reporting for BPF program load, map creation, CTF, and dlib load has been cleaned up.

  • Some code has been refactored and some obsolete code removed.

Testsuite changes:

  • Add support for '-e' in test options.

  • Tests that are expected to fail have improved xfail messages.

  • Support has been added for more stringent, @@nosort checking.

  • Problems with "unstable" tests are report as XFAIL.

  • Tests that fire many times (historically using tick-n) are more robust.

  • Various tests have been moved from XFAIL to PASS status to reflect the implementation of new features and in view of some bug fixes.

  • Various tests were improved.

Known problems:

  • On some aarch64 systems the copyin(), copyinstr(), and copyinto() subroutines may report a fault due to limitations in the BPF implementation at the kernel level. This problem seems to be related to specific CPU features.