Wrap __builtin_expect in pthread.h

[BZ #14188]
This fixes compilation of programs using pthread_cleanup_push built
with non-gcc compilers and older gcc compilers.
This commit is contained in:
Siddhesh Poyarekar 2012-06-04 11:41:24 +05:30
parent 2fd6ff133b
commit 4af3879c26
4 changed files with 24 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2012-06-04 Siddhesh Poyarekar <siddhesh@redhat.com>
Jakub Jelinek <jakub@redhat.com>
[BZ #14188]
* misc/sys/cdefs.h (__glibc_unlikely): New macro to wrap cases
where __builtin_expect is unavailable.
2012-06-03 David S. Miller <davem@davemloft.net>
* stdlib/longlong.h: Updated from GCC.

View File

@ -369,6 +369,12 @@
# endif
#endif
#if __GNUC__ >= 3
# define __glibc_unlikely(cond) __builtin_expect((cond), 0)
#else
# define __glibc_unlikely(cond) (cond)
#endif
#include <bits/wordsize.h>
#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH

View File

@ -1,3 +1,12 @@
2012-06-04 Siddhesh Poyarekar <siddhesh@redhat.com>
Jakub Jelinek <jakub@redhat.com>
[BZ #14188]
* sysdeps/pthread/pthread.h
[!(defined __GNUC__ && defined __EXCEPTIONS)]
(pthread_cleanup_push, pthread_cleanup_push_defer_np): Use
__libc_unlikely instead of __builtin_expect.
2012-05-30 H.J. Lu <hongjiu.lu@intel.com>
[BZ #14117]

View File

@ -659,7 +659,7 @@ __pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame)
void *__cancel_arg = (arg); \
int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \
__cancel_buf.__cancel_jmp_buf, 0); \
if (__builtin_expect (__not_first_call, 0)) \
if (__glibc_unlikely (__not_first_call)) \
{ \
__cancel_routine (__cancel_arg); \
__pthread_unwind_next (&__cancel_buf); \
@ -694,7 +694,7 @@ extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
void *__cancel_arg = (arg); \
int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \
__cancel_buf.__cancel_jmp_buf, 0); \
if (__builtin_expect (__not_first_call, 0)) \
if (__glibc_unlikely (__not_first_call)) \
{ \
__cancel_routine (__cancel_arg); \
__pthread_unwind_next (&__cancel_buf); \