Index: uspace/lib/libc/arch/amd64/src/thread.c
===================================================================
--- uspace/lib/libc/arch/amd64/src/thread.c	(revision 941cc8b06880f808799b7233c7afaa684ceadad0)
+++ uspace/lib/libc/arch/amd64/src/thread.c	(revision 2c2295ab19b8f101a68776915798bd9d22ea4567)
@@ -37,4 +37,5 @@
 #include <thread.h>
 #include <malloc.h>
+#include <align.h>
 
 /** Allocate TLS & TCB for initial module threads
@@ -47,5 +48,6 @@
 	tcb_t *tcb;
 	
-	*data = malloc(sizeof(tcb_t) + size);
+	size = ALIGN_UP(size, &_tls_alignment);
+	*data = memalign(&_tls_alignment, sizeof(tcb_t) + size);
 
 	tcb = (tcb_t *) (*data + size);
@@ -57,4 +59,5 @@
 void __free_tls_arch(tcb_t *tcb, size_t size)
 {
+	size = ALIGN_UP(size, &_tls_alignment);
 	void *start = ((void *)tcb) - size;
 	free(start);
Index: uspace/lib/libc/arch/sparc64/src/thread.c
===================================================================
--- uspace/lib/libc/arch/sparc64/src/thread.c	(revision 941cc8b06880f808799b7233c7afaa684ceadad0)
+++ uspace/lib/libc/arch/sparc64/src/thread.c	(revision 2c2295ab19b8f101a68776915798bd9d22ea4567)
@@ -37,4 +37,5 @@
 #include <thread.h>
 #include <malloc.h>
+#include <align.h>
 
 /*
@@ -57,5 +58,6 @@
 	tcb_t *tcb;
 	
-	*data = malloc(sizeof(tcb_t) + size);
+	size = ALIGN_UP(size, &_tls_alignment);
+	*data = memalign(&_tls_alignment, sizeof(tcb_t) + size);
 
 	tcb = (tcb_t *) (*data + size);
@@ -74,4 +76,5 @@
 void __free_tls_arch(tcb_t *tcb, size_t size)
 {
+	size = ALIGN_UP(size, &_tls_alignment);
 	void *start = ((void *) tcb) - size;
 	free(start);
Index: uspace/lib/libc/include/thread.h
===================================================================
--- uspace/lib/libc/include/thread.h	(revision 941cc8b06880f808799b7233c7afaa684ceadad0)
+++ uspace/lib/libc/include/thread.h	(revision 2c2295ab19b8f101a68776915798bd9d22ea4567)
@@ -42,4 +42,6 @@
 typedef uint64_t thread_id_t;
 
+extern char _tls_alignment;
+
 extern void __thread_entry(void);
 extern void __thread_main(uspace_arg_t *uarg);
