[Bug 33140] Re: Can't use pthread_cleanup_push with non-GCC compiler
Bug Watch Updater
33140 at bugs.launchpad.net
Mon Nov 27 13:31:41 UTC 2017
** Changed in: glibc
Status: New => Fix Released
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/33140
Title:
Can't use pthread_cleanup_push with non-GCC compiler
Status in GLibC:
Fix Released
Status in glibc package in Ubuntu:
Confirmed
Bug description:
When trying to compile a small pthread code with the Portland compiler
the pthread.h gives me code that uses gcc builtins.
libc6-dev version 2.3.5-1ubuntu12
Code:
#include <pthread.h>
int
main ()
{
pthread_t th=pthread_self();
pthread_join(th, 0);
pthread_attr_init(0);
pthread_cleanup_push(0, 0);
pthread_create(0,0,0,0);
pthread_cleanup_pop(0);
return 0;
}
When compiled with PGI i get
$ pgcc -o ptest ptest.c -lpthread
ptest.c:
ptest.o: In function `main':
ptest.c:(.text+0x46): undefined reference to `__builtin_expect'
This seems to be caused by the following sequence of #if defined in
pthread.h
...
#if defined __GNUC__ && defined __EXCEPTIONS
# ifdef __cplusplus
...
# define pthread_cleanup_push(routine, arg) \
do { \
__pthread_cleanup_class __clframe (routine, arg)
...
# else
# define pthread_cleanup_push(routine, arg) \
do { \
struct __pthread_cleanup_frame __clframe \
__attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \
= { .__cancel_routine = (routine), .__cancel_arg = (arg), \
.__do_it = 1 };
...
# endif
#else
# 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 *) \
__cancel_buf.__cancel_jmp_buf, 0); \
if (__builtin_expect (not_first_call, 0)) \
...
#endif
I.e. it uses __builtin_expect when __GCC__ is not defined.
All of this seems to be a bit too GCC centric.
To manage notifications about this bug go to:
https://bugs.launchpad.net/glibc/+bug/33140/+subscriptions
More information about the foundations-bugs
mailing list