mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Add systemtap static probe points in generic and x86_64 pthread code.
This commit is contained in:
@ -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>
|
2012-05-24 Roland McGrath <roland@hack.frob.com>
|
||||||
|
|
||||||
* pthread_create.c (start_thread): Define pthread_start LIBC_PROBE.
|
* pthread_create.c (start_thread): Define pthread_start LIBC_PROBE.
|
||||||
|
89
nptl/DESIGN-systemtap-probes.txt
Normal file
89
nptl/DESIGN-systemtap-probes.txt
Normal file
@ -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
|
@ -22,6 +22,7 @@
|
|||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <pthreadP.h>
|
#include <pthreadP.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
@ -31,6 +32,8 @@ int
|
|||||||
__pthread_cond_broadcast (cond)
|
__pthread_cond_broadcast (cond)
|
||||||
pthread_cond_t *cond;
|
pthread_cond_t *cond;
|
||||||
{
|
{
|
||||||
|
LIBC_PROBE (cond_broadcast, 1, cond);
|
||||||
|
|
||||||
int pshared = (cond->__data.__mutex == (void *) ~0l)
|
int pshared = (cond->__data.__mutex == (void *) ~0l)
|
||||||
? LLL_SHARED : LLL_PRIVATE;
|
? LLL_SHARED : LLL_PRIVATE;
|
||||||
/* Make sure we are alone. */
|
/* Make sure we are alone. */
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -19,6 +19,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -28,6 +29,8 @@ __pthread_cond_destroy (cond)
|
|||||||
int pshared = (cond->__data.__mutex == (void *) ~0l)
|
int pshared = (cond->__data.__mutex == (void *) ~0l)
|
||||||
? LLL_SHARED : LLL_PRIVATE;
|
? LLL_SHARED : LLL_PRIVATE;
|
||||||
|
|
||||||
|
LIBC_PROBE (cond_destroy, 1, cond);
|
||||||
|
|
||||||
/* Make sure we are alone. */
|
/* Make sure we are alone. */
|
||||||
lll_lock (cond->__data.__lock, pshared);
|
lll_lock (cond->__data.__lock, pshared);
|
||||||
|
|
||||||
@ -50,13 +53,13 @@ __pthread_cond_destroy (cond)
|
|||||||
if (nwaiters >= (1 << COND_NWAITERS_SHIFT))
|
if (nwaiters >= (1 << COND_NWAITERS_SHIFT))
|
||||||
{
|
{
|
||||||
/* Wake everybody on the associated mutex in case there are
|
/* Wake everybody on the associated mutex in case there are
|
||||||
threads that have been requeued to it.
|
threads that have been requeued to it.
|
||||||
Without this, pthread_cond_destroy could block potentially
|
Without this, pthread_cond_destroy could block potentially
|
||||||
for a long time or forever, as it would depend on other
|
for a long time or forever, as it would depend on other
|
||||||
thread's using the mutex.
|
thread's using the mutex.
|
||||||
When all threads waiting on the mutex are woken up, pthread_cond_wait
|
When all threads waiting on the mutex are woken up, pthread_cond_wait
|
||||||
only waits for threads to acquire and release the internal
|
only waits for threads to acquire and release the internal
|
||||||
condvar lock. */
|
condvar lock. */
|
||||||
if (cond->__data.__mutex != NULL
|
if (cond->__data.__mutex != NULL
|
||||||
&& cond->__data.__mutex != (void *) ~0l)
|
&& cond->__data.__mutex != (void *) ~0l)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008
|
/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
|
||||||
Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -19,6 +18,7 @@
|
|||||||
|
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -41,6 +41,8 @@ __pthread_cond_init (cond, cond_attr)
|
|||||||
? NULL : (void *) ~0l);
|
? NULL : (void *) ~0l);
|
||||||
cond->__data.__broadcast_seq = 0;
|
cond->__data.__broadcast_seq = 0;
|
||||||
|
|
||||||
|
LIBC_PROBE (cond_init, 2, cond, cond_attr);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
versioned_symbol (libpthread, __pthread_cond_init,
|
versioned_symbol (libpthread, __pthread_cond_init,
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -34,6 +35,8 @@ __pthread_cond_signal (cond)
|
|||||||
int pshared = (cond->__data.__mutex == (void *) ~0l)
|
int pshared = (cond->__data.__mutex == (void *) ~0l)
|
||||||
? LLL_SHARED : LLL_PRIVATE;
|
? LLL_SHARED : LLL_PRIVATE;
|
||||||
|
|
||||||
|
LIBC_PROBE (cond_signal, 1, cond);
|
||||||
|
|
||||||
/* Make sure we are alone. */
|
/* Make sure we are alone. */
|
||||||
lll_lock (cond->__data.__lock, pshared);
|
lll_lock (cond->__data.__lock, pshared);
|
||||||
|
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -24,6 +24,7 @@
|
|||||||
#include <pthreadP.h>
|
#include <pthreadP.h>
|
||||||
|
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
struct _condvar_cleanup_buffer
|
struct _condvar_cleanup_buffer
|
||||||
@ -43,7 +44,7 @@ __condvar_cleanup (void *arg)
|
|||||||
(struct _condvar_cleanup_buffer *) arg;
|
(struct _condvar_cleanup_buffer *) arg;
|
||||||
unsigned int destroying;
|
unsigned int destroying;
|
||||||
int pshared = (cbuffer->cond->__data.__mutex == (void *) ~0l)
|
int pshared = (cbuffer->cond->__data.__mutex == (void *) ~0l)
|
||||||
? LLL_SHARED : LLL_PRIVATE;
|
? LLL_SHARED : LLL_PRIVATE;
|
||||||
|
|
||||||
/* We are going to modify shared data. */
|
/* We are going to modify shared data. */
|
||||||
lll_lock (cbuffer->cond->__data.__lock, pshared);
|
lll_lock (cbuffer->cond->__data.__lock, pshared);
|
||||||
@ -98,7 +99,9 @@ __pthread_cond_wait (cond, mutex)
|
|||||||
struct _condvar_cleanup_buffer cbuffer;
|
struct _condvar_cleanup_buffer cbuffer;
|
||||||
int err;
|
int err;
|
||||||
int pshared = (cond->__data.__mutex == (void *) ~0l)
|
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. */
|
/* Make sure we are alone. */
|
||||||
lll_lock (cond->__data.__lock, pshared);
|
lll_lock (cond->__data.__lock, pshared);
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
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. */
|
/* Pass the descriptor to the caller. */
|
||||||
*newthread = (pthread_t) pd;
|
*newthread = (pthread_t) pd;
|
||||||
|
|
||||||
|
LIBC_PROBE (pthread_create, 4, newthread, attr, start_routine, arg);
|
||||||
|
|
||||||
/* Start the thread. */
|
/* Start the thread. */
|
||||||
return create_thread (pd, iattr, STACK_VARIABLES_ARGS);
|
return create_thread (pd, iattr, STACK_VARIABLES_ARGS);
|
||||||
}
|
}
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -22,6 +22,8 @@
|
|||||||
#include <atomic.h>
|
#include <atomic.h>
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
|
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cleanup (void *arg)
|
cleanup (void *arg)
|
||||||
@ -54,6 +56,8 @@ pthread_join (threadid, thread_return)
|
|||||||
struct pthread *self = THREAD_SELF;
|
struct pthread *self = THREAD_SELF;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
LIBC_PROBE (pthread_join, 1, threadid);
|
||||||
|
|
||||||
/* During the wait we change to asynchronous cancellation. If we
|
/* During the wait we change to asynchronous cancellation. If we
|
||||||
are canceled the thread we are waiting for must be marked as
|
are canceled the thread we are waiting for must be marked as
|
||||||
un-wait-ed for again. */
|
un-wait-ed for again. */
|
||||||
@ -109,5 +113,7 @@ pthread_join (threadid, thread_return)
|
|||||||
__free_tcb (pd);
|
__free_tcb (pd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LIBC_PROBE (pthread_join_ret, 3, threadid, result, pd->result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -19,11 +19,15 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
|
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
__pthread_mutex_destroy (mutex)
|
__pthread_mutex_destroy (mutex)
|
||||||
pthread_mutex_t *mutex;
|
pthread_mutex_t *mutex;
|
||||||
{
|
{
|
||||||
|
LIBC_PROBE (mutex_destroy, 1, mutex);
|
||||||
|
|
||||||
if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
|
if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
|
||||||
&& mutex->__data.__nusers != 0)
|
&& mutex->__data.__nusers != 0)
|
||||||
return EBUSY;
|
return EBUSY;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
|
/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
|
||||||
Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -23,6 +22,8 @@
|
|||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
|
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
static const struct pthread_mutexattr default_attr =
|
static const struct pthread_mutexattr default_attr =
|
||||||
{
|
{
|
||||||
/* Default is a normal mutex, not shared between processes. */
|
/* 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->__spins = 0; already done by memset
|
||||||
// mutex->__next = NULL; already done by memset
|
// mutex->__next = NULL; already done by memset
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_init, 1, mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
strong_alias (__pthread_mutex_init, pthread_mutex_init)
|
strong_alias (__pthread_mutex_init, pthread_mutex_init)
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -23,6 +23,7 @@
|
|||||||
#include <not-cancel.h>
|
#include <not-cancel.h>
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
#ifndef LLL_MUTEX_LOCK
|
#ifndef LLL_MUTEX_LOCK
|
||||||
@ -47,6 +48,9 @@ __pthread_mutex_lock (mutex)
|
|||||||
assert (sizeof (mutex->__size) >= sizeof (mutex->__data));
|
assert (sizeof (mutex->__size) >= sizeof (mutex->__data));
|
||||||
|
|
||||||
unsigned int type = PTHREAD_MUTEX_TYPE (mutex);
|
unsigned int type = PTHREAD_MUTEX_TYPE (mutex);
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_entry, 1, mutex);
|
||||||
|
|
||||||
if (__builtin_expect (type & ~PTHREAD_MUTEX_KIND_MASK_NP, 0))
|
if (__builtin_expect (type & ~PTHREAD_MUTEX_KIND_MASK_NP, 0))
|
||||||
return __pthread_mutex_lock_full (mutex);
|
return __pthread_mutex_lock_full (mutex);
|
||||||
|
|
||||||
@ -126,6 +130,8 @@ __pthread_mutex_lock (mutex)
|
|||||||
++mutex->__data.__nusers;
|
++mutex->__data.__nusers;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_acquired, 1, mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -466,6 +472,8 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
|
|||||||
++mutex->__data.__nusers;
|
++mutex->__data.__nusers;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_acquired, 1, mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifndef __pthread_mutex_lock
|
#ifndef __pthread_mutex_lock
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -23,6 +23,8 @@
|
|||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
#include <not-cancel.h>
|
#include <not-cancel.h>
|
||||||
|
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
pthread_mutex_timedlock (mutex, abstime)
|
pthread_mutex_timedlock (mutex, abstime)
|
||||||
@ -33,6 +35,8 @@ pthread_mutex_timedlock (mutex, abstime)
|
|||||||
pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
|
pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_timedlock_entry, 2, mutex, abstime);
|
||||||
|
|
||||||
/* We must not check ABSTIME here. If the thread does not block
|
/* We must not check ABSTIME here. If the thread does not block
|
||||||
abstime must not be checked for a valid value. */
|
abstime must not be checked for a valid value. */
|
||||||
|
|
||||||
@ -171,6 +175,8 @@ pthread_mutex_timedlock (mutex, abstime)
|
|||||||
|
|
||||||
++mutex->__data.__count;
|
++mutex->__data.__count;
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -241,6 +247,8 @@ pthread_mutex_timedlock (mutex, abstime)
|
|||||||
|
|
||||||
++mutex->__data.__count;
|
++mutex->__data.__count;
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -376,6 +384,8 @@ pthread_mutex_timedlock (mutex, abstime)
|
|||||||
|
|
||||||
++mutex->__data.__count;
|
++mutex->__data.__count;
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -476,6 +486,8 @@ pthread_mutex_timedlock (mutex, abstime)
|
|||||||
/* Record the ownership. */
|
/* Record the ownership. */
|
||||||
mutex->__data.__owner = id;
|
mutex->__data.__owner = id;
|
||||||
++mutex->__data.__nusers;
|
++mutex->__data.__nusers;
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -21,6 +21,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
static int
|
static int
|
||||||
internal_function
|
internal_function
|
||||||
@ -49,6 +50,9 @@ __pthread_mutex_unlock_usercnt (mutex, decr)
|
|||||||
|
|
||||||
/* Unlock. */
|
/* Unlock. */
|
||||||
lll_unlock (mutex->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex));
|
lll_unlock (mutex->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex));
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_release, 1, mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (__builtin_expect (type == PTHREAD_MUTEX_RECURSIVE_NP, 1))
|
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));
|
PTHREAD_MUTEX_PSHARED (mutex));
|
||||||
|
|
||||||
int oldprio = newval >> PTHREAD_MUTEX_PRIO_CEILING_SHIFT;
|
int oldprio = newval >> PTHREAD_MUTEX_PRIO_CEILING_SHIFT;
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_release, 1, mutex);
|
||||||
|
|
||||||
return __pthread_tpp_change_priority (oldprio, -1);
|
return __pthread_tpp_change_priority (oldprio, -1);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -278,6 +285,7 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
|
|||||||
return EINVAL;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LIBC_PROBE (mutex_release, 1, mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -17,12 +17,15 @@
|
|||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#include "pthreadP.h"
|
#include "pthreadP.h"
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
__pthread_rwlock_destroy (rwlock)
|
__pthread_rwlock_destroy (rwlock)
|
||||||
pthread_rwlock_t *rwlock;
|
pthread_rwlock_t *rwlock;
|
||||||
{
|
{
|
||||||
|
LIBC_PROBE (rwlock_destroy, 1, rwlock);
|
||||||
|
|
||||||
/* Nothing to be done. For now. */
|
/* Nothing to be done. For now. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -21,6 +21,7 @@
|
|||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <pthreadP.h>
|
#include <pthreadP.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
/* Acquire read lock for RWLOCK. */
|
/* Acquire read lock for RWLOCK. */
|
||||||
@ -30,6 +31,8 @@ __pthread_rwlock_rdlock (rwlock)
|
|||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
LIBC_PROBE (rdlock_entry, 1, rwlock);
|
||||||
|
|
||||||
/* Make sure we are alone. */
|
/* Make sure we are alone. */
|
||||||
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
|
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
|
||||||
|
|
||||||
@ -48,6 +51,8 @@ __pthread_rwlock_rdlock (rwlock)
|
|||||||
--rwlock->__data.__nr_readers;
|
--rwlock->__data.__nr_readers;
|
||||||
result = EAGAIN;
|
result = EAGAIN;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
LIBC_PROBE (rdlock_acquire_read, 1, rwlock);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -21,11 +21,14 @@
|
|||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <pthreadP.h>
|
#include <pthreadP.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
/* Unlock RWLOCK. */
|
/* Unlock RWLOCK. */
|
||||||
int
|
int
|
||||||
__pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
|
__pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
|
||||||
{
|
{
|
||||||
|
LIBC_PROBE (rwlock_unlock, 1, rwlock);
|
||||||
|
|
||||||
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
|
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
|
||||||
if (rwlock->__data.__writer)
|
if (rwlock->__data.__writer)
|
||||||
rwlock->__data.__writer = 0;
|
rwlock->__data.__writer = 0;
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -21,6 +21,7 @@
|
|||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <pthreadP.h>
|
#include <pthreadP.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
/* Acquire write lock for RWLOCK. */
|
/* Acquire write lock for RWLOCK. */
|
||||||
@ -30,6 +31,8 @@ __pthread_rwlock_wrlock (rwlock)
|
|||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
LIBC_PROBE (wrlock_entry, 1, rwlock);
|
||||||
|
|
||||||
/* Make sure we are alone. */
|
/* Make sure we are alone. */
|
||||||
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
|
lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
|
||||||
|
|
||||||
@ -40,6 +43,8 @@ __pthread_rwlock_wrlock (rwlock)
|
|||||||
{
|
{
|
||||||
/* Mark self as writer. */
|
/* Mark self as writer. */
|
||||||
rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);
|
rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);
|
||||||
|
|
||||||
|
LIBC_PROBE (wrlock_acquire_write, 1, rwlock);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -21,6 +21,8 @@
|
|||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
#include <lowlevellock.h>
|
#include <lowlevellock.h>
|
||||||
|
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
#ifdef __ASSUME_PRIVATE_FUTEX
|
#ifdef __ASSUME_PRIVATE_FUTEX
|
||||||
@ -86,7 +88,8 @@ __lll_lock_wait_private:
|
|||||||
cmpl %edx, %eax /* NB: %edx == 2 */
|
cmpl %edx, %eax /* NB: %edx == 2 */
|
||||||
jne 2f
|
jne 2f
|
||||||
|
|
||||||
1: movl $SYS_futex, %eax
|
1: LIBC_PROBE (lll_lock_wait_private, 1, %rdi)
|
||||||
|
movl $SYS_futex, %eax
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
2: movl %edx, %eax
|
2: movl %edx, %eax
|
||||||
@ -125,7 +128,8 @@ __lll_lock_wait:
|
|||||||
cmpl %edx, %eax /* NB: %edx == 2 */
|
cmpl %edx, %eax /* NB: %edx == 2 */
|
||||||
jne 2f
|
jne 2f
|
||||||
|
|
||||||
1: movl $SYS_futex, %eax
|
1: LIBC_PROBE (lll_lock_wait, 2, %rdi, %rsi)
|
||||||
|
movl $SYS_futex, %eax
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
2: movl %edx, %eax
|
2: movl %edx, %eax
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
/* Copyright (C) 2002-2004, 2006-2008, 2009, 2012
|
/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
|
||||||
Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -20,6 +19,8 @@
|
|||||||
#ifndef _LOWLEVELLOCK_H
|
#ifndef _LOWLEVELLOCK_H
|
||||||
#define _LOWLEVELLOCK_H 1
|
#define _LOWLEVELLOCK_H 1
|
||||||
|
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
#ifndef __ASSEMBLER__
|
#ifndef __ASSEMBLER__
|
||||||
# include <time.h>
|
# include <time.h>
|
||||||
# include <sys/param.h>
|
# include <sys/param.h>
|
||||||
@ -227,6 +228,7 @@ LLL_STUB_UNWIND_INFO_END
|
|||||||
do { \
|
do { \
|
||||||
int __ignore; \
|
int __ignore; \
|
||||||
register __typeof (nr) _nr __asm ("edx") = (nr); \
|
register __typeof (nr) _nr __asm ("edx") = (nr); \
|
||||||
|
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
|
||||||
__asm __volatile ("syscall" \
|
__asm __volatile ("syscall" \
|
||||||
: "=a" (__ignore) \
|
: "=a" (__ignore) \
|
||||||
: "0" (SYS_futex), "D" (futex), \
|
: "0" (SYS_futex), "D" (futex), \
|
||||||
@ -286,7 +288,7 @@ LLL_STUB_UNWIND_INFO_END
|
|||||||
"je 0f\n\t" \
|
"je 0f\n\t" \
|
||||||
"lock; cmpxchgl %4, %2\n\t" \
|
"lock; cmpxchgl %4, %2\n\t" \
|
||||||
"jnz 1f\n\t" \
|
"jnz 1f\n\t" \
|
||||||
"jmp 24f\n" \
|
"jmp 24f\n" \
|
||||||
"0:\tcmpxchgl %4, %2\n\t" \
|
"0:\tcmpxchgl %4, %2\n\t" \
|
||||||
"jnz 1f\n\t"
|
"jnz 1f\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009
|
/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
|
||||||
Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -24,7 +23,7 @@
|
|||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
#include <pthread-pi-defines.h>
|
#include <pthread-pi-defines.h>
|
||||||
#include <pthread-errnos.h>
|
#include <pthread-errnos.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
@ -34,6 +33,8 @@
|
|||||||
.align 16
|
.align 16
|
||||||
__pthread_cond_broadcast:
|
__pthread_cond_broadcast:
|
||||||
|
|
||||||
|
LIBC_PROBE (cond_broadcast, 1, %rdi)
|
||||||
|
|
||||||
/* Get internal lock. */
|
/* Get internal lock. */
|
||||||
movl $1, %esi
|
movl $1, %esi
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -23,6 +23,7 @@
|
|||||||
#include <pthread-pi-defines.h>
|
#include <pthread-pi-defines.h>
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
#include <pthread-errnos.h>
|
#include <pthread-errnos.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
@ -33,6 +34,8 @@
|
|||||||
.align 16
|
.align 16
|
||||||
__pthread_cond_signal:
|
__pthread_cond_signal:
|
||||||
|
|
||||||
|
LIBC_PROBE (cond_signal, 1, %rdi)
|
||||||
|
|
||||||
/* Get internal lock. */
|
/* Get internal lock. */
|
||||||
movq %rdi, %r8
|
movq %rdi, %r8
|
||||||
movl $1, %esi
|
movl $1, %esi
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -22,6 +22,7 @@
|
|||||||
#include <lowlevelcond.h>
|
#include <lowlevelcond.h>
|
||||||
#include <pthread-pi-defines.h>
|
#include <pthread-pi-defines.h>
|
||||||
#include <pthread-errnos.h>
|
#include <pthread-errnos.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
|
|
||||||
@ -67,6 +68,8 @@ __pthread_cond_timedwait:
|
|||||||
cfi_adjust_cfa_offset(FRAME_SIZE)
|
cfi_adjust_cfa_offset(FRAME_SIZE)
|
||||||
cfi_remember_state
|
cfi_remember_state
|
||||||
|
|
||||||
|
LIBC_PROBE (cond_timedwait, 3, %rdi, %rsi, %rdx)
|
||||||
|
|
||||||
cmpq $1000000000, 8(%rdx)
|
cmpq $1000000000, 8(%rdx)
|
||||||
movl $EINVAL, %eax
|
movl $EINVAL, %eax
|
||||||
jae 48f
|
jae 48f
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -23,6 +23,7 @@
|
|||||||
#include <tcb-offsets.h>
|
#include <tcb-offsets.h>
|
||||||
#include <pthread-pi-defines.h>
|
#include <pthread-pi-defines.h>
|
||||||
#include <pthread-errnos.h>
|
#include <pthread-errnos.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
|
|
||||||
@ -54,20 +55,22 @@ __pthread_cond_wait:
|
|||||||
rsp + 32
|
rsp + 32
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 24 | old wake_seq value |
|
rsp + 24 | old wake_seq value |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 16 | mutex pointer |
|
rsp + 16 | mutex pointer |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 8 | condvar pointer |
|
rsp + 8 | condvar pointer |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 4 | old broadcast_seq value |
|
rsp + 4 | old broadcast_seq value |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 0 | old cancellation mode |
|
rsp + 0 | old cancellation mode |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
LIBC_PROBE (cond_wait, 2, %rdi, %rsi)
|
||||||
|
|
||||||
LP_OP(cmp) $-1, dep_mutex(%rdi)
|
LP_OP(cmp) $-1, dep_mutex(%rdi)
|
||||||
|
|
||||||
/* Prepare structure passed to cancellation handler. */
|
/* Prepare structure passed to cancellation handler. */
|
||||||
movq %rdi, 8(%rsp)
|
movq %rdi, 8(%rsp)
|
||||||
movq %rsi, 16(%rsp)
|
movq %rsi, 16(%rsp)
|
||||||
|
|
||||||
@ -406,15 +409,15 @@ __condvar_cleanup1:
|
|||||||
rsp + 32
|
rsp + 32
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 24 | unused |
|
rsp + 24 | unused |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 16 | mutex pointer |
|
rsp + 16 | mutex pointer |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 8 | condvar pointer |
|
rsp + 8 | condvar pointer |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 4 | old broadcast_seq value |
|
rsp + 4 | old broadcast_seq value |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
rsp + 0 | old cancellation mode |
|
rsp + 0 | old cancellation mode |
|
||||||
+--------------------------+
|
+--------------------------+
|
||||||
*/
|
*/
|
||||||
|
|
||||||
movq %rax, 24(%rsp)
|
movq %rax, 24(%rsp)
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#include <lowlevelrwlock.h>
|
#include <lowlevelrwlock.h>
|
||||||
#include <pthread-errnos.h>
|
#include <pthread-errnos.h>
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
@ -30,6 +30,9 @@
|
|||||||
.align 16
|
.align 16
|
||||||
__pthread_rwlock_rdlock:
|
__pthread_rwlock_rdlock:
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
|
|
||||||
|
LIBC_PROBE (rdlock_entry, 1, %rdi)
|
||||||
|
|
||||||
xorq %r10, %r10
|
xorq %r10, %r10
|
||||||
|
|
||||||
/* Get the lock. */
|
/* Get the lock. */
|
||||||
|
@ -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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#include <lowlevelrwlock.h>
|
#include <lowlevelrwlock.h>
|
||||||
#include <pthread-errnos.h>
|
#include <pthread-errnos.h>
|
||||||
#include <kernel-features.h>
|
#include <kernel-features.h>
|
||||||
|
#include <stap-probe.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
@ -30,6 +30,9 @@
|
|||||||
.align 16
|
.align 16
|
||||||
__pthread_rwlock_wrlock:
|
__pthread_rwlock_wrlock:
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
|
|
||||||
|
LIBC_PROBE (wrlock_entry, 1, %rdi)
|
||||||
|
|
||||||
xorq %r10, %r10
|
xorq %r10, %r10
|
||||||
|
|
||||||
/* Get the lock. */
|
/* Get the lock. */
|
||||||
|
Reference in New Issue
Block a user