]> pd.if.org Git - pdclib/blobdiff - platform/win32/functions/_PDCLIB/_PDCLIB_runTlsCallbacks.c
win32: initial pass at thread support
[pdclib] / platform / win32 / functions / _PDCLIB / _PDCLIB_runTlsCallbacks.c
diff --git a/platform/win32/functions/_PDCLIB/_PDCLIB_runTlsCallbacks.c b/platform/win32/functions/_PDCLIB/_PDCLIB_runTlsCallbacks.c
new file mode 100644 (file)
index 0000000..7dcf7a6
--- /dev/null
@@ -0,0 +1,34 @@
+#include <stddef.h>\r
+#include <windows.h>\r
+\r
+#ifndef REGTEST\r
+extern PIMAGE_TLS_CALLBACK __crt_xl_start__;\r
+#ifdef __GNUC__\r
+__attribute__((section(".CRT$XLZZZ")))\r
+#else\r
+__declspec(allocate(".CRT$XLZZZ")) \r
+#endif\r
+PIMAGE_TLS_CALLBACK __crt_xl_end__ = NULL;\r
+\r
+/* Runs all TLS callbacks registered in the executable\r
+ */\r
+\r
+void NTAPI _PDCLIB_runTlsCallbacks(void * image, DWORD reason, PVOID pv);\r
+void NTAPI _PDCLIB_runTlsCallbacks(void * image, DWORD reason, PVOID pv)\r
+{\r
+    PIMAGE_TLS_CALLBACK * pcb = &__crt_xl_start__;\r
+\r
+    while(*pcb) (*(pcb++))(image, reason, pv);\r
+}\r
+#endif\r
+\r
+#ifdef TEST\r
+#include <_PDCLIB_test.h>\r
+\r
+/* Tested in tss_get.c */\r
+int main( void )\r
+{\r
+    return TEST_RESULTS;\r
+}\r
+\r
+#endif
\ No newline at end of file