Index: uspace/lib/libc/arch/abs32le/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/abs32le/Makefile.inc	(revision 76ecb300e88900544c3ed958ebd01eea01eda40e)
+++ uspace/lib/libc/arch/abs32le/Makefile.inc	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
@@ -31,7 +31,17 @@
 
 ifeq ($(COMPILER),gcc_cross)
-	TARGET = i686-pc-linux-gnu
-	TOOLCHAIN_DIR = $(CROSS_PREFIX)/ia32/bin
-	GCC_CFLAGS += -march=pentium
+	TOOLCHAIN_DIR = $(CROSS_PREFIX)/$(CROSS_TARGET)/bin
+	
+	ifeq ($(CROSS_TARGET),arm32)
+		TARGET = arm-linux-gnu
+	endif
+	
+	ifeq ($(CROSS_TARGET),ia32)
+		TARGET = i686-pc-linux-gnu
+	endif
+	
+	ifeq ($(CROSS_TARGET),mips32)
+		TARGET = mipsel-linux-gnu
+	endif
 endif
 
Index: uspace/lib/libc/arch/abs32le/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/abs32le/_link.ld.in	(revision 76ecb300e88900544c3ed958ebd01eea01eda40e)
+++ uspace/lib/libc/arch/abs32le/_link.ld.in	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
@@ -19,4 +19,5 @@
 	.data : {
 		*(.data);
+		*(.data.rel*);
 	} :data
 	
@@ -33,4 +34,9 @@
 	_tls_alignment = ALIGNOF(.tdata);
 	
+	.sbss : {
+		*(.scommon);
+		*(.sbss);
+	}
+	
 	.bss : {
 		*(COMMON);
Index: uspace/lib/libc/arch/abs32le/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/abs32le/include/atomic.h	(revision 76ecb300e88900544c3ed958ebd01eea01eda40e)
+++ uspace/lib/libc/arch/abs32le/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
@@ -36,7 +36,20 @@
 #define LIBC_abs32le_ATOMIC_H_
 
+#include <bool.h>
+
 #define LIBC_ARCH_ATOMIC_H_
+#define CAS
 
 #include <atomicdflt.h>
+
+static inline bool cas(atomic_t *val, long ov, long nv)
+{
+	if (val->count == ov) {
+		val->count = nv;
+		return true;
+	}
+	
+	return false;
+}
 
 static inline void atomic_inc(atomic_t *val) {
Index: uspace/lib/libc/arch/abs32le/include/tls.h
===================================================================
--- uspace/lib/libc/arch/abs32le/include/tls.h	(revision 76ecb300e88900544c3ed958ebd01eea01eda40e)
+++ uspace/lib/libc/arch/abs32le/include/tls.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
@@ -55,4 +55,6 @@
 }
 
+extern uintptr_t __aeabi_read_tp(void);
+
 #endif
 
Index: uspace/lib/libc/arch/abs32le/src/tls.c
===================================================================
--- uspace/lib/libc/arch/abs32le/src/tls.c	(revision 76ecb300e88900544c3ed958ebd01eea01eda40e)
+++ uspace/lib/libc/arch/abs32le/src/tls.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
@@ -32,4 +32,5 @@
 #include <tls.h>
 #include <sys/types.h>
+#include <unistd.h>
 
 tcb_t * __alloc_tls(void **data, size_t size)
@@ -43,4 +44,9 @@
 }
 
+uintptr_t __aeabi_read_tp(void)
+{
+	return NULL;
+}
+
 /** @}
  */
