aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2012-06-04 11:41:24 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2012-06-04 11:53:57 +0530
commit4af3879c26dd1c91d68d87189587bcc8ecd3dcfc (patch)
treeab8cf6b2af267b9da893166764a19854874d1437
parent2fd6ff133bc7df197ff3c00f50b3f9a485095b9c (diff)
downloadglibc-4af3879c26dd1c91d68d87189587bcc8ecd3dcfc.zip
glibc-4af3879c26dd1c91d68d87189587bcc8ecd3dcfc.tar.gz
glibc-4af3879c26dd1c91d68d87189587bcc8ecd3dcfc.tar.bz2
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.
-rw-r--r--ChangeLog7
-rw-r--r--misc/sys/cdefs.h6
-rw-r--r--nptl/ChangeLog9
-rw-r--r--nptl/sysdeps/pthread/pthread.h4
4 files changed, 24 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e207e4e..365ff82 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index f4e96db..b94147e 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -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
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index f966467..2bc3585 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -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]
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index 88c7c25..246c1a0 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -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); \