From b6562e81497a3a5a43df90ec84842b08c5bf24d5 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 25 Feb 2003 23:45:16 +0000 Subject: [PATCH] linuxthreads/ChangeLog --- sysdeps/mach/alpha/machine-lock.h | 10 +++++--- sysdeps/mach/hurd/alpha/tls.h | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 sysdeps/mach/hurd/alpha/tls.h diff --git a/sysdeps/mach/alpha/machine-lock.h b/sysdeps/mach/alpha/machine-lock.h index 80f8750c..363c29e5 100644 --- a/sysdeps/mach/alpha/machine-lock.h +++ b/sysdeps/mach/alpha/machine-lock.h @@ -1,5 +1,5 @@ /* Machine-specific definition for spin locks. Alpha version. - Copyright (C) 1994, 1997 Free Software Foundation, Inc. + Copyright (C) 1994,97,2002 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 @@ -38,8 +38,8 @@ typedef __volatile long int __spin_lock_t; _EXTERN_INLINE void __spin_unlock (__spin_lock_t *__lock) { - __asm__ __volatile__ ("mb; stq $31, %0; mb" - : "=m" (__lock)); + __asm__ __volatile__ ("mb"); + *__lock = 0; } /* Try to lock LOCK; return nonzero if we locked it, zero if another has. */ @@ -47,6 +47,9 @@ __spin_unlock (__spin_lock_t *__lock) _EXTERN_INLINE int __spin_try_lock (register __spin_lock_t *__lock) { +#if 1 + return 1; +#else register long int __rtn, __tmp; do @@ -66,6 +69,7 @@ __spin_try_lock (register __spin_lock_t *__lock) } while (! __rtn); /* RTN is now nonzero; we have the lock. */ return __rtn; +#endif } /* Return nonzero if LOCK is locked. */ diff --git a/sysdeps/mach/hurd/alpha/tls.h b/sysdeps/mach/hurd/alpha/tls.h new file mode 100644 index 00000000..e820a013 --- /dev/null +++ b/sysdeps/mach/hurd/alpha/tls.h @@ -0,0 +1,53 @@ +/* Definition for thread-local data handling. Hurd/Alpha version. + Copyright (C) 2002 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 + 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. */ + +#ifndef _TLS_H +#define _TLS_H + +#if defined HAVE_TLS_SUPPORT && 0 + +/* Signal that TLS support is available. */ +# define USE_TLS 1 + +/* Code to initially initialize the thread pointer. This might need + special attention since 'errno' is not yet available and if the + operation can cause a failure 'errno' must not be touched. */ +# define TLS_INIT_TP(descr) \ + do \ + { \ + register tcbhead_t *_a0 __asm__ ("$16") = (descr); \ + __asm__ ("call_pal %0" : : "i" (PAL_wruniq), "r" (_a0)); \ + } while (0) + +# define THREAD_TCB() \ + ({ \ + register tcbhead_t *_rv __asm__ ("$0"); \ + __asm__ ("call_pal %0" : "=r" (rv) : "i" (PAL_rduniq)); \ + _rv; \ + }) + +/* Install new dtv for current thread. */ +# define INSTALL_NEW_DTV(dtv) (THREAD_DTV () = (dtv)) + +/* Return the address of the dtv for the current thread. */ +# define THREAD_DTV() (THREAD_TCB ()->dtv) + +#endif /* HAVE_TLS_SUPPORT */ + +#endif /* tls.h */ -- 2.11.4.GIT