Index: uspace/lib/c/generic/libc.c
===================================================================
--- uspace/lib/c/generic/libc.c	(revision 7c4b26cbe3d53c6c9fa1c8f7bf78a840f7c05528)
+++ uspace/lib/c/generic/libc.c	(revision 91e4567f3f992dd7a5a1d0c5cd1ce21569453fd0)
@@ -65,4 +65,12 @@
 void __main(void *pcb_ptr)
 {
+	/* Save the PCB pointer */
+	__pcb = (pcb_t *) pcb_ptr;
+	
+#ifdef CONFIG_RTLD
+	if (__pcb != NULL && __pcb->rtld_runtime != NULL) {
+		runtime_env = (rtld_t *) __pcb->rtld_runtime;
+	}
+#endif
 	/* Initialize user task run-time environment */
 	__malloc_init();
@@ -74,6 +82,4 @@
 	__tcb_set(fibril->tcb);
 	
-	/* Save the PCB pointer */
-	__pcb = (pcb_t *) pcb_ptr;
 	
 #ifdef FUTEX_UPGRADABLE
@@ -89,9 +95,4 @@
 	char **argv;
 	
-#ifdef CONFIG_RTLD
-	if (__pcb != NULL && __pcb->rtld_runtime != NULL) {
-		runtime_env = (rtld_t *) __pcb->rtld_runtime;
-	}
-#endif
 	/*
 	 * Get command line arguments and initialize
Index: uspace/lib/c/generic/rtld/rtld.c
===================================================================
--- uspace/lib/c/generic/rtld/rtld.c	(revision 7c4b26cbe3d53c6c9fa1c8f7bf78a840f7c05528)
+++ uspace/lib/c/generic/rtld/rtld.c	(revision 91e4567f3f992dd7a5a1d0c5cd1ce21569453fd0)
@@ -151,4 +151,5 @@
 	offset = 0;
 	list_foreach(rtld->modules, modules_link, module_t, m) {
+		assert(offset + m->tdata_size + m->tbss_size <= rtld->tls_size);
 		memcpy(data + offset, m->tdata, m->tdata_size);
 		offset += m->tdata_size;
Index: uspace/lib/c/generic/tls.c
===================================================================
--- uspace/lib/c/generic/tls.c	(revision 7c4b26cbe3d53c6c9fa1c8f7bf78a840f7c05528)
+++ uspace/lib/c/generic/tls.c	(revision 91e4567f3f992dd7a5a1d0c5cd1ce21569453fd0)
@@ -47,4 +47,8 @@
 size_t tls_get_size(void)
 {
+#ifdef CONFIG_RTLD
+	if (runtime_env != NULL)
+		return runtime_env->tls_size;
+#endif
 	return &_tbss_end - &_tdata_start;
 }
@@ -83,11 +87,5 @@
 void tls_free(tcb_t *tcb)
 {
-	size_t tls_size = &_tbss_end - &_tdata_start;
-
-#ifdef CONFIG_RTLD
-	if (runtime_env != NULL)
-		tls_size = runtime_env->tls_size;
-#endif
-	tls_free_arch(tcb, tls_size);
+	tls_free_arch(tcb, tls_get_size());
 }
 
