diff options
Diffstat (limited to 'toolchain/uclibc/patches')
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0001-fix-linuxthreads-for-coldfire-nommu.patch | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/toolchain/uclibc/patches/0.9.34-git/0001-fix-linuxthreads-for-coldfire-nommu.patch b/toolchain/uclibc/patches/0.9.34-git/0001-fix-linuxthreads-for-coldfire-nommu.patch new file mode 100644 index 000000000..4f8320c34 --- /dev/null +++ b/toolchain/uclibc/patches/0.9.34-git/0001-fix-linuxthreads-for-coldfire-nommu.patch @@ -0,0 +1,106 @@ +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 + |