|  | @@ -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
 | 
	
		
			
				|  |  | +
 |