From f76c8499101d2826013989954dcbccf5fb8321be Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 2 Sep 2004 22:47:23 +0000 Subject: Update. * sysdeps/alpha/jmpbuf-unwind.h: Define __libc_unwind_longjmp. * sysdeps/i386/jmpbuf-unwind.h: Likewise * sysdeps/powerpc/jmpbuf-unwind.h: Likewise. * sysdeps/s390/jmpbuf-unwind.h: Likewise. * sysdeps/sh/jmpbuf-unwind.h: Likewise. * sysdeps/sparc/sparc32/jmpbuf-unwind.h: Likewise. * sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h: Likewise. * sysdeps/x86_64/jmpbuf-unwind.h: Likewise. * unwind.c: Use it. --- nptl/ChangeLog | 10 ++++++++++ nptl/sysdeps/alpha/jmpbuf-unwind.h | 5 ++++- nptl/sysdeps/i386/jmpbuf-unwind.h | 5 ++++- nptl/sysdeps/powerpc/jmpbuf-unwind.h | 5 ++++- nptl/sysdeps/pthread/pthread_cond_timedwait.c | 3 ++- nptl/sysdeps/s390/jmpbuf-unwind.h | 5 ++++- nptl/sysdeps/sh/jmpbuf-unwind.h | 5 ++++- nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h | 5 ++++- nptl/sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h | 5 ++++- nptl/sysdeps/x86_64/jmpbuf-unwind.h | 5 ++++- nptl/tst-cond20.c | 2 +- nptl/unwind.c | 8 ++++---- 12 files changed, 49 insertions(+), 14 deletions(-) (limited to 'nptl') diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 6306a7b..344e7fb 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,15 @@ 2004-09-02 Ulrich Drepper + * sysdeps/alpha/jmpbuf-unwind.h: Define __libc_unwind_longjmp. + * sysdeps/i386/jmpbuf-unwind.h: Likewise + * sysdeps/powerpc/jmpbuf-unwind.h: Likewise. + * sysdeps/s390/jmpbuf-unwind.h: Likewise. + * sysdeps/sh/jmpbuf-unwind.h: Likewise. + * sysdeps/sparc/sparc32/jmpbuf-unwind.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h: Likewise. + * sysdeps/x86_64/jmpbuf-unwind.h: Likewise. + * unwind.c: Use it. + * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h (pthread_cond_t): Rename __data.__clock to __data.__nwaiters, make it unsigned int. * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h (pthread_cond_t): diff --git a/nptl/sysdeps/alpha/jmpbuf-unwind.h b/nptl/sysdeps/alpha/jmpbuf-unwind.h index ad77816..5cef8b1 100644 --- a/nptl/sysdeps/alpha/jmpbuf-unwind.h +++ b/nptl/sysdeps/alpha/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -26,3 +26,6 @@ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/i386/jmpbuf-unwind.h b/nptl/sysdeps/i386/jmpbuf-unwind.h index ad77816..5cef8b1 100644 --- a/nptl/sysdeps/i386/jmpbuf-unwind.h +++ b/nptl/sysdeps/i386/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -26,3 +26,6 @@ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/powerpc/jmpbuf-unwind.h b/nptl/sysdeps/powerpc/jmpbuf-unwind.h index dc8bebf..0b81716 100644 --- a/nptl/sysdeps/powerpc/jmpbuf-unwind.h +++ b/nptl/sysdeps/powerpc/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -26,3 +26,6 @@ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_GPR1] - (_adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/pthread/pthread_cond_timedwait.c b/nptl/sysdeps/pthread/pthread_cond_timedwait.c index c6606c9..fdbf43e 100644 --- a/nptl/sysdeps/pthread/pthread_cond_timedwait.c +++ b/nptl/sysdeps/pthread/pthread_cond_timedwait.c @@ -99,7 +99,8 @@ __pthread_cond_timedwait (cond, mutex, abstime) INTERNAL_SYSCALL_DECL (err); int ret; ret = INTERNAL_SYSCALL (clock_gettime, err, 2, - cond->__data.__nwaiters & COND_CLOCK_BITS, + (cond->__data.__nwaiters + & ((1 << COND_CLOCK_BITS) - 1)), &rt); # ifndef __ASSUME_POSIX_TIMERS if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (ret, err), 0)) diff --git a/nptl/sysdeps/s390/jmpbuf-unwind.h b/nptl/sysdeps/s390/jmpbuf-unwind.h index 409408f..19d0729 100644 --- a/nptl/sysdeps/s390/jmpbuf-unwind.h +++ b/nptl/sysdeps/s390/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -27,3 +27,6 @@ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t) (_address) - (_adj) \ < (uintptr_t) (_jmpbuf)->__gregs[__JB_GPR15] - (_adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/sh/jmpbuf-unwind.h b/nptl/sysdeps/sh/jmpbuf-unwind.h index 7e36d83..cf6d25f 100644 --- a/nptl/sysdeps/sh/jmpbuf-unwind.h +++ b/nptl/sysdeps/sh/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -26,3 +26,6 @@ #define _JMPBUF_UNWINDS_ADJ(jmpbuf, address, adj) \ ((uintptr_t) (address) - (adj) < (uintptr_t) (jmpbuf)[0].__regs[7] - (adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h b/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h index ad77816..5cef8b1 100644 --- a/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h +++ b/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -26,3 +26,6 @@ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h b/nptl/sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h index 90b5764..b821ab0 100644 --- a/nptl/sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h +++ b/nptl/sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -31,3 +31,6 @@ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t)(_address) - (_adj) < (uintptr_t)(((long *)_jmpbuf)[0]) - (_adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/x86_64/jmpbuf-unwind.h b/nptl/sysdeps/x86_64/jmpbuf-unwind.h index f0a22e7..345ed55 100644 --- a/nptl/sysdeps/x86_64/jmpbuf-unwind.h +++ b/nptl/sysdeps/x86_64/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -26,3 +26,6 @@ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_RSP] - (_adj)) + +/* We use the normal lobngjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/tst-cond20.c b/nptl/tst-cond20.c index ba50d58..18918f3 100644 --- a/nptl/tst-cond20.c +++ b/nptl/tst-cond20.c @@ -46,7 +46,7 @@ tf (void *p) struct timeval tv; gettimeofday (&tv, NULL); struct timespec ts; - /* Wait three second. */ + /* Wait three seconds. */ ts.tv_sec = tv.tv_sec + 3; ts.tv_nsec = tv.tv_usec * 1000; pthread_cond_timedwait (&cond, &mut, &ts); diff --git a/nptl/unwind.c b/nptl/unwind.c index f72c338..56a4238 100644 --- a/nptl/unwind.c +++ b/nptl/unwind.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper and Richard Henderson , 2003. @@ -47,7 +47,7 @@ unwind_stop (int version, _Unwind_Action actions, struct pthread *self = THREAD_SELF; struct _pthread_cleanup_buffer *curp = THREAD_GETMEM (self, cleanup); int do_longjump = 0; - + /* Adjust all pointers used in comparisons, so that top of thread's stack is at the top of address space. Without that, things break if stack is allocated above the main stack. */ @@ -93,7 +93,7 @@ unwind_stop (int version, _Unwind_Action actions, } if (do_longjump) - __libc_longjmp ((struct __jmp_buf_tag *) buf->cancel_jmp_buf, 1); + __libc_unwind_longjmp ((struct __jmp_buf_tag *) buf->cancel_jmp_buf, 1); return _URC_NO_REASON; } @@ -155,7 +155,7 @@ __pthread_unwind (__pthread_unwind_buf_t *buf) } /* We simply jump to the registered setjmp buffer. */ - __libc_longjmp ((struct __jmp_buf_tag *) ibuf->cancel_jmp_buf, 1); + __libc_unwind_longjmp ((struct __jmp_buf_tag *) ibuf->cancel_jmp_buf, 1); #endif /* NOTREACHED */ -- cgit v1.1