about summary refs log tree commit diff
path: root/nptl/sysdeps/i386/tls.h
diff options
context:
space:
mode:
Diffstat (limited to 'nptl/sysdeps/i386/tls.h')
-rw-r--r--nptl/sysdeps/i386/tls.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h
index eea5e3010d..8a1f547b83 100644
--- a/nptl/sysdeps/i386/tls.h
+++ b/nptl/sysdeps/i386/tls.h
@@ -352,6 +352,20 @@ union user_desc_init
        }})
 
 
+/* Call the user-provided thread function.  */
+#define CALL_THREAD_FCT(descr) \
+  ({ void *__res;							      \
+     int __ignore1, __ignore2;						      \
+     asm volatile ("subl $12, %%esp\n\t"				      \
+		   "pushl %%gs:%P4\n\t"					      \
+		   "call *%%gs:%P3\n\t"					      \
+		   "addl $16, %%esp"					      \
+		   : "=a" (__res), "=c" (__ignore1), "=d" (__ignore2)	      \
+		   : "i" (offsetof (struct pthread, start_routine)),	      \
+		     "i" (offsetof (struct pthread, arg)));		      \
+     __res; })
+
+
 #endif /* __ASSEMBLER__ */
 
 #endif	/* tls.h */