Blame sysdeps/htl/libc-lockP.h

Packit Service 82fcde
/* Private libc-internal interface for mutex locks.
Packit Service 82fcde
   Copyright (C) 2015-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public License as
Packit Service 82fcde
   published by the Free Software Foundation; either version 2.1 of the
Packit Service 82fcde
   License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; see the file COPYING.LIB.  If
Packit Service 82fcde
   not, see <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef _BITS_LIBC_LOCKP_H
Packit Service 82fcde
#define _BITS_LIBC_LOCKP_H 1
Packit Service 82fcde
Packit Service 82fcde
#include <pthread.h>
Packit Service 82fcde
#include <pthread-functions.h>
Packit Service 82fcde
Packit Service 82fcde
/* Type for key to thread-specific data.  */
Packit Service 82fcde
typedef pthread_key_t __libc_key_t;
Packit Service 82fcde
Packit Service 82fcde
/* If we check for a weakly referenced symbol and then perform a
Packit Service 82fcde
   normal jump to it te code generated for some platforms in case of
Packit Service 82fcde
   PIC is unnecessarily slow.  What would happen is that the function
Packit Service 82fcde
   is first referenced as data and then it is called indirectly
Packit Service 82fcde
   through the PLT.  We can make this a direct jump.  */
Packit Service 82fcde
#ifdef __PIC__
Packit Service 82fcde
# define __libc_maybe_call(FUNC, ARGS, ELSE) \
Packit Service 82fcde
  (__extension__ ({ __typeof (FUNC) *_fn = (FUNC); \
Packit Service 82fcde
		    _fn != NULL ? (*_fn) ARGS : ELSE; }))
Packit Service 82fcde
#else
Packit Service 82fcde
# define __libc_maybe_call(FUNC, ARGS, ELSE) \
Packit Service 82fcde
  (FUNC != NULL ? FUNC ARGS : ELSE)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Call thread functions through the function pointer table.  */
Packit Service 82fcde
#if defined SHARED && IS_IN (libc)
Packit Service 82fcde
# define PTFAVAIL(NAME) __libc_pthread_functions_init
Packit Service 82fcde
# define __libc_ptf_call(FUNC, ARGS, ELSE) \
Packit Service 82fcde
  (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)
Packit Service 82fcde
# define __libc_ptf_call_always(FUNC, ARGS) \
Packit Service 82fcde
  PTHFCT_CALL (ptr_##FUNC, ARGS)
Packit Service 82fcde
#elif IS_IN (libpthread)
Packit Service 82fcde
# define PTFAVAIL(NAME) 1
Packit Service 82fcde
# define __libc_ptf_call(FUNC, ARGS, ELSE) \
Packit Service 82fcde
  FUNC ARGS
Packit Service 82fcde
# define __libc_ptf_call_always(FUNC, ARGS) \
Packit Service 82fcde
  FUNC ARGS
Packit Service 82fcde
#else
Packit Service 82fcde
# define PTFAVAIL(NAME) (NAME != NULL)
Packit Service 82fcde
# define __libc_ptf_call(FUNC, ARGS, ELSE) \
Packit Service 82fcde
  __libc_maybe_call (FUNC, ARGS, ELSE)
Packit Service 82fcde
# define __libc_ptf_call_always(FUNC, ARGS) \
Packit Service 82fcde
  FUNC ARGS
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Create thread-specific key.  */
Packit Service 82fcde
#define __libc_key_create(KEY, DESTRUCTOR) \
Packit Service 82fcde
  __libc_ptf_call (__pthread_key_create, (KEY, DESTRUCTOR), 1)
Packit Service 82fcde
Packit Service 82fcde
/* Get thread-specific data.  */
Packit Service 82fcde
#define __libc_getspecific(KEY) \
Packit Service 82fcde
  __libc_ptf_call (__pthread_getspecific, (KEY), NULL)
Packit Service 82fcde
Packit Service 82fcde
/* Set thread-specific data.  */
Packit Service 82fcde
#define __libc_setspecific(KEY, VALUE) \
Packit Service 82fcde
  __libc_ptf_call (__pthread_setspecific, (KEY, VALUE), 0)
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions that are used by this file and are internal to the GNU C
Packit Service 82fcde
   library.  */
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
Packit Service 82fcde
				 const pthread_mutexattr_t *__mutex_attr);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_mutexattr_settype (pthread_mutexattr_t *__attr,
Packit Service 82fcde
					int __kind);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
Packit Service 82fcde
				  const pthread_rwlockattr_t *__attr);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_key_create (pthread_key_t *__key,
Packit Service 82fcde
				 void (*__destr_function) (void *));
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_setspecific (pthread_key_t __key,
Packit Service 82fcde
				  const void *__pointer);
Packit Service 82fcde
Packit Service 82fcde
extern void *__pthread_getspecific (pthread_key_t __key);
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_once (pthread_once_t *__once_control,
Packit Service 82fcde
			   void (*__init_routine) (void));
Packit Service 82fcde
Packit Service 82fcde
extern int __pthread_atfork (void (*__prepare) (void),
Packit Service 82fcde
			     void (*__parent) (void),
Packit Service 82fcde
			     void (*__child) (void));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Make the pthread functions weak so that we can elide them from
Packit Service 82fcde
   single-threaded processes.  */
Packit Service 82fcde
#if !defined(__NO_WEAK_PTHREAD_ALIASES) && !IS_IN (libpthread)
Packit Service 82fcde
# ifdef weak_extern
Packit Service 82fcde
weak_extern (__pthread_mutex_init)
Packit Service 82fcde
weak_extern (__pthread_mutex_destroy)
Packit Service 82fcde
weak_extern (__pthread_mutex_lock)
Packit Service 82fcde
weak_extern (__pthread_mutex_trylock)
Packit Service 82fcde
weak_extern (__pthread_mutex_unlock)
Packit Service 82fcde
weak_extern (__pthread_mutexattr_init)
Packit Service 82fcde
weak_extern (__pthread_mutexattr_destroy)
Packit Service 82fcde
weak_extern (__pthread_mutexattr_settype)
Packit Service 82fcde
weak_extern (__pthread_rwlock_init)
Packit Service 82fcde
weak_extern (__pthread_rwlock_destroy)
Packit Service 82fcde
weak_extern (__pthread_rwlock_rdlock)
Packit Service 82fcde
weak_extern (__pthread_rwlock_tryrdlock)
Packit Service 82fcde
weak_extern (__pthread_rwlock_wrlock)
Packit Service 82fcde
weak_extern (__pthread_rwlock_trywrlock)
Packit Service 82fcde
weak_extern (__pthread_rwlock_unlock)
Packit Service 82fcde
weak_extern (__pthread_key_create)
Packit Service 82fcde
weak_extern (__pthread_setspecific)
Packit Service 82fcde
weak_extern (__pthread_getspecific)
Packit Service 82fcde
weak_extern (__pthread_once)
Packit Service 82fcde
weak_extern (__pthread_initialize)
Packit Service 82fcde
weak_extern (__pthread_atfork)
Packit Service 82fcde
weak_extern (__pthread_setcancelstate)
Packit Service 82fcde
# else
Packit Service 82fcde
#  pragma weak __pthread_mutex_init
Packit Service 82fcde
#  pragma weak __pthread_mutex_destroy
Packit Service 82fcde
#  pragma weak __pthread_mutex_lock
Packit Service 82fcde
#  pragma weak __pthread_mutex_trylock
Packit Service 82fcde
#  pragma weak __pthread_mutex_unlock
Packit Service 82fcde
#  pragma weak __pthread_mutexattr_init
Packit Service 82fcde
#  pragma weak __pthread_mutexattr_destroy
Packit Service 82fcde
#  pragma weak __pthread_mutexattr_settype
Packit Service 82fcde
#  pragma weak __pthread_rwlock_destroy
Packit Service 82fcde
#  pragma weak __pthread_rwlock_rdlock
Packit Service 82fcde
#  pragma weak __pthread_rwlock_tryrdlock
Packit Service 82fcde
#  pragma weak __pthread_rwlock_wrlock
Packit Service 82fcde
#  pragma weak __pthread_rwlock_trywrlock
Packit Service 82fcde
#  pragma weak __pthread_rwlock_unlock
Packit Service 82fcde
#  pragma weak __pthread_key_create
Packit Service 82fcde
#  pragma weak __pthread_setspecific
Packit Service 82fcde
#  pragma weak __pthread_getspecific
Packit Service 82fcde
#  pragma weak __pthread_once
Packit Service 82fcde
#  pragma weak __pthread_initialize
Packit Service 82fcde
#  pragma weak __pthread_atfork
Packit Service 82fcde
#  pragma weak __pthread_setcancelstate
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#endif	/* bits/libc-lockP.h */