Bug#674412: tcc: undefined symbol '__builtin_expect' on pthread_cleanup_push() call
tags 674412 + upstream
notforwarded 674412
quit
Hi,
Thomas Preud'homme wrote:
> Le jeudi 24 mai 2012 14:47:39, vous avez écrit :
>> $ tcc -Wall -Wextra thread.c -pthread
>> thread.c:10: warning: implicit declaration of function '__builtin_expect'
>> tcc: error: undefined symbol '__builtin_expect'
[...]
> In pthread.h, pthread_cleanup_push is defined around line 650 in the following
> way when __GNUC__ is not defined (the case for tcc for example):
>
> # define pthread_cleanup_push(routine, arg) \
> do { \
> __pthread_unwind_buf_t __cancel_buf; \
> void (*__cancel_routine) (void *) = (routine); \
> 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)) \
> { \
[...]
> This makes use of __builtin_expect which should not be assume to exist.
Good catch, thanks. Looks like an old one.
This doesn't seem to have been fixed upstream, so please report this
to http://sourceware.org/bugzilla, product glibc, component nptl, and
let us know the bug number so we can track it.
Hope that helps,
Jonathan
Reply to: