1Systemtap is a dynamic tracing/instrumenting tool available on Linux. Probes
2that are not fired at run time have close to zero overhead.
3
4The following probes are available for NPTL:
5
6Thread creation & Join Probes
7=============================
8pthread_create - probe for pthread_create
9               arg1 = pointer (pthread_t*) to thread
10               arg2 = pointer (pthread_attr_t*) to attr
11               arg3 = pointer (void *) to start_routine
12               arg4 = arguments to start_routine
13pthread_start - probe for actual thread creation
14              arg1 = struct pthread (members include thread ID, process ID)
15              arg2 = address of start_routine
16              arg3 = pointer to the list of arguments
17pthread_join - probe for pthread_join
18             arg1 = thread ID
19pthread_join_ret - probe for pthread_join return
20                 arg1 = thread ID
21                 arg2 = return value
22
23Lock-related Probes
24===================
25mutex_init    - probe for pthread_mutex_init
26              arg1 = address of mutex lock
27mutex_acquired - probe for succ. return of pthread_mutex_lock
28               arg1 = address of mutex lock
29mutex_timedlock_acquired - probe for succ. return of pthread_mutex_timedlock
30                         arg1 = address of mutex lock
31mutex_entry   - probe for entry to the pthread_mutex_lock function
32              arg1 = address of mutex lock
33mutex_timedlock_entry - probe for entry to the pthread_mutex_timedlock function
34                      arg1 = address of mutex lock, arg2 = address of timespec
35mutex_clocklock_entry - probe for entry to the pthread_mutex_clocklock function
36                      arg1 = address of mutex lock, arg2 = clockid,
37		      arg3 = address of timespec
38mutex_release - probe for pthread_mutex_unlock after the successful release of a
39                mutex lock
40              arg1 = address of mutex lock
41mutex_destroy - probe for pthread_mutex_destroy
42              arg1 = address of mutex lock
43
44wrlock_entry - probe for entry to the pthread_rwlock_wrlock function
45             arg1 = address of rw lock
46rdlock_entry - probe for entry to the pthread_rwlock_rdlock function
47             arg1 = address of rw lock
48
49rwlock_destroy - probe for pthread_rwlock_destroy
50               arg1 = address of rw lock
51wrlock_acquire_write - probe for pthread_rwlock_wrlock (after getting the lock)
52                     arg1 = address of rw lock
53rdlock_acquire_read - probe for pthread_rwlock_rdlock after successfully getting
54                      the lock
55                    arg1 = address of rw lock
56rwlock_unlock - probe for pthread_rwlock_unlock
57              arg1 = address of rw lock
58
59Condition variable Probes
60=========================
61cond_init - probe for pthread_cond_init
62          arg1 = condition
63          arg2 = attr
64cond_destroy - probe for pthread_cond_destroy
65             arg1 = cond
66cond_wait - probe for pthread_cond_wait
67          arg1 = condition
68          arg2 = mutex lock
69cond_timedwait - probe for pthread_cond_timedwait
70               arg1 = condition
71               arg2 = mutex lock
72               arg3 = timespec
73cond_signal - probe for pthread_cond_signal
74            arg1 = condition
75cond_broadcast - probe for pthread_cond_broadcast
76               arg1 = condition
77