]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Add systemtap static probe points in generic and x86_64 pthread code.
authorRoland McGrath <roland@hack.frob.com>
Fri, 25 May 2012 20:35:08 +0000 (13:35 -0700)
committerRoland McGrath <roland@hack.frob.com>
Fri, 25 May 2012 20:41:03 +0000 (13:41 -0700)
26 files changed:
nptl/ChangeLog
nptl/DESIGN-systemtap-probes.txt [new file with mode: 0644]
nptl/pthread_cond_broadcast.c
nptl/pthread_cond_destroy.c
nptl/pthread_cond_init.c
nptl/pthread_cond_signal.c
nptl/pthread_cond_wait.c
nptl/pthread_create.c
nptl/pthread_join.c
nptl/pthread_mutex_destroy.c
nptl/pthread_mutex_init.c
nptl/pthread_mutex_lock.c
nptl/pthread_mutex_timedlock.c
nptl/pthread_mutex_unlock.c
nptl/pthread_rwlock_destroy.c
nptl/pthread_rwlock_rdlock.c
nptl/pthread_rwlock_unlock.c
nptl/pthread_rwlock_wrlock.c
nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S

index ade0b18bc11ef60459bc7b57c9a7c561f0ca9e4c..9b63c5365d8b8205cad220c50d83548e3e860071 100644 (file)
@@ -1,3 +1,32 @@
+2012-05-25  Rayson Ho  <rho@redhat.com>
+           Roland McGrath  <roland@hack.frob.com>
+
+       * DESIGN-systemtap-probes.txt: New file.
+       * pthread_cond_broadcast.c: SystemTap probes.
+       * pthread_cond_init.c: Likewise.
+       * pthread_cond_signal.c: Likewise.
+       * pthread_cond_wait.c: Likewise.
+       * pthread_cond_destroy.c: Likewise.
+       * pthread_create.c: Likewise.
+       * pthread_join.c: Likewise.
+       * pthread_mutex_destroy.c: Likewise.
+       * pthread_mutex_init.c: Likewise.
+       * pthread_mutex_lock.c: Likewise.
+       * pthread_mutex_timedlock.c: Likewise.
+       * pthread_mutex_unlock.c: Likewise.
+       * pthread_rwlock_destroy.c: Likewise.
+       * pthread_rwlock_rdlock.c: Likewise.
+       * pthread_rwlock_unlock.c: Likewise.
+       * pthread_rwlock_wrlock.c: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise.
+
 2012-05-24  Roland McGrath  <roland@hack.frob.com>
 
        * pthread_create.c (start_thread): Define pthread_start LIBC_PROBE.
diff --git a/nptl/DESIGN-systemtap-probes.txt b/nptl/DESIGN-systemtap-probes.txt
new file mode 100644 (file)
index 0000000..16d7c45
--- /dev/null
@@ -0,0 +1,89 @@
+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
+
+lll_lock_wait - probe in low-level (assembly language) locking code, only fired
+                when futex/FUTEX_WAIT is called (i.e. when trying to acquire a
+                contented lock)
+              arg1 = pointer to futex
+              arg2 = flags passed to the futex system call
+lll_lock_wait_private - probe in low-level (assembly language) locking code,
+                        only fired when futex/FUTEX_WAIT is called (i.e. when
+                        trying to acquire a contented lock)
+                      arg1 = pointer to futex
+
+lll_futex_wake - probe in low-level (assembly language) locking code, only fired
+                 when futex (FUTEX_WAKE) is called
+               arg1 = pointer to futex
+               arg2 = number of processes to wake
+               arg3 = additional flags
+
+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
index 9b67f755f534505f9142b2ec2e84f6767f618a2b..7bc76ac0e53f8a03fbdf5cedf08fb5ae59b9576c 100644 (file)
@@ -22,6 +22,7 @@
 #include <lowlevellock.h>
 #include <pthread.h>
 #include <pthreadP.h>
+#include <stap-probe.h>
 
 #include <shlib-compat.h>
 #include <kernel-features.h>
@@ -31,6 +32,8 @@ int
 __pthread_cond_broadcast (cond)
      pthread_cond_t *cond;
 {
+  LIBC_PROBE (cond_broadcast, 1, cond);
+
   int pshared = (cond->__data.__mutex == (void *) ~0l)
                ? LLL_SHARED : LLL_PRIVATE;
   /* Make sure we are alone.  */
index 0f03b294b3c6eef6648f2f92669ed770b39ffa15..5f57b563c09c61fec6af46238ac20908ba540725 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -19,6 +19,7 @@
 #include <errno.h>
 #include <shlib-compat.h>
 #include "pthreadP.h"
+#include <stap-probe.h>
 
 
 int
@@ -28,6 +29,8 @@ __pthread_cond_destroy (cond)
   int pshared = (cond->__data.__mutex == (void *) ~0l)
                ? LLL_SHARED : LLL_PRIVATE;
 
+  LIBC_PROBE (cond_destroy, 1, cond);
+
   /* Make sure we are alone.  */
   lll_lock (cond->__data.__lock, pshared);
 
@@ -50,13 +53,13 @@ __pthread_cond_destroy (cond)
   if (nwaiters >= (1 << COND_NWAITERS_SHIFT))
     {
       /* Wake everybody on the associated mutex in case there are
-         threads that have been requeued to it.
-         Without this, pthread_cond_destroy could block potentially
-         for a long time or forever, as it would depend on other
-         thread's using the mutex.
-         When all threads waiting on the mutex are woken up, pthread_cond_wait
-         only waits for threads to acquire and release the internal
-         condvar lock.  */
+        threads that have been requeued to it.
+        Without this, pthread_cond_destroy could block potentially
+        for a long time or forever, as it would depend on other
+        thread's using the mutex.
+        When all threads waiting on the mutex are woken up, pthread_cond_wait
+        only waits for threads to acquire and release the internal
+        condvar lock.  */
       if (cond->__data.__mutex != NULL
          && cond->__data.__mutex != (void *) ~0l)
        {
index dcc6b3c14ca522e30fd85a0c096ccce9f0b49116..554fe6fedf1694a937e38462275de9f8a4bb47ec 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008
-   Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -19,6 +18,7 @@
 
 #include <shlib-compat.h>
 #include "pthreadP.h"
+#include <stap-probe.h>
 
 
 int
@@ -41,6 +41,8 @@ __pthread_cond_init (cond, cond_attr)
                          ? NULL : (void *) ~0l);
   cond->__data.__broadcast_seq = 0;
 
+  LIBC_PROBE (cond_init, 2, cond, cond_attr);
+
   return 0;
 }
 versioned_symbol (libpthread, __pthread_cond_init,
index e4716f2b08abe33c768f803c8bb5bf3d17029f30..063dcbc32a25d0e36ba04de01581530424c47912 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -25,6 +25,7 @@
 
 #include <shlib-compat.h>
 #include <kernel-features.h>
+#include <stap-probe.h>
 
 
 int
@@ -34,6 +35,8 @@ __pthread_cond_signal (cond)
   int pshared = (cond->__data.__mutex == (void *) ~0l)
                ? LLL_SHARED : LLL_PRIVATE;
 
+  LIBC_PROBE (cond_signal, 1, cond);
+
   /* Make sure we are alone.  */
   lll_lock (cond->__data.__lock, pshared);
 
index c05d06c143c2d4984f1de7296a033b7c831b01e2..35505d9a191879e45e6c833eb57706a9c04058a7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003,2004,2006,2007,2011 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -24,6 +24,7 @@
 #include <pthreadP.h>
 
 #include <shlib-compat.h>
+#include <stap-probe.h>
 
 
 struct _condvar_cleanup_buffer
@@ -43,7 +44,7 @@ __condvar_cleanup (void *arg)
     (struct _condvar_cleanup_buffer *) arg;
   unsigned int destroying;
   int pshared = (cbuffer->cond->__data.__mutex == (void *) ~0l)
-               ? LLL_SHARED : LLL_PRIVATE;
+               ? LLL_SHARED : LLL_PRIVATE;
 
   /* We are going to modify shared data.  */
   lll_lock (cbuffer->cond->__data.__lock, pshared);
@@ -98,7 +99,9 @@ __pthread_cond_wait (cond, mutex)
   struct _condvar_cleanup_buffer cbuffer;
   int err;
   int pshared = (cond->__data.__mutex == (void *) ~0l)
-               ? LLL_SHARED : LLL_PRIVATE;
+               ? LLL_SHARED : LLL_PRIVATE;
+
+  LIBC_PROBE (cond_wait, 2, cond, mutex);
 
   /* Make sure we are alone.  */
   lll_lock (cond->__data.__lock, pshared);
index c52ae1137982c33c8e9f5a23c01f8cafd78948af..97d83256a480e4152c35ae79933c4fe7febe31aa 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007,2008,2009,2010,2011 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -560,6 +560,8 @@ __pthread_create_2_1 (newthread, attr, start_routine, arg)
   /* Pass the descriptor to the caller.  */
   *newthread = (pthread_t) pd;
 
+  LIBC_PROBE (pthread_create, 4, newthread, attr, start_routine, arg);
+
   /* Start the thread.  */
   return create_thread (pd, iattr, STACK_VARIABLES_ARGS);
 }
index b8834cc9c1f646eb722cd28cf8a00ed023e5e14e..bf1a01dbc93235de596bed0a747a0c076a9fa73e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -22,6 +22,8 @@
 #include <atomic.h>
 #include "pthreadP.h"
 
+#include <stap-probe.h>
+
 
 static void
 cleanup (void *arg)
@@ -54,6 +56,8 @@ pthread_join (threadid, thread_return)
   struct pthread *self = THREAD_SELF;
   int result = 0;
 
+  LIBC_PROBE (pthread_join, 1, threadid);
+
   /* During the wait we change to asynchronous cancellation.  If we
      are canceled the thread we are waiting for must be marked as
      un-wait-ed for again.  */
@@ -109,5 +113,7 @@ pthread_join (threadid, thread_return)
       __free_tcb (pd);
     }
 
+  LIBC_PROBE (pthread_join_ret, 3, threadid, result, pd->result);
+
   return result;
 }
index 408b16a7b26649d5a8db8809c9bc9512e33e249f..107ec8e4e47d9f898a12cc638ec3c14f1df5b6cf 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
 #include <errno.h>
 #include "pthreadP.h"
 
+#include <stap-probe.h>
+
 
 int
 __pthread_mutex_destroy (mutex)
      pthread_mutex_t *mutex;
 {
+  LIBC_PROBE (mutex_destroy, 1, mutex);
+
   if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
       && mutex->__data.__nusers != 0)
     return EBUSY;
index 0596e07f3c7bb77ba3d7399febd8c1f56855129e..6536e44d0bd0db1b062e6019431d3159fe676477 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
-   Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -23,6 +22,8 @@
 #include <kernel-features.h>
 #include "pthreadP.h"
 
+#include <stap-probe.h>
+
 static const struct pthread_mutexattr default_attr =
   {
     /* Default is a normal mutex, not shared between processes.  */
@@ -134,6 +135,8 @@ __pthread_mutex_init (mutex, mutexattr)
   // mutex->__spins = 0;       already done by memset
   // mutex->__next = NULL;     already done by memset
 
+  LIBC_PROBE (mutex_init, 1, mutex);
+
   return 0;
 }
 strong_alias (__pthread_mutex_init, pthread_mutex_init)
index c747355e499fac0259ac44bd4c6021ecb8dfe331..2b30bad48d281889857276b5ffd54e10c3c712e0 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2008, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -23,6 +23,7 @@
 #include <not-cancel.h>
 #include "pthreadP.h"
 #include <lowlevellock.h>
+#include <stap-probe.h>
 
 
 #ifndef LLL_MUTEX_LOCK
@@ -47,6 +48,9 @@ __pthread_mutex_lock (mutex)
   assert (sizeof (mutex->__size) >= sizeof (mutex->__data));
 
   unsigned int type = PTHREAD_MUTEX_TYPE (mutex);
+
+  LIBC_PROBE (mutex_entry, 1, mutex);
+
   if (__builtin_expect (type & ~PTHREAD_MUTEX_KIND_MASK_NP, 0))
     return __pthread_mutex_lock_full (mutex);
 
@@ -126,6 +130,8 @@ __pthread_mutex_lock (mutex)
   ++mutex->__data.__nusers;
 #endif
 
+  LIBC_PROBE (mutex_acquired, 1, mutex);
+
   return 0;
 }
 
@@ -466,6 +472,8 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
   ++mutex->__data.__nusers;
 #endif
 
+  LIBC_PROBE (mutex_acquired, 1, mutex);
+
   return 0;
 }
 #ifndef __pthread_mutex_lock
index b7f34d4fd2b52980410ae7b3c92fa7ca193d180e..52fa74c0dce1c47234dc3937911b30568a21d61f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -23,6 +23,8 @@
 #include <lowlevellock.h>
 #include <not-cancel.h>
 
+#include <stap-probe.h>
+
 
 int
 pthread_mutex_timedlock (mutex, abstime)
@@ -33,6 +35,8 @@ pthread_mutex_timedlock (mutex, abstime)
   pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
   int result = 0;
 
+  LIBC_PROBE (mutex_timedlock_entry, 2, mutex, abstime);
+
   /* We must not check ABSTIME here.  If the thread does not block
      abstime must not be checked for a valid value.  */
 
@@ -171,6 +175,8 @@ pthread_mutex_timedlock (mutex, abstime)
 
                  ++mutex->__data.__count;
 
+                 LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
+
                  return 0;
                }
            }
@@ -241,6 +247,8 @@ pthread_mutex_timedlock (mutex, abstime)
 
                ++mutex->__data.__count;
 
+               LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
+
                return 0;
              }
          }
@@ -376,6 +384,8 @@ pthread_mutex_timedlock (mutex, abstime)
 
                ++mutex->__data.__count;
 
+               LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
+
                return 0;
              }
          }
@@ -476,6 +486,8 @@ pthread_mutex_timedlock (mutex, abstime)
       /* Record the ownership.  */
       mutex->__data.__owner = id;
       ++mutex->__data.__nusers;
+
+      LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
     }
 
  out:
index 0f35f6203fa745aae9d20abf1b37460337b6e414..aa8ecbd583a9d538d9f6cc8faec0066b738b457d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005-2008, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -21,6 +21,7 @@
 #include <stdlib.h>
 #include "pthreadP.h"
 #include <lowlevellock.h>
+#include <stap-probe.h>
 
 static int
 internal_function
@@ -49,6 +50,9 @@ __pthread_mutex_unlock_usercnt (mutex, decr)
 
       /* Unlock.  */
       lll_unlock (mutex->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex));
+
+      LIBC_PROBE (mutex_release, 1, mutex);
+
       return 0;
     }
   else if (__builtin_expect (type == PTHREAD_MUTEX_RECURSIVE_NP, 1))
@@ -271,6 +275,9 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
                        PTHREAD_MUTEX_PSHARED (mutex));
 
       int oldprio = newval >> PTHREAD_MUTEX_PRIO_CEILING_SHIFT;
+
+      LIBC_PROBE (mutex_release, 1, mutex);
+
       return __pthread_tpp_change_priority (oldprio, -1);
 
     default:
@@ -278,6 +285,7 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
       return EINVAL;
     }
 
+  LIBC_PROBE (mutex_release, 1, mutex);
   return 0;
 }
 
index 606833acf536516618fabb331e4100241e11d64a..78abe5ecef1c2f4e7315d3ddd86ef8e4659b6dd1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
    <http://www.gnu.org/licenses/>.  */
 
 #include "pthreadP.h"
+#include <stap-probe.h>
 
 
 int
 __pthread_rwlock_destroy (rwlock)
      pthread_rwlock_t *rwlock;
 {
+  LIBC_PROBE (rwlock_destroy, 1, rwlock);
+
   /* Nothing to be done.  For now.  */
   return 0;
 }
index 4aa1c5bb59d4f86a051a56cde9de1336b9c11ead..14688e29816d5ef3d34ed9bce1fdebeb3d2724d7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003,2004,2007,2011 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -21,6 +21,7 @@
 #include <lowlevellock.h>
 #include <pthread.h>
 #include <pthreadP.h>
+#include <stap-probe.h>
 
 
 /* Acquire read lock for RWLOCK.  */
@@ -30,6 +31,8 @@ __pthread_rwlock_rdlock (rwlock)
 {
   int result = 0;
 
+  LIBC_PROBE (rdlock_entry, 1, rwlock);
+
   /* Make sure we are alone.  */
   lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
 
@@ -48,6 +51,8 @@ __pthread_rwlock_rdlock (rwlock)
              --rwlock->__data.__nr_readers;
              result = EAGAIN;
            }
+         else
+           LIBC_PROBE (rdlock_acquire_read, 1, rwlock);
 
          break;
        }
index 15418c82f537e3ba66a08613b40e71fa123c6364..a727d89b9cf89854ab0b3d6a35c23e45cda54791 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
 #include <lowlevellock.h>
 #include <pthread.h>
 #include <pthreadP.h>
+#include <stap-probe.h>
 
 /* Unlock RWLOCK.  */
 int
 __pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
 {
+  LIBC_PROBE (rwlock_unlock, 1, rwlock);
+
   lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
   if (rwlock->__data.__writer)
     rwlock->__data.__writer = 0;
index a64548787773a0ea725469583dba79c1366d3854..6d8fb93c3b7039e6feebf8266e0e1bc7bc2533ee 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003,2007,2011 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -21,6 +21,7 @@
 #include <lowlevellock.h>
 #include <pthread.h>
 #include <pthreadP.h>
+#include <stap-probe.h>
 
 
 /* Acquire write lock for RWLOCK.  */
@@ -30,6 +31,8 @@ __pthread_rwlock_wrlock (rwlock)
 {
   int result = 0;
 
+  LIBC_PROBE (wrlock_entry, 1, rwlock);
+
   /* Make sure we are alone.  */
   lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
 
@@ -40,6 +43,8 @@ __pthread_rwlock_wrlock (rwlock)
        {
          /* Mark self as writer.  */
          rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);
+
+         LIBC_PROBE (wrlock_acquire_write, 1, rwlock);
          break;
        }
 
index b7bfc3706dd725eeeb2ab414ae6e62ca9b85c8d8..dc95421023a98d21c165e54a36b52ece6420c4f4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -21,6 +21,8 @@
 #include <kernel-features.h>
 #include <lowlevellock.h>
 
+#include <stap-probe.h>
+
        .text
 
 #ifdef __ASSUME_PRIVATE_FUTEX
@@ -86,7 +88,8 @@ __lll_lock_wait_private:
        cmpl    %edx, %eax      /* NB:   %edx == 2 */
        jne     2f
 
-1:     movl    $SYS_futex, %eax
+1:     LIBC_PROBE (lll_lock_wait_private, 1, %rdi)
+       movl    $SYS_futex, %eax
        syscall
 
 2:     movl    %edx, %eax
@@ -125,7 +128,8 @@ __lll_lock_wait:
        cmpl    %edx, %eax      /* NB:   %edx == 2 */
        jne     2f
 
-1:     movl    $SYS_futex, %eax
+1:     LIBC_PROBE (lll_lock_wait, 2, %rdi, %rsi)
+       movl    $SYS_futex, %eax
        syscall
 
 2:     movl    %edx, %eax
index ad14185d1bf50f68ed6e0d4828d2eb5e905fcfb4..3686970f08de249a329b871edb892b10a9673339 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 2002-2004, 2006-2008, 2009, 2012
-   Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -20,6 +19,8 @@
 #ifndef _LOWLEVELLOCK_H
 #define _LOWLEVELLOCK_H        1
 
+#include <stap-probe.h>
+
 #ifndef __ASSEMBLER__
 # include <time.h>
 # include <sys/param.h>
@@ -227,6 +228,7 @@ LLL_STUB_UNWIND_INFO_END
   do {                                                                       \
     int __ignore;                                                            \
     register __typeof (nr) _nr __asm ("edx") = (nr);                         \
+    LIBC_PROBE (lll_futex_wake, 3, futex, nr, private);                       \
     __asm __volatile ("syscall"                                                      \
                      : "=a" (__ignore)                                       \
                      : "0" (SYS_futex), "D" (futex),                         \
@@ -286,7 +288,7 @@ LLL_STUB_UNWIND_INFO_END
                              "je 0f\n\t"                                     \
                              "lock; cmpxchgl %4, %2\n\t"                     \
                              "jnz 1f\n\t"                                    \
-                             "jmp 24f\n"                                     \
+                             "jmp 24f\n"                                     \
                              "0:\tcmpxchgl %4, %2\n\t"                       \
                              "jnz 1f\n\t"
 #endif
index 7b0eec10e0107957d445a6186da1525a688fc2c8..67ff5fc4cd69a62b7b86570dc7dbd5ce9b069340 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
-   Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -24,7 +23,7 @@
 #include <kernel-features.h>
 #include <pthread-pi-defines.h>
 #include <pthread-errnos.h>
-
+#include <stap-probe.h>
 
        .text
 
@@ -34,6 +33,8 @@
        .align  16
 __pthread_cond_broadcast:
 
+       LIBC_PROBE (cond_broadcast, 1, %rdi)
+
        /* Get internal lock.  */
        movl    $1, %esi
        xorl    %eax, %eax
index a77b7d5965e4972598018dafd891983d69343c83..3bff19bd1293dd4122b7dd221499457727eb5864 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2005, 2007, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -23,6 +23,7 @@
 #include <pthread-pi-defines.h>
 #include <kernel-features.h>
 #include <pthread-errnos.h>
+#include <stap-probe.h>
 
 
        .text
@@ -33,6 +34,8 @@
        .align  16
 __pthread_cond_signal:
 
+       LIBC_PROBE (cond_signal, 1, %rdi)
+
        /* Get internal lock.  */
        movq    %rdi, %r8
        movl    $1, %esi
index 79bfecdbf295795b7e7d969aa7d54d1a94ae68f4..50e1ffd551a49e03fef48328c8f4f9b2c5c18373 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2005,2007,2009,2010,2011 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -22,6 +22,7 @@
 #include <lowlevelcond.h>
 #include <pthread-pi-defines.h>
 #include <pthread-errnos.h>
+#include <stap-probe.h>
 
 #include <kernel-features.h>
 
@@ -67,6 +68,8 @@ __pthread_cond_timedwait:
        cfi_adjust_cfa_offset(FRAME_SIZE)
        cfi_remember_state
 
+       LIBC_PROBE (cond_timedwait, 3, %rdi, %rsi, %rdx)
+
        cmpq    $1000000000, 8(%rdx)
        movl    $EINVAL, %eax
        jae     48f
index 6c1031ee05a1a576a01be68ef2261737086a3575..61948523a618a7f2eec93e24a8ee86e53ef0fd36 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2009, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -23,6 +23,7 @@
 #include <tcb-offsets.h>
 #include <pthread-pi-defines.h>
 #include <pthread-errnos.h>
+#include <stap-probe.h>
 
 #include <kernel-features.h>
 
@@ -54,20 +55,22 @@ __pthread_cond_wait:
           rsp + 32
                    +--------------------------+
           rsp + 24 | old wake_seq value       |
-                   +--------------------------+
+                   +--------------------------+
           rsp + 16 | mutex pointer            |
-                   +--------------------------+
+                   +--------------------------+
           rsp +  8 | condvar pointer          |
-                   +--------------------------+
+                   +--------------------------+
           rsp +  4 | old broadcast_seq value  |
-                   +--------------------------+
+                   +--------------------------+
           rsp +  0 | old cancellation mode    |
-                   +--------------------------+
+                   +--------------------------+
        */
 
+       LIBC_PROBE (cond_wait, 2, %rdi, %rsi)
+
        LP_OP(cmp) $-1, dep_mutex(%rdi)
 
-               /* Prepare structure passed to cancellation handler.  */
+       /* Prepare structure passed to cancellation handler.  */
        movq    %rdi, 8(%rsp)
        movq    %rsi, 16(%rsp)
 
@@ -406,15 +409,15 @@ __condvar_cleanup1:
           rsp + 32
                    +--------------------------+
           rsp + 24 | unused                   |
-                   +--------------------------+
+                   +--------------------------+
           rsp + 16 | mutex pointer            |
-                   +--------------------------+
+                   +--------------------------+
           rsp +  8 | condvar pointer          |
-                   +--------------------------+
+                   +--------------------------+
           rsp +  4 | old broadcast_seq value  |
-                   +--------------------------+
+                   +--------------------------+
           rsp +  0 | old cancellation mode    |
-                   +--------------------------+
+                   +--------------------------+
        */
 
        movq    %rax, 24(%rsp)
index c0761850d60ca236d8347b6b853669b249e1c70b..abb305791cb78d697db8910d0742ac5dce68532e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -21,7 +21,7 @@
 #include <lowlevelrwlock.h>
 #include <pthread-errnos.h>
 #include <kernel-features.h>
-
+#include <stap-probe.h>
 
        .text
 
@@ -30,6 +30,9 @@
        .align  16
 __pthread_rwlock_rdlock:
        cfi_startproc
+
+       LIBC_PROBE (rdlock_entry, 1, %rdi)
+
        xorq    %r10, %r10
 
        /* Get the lock.  */
index b349554eda544b94efb97fcb0daa1733dc9a849d..f6a6bff091c76edb9432e1216f7946ada5528074 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -21,7 +21,7 @@
 #include <lowlevelrwlock.h>
 #include <pthread-errnos.h>
 #include <kernel-features.h>
-
+#include <stap-probe.h>
 
        .text
 
@@ -30,6 +30,9 @@
        .align  16
 __pthread_rwlock_wrlock:
        cfi_startproc
+
+       LIBC_PROBE (wrlock_entry, 1, %rdi)
+
        xorq    %r10, %r10
 
        /* Get the lock.  */