123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- From 45064565100b67ff2f960e93d580449b720a66c9 Mon Sep 17 00:00:00 2001
- From: Waldemar Brodkorb <wbx@openadk.org>
- Date: Sat, 6 Sep 2014 01:52:10 +0200
- Subject: [PATCH] fix linuxthreads for coldfire nommu
- Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
- ---
- libpthread/linuxthreads/sysdeps/m68k/pspinlock.c | 20 +++++++++++++++-----
- libpthread/linuxthreads/sysdeps/m68k/pt-machine.h | 11 +++++++++--
- libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c | 2 ++
- 3 files changed, 26 insertions(+), 7 deletions(-)
- diff --git a/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c b/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c
- index c26a278..af77c2a 100644
- --- a/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c
- +++ b/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c
- @@ -27,10 +27,15 @@ __pthread_spin_lock (pthread_spinlock_t *lock)
- unsigned int val;
-
- do
- - __asm__ __volatile__ ("tas %1; sne %0"
- - : "=dm" (val), "=m" (*lock)
- - : "m" (*lock)
- - : "cc");
- + __asm__ __volatile__ (
- +#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__m68000)
- + "tas %1; sne %0"
- +#else
- + "bset #7,%1; sne %0"
- +#endif
- + : "=dm" (val), "=m" (*lock)
- + : "m" (*lock)
- + : "cc");
- while (val);
-
- return 0;
- @@ -43,7 +48,12 @@ __pthread_spin_trylock (pthread_spinlock_t *lock)
- {
- unsigned int val;
-
- - __asm__ __volatile__ ("tas %1; sne %0"
- + __asm__ __volatile__ (
- +#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__m68000)
- + "tas %1; sne %0"
- +#else
- + "bset #7,%1; sne %0"
- +#endif
- : "=dm" (val), "=m" (*lock)
- : "m" (*lock)
- : "cc");
- diff --git a/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h b/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h
- index e2d7bdc..1eb9fd5 100644
- --- a/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h
- +++ b/libpthread/linuxthreads/sysdeps/m68k/pt-machine.h
- @@ -28,12 +28,18 @@
- #endif
-
- /* Spinlock implementation; required. */
- +PT_EI long int testandset (int *spinlock);
- PT_EI long int
- testandset (int *spinlock)
- {
- char ret;
-
- - __asm__ __volatile__("tas %1; sne %0"
- + __asm__ __volatile__(
- +#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__m68000)
- + "tas %1; sne %0"
- +#else
- + "bset #7,%1; sne %0"
- +#endif
- : "=dm"(ret), "=m"(*spinlock)
- : "m"(*spinlock)
- : "cc");
- @@ -50,6 +56,7 @@ register char * stack_pointer __asm__ ("%sp");
-
- /* Compare-and-swap for semaphores. */
-
- +#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__mc68000)
- #define HAS_COMPARE_AND_SWAP
- PT_EI int
- __compare_and_swap (long int *p, long int oldval, long int newval)
- @@ -63,5 +70,5 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
-
- return ret;
- }
- -
- +#endif
- #endif /* pt-machine.h */
- diff --git a/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c b/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c
- index 706faef..634c752 100644
- --- a/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c
- +++ b/libpthread/linuxthreads/sysdeps/pthread/herrno-loc.c
- @@ -16,7 +16,9 @@
- <http://www.gnu.org/licenses/>. */
-
- #include <netdb.h>
- +#ifdef __UCLIBC_HAS_TLS__
- #include <tls.h>
- +#endif
- #include <linuxthreads/internals.h>
- #include <sysdep-cancel.h>
-
- --
- 2.0.1
|