summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog18
-rw-r--r--nptl/cleanup.c2
-rw-r--r--nptl/pthreadP.h13
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S2
-rw-r--r--nptl/unwind.c1
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)