]> sourceware.org Git - glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 28 Nov 2002 00:53:12 +0000 (00:53 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 28 Nov 2002 00:53:12 +0000 (00:53 +0000)
* sysdeps/x86_64/pthreaddef.h: New file.

* sysdeps/i386/pthreaddef.h (gettid): Removed.

* sysdeps/x86_64/pthread_spin_init.c: New file.
* sysdeps/x86_64/pthread_spin_lock.c: New file.
* sysdeps/x86_64/pthread_spin_trylock.c: New file.
* sysdeps/x86_64/pthread_spin_unlock.c: New file.

* sysdeps/i386/i686/pthread_spin_trylock.S (pthread_spin_trylock):
Add missing lock prefix.  Minute optimization.

* tst-spin2.c (main): Also check successful trylock call.

* sysdeps/pthread/pthread_sigmask.c (pthread_sigmask): Use correct
syscall.  Fix typo in case INTERNAL_SYSCALL is not used.

* sysdeps/i386/pthread_spin_destroy.c: Moved to...
* sysdeps/pthread/pthread_spin_destroy.c: ...here.  New file.

* sysdeps/i386/pthread_sigmask.c: Removed.  Use the generic code.
* sysdeps/pthread/pthread_sigmask.c (pthread_sigmask): Return correct
value in case of an error.  Add support for INTERNAL_SYSCALL.

nptl/ChangeLog
nptl/sysdeps/i386/i686/pthread_spin_trylock.S
nptl/sysdeps/i386/pthreaddef.h
nptl/sysdeps/pthread/pthread_sigmask.c
nptl/sysdeps/pthread/pthread_spin_destroy.c [moved from nptl/sysdeps/i386/pthread_spin_destroy.c with 100% similarity]
nptl/sysdeps/x86_64/pthread_spin_init.c [new file with mode: 0644]
nptl/sysdeps/x86_64/pthread_spin_lock.c [new file with mode: 0644]
nptl/sysdeps/x86_64/pthread_spin_trylock.c [new file with mode: 0644]
nptl/sysdeps/x86_64/pthread_spin_unlock.c [new file with mode: 0644]
nptl/sysdeps/x86_64/pthreaddef.h [new file with mode: 0644]
nptl/tst-spin2.c

index 530d6f49ebe7952b9ea43d42705e7d9be19f1309..842dedecafbf71e0d57b641cfacf70cec7ce39fe 100644 (file)
@@ -1,6 +1,28 @@
 2002-11-27  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/x86_64/pthread_sigmask.c: New file.
+       * sysdeps/x86_64/pthreaddef.h: New file.
+
+       * sysdeps/i386/pthreaddef.h (gettid): Removed.
+
+       * sysdeps/x86_64/pthread_spin_init.c: New file.
+       * sysdeps/x86_64/pthread_spin_lock.c: New file.
+       * sysdeps/x86_64/pthread_spin_trylock.c: New file.
+       * sysdeps/x86_64/pthread_spin_unlock.c: New file.
+
+       * sysdeps/i386/i686/pthread_spin_trylock.S (pthread_spin_trylock):
+       Add missing lock prefix.  Minute optimization.
+
+       * tst-spin2.c (main): Also check successful trylock call.
+
+       * sysdeps/pthread/pthread_sigmask.c (pthread_sigmask): Use correct
+       syscall.  Fix typo in case INTERNAL_SYSCALL is not used.
+
+       * sysdeps/i386/pthread_spin_destroy.c: Moved to...
+       * sysdeps/pthread/pthread_spin_destroy.c: ...here.  New file.
+
+       * sysdeps/i386/pthread_sigmask.c: Removed.  Use the generic code.
+       * sysdeps/pthread/pthread_sigmask.c (pthread_sigmask): Return correct
+       value in case of an error.  Add support for INTERNAL_SYSCALL.
 
        * sysdeps/i386/pthread_sigmask.c (pthread_sigmask): Return correct
        value in case of an error.
index 881976c4fe165058ebc5b2800fe43352c0885e38..2ab83e6969e62f1b79fed1e85f01ef2d4e747540 100644 (file)
 
 #define EBUSY  16
 
+
+#ifdef UP
+# define LOCK
+#else
+# define LOCK lock
+#endif
+
        .globl  pthread_spin_trylock
        .type   pthread_spin_trylock,@function
        .align  16
@@ -26,9 +33,10 @@ pthread_spin_trylock:
        movl    4(%esp), %edx
        movl    $1, %eax
        xorl    %ecx, %ecx
+       LOCK
        cmpxchgl %ecx, (%edx)
-       movl    $EBUSY, %ecx
-       movl    $0, %eax
-       cmovne  %ecx, %eax
+       movl    $EBUSY, %edx
+       movl    %ecx, %eax
+       cmovne  %edx, %eax
        ret
        .size   pthread_spin_trylock,.-pthread_spin_trylock
index 6efa1b6d821ebd326aa2c128816a084661e2adcb..1fe9455848ed640e55efcbc3e8e0e033f737b5bf 100644 (file)
@@ -49,7 +49,3 @@
       asm volatile ("movl %1, %%ebx; int $0x80"                                      \
                    :: "a" (__NR_exit), "r" (val));                           \
   }
-#define gettid()                                                             \
-  ({ int tid;                                                                \
-     __asm __volatile ("int $0x80" : "=a" (tid) : "0" (__NR_gettid));        \
-     tid; })
index 5b46c53715ce88aa70f463f33530d89c637544df..99ec52baa532352603229111849271d9a4ead01b 100644 (file)
@@ -43,12 +43,14 @@ pthread_sigmask (how, newmask, oldmask)
     }
 
 #ifdef INTERNAL_SYSCALL
-  int result = INTERNAL_SYSCALL (sigprocmask, 3, how, newmask, oldmask);
+  /* We know that realtime signals are available if NPTL is used.  */
+  int result = INTERNAL_SYSCALL (rt_sigprocmask, 4, how, newmask, oldmask,
+                                _NSIG / 8);
 
   return (INTERNAL_SYSCALL_ERROR_P (result)
          ? INTERNAL_SYSCALL_ERRNO (result)
          : 0);
 #else
-  return sigprocmask (how, newmask, oldmask) == -1 : errno : 0;
+  return sigprocmask (how, newmask, oldmask) == -1 ? errno : 0;
 #endif
 }
diff --git a/nptl/sysdeps/x86_64/pthread_spin_init.c b/nptl/sysdeps/x86_64/pthread_spin_init.c
new file mode 100644 (file)
index 0000000..5569620
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/pthread_spin_init.c"
diff --git a/nptl/sysdeps/x86_64/pthread_spin_lock.c b/nptl/sysdeps/x86_64/pthread_spin_lock.c
new file mode 100644 (file)
index 0000000..7cf0e0e
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/pthread_spin_lock.c"
diff --git a/nptl/sysdeps/x86_64/pthread_spin_trylock.c b/nptl/sysdeps/x86_64/pthread_spin_trylock.c
new file mode 100644 (file)
index 0000000..7ddb371
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/i686/pthread_spin_trylock.c"
diff --git a/nptl/sysdeps/x86_64/pthread_spin_unlock.c b/nptl/sysdeps/x86_64/pthread_spin_unlock.c
new file mode 100644 (file)
index 0000000..b287dc1
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/pthread_spin_unlock.c"
diff --git a/nptl/sysdeps/x86_64/pthreaddef.h b/nptl/sysdeps/x86_64/pthreaddef.h
new file mode 100644 (file)
index 0000000..697329c
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* Default stack size.  */
+#define ARCH_STACK_DEFAULT_SIZE        (2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning.  SSE requires 16
+   bytes.  */
+#define STACK_ALIGN            16
+
+/* Minimal stack size after allocating thread descriptor and guard size.  */
+#define MINIMAL_REST_STACK     2048
+
+/* Alignment requirement for TCB.  */
+#define TCB_ALIGNMENT          16
+
+/* The signal used for asynchronous cancelation.  */
+#define SIGCANCEL              __SIGRTMIN
+
+
+/* Location of current stack frame.  */
+#define CURRENT_STACK_FRAME    __builtin_frame_address (0)
+
+
+/* XXX Until we have a better place keep the definitions here.  */
+
+/* While there is no such syscall.  */
+#define __exit_thread_inline(val) \
+  asm volatile ("syscall" :: "a" (__NR_exit), "D" (val))
index ff7421ae4726565b55bcdea0c383be7fd38bbc05..c55bc657795b6779cd5e83ab5a7b544de051e8ab 100644 (file)
@@ -88,12 +88,26 @@ main (void)
   err = pthread_spin_trylock (s);
   if (err == 0)
     {
-      puts ("spin_trylock succeeded");
+      puts ("1st spin_trylock succeeded");
       exit (1);
     }
   else if (err != EBUSY)
     {
-      puts ("spin_trylock didn't return EBUSY");
+      puts ("1st spin_trylock didn't return EBUSY");
+      exit (1);
+    }
+
+  err = pthread_spin_unlock (s);
+  if (err != 0)
+    {
+      puts ("parent: spin_unlock failed");
+      exit (1);
+    }
+
+  err = pthread_spin_trylock (s);
+  if (err != 0)
+    {
+      puts ("2nd spin_trylock failed");
       exit (1);
     }
 
This page took 0.051992 seconds and 5 git commands to generate.