about summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog19
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/sem_post.S31
6 files changed, 62 insertions, 17 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 7c88aa5a16..b1f89484dd 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,22 @@
+2008-01-22  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* sysdeps/unix/sysv/linux/sh/sem_post.S: Don't overflow value field.
+
+2008-01-21  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h (XADD): Use
+	a scratch register.
+	* sysdeps/unix/sysv/linux/sh/lowlevellock.S
+	(__lll_lock_wait_private): Fix typo.
+	* sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
+	(pthread_barrier_wait): Likewise.  Adjust XADD use.
+	* sysdeps/unix/sysv/linux/sh/sem_post.S (__new_sem_post):
+	Adjust XADD use.
+	* sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
+	(pthread_rwlock_timedrdlock): Return correct return value.
+	* sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
+	(pthread_rwlock_timedwrlock): Likewise.  
+
 2008-01-15  Ulrich Drepper  <drepper@redhat.com>
 
 	* tst-eintr2.c (do_test): make sure that if mutex_lock in main
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
index afcf0be299..d8279173d7 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
@@ -1,4 +1,5 @@
-/* Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2005, 2007, 2008
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -143,7 +144,7 @@ __lll_lock_wait_private:
 	bf	1b
 
 	mov.l	@r15+, r8
-	ret
+	rts
 	 mov	r2, r0
 	cfi_endproc
 	.size	__lll_lock_wait_private,.-__lll_lock_wait_private
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
index c7d7d2278d..4a6059aef4 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -86,7 +86,7 @@ pthread_barrier_wait:
 	   initial count unlock the object.  */
 	mov	#1, r3
 	mov.l	@(INIT_COUNT,r8), r4
-	XADD	(r3, @(LEFT,r8), r2)
+	XADD	(r3, @(LEFT,r8), r2, r5)
 	add	#-1, r4
 	cmp/eq	r2, r4
 	bf	10f
@@ -131,7 +131,7 @@ pthread_barrier_wait:
 	   initial count unlock the object.  */
 	mov	#1, r3
 	mov.l	@(INIT_COUNT,r8), r4
-	XADD	(r3, @(LEFT,r8), r2)
+	XADD	(r3, @(LEFT,r8), r2, r5)
 	add	#-1, r4
 	cmp/eq	r2, r4
 	bf	5f
@@ -144,7 +144,7 @@ pthread_barrier_wait:
 	mov	#-1, r0		/* == PTHREAD_BARRIER_SERIAL_THREAD */
 	lds.l	@r15+, pr
 	mov.l	@r15+, r8
-	ret
+	rts
 	 mov.l	@r15+, r9
 
 1:
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
index e40771de0f..743f283be5 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -232,6 +232,7 @@ pthread_rwlock_timedrdlock:
 	.word	TID - TLS_PRE_TCB_SIZE
 
 6:
+	mov	r3, r10
 	mov	r8, r4
 #if MUTEX != 0
 	add	#MUTEX, r4
@@ -244,7 +245,7 @@ pthread_rwlock_timedrdlock:
 	 nop
 .Lwake2b:
 	bra	7b
-	 mov	#0, r3
+	 mov	r10, r3
 
 8:
 	/* Overflow.  */
@@ -278,6 +279,7 @@ pthread_rwlock_timedrdlock:
 	 nop
 
 12:
+	mov	r3, r10
 	mov	r8, r5
 #if MUTEX != 0
 	add	#MUTEX, r5
@@ -290,7 +292,7 @@ pthread_rwlock_timedrdlock:
 	 mov	r2, r4
 .Lwait3b:
 	bra	13b
-	 nop
+	 mov	r10, r3
 
 16:
 	bra	17b
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
index dfe137973c..307494c8c2 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -225,6 +225,7 @@ pthread_rwlock_timedwrlock:
 	bra	9b
 	 mov	#EDEADLK, r3
 6:
+	mov	r3, r10
 	mov	r8, r4
 #if MUTEX != 0
 	add	#MUTEX, r4
@@ -237,7 +238,7 @@ pthread_rwlock_timedwrlock:
 	 nop
 .Lwake6b:
 	bra	7b
-	 mov	#0, r3
+	 mov	r10, r3
 
 .Ltidoff:
 	.word	TID - TLS_PRE_TCB_SIZE
@@ -266,6 +267,7 @@ pthread_rwlock_timedwrlock:
 	 nop
 
 12:
+	mov	r3, r10
 	mov	r8, r5
 #if MUTEX != 0
 	add	#MUTEX, r5
@@ -278,7 +280,7 @@ pthread_rwlock_timedwrlock:
 	 mov	r2, r4
 .Lwait7b:
 	bra	13b
-	 nop
+	 mov	r10, r3
 
 16:
 	bra	17b
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
index a3a7710ef9..4a154fc649 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -30,8 +30,16 @@
 	.type	__new_sem_post,@function
 	.align	5
 __new_sem_post:
-	mov	#1, r3
-	XADD (r3, @(VALUE,r4), r2)
+	mov.l	@(VALUE,r4), r2
+0:
+	mov.l	.Lmax, r1
+	cmp/eq	r1, r2
+	bt/s	3f
+	 mov	r2, r3
+	mov	r3, r5
+	add	#1, r5
+	CMPXCHG (r3, @(VALUE,r4), r5, r2)
+	bf	0b
 	mov.l	@(NWAITERS,r4), r2
 	tst	r2, r2
 	bt	2f
@@ -52,7 +60,15 @@ __new_sem_post:
 	 mov	#0, r0
 
 1:
-	mov	#EINVAL, r2
+	bra	4f
+	 mov	#EINVAL, r2
+
+3:
+	mov	#EOVERFLOW, r2
+4:	
+	mov.l	r12, @-r15
+	mov.l	r8, @-r15
+	sts.l	pr, @-r15
 	mova	.Lgot3, r0
 	mov.l	.Lgot3, r12
 	add	r0, r12
@@ -67,19 +83,24 @@ __new_sem_post:
 .Lerrno3:
 	.long	errno@GOTTPOFF
 .Lexit:
+	mov.l	r2, @r0
 #else
+	mov	r2, r8
 	mov.l	.Lerrloc3, r1
 	bsrf	r1
 	 nop
 .Lerrloc3b:
+	mov	r8, @r0
 #endif
-	mov.l	r2, @r0
 	lds.l	@r15+, pr
+	mov.l	@r15+, r8
 	mov.l	@r15+, r12
 	rts
 	 mov	#-1, r0
 
 	.align	2
+.Lmax:
+	.long	SEM_VALUE_MAX
 .Lgot3:
 	.long	_GLOBAL_OFFSET_TABLE_
 #if !USE___THREAD