[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r6120 - in glibc-package/branches/eglibc-2.19/debian: . patches



Author: aurel32
Date: 2014-06-04 11:04:21 +0000 (Wed, 04 Jun 2014)
New Revision: 6120

Modified:
   glibc-package/branches/eglibc-2.19/debian/changelog
   glibc-package/branches/eglibc-2.19/debian/patches/git-updates.diff
Log:
* debian/patches/git-updates.diff: update from the 2.19 branch:
  - fixes pthread_spin_lock on sparc/sparc64.  Closes: #749087.

Modified: glibc-package/branches/eglibc-2.19/debian/changelog
===================================================================
--- glibc-package/branches/eglibc-2.19/debian/changelog	2014-06-03 19:46:36 UTC (rev 6119)
+++ glibc-package/branches/eglibc-2.19/debian/changelog	2014-06-04 11:04:21 UTC (rev 6120)
@@ -6,6 +6,8 @@
     to fix invalid file descriptor reuse while sending DNS query.  Closes:
     #722075.
   * Finish debconf translation update from Esko Arajärvi.  Closes: #750124.
+  * debian/patches/git-updates.diff: update from the 2.19 branch:
+    - fixes pthread_spin_lock on sparc/sparc64.  Closes: #749087.
 
   [ Samuel Thibault ]
   * hurd-i386/unsubmitted-pthread_posix-option.diff: Split patches into...

Modified: glibc-package/branches/eglibc-2.19/debian/patches/git-updates.diff
===================================================================
--- glibc-package/branches/eglibc-2.19/debian/patches/git-updates.diff	2014-06-03 19:46:36 UTC (rev 6119)
+++ glibc-package/branches/eglibc-2.19/debian/patches/git-updates.diff	2014-06-04 11:04:21 UTC (rev 6120)
@@ -1,10 +1,21 @@
 GIT update of git://sourceware.org/git/glibc.git/release/2.19/master from glibc-2.19
 
 diff --git a/ChangeLog b/ChangeLog
-index 81c393a..fb5cf2a 100644
+index 81c393a..7fa7e06 100644
 --- a/ChangeLog
 +++ b/ChangeLog
-@@ -1,3 +1,57 @@
+@@ -1,3 +1,68 @@
++2014-06-03  Guo Yixuan  <culu.gyx@gmail.com>
++
++	[BZ #16882]
++	* nptl/sysdeps/sparc/sparc32/pthread_spin_lock.S
++	(pthread_spin_lock): Branch out of spin loop to proper location.
++	* nptl/sysdeps/sparc/sparc64/pthread_spin_lock.S
++	(pthread_spin_lock): Likewise.
++
++	* nptl/tst-spin4.c: New test.
++	* nptl/Makefile (tests): Add tst-spin4.
++
 +2014-05-17  Jose E. Marchesi  <jose.marchesi@oracle.com>
 +
 +	[BZ #16958]
@@ -63,7 +74,7 @@
  
  	[BZ #16529]
 diff --git a/NEWS b/NEWS
-index 98b479e..dde85f2 100644
+index 98b479e..64b2b11 100644
 --- a/NEWS
 +++ b/NEWS
 @@ -5,6 +5,13 @@ See the end for copying conditions.
@@ -74,7 +85,7 @@
 +
 +* The following bugs are resolved with this release:
 +
-+  16545, 16623, 16885, 16916, 16943, 16958.
++  16545, 16623, 16882, 16885, 16916, 16943, 16958.
 +
 +
  Version 2.19
@@ -100,6 +111,169 @@
  
  /* Set the attribute NAME of the file pointed to by PATH to VALUE (which
     is SIZE bytes long).  Return 0 on success, -1 for errors.  */
+diff --git a/nptl/Makefile b/nptl/Makefile
+index 57cc8c6..aa4a444 100644
+--- a/nptl/Makefile
++++ b/nptl/Makefile
+@@ -208,7 +208,7 @@ tests = tst-typesizes \
+ 	tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 tst-mutexpi5 \
+ 	tst-mutexpi5a tst-mutexpi6 tst-mutexpi7 tst-mutexpi7a tst-mutexpi8 \
+ 	tst-mutexpi9 \
+-	tst-spin1 tst-spin2 tst-spin3 \
++	tst-spin1 tst-spin2 tst-spin3 tst-spin4 \
+ 	tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
+ 	tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
+ 	tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
+diff --git a/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.S b/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.S
+index ea863d7..3accc69 100644
+--- a/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.S
++++ b/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.S
+@@ -19,11 +19,11 @@
+ 
+ 	.text
+ ENTRY(pthread_spin_lock)
+-	ldstub		[%o0], %g1
++1:	ldstub		[%o0], %g1
+ 	orcc		%g1, 0x0, %g0
+ 	bne,a		2f
+ 	 ldub		[%o0], %g1
+-1:	retl
++	retl
+ 	 mov		0, %o0
+ 2:	orcc		%g1, 0x0, %g0
+ 	bne,a		2b
+diff --git a/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.S b/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.S
+index 0f849b2..aec6654 100644
+--- a/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.S
++++ b/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.S
+@@ -19,10 +19,10 @@
+ 
+ 	.text
+ ENTRY(pthread_spin_lock)
+-	ldstub		[%o0], %g1
++1:	ldstub		[%o0], %g1
+ 	brnz,pn		%g1, 2f
+ 	 membar		#StoreLoad | #StoreStore
+-1:	retl
++	retl
+ 	 mov		0, %o0
+ 2:	ldub		[%o0], %g1
+ 	brnz,pt		%g1, 2b
+diff --git a/nptl/tst-spin4.c b/nptl/tst-spin4.c
+new file mode 100644
+index 0000000..5b23a17
+--- /dev/null
++++ b/nptl/tst-spin4.c
+@@ -0,0 +1,109 @@
++#include <pthread.h>
++#include <stdio.h>
++#include <unistd.h>
++
++static int count = 0;
++
++static void *
++thread_add_one (void *arg)
++{
++  int tmp;
++  pthread_spinlock_t *lock = (pthread_spinlock_t *) arg;
++
++  /* When do_test holds the lock for 1 sec, the two thread will be
++     in contention for the lock. */
++  if (pthread_spin_lock (lock) != 0)
++    {
++      puts ("thread_add_one(): spin_lock failed");
++      pthread_exit ((void *) 1l);
++    }
++
++  /* sleep 1s before modifying count */
++  tmp = count;
++  sleep (1);
++  count = tmp + 1;
++
++  if (pthread_spin_unlock (lock) != 0)
++    {
++      puts ("thread_add_one(): spin_unlock failed");
++      pthread_exit ((void *) 1l);
++    }
++
++  return NULL;
++}
++
++static int
++do_test (void)
++{
++  pthread_t thr1, thr2;
++  pthread_spinlock_t lock;
++  int tmp;
++
++  if (pthread_spin_init (&lock, PTHREAD_PROCESS_PRIVATE) != 0)
++    {
++      puts ("spin_init failed");
++      return 1;
++    }
++
++  if (pthread_spin_lock (&lock) != 0)
++    {
++      puts ("1st spin_lock failed");
++      return 1;
++    }
++
++  if (pthread_create (&thr1, NULL, thread_add_one, (void *) &lock) != 0)
++    {
++      puts ("1st pthread_create failed");
++      return 1;
++    }
++
++  if (pthread_create (&thr2, NULL, thread_add_one, (void *) &lock) != 0)
++    {
++      puts ("2nd pthread_create failed");
++      return 1;
++    }
++
++  /* sleep 1s before modifying count */
++  tmp = count;
++  sleep (1);
++  count = tmp + 1;
++
++  if (pthread_spin_unlock (&lock) != 0)
++    {
++      puts ("1st spin_unlock failed");
++      return 1;
++    }
++
++  void *status;
++  if (pthread_join (thr1, &status) != 0)
++    {
++      puts ("1st pthread_join failed");
++      return 1;
++    }
++  if (status != NULL)
++    {
++      puts ("failure in the 1st thread");
++      return 1;
++    }
++  if (pthread_join (thr2, &status) != 0)
++    {
++      puts ("2nd pthread_join failed");
++      return 1;
++    }
++  if (status != NULL)
++    {
++      puts ("failure in the 2nd thread");
++      return 1;
++    }
++
++  if (count != 3)
++    {
++      printf ("count is %d, should be 3\n", count);
++      return 1;
++    }
++  return 0;
++}
++
++#define TIMEOUT 5
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
 diff --git a/po/eo.po b/po/eo.po
 index d01582d..f6ea766 100644
 --- a/po/eo.po


Reply to: