diff options
-rw-r--r-- | nptl/ChangeLog | 18 | ||||
-rw-r--r-- | nptl/cleanup.c | 2 | ||||
-rw-r--r-- | nptl/pthreadP.h | 13 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S | 2 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S | 2 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S | 6 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S | 2 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S | 2 | ||||
-rw-r--r-- | nptl/unwind.c | 1 |
9 files changed, 41 insertions, 7 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 4cd3cf0846..93540dfa66 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,21 @@ +2003-07-08 Jakub Jelinek <jakub@redhat.com> + + * pthreadP.h (__pthread_unwind_next, __pthread_register_cancel, + __pthread_unregister_cancel): Add prototypes and hidden_proto. + * unwind.c (__pthread_unwind_next): Add hidden_def. + * cleanup.c (__pthread_register_cancel, __pthread_unregister_cancel): + Likewise. + * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S (__new_sem_wait): + Use HIDDEN_JUMPTARGET to jump to __pthread_unwind. + * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S (sem_timedwait): + Likewise. + * sysdeps/unix/sysv/linux/x86_64/sem_wait.S (sem_wait): Likewise. + * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait): + Likewise. + * sysdeps/unix/sysv/linux/i386/pthread_once.S (__pthread_once): Use + HIDDEN_JUMPTARGET to call __pthread_register_cancel, + __pthread_unregister_cancel and __pthread_unwind_next. + 2003-07-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Use diff --git a/nptl/cleanup.c b/nptl/cleanup.c index 5bf85398e4..af828c49fa 100644 --- a/nptl/cleanup.c +++ b/nptl/cleanup.c @@ -35,6 +35,7 @@ __pthread_register_cancel (__pthread_unwind_buf_t *buf) /* Store the new cleanup handler info. */ THREAD_SETMEM (self, cleanup_jmp_buf, (struct pthread_unwind_buf *) buf); } +hidden_def (__pthread_register_cancel) void @@ -45,3 +46,4 @@ __pthread_unregister_cancel (__pthread_unwind_buf_t *buf) THREAD_SETMEM (THREAD_SELF, cleanup_jmp_buf, ibuf->priv.data.prev); } +hidden_def (__pthread_unregister_cancel) diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h index e33d828117..30983216c8 100644 --- a/nptl/pthreadP.h +++ b/nptl/pthreadP.h @@ -114,8 +114,21 @@ extern void __pthread_unwind (__pthread_unwind_buf_t *__buf) weak_function #endif ; +extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute __attribute ((__noreturn__)) +#ifndef SHARED + weak_function +#endif + ; +extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute; +extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf) + __cleanup_fct_attribute; #if defined NOT_IN_libc && defined IS_IN_libpthread hidden_proto (__pthread_unwind) +hidden_proto (__pthread_unwind_next) +hidden_proto (__pthread_register_cancel) +hidden_proto (__pthread_unregister_cancel) #endif diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S index 9afe85f205..b48a309f53 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S @@ -187,6 +187,6 @@ sem_timedwait: LOCK orl $0x10, %gs:CANCELHANDLING movl %gs:CLEANUP_JMP_BUF, %eax - jmp __pthread_unwind + jmp HIDDEN_JUMPTARGET (__pthread_unwind) cfi_endproc .size sem_timedwait,.-sem_timedwait diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S index ba4f54cd64..b7674dc3ba 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S @@ -123,7 +123,7 @@ __new_sem_wait: LOCK orl $0x10, %gs:CANCELHANDLING movl %gs:CLEANUP_JMP_BUF, %eax - jmp __pthread_unwind + jmp HIDDEN_JUMPTARGET (__pthread_unwind) cfi_endproc .size __new_sem_wait,.-__new_sem_wait versioned_symbol(libpthread, __new_sem_wait, sem_wait, GLIBC_2_1) diff --git a/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S index 3bab92f990..107a9a919e 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S @@ -112,14 +112,14 @@ __pthread_once: jne 7f leal 8(%esp), %eax - call __pthread_register_cancel + call HIDDEN_JUMPTARGET(__pthread_register_cancel) /* Call the user-provided initialization function. */ call *24+UNWINDBUFSIZE(%esp) /* Pop the cleanup handler. */ leal 8(%esp), %eax - call __pthread_unregister_cancel + call HIDDEN_JUMPTARGET(__pthread_unregister_cancel) addl $UNWINDBUFSIZE+8, %esp cfi_adjust_cfa_offset (-UNWINDBUFSIZE-8) @@ -156,7 +156,7 @@ __pthread_once: ENTER_KERNEL leal 8(%esp), %eax - call __pthread_unwind_next /* Note: no @PLT. */ + call HIDDEN_JUMPTARGET (__pthread_unwind_next) /* NOTREACHED */ hlt cfi_endproc diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S index 7626d7b250..d90e03b55b 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S @@ -170,6 +170,6 @@ sem_timedwait: LOCK orl $0x10, %fs:CANCELHANDLING movq %fs:CLEANUP_JMP_BUF, %rdi - jmp __pthread_unwind + jmp HIDDEN_JUMPTARGET (__pthread_unwind) cfi_endproc .size sem_timedwait,.-sem_timedwait diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S index 32742309fb..76957bc139 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S @@ -115,6 +115,6 @@ sem_wait: LOCK orl $0x10, %fs:CANCELHANDLING movq %fs:CLEANUP_JMP_BUF, %rdi - jmp __pthread_unwind + jmp HIDDEN_JUMPTARGET (__pthread_unwind) cfi_endproc .size sem_wait,.-sem_wait diff --git a/nptl/unwind.c b/nptl/unwind.c index e51fd295b5..67e5d6de25 100644 --- a/nptl/unwind.c +++ b/nptl/unwind.c @@ -122,3 +122,4 @@ __pthread_unwind_next (__pthread_unwind_buf_t *buf) __pthread_unwind ((__pthread_unwind_buf_t *) ibuf->priv.data.prev); } +hidden_def (__pthread_unwind_next) |