2014-01-01 11:03:15 +00:00
|
|
|
/* Copyright (C) 2003-2014 Free Software Foundation, Inc.
|
2003-01-05 10:55:15 +00:00
|
|
|
This file is part of the GNU C Library.
|
|
|
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
|
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-09 23:18:22 +00:00
|
|
|
License along with the GNU C Library; if not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
2003-01-05 10:55:15 +00:00
|
|
|
|
|
|
|
#ifndef _PTHREAD_FUNCTIONS_H
|
|
|
|
#define _PTHREAD_FUNCTIONS_H 1
|
|
|
|
|
|
|
|
#include <pthread.h>
|
|
|
|
#include <setjmp.h>
|
|
|
|
#include <internaltypes.h>
|
2007-01-17 08:37:26 +00:00
|
|
|
#include <sysdep.h>
|
2003-01-05 10:55:15 +00:00
|
|
|
|
2004-11-12 01:27:04 +00:00
|
|
|
struct xid_command;
|
2003-01-05 10:55:15 +00:00
|
|
|
|
|
|
|
/* Data type shared with libc. The libc uses it to pass on calls to
|
|
|
|
the thread functions. */
|
|
|
|
struct pthread_functions
|
|
|
|
{
|
|
|
|
int (*ptr_pthread_attr_destroy) (pthread_attr_t *);
|
|
|
|
int (*ptr___pthread_attr_init_2_0) (pthread_attr_t *);
|
|
|
|
int (*ptr___pthread_attr_init_2_1) (pthread_attr_t *);
|
|
|
|
int (*ptr_pthread_attr_getdetachstate) (const pthread_attr_t *, int *);
|
|
|
|
int (*ptr_pthread_attr_setdetachstate) (pthread_attr_t *, int);
|
|
|
|
int (*ptr_pthread_attr_getinheritsched) (const pthread_attr_t *, int *);
|
|
|
|
int (*ptr_pthread_attr_setinheritsched) (pthread_attr_t *, int);
|
|
|
|
int (*ptr_pthread_attr_getschedparam) (const pthread_attr_t *,
|
|
|
|
struct sched_param *);
|
|
|
|
int (*ptr_pthread_attr_setschedparam) (pthread_attr_t *,
|
|
|
|
const struct sched_param *);
|
|
|
|
int (*ptr_pthread_attr_getschedpolicy) (const pthread_attr_t *, int *);
|
|
|
|
int (*ptr_pthread_attr_setschedpolicy) (pthread_attr_t *, int);
|
|
|
|
int (*ptr_pthread_attr_getscope) (const pthread_attr_t *, int *);
|
|
|
|
int (*ptr_pthread_attr_setscope) (pthread_attr_t *, int);
|
|
|
|
int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *);
|
|
|
|
int (*ptr_pthread_condattr_init) (pthread_condattr_t *);
|
|
|
|
int (*ptr___pthread_cond_broadcast) (pthread_cond_t *);
|
|
|
|
int (*ptr___pthread_cond_destroy) (pthread_cond_t *);
|
|
|
|
int (*ptr___pthread_cond_init) (pthread_cond_t *,
|
|
|
|
const pthread_condattr_t *);
|
|
|
|
int (*ptr___pthread_cond_signal) (pthread_cond_t *);
|
|
|
|
int (*ptr___pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
|
2003-09-02 00:49:47 +00:00
|
|
|
int (*ptr___pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *,
|
|
|
|
const struct timespec *);
|
2003-01-05 10:55:15 +00:00
|
|
|
int (*ptr___pthread_cond_broadcast_2_0) (pthread_cond_2_0_t *);
|
|
|
|
int (*ptr___pthread_cond_destroy_2_0) (pthread_cond_2_0_t *);
|
|
|
|
int (*ptr___pthread_cond_init_2_0) (pthread_cond_2_0_t *,
|
|
|
|
const pthread_condattr_t *);
|
|
|
|
int (*ptr___pthread_cond_signal_2_0) (pthread_cond_2_0_t *);
|
|
|
|
int (*ptr___pthread_cond_wait_2_0) (pthread_cond_2_0_t *, pthread_mutex_t *);
|
2003-09-02 00:49:47 +00:00
|
|
|
int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *,
|
|
|
|
pthread_mutex_t *,
|
|
|
|
const struct timespec *);
|
2003-01-05 10:55:15 +00:00
|
|
|
int (*ptr_pthread_equal) (pthread_t, pthread_t);
|
2012-01-11 00:02:21 +00:00
|
|
|
void (*ptr___pthread_exit) (void *) __attribute__ ((__noreturn__));
|
2003-01-05 10:55:15 +00:00
|
|
|
int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *);
|
|
|
|
int (*ptr_pthread_setschedparam) (pthread_t, int,
|
|
|
|
const struct sched_param *);
|
|
|
|
int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *);
|
|
|
|
int (*ptr_pthread_mutex_init) (pthread_mutex_t *,
|
|
|
|
const pthread_mutexattr_t *);
|
|
|
|
int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
|
|
|
|
int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
|
|
|
|
pthread_t (*ptr_pthread_self) (void);
|
|
|
|
int (*ptr_pthread_setcancelstate) (int, int *);
|
|
|
|
int (*ptr_pthread_setcanceltype) (int, int *);
|
2003-03-03 08:44:46 +00:00
|
|
|
void (*ptr___pthread_cleanup_upto) (__jmp_buf, char *);
|
2003-01-05 10:55:15 +00:00
|
|
|
int (*ptr___pthread_once) (pthread_once_t *, void (*) (void));
|
|
|
|
int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *);
|
|
|
|
int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *);
|
|
|
|
int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *);
|
|
|
|
int (*ptr___pthread_key_create) (pthread_key_t *, void (*) (void *));
|
2003-01-30 18:41:47 +00:00
|
|
|
void *(*ptr___pthread_getspecific) (pthread_key_t);
|
2003-01-05 10:55:15 +00:00
|
|
|
int (*ptr___pthread_setspecific) (pthread_key_t, const void *);
|
|
|
|
void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer *,
|
|
|
|
void (*) (void *), void *);
|
|
|
|
void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer *,
|
|
|
|
int);
|
2003-02-14 23:31:11 +00:00
|
|
|
#define HAVE_PTR_NTHREADS
|
[BZ #284, BZ #721]
* intl/dcigettext.c (_nl_find_msg): Add a cast.
* nis/nis_clone_dir.c (nis_clone_directory): Use char * for ADDR.
* nis/nis_clone_obj.c (nis_clone_object): Likewise.
* nis/nis_clone_res.c (nis_clone_result): Likewise.
* resolv/nss_dns/dns-network.c (getanswer_r): Use const unsigned char *
for END_OF_MESSAGE and CP.
* resolv/res_send.c (send_dg): Add else branch for case impossible
unless `poll' is buggy.
* crypt/crypt_util.c (__setkey_r): Add a cast.
* locale/programs/linereader.c (get_toplvl_escape): Use size_t for
NBYTES, and unsigned char * for BYTES.
* locale/programs/charmap.c (charmap_new_char): Use size_t and
unsighed char * for NBYTES, BYTES parameters.
* sysdeps/generic/dl-hash.h (_dl_elf_hash): Take const char * argument
and cast it.
* sysdeps/i386/i686/dl-hash.h (_dl_elf_hash): Likewise.
* sunrpc/create_xid.c (_create_xid): Don't use unsigned long for RES.
* sunrpc/svcauth_des.c (_svcauth_des): Fix cast type.
* sunrpc/auth_des.c (authdes_create): Don't use u_char for PKEY_DATA.
(authdes_marshal): Don't use unsigned int for LEN.
* sunrpc/xdr.c (xdr_hyper): Don't use unsigned long for T2.
(xdr_u_hyper): Likewise.
(xdr_u_short): Don't use u_long for L.
* sunrpc/xdr_intXX_t.c (xdr_int64_t): Don't use uint32_t for T2.
* inet/rexec.c (rexec_af): Use socklen_t.
* sunrpc/key_call.c (getkeyserv_handle): Likewise.
* sunrpc/rtime.c (rtime): Likewise.
* resolv/res_send.c (send_vc, send_dg): Likewise.
* nis/nis_callback.c (__nis_create_callback): Likewise.
* sysdeps/generic/libc-start.c: Use unsigned int for nthreads ptr.
* sysdeps/posix/getaddrinfo.c (gaih_inet): Fix type of ADDR local.
* libio/libio.h (_IO_BE): Add parenthesis around EXPR.
* intl/dcigettext.c (INTVARDEF, INTUSE): Macros removed.
(_nl_default_dirname): Use libc_hidden_data_def instead of INTVARDEF.
(libc_freeres_fn, DCIGETTEXT): Don't use INTUSE.
* intl/bindtextdom.c (INTUSE): Macro removed.
(_nl_default_dirname): Use libc_hidden_proto.
(set_binding_values): Don't use INTUSE.
* include/libintl.h (_libc_intl_domainname_internal): Decl removed.
(_libc_intl_domainname): Use libc_hidden_proto.
* posix/regex_internal.h (gettext): Remove INTUSE on it.
* locale/SYS_libc.c (_libc_intl_domainname): Use libc_hidden_data_def
rather than INTDEF.
* include/libintl.h (_): Don't use *_internal name.
* ctype/ctype-extn.c (__ctype_tolower, __ctype_toupper): Use int32_t,
not uint32_t.
* locale/lc-ctype.c (_nl_postload_ctype): Likewise for assignments.
* iconv/gconv_open.c (__gconv_open): Remove useless cast.
[BZ #721]
* sysdeps/i386/dl-machine.h (ELF_MACHINE_NO_RELA): Define this outside
of [RESOLVE_MAP].
* sysdeps/sh/dl-machine.h (ELF_MACHINE_NO_REL): Likewise.
* sysdeps/powerpc/powerpc32/dl-machine.h
(elf_machine_rel, elf_machine_rel_relative): Removed.
* sysdeps/powerpc/powerpc64/dl-machine.h
(elf_machine_rel, elf_machine_rel_relative): Removed.
2005-02-03 Alexandre Oliva <aoliva@redhat.com>
[BZ #721]
* elf/dynamic-link.h: Don't declare nested auto functions that are
not going to be defined.
2004-07-23 Jakub Jelinek <jakub@redhat.com>
[BZ #284]
* include/features.h (_POSIX_SOURCE, _POSIX_C_SOURCE): Define
if _XOPEN_SOURCE >= 500 even if __STRICT_ANSI__ is defined.
2005-02-16 Roland McGrath <roland@redhat.com>
2005-02-17 01:19:55 +00:00
|
|
|
unsigned int *ptr_nthreads;
|
2003-04-12 00:58:26 +00:00
|
|
|
void (*ptr___pthread_unwind) (__pthread_unwind_buf_t *)
|
|
|
|
__attribute ((noreturn)) __cleanup_fct_attribute;
|
2004-03-31 01:47:34 +00:00
|
|
|
void (*ptr__nptl_deallocate_tsd) (void);
|
2004-11-12 01:27:04 +00:00
|
|
|
int (*ptr__nptl_setxid) (struct xid_command *);
|
2006-08-23 17:47:19 +00:00
|
|
|
void (*ptr_freeres) (void);
|
2011-07-01 00:41:34 +00:00
|
|
|
void (*ptr_set_robust) (struct pthread *);
|
2003-01-05 10:55:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Variable in libc.so. */
|
|
|
|
extern struct pthread_functions __libc_pthread_functions attribute_hidden;
|
2007-01-17 08:37:26 +00:00
|
|
|
extern int __libc_pthread_functions_init attribute_hidden;
|
|
|
|
|
2007-02-19 05:44:33 +00:00
|
|
|
#ifdef PTR_DEMANGLE
|
|
|
|
# define PTHFCT_CALL(fct, params) \
|
2007-01-17 08:37:26 +00:00
|
|
|
({ __typeof (__libc_pthread_functions.fct) __p; \
|
|
|
|
__p = __libc_pthread_functions.fct; \
|
|
|
|
PTR_DEMANGLE (__p); \
|
|
|
|
__p params; })
|
2007-02-21 08:57:44 +00:00
|
|
|
#else
|
|
|
|
# define PTHFCT_CALL(fct, params) \
|
|
|
|
__libc_pthread_functions.fct params
|
2007-02-19 05:44:33 +00:00
|
|
|
#endif
|
2003-01-05 10:55:15 +00:00
|
|
|
|
|
|
|
#endif /* pthread-functions.h */
|