0.4.5 (Jun 17th, 2015)

Kernel release:

3.8.13-87.el6uek

New features:

  • Provider modules are now automatically loaded from /etc/dtrace-modules when DTrace initializes for the first time, at the same time as dtrace.ko. (Providers that do not come from the dtrace-modules package are not automatically 'yum install'ed.)

  • It is now possible to use USDT probes in 32-bit applications on 64-bit hosts.

Bugfixes:

  • Fixed a (minor) memory leak problem with the help tracing facility in DTrace. Upon loading the dtrace.ko module, a buffer (by default 64K) was being allocated, and it was never released.

  • Stack backtraces are more accurate as a result of various fixes to adjust the number of frames to skip for specific probes.

  • Datatypes have been adjusted to be more carefully specified after a detailed audit in preparation for supporting architectures other than x86_64.

  • The stack depth was being determined by requesting a backtrace to be written into a temporary buffer that was being allocated (vmalloc), which posed significant problems when probes were executing in a context that does not support memory allocations. The buffer is now obtained from the scratch area of memory that DTrace provides for probe processing.

  • It was possible to cause a system crash by passing an invalid pointer to d_path(). Due to its implementation, it is not possible to depend on safe memory accesses to avoid this. Instead, the pointer passed as argument must be validated prior to calling d_path() in the kernel.

  • Fix intermittent dtrace crash on failure of initial grabs or creations of processes (via dtrace -p or -c, or via ustack(), usym(), uaddr(), or umod()).

  • Fix dtrace -S DIF subr names. [Introduced in DTrace 0.4.0.]

  • DTrace can now reliably monitor processes that undergo exec() and processes that are hit by stopping signals and later resumed. (Previously, it would sometimes lose track of the victim process, sometimes kill it with a SIGTRAP, and sometimes crash itself.) Numerous other subtle bugs and deadlocks in this area have been fixed as a side-effect.

  • Fix a sign-extension bug in breakpoint-instruction poking which could cause the monitored process to crash. [Introduced in DTrace 0.4.0.]

  • DTrace is now more resilient against changes to glibc: many places where non-ABI-guaranteed internals of glibc are relied upon now dynamically search for the correct field offsets, so are resilient against new fields appearing in glibc's internal structures, and against fields changing size.

Library interface changes:

  • The dtrace_proc_*() functions have changed the type they take (it is now a small structure passed by value). See INCOMPATIBILITIES.

    There are still no binary-compatibility guarantees for libdtrace consumers.

Changes to user-visible internals:

  • The code has been restructured to facilitate supporting architectures other than x86_64 in future releases.

  • The d_path() D subroutine requires its argument to be a pointer to a path struct that corresponds to a file that is known to the current task (see bugfixes below).

Known problems:

  • Processes under u{stack,sym,addr,mod}() cannot receive SIGTRAP.

  • Multithreaded processes under u{stack,sym,addr,mod}() which do dlopen() in threads other than the first may crash.