about summary refs log tree commit diff
path: root/linuxthreads
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-04-18 07:56:20 +0000
committerUlrich Drepper <drepper@redhat.com>2000-04-18 07:56:20 +0000
commitcd43f797c473dbb5f6f4031e4abb784719e64c93 (patch)
tree3a32b3a0aefa3ee4f6525d42052b567d649e48aa /linuxthreads
parentdbacafe52e30710b5ec8707f60c531e6aeb857ed (diff)
downloadglibc-cd43f797c473dbb5f6f4031e4abb784719e64c93.tar.gz
glibc-cd43f797c473dbb5f6f4031e4abb784719e64c93.tar.xz
glibc-cd43f797c473dbb5f6f4031e4abb784719e64c93.zip
Update.
2000-04-18  Ulrich Drepper  <drepper@redhat.com>

	* posix/Makefile (tests): Add tst-getaddrinfo.
	* posix/tst-getaddrinfo.c: New file.

	and setresuid from sysdep_routines.
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog10
-rw-r--r--linuxthreads/internals.h5
-rw-r--r--linuxthreads/spinlock.c4
-rw-r--r--linuxthreads/sysdeps/sparc/sparc64/pt-machine.h8
4 files changed, 21 insertions, 6 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index fddbbcec78..2dc229ef1b 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,13 @@
+2000-04-18  Jakub Jelinek  <jakub@redhat.com>
+
+	* sysdeps/sparc/sparc64/pt-machine.h (MEMORY_BARRIER): Use membar,
+	not stbar.
+	(READ_MEMORY_BARRIER): Define.
+	* spinlock.c (__pthread_spin_unlock): Use READ_MEMORY_BARRIER, not
+	MEMORY_BARRIER.
+	* internals.h (READ_MEMORY_BARRIER): Define if not defined in sysdep
+	headers.
+
 2000-04-17  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/unix/sysv/linux/i386/getcpuclockid.c
diff --git a/linuxthreads/internals.h b/linuxthreads/internals.h
index c1f4081c7b..079bf2cd64 100644
--- a/linuxthreads/internals.h
+++ b/linuxthreads/internals.h
@@ -359,11 +359,14 @@ static inline pthread_descr thread_self (void)
 
 /* If MEMORY_BARRIER isn't defined in pt-machine.h, assume the architecture
    doesn't need a memory barrier instruction (e.g. Intel x86).  Some
-   architectures distinguish between normal/read and write barriers.  */
+   architectures distinguish between full, read and write barriers.  */
 
 #ifndef MEMORY_BARRIER
 #define MEMORY_BARRIER()
 #endif
+#ifndef READ_MEMORY_BARRIER
+#define READ_MEMORY_BARRIER() MEMORY_BARRIER()
+#endif
 #ifndef WRITE_MEMORY_BARRIER
 #define WRITE_MEMORY_BARRIER() MEMORY_BARRIER()
 #endif
diff --git a/linuxthreads/spinlock.c b/linuxthreads/spinlock.c
index d13cea18c7..c482d910dc 100644
--- a/linuxthreads/spinlock.c
+++ b/linuxthreads/spinlock.c
@@ -122,12 +122,12 @@ again:
        several iterations of the while loop.  Some processors (e.g.
        multiprocessor Alphas) could perform such reordering even though
        the loads are dependent. */
-    MEMORY_BARRIER();
+    READ_MEMORY_BARRIER();
     thr = *ptr;
   }
   /* Prevent reordering of the load of lock->__status above and
      thr->p_nextlock below */
-  MEMORY_BARRIER();
+  READ_MEMORY_BARRIER();
   /* Remove max prio thread from waiting list. */
   if (maxptr == (pthread_descr *) &lock->__status) {
     /* If max prio thread is at head, remove it with compare-and-swap
diff --git a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
index e22f4fed3c..e5695c0489 100644
--- a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
+++ b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
@@ -38,9 +38,11 @@ testandset (int *spinlock)
 
 
 /* Memory barrier; default is to do nothing */
-/* FIXME: is stbar OK, or should we use the more general membar instruction?
-   If so, which mode to pass to membar? */
-#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory")
+#define MEMORY_BARRIER() \
+     __asm__ __volatile__("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore" : : : "memory")
+/* Read barrier.  */
+#define READ_MEMORY_BARRIER() \
+     __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory")
 /* Write barrier.  */
 #define WRITE_MEMORY_BARRIER() \
      __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory")