* pthread_create.c (start_thread): Don't use setjmp inside
	__builtin_expect to work around gcc bug.
This commit is contained in:
Ulrich Drepper 2003-03-27 21:14:41 +00:00
parent 28cf305854
commit 18d009ca00
3 changed files with 7 additions and 3 deletions

View File

@ -1,5 +1,8 @@
2003-03-27 Ulrich Drepper <drepper@redhat.com> 2003-03-27 Ulrich Drepper <drepper@redhat.com>
* pthread_create.c (start_thread): Don't use setjmp inside
__builtin_expect to work around gcc bug.
* sysdeps/unix/sysv/linux/timer_delete.c (timer_delete): Even if * sysdeps/unix/sysv/linux/timer_delete.c (timer_delete): Even if
timer_delete syscall fails, but not with ENOSYS, set timer_delete syscall fails, but not with ENOSYS, set
__no_posix_timers. __no_posix_timers.

View File

@ -221,7 +221,8 @@ start_thread (void *arg)
/* This is where the try/finally block should be created. For /* This is where the try/finally block should be created. For
compilers without that support we do use setjmp. */ compilers without that support we do use setjmp. */
if (__builtin_expect (setjmp (pd->cancelbuf) == 0, 1)) int not_first_call = setjmp (pd->cancelbuf);
if (__builtin_expect (! not_first_call, 1))
{ {
/* Run the code the user provided. */ /* Run the code the user provided. */
#ifdef CALL_THREAD_FCT #ifdef CALL_THREAD_FCT

View File

@ -43,9 +43,9 @@ typedef struct
dtv_t *dtv; dtv_t *dtv;
void *self; /* Pointer to the thread descriptor. */ void *self; /* Pointer to the thread descriptor. */
int multiple_threads; int multiple_threads;
#ifdef NEED_DL_SYSINFO # ifdef NEED_DL_SYSINFO
uintptr_t sysinfo; uintptr_t sysinfo;
#endif # endif
} tcbhead_t; } tcbhead_t;
# ifndef __s390x__ # ifndef __s390x__