Systemtap is a dynamic tracing/instrumenting tool available on Linux. Probes
that are not fired at run time have close to zero overhead.

The following probes are available for NPTL:

Thread creation & Join Probes
=============================
pthread_create - probe for pthread_create
               arg1 = pointer (pthread_t*) to thread
               arg2 = pointer (pthread_attr_t*) to attr
               arg3 = pointer (void *) to start_routine
               arg4 = arguments to start_routine
pthread_start - probe for actual thread creation
              arg1 = struct pthread (members include thread ID, process ID)
              arg2 = address of start_routine
              arg3 = pointer to the list of arguments
pthread_join - probe for pthread_join
             arg1 = thread ID
pthread_join_ret - probe for pthread_join return
                 arg1 = thread ID
                 arg2 = return value

Lock-related Probes
===================
mutex_init    - probe for pthread_mutex_init
              arg1 = address of mutex lock
mutex_acquired - probe for succ. return of pthread_mutex_lock
               arg1 = address of mutex lock
mutex_timedlock_acquired - probe for succ. return of pthread_mutex_timedlock
                         arg1 = address of mutex lock
mutex_entry   - probe for entry to the pthread_mutex_lock function
              arg1 = address of mutex lock
mutex_timedlock_entry - probe for entry to the pthread_mutex_timedlock function
                      arg1 = address of mutex lock, arg2 = address of timespec
mutex_release - probe for pthread_mutex_unlock after the successful release of a
                mutex lock
              arg1 = address of mutex lock
mutex_destroy - probe for pthread_mutex_destroy
              arg1 = address of mutex lock

wrlock_entry - probe for entry to the pthread_rwlock_wrlock function
             arg1 = address of rw lock
rdlock_entry - probe for entry to the pthread_rwlock_rdlock function
             arg1 = address of rw lock

rwlock_destroy - probe for pthread_rwlock_destroy
               arg1 = address of rw lock
wrlock_acquire_write - probe for pthread_rwlock_wrlock (after getting the lock)
                     arg1 = address of rw lock
rdlock_acquire_read - probe for pthread_rwlock_rdlock after successfully getting
                      the lock
                    arg1 = address of rw lock
rwlock_unlock - probe for pthread_rwlock_unlock
              arg1 = address of rw lock

Condition variable Probes
=========================
cond_init - probe for pthread_cond_init
          arg1 = condition
          arg2 = attr
cond_destroy - probe for pthread_cond_destroy
             arg1 = cond
cond_wait - probe for pthread_cond_wait
          arg1 = condition
          arg2 = mutex lock
cond_timedwait - probe for pthread_cond_timedwait
               arg1 = condition
               arg2 = mutex lock
               arg3 = timespec
cond_signal - probe for pthread_cond_signal
            arg1 = condition
cond_broadcast - probe for pthread_cond_broadcast
               arg1 = condition
