Index: uspace/lib/c/generic/thread/tls.c
===================================================================
--- uspace/lib/c/generic/thread/tls.c	(revision bf0716fb24686e0ffa4f402f6a89bd163f14b753)
+++ uspace/lib/c/generic/thread/tls.c	(revision 328b89f1833198d0982bf7d09389aa243e0b0c93)
@@ -59,8 +59,8 @@
 #endif
 
-static ptrdiff_t _tcb_data_offset(void)
+static ptrdiff_t _tcb_data_offset(const void* elf)
 {
 	const elf_segment_header_t *tls =
-	    elf_get_phdr(__progsymbols.elfstart, PT_TLS);
+	    elf_get_phdr(elf, PT_TLS);
 
 	size_t tls_align = tls ? tls->p_align : 1;
@@ -80,5 +80,5 @@
 	assert(runtime_env == NULL);
 #endif
-	return (uint8_t *)__tcb_get() + _tcb_data_offset();
+	return (uint8_t *)__tcb_get() + _tcb_data_offset(__progsymbols.elfstart);
 }
 
@@ -114,9 +114,9 @@
 #ifdef CONFIG_TLS_VARIANT_1
 	tcb_t *tcb = area;
-	uint8_t *data = (uint8_t *)tcb + _tcb_data_offset();
+	uint8_t *data = (uint8_t *)tcb + _tcb_data_offset(elf);
 	memset(tcb, 0, sizeof(*tcb));
 #else
 	uint8_t *data = area;
-	tcb_t *tcb = (tcb_t *) (data - _tcb_data_offset());
+	tcb_t *tcb = (tcb_t *) (data - _tcb_data_offset(elf));
 	memset(tcb, 0, sizeof(tcb_t));
 	tcb->self = tcb;
