Index: uspace/lib/c/arch/ia32/Makefile.common
===================================================================
--- uspace/lib/c/arch/ia32/Makefile.common	(revision 38ad239c4c325a86b9e2b838f284f775430e3d22)
+++ uspace/lib/c/arch/ia32/Makefile.common	(revision d6f9fff8ee83683a0df7000a796720690d276858)
@@ -28,7 +28,7 @@
 
 ifeq ($(PROCESSOR),i486)
-	GCC_CFLAGS += -march=i486 -fno-omit-frame-pointer
+	GCC_CFLAGS += -march=i486 -mno-tls-direct-seg-refs -fno-omit-frame-pointer
 else
-	GCC_CFLAGS += -march=pentium -fno-omit-frame-pointer
+	GCC_CFLAGS += -march=pentium -mno-tls-direct-seg-refs -fno-omit-frame-pointer
 endif
 
Index: uspace/lib/c/arch/ia32/include/libarch/tls.h
===================================================================
--- uspace/lib/c/arch/ia32/include/libarch/tls.h	(revision 38ad239c4c325a86b9e2b838f284f775430e3d22)
+++ uspace/lib/c/arch/ia32/include/libarch/tls.h	(revision d6f9fff8ee83683a0df7000a796720690d276858)
@@ -47,5 +47,5 @@
 static inline void __tcb_set(tcb_t *tcb)
 {
-	__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb);
+	asm volatile ("movl %0, %%gs:0" :: "r" (tcb));
 }
 
@@ -54,8 +54,5 @@
 	void *retval;
 	
-	asm (
-		"movl %%gs:0, %0"
-		: "=r" (retval)
-	);
+	asm volatile ("movl %%gs:0, %0" : "=r" (retval));
 	
 	return retval;
Index: uspace/lib/c/arch/ia32/src/fibril.S
===================================================================
--- uspace/lib/c/arch/ia32/src/fibril.S	(revision 38ad239c4c325a86b9e2b838f284f775430e3d22)
+++ uspace/lib/c/arch/ia32/src/fibril.S	(revision d6f9fff8ee83683a0df7000a796720690d276858)
@@ -77,9 +77,6 @@
 	
 	# set thread local storage
-	pushl %edx
 	movl CONTEXT_OFFSET_TLS(%eax), %edx	# Set arg1 to TLS addr
-	movl $1, %eax				# Syscall SYS_TLS_SET
-	int $0x30
-	popl %edx
+	movl %edx, %gs:0
 	
 	xorl %eax, %eax		# context_restore returns 0
