Index: uspace/lib/c/arch/amd64/Makefile.common
===================================================================
--- uspace/lib/c/arch/amd64/Makefile.common	(revision d6f9fff8ee83683a0df7000a796720690d276858)
+++ uspace/lib/c/arch/amd64/Makefile.common	(revision 1a5eca452dd19104f8673b755943e0707abc00e4)
@@ -27,5 +27,5 @@
 #
 
-GCC_CFLAGS += -fno-omit-frame-pointer
+GCC_CFLAGS += -mno-tls-direct-seg-refs -fno-omit-frame-pointer
 CLANG_CFLAGS += -fno-omit-frame-pointer
 
Index: uspace/lib/c/arch/amd64/include/libarch/tls.h
===================================================================
--- uspace/lib/c/arch/amd64/include/libarch/tls.h	(revision d6f9fff8ee83683a0df7000a796720690d276858)
+++ uspace/lib/c/arch/amd64/include/libarch/tls.h	(revision 1a5eca452dd19104f8673b755943e0707abc00e4)
@@ -47,12 +47,12 @@
 static inline void __tcb_set(tcb_t *tcb)
 {
-	__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb);
+	asm volatile ("movq %0, %%fs:0" :: "r" (tcb));
 }
 
-static inline tcb_t * __tcb_get(void)
+static inline tcb_t *__tcb_get(void)
 {
-	void * retval;
+	void *retval;
 
-	asm ("movq %%fs:0, %0" : "=r"(retval));
+	asm volatile ("movq %%fs:0, %0" : "=r" (retval));
 	return retval;
 }
Index: uspace/lib/c/arch/amd64/src/fibril.S
===================================================================
--- uspace/lib/c/arch/amd64/src/fibril.S	(revision d6f9fff8ee83683a0df7000a796720690d276858)
+++ uspace/lib/c/arch/amd64/src/fibril.S	(revision 1a5eca452dd19104f8673b755943e0707abc00e4)
@@ -51,5 +51,4 @@
 	movq %r15, CONTEXT_OFFSET_R15(%rdi)
 	
-	# save TLS
 	movq %fs:0, %rax
 	movq %rax, CONTEXT_OFFSET_TLS(%rdi)
@@ -79,8 +78,6 @@
 	movq %rdx,(%rsp)
 	
-	# Set thread local storage
-	movq CONTEXT_OFFSET_TLS(%rdi), %rdi  # Set arg1 to TLS addr
-	movl $1, %eax                        # SYS_TLS_SET
-	syscall
+	movq CONTEXT_OFFSET_TLS(%rdi), %rdi
+	movq %rdi, %fs:0
 	
 	xorl %eax, %eax                      # context_restore returns 0
