X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=platform%2Fwin32%2Ffunctions%2F_PDCLIB%2F_PDCLIB_runTlsCallbacks.c;fp=platform%2Fwin32%2Ffunctions%2F_PDCLIB%2F_PDCLIB_runTlsCallbacks.c;h=7dcf7a69846874579d6a29c7db35aaa33bab4e7a;hb=639bad513ab9399ed9a8c588a476a10dbe6c9478;hp=0000000000000000000000000000000000000000;hpb=008908f7a61acf9df1248c005378a3c4b4393547;p=pdclib diff --git a/platform/win32/functions/_PDCLIB/_PDCLIB_runTlsCallbacks.c b/platform/win32/functions/_PDCLIB/_PDCLIB_runTlsCallbacks.c new file mode 100644 index 0000000..7dcf7a6 --- /dev/null +++ b/platform/win32/functions/_PDCLIB/_PDCLIB_runTlsCallbacks.c @@ -0,0 +1,34 @@ +#include +#include + +#ifndef REGTEST +extern PIMAGE_TLS_CALLBACK __crt_xl_start__; +#ifdef __GNUC__ +__attribute__((section(".CRT$XLZZZ"))) +#else +__declspec(allocate(".CRT$XLZZZ")) +#endif +PIMAGE_TLS_CALLBACK __crt_xl_end__ = NULL; + +/* Runs all TLS callbacks registered in the executable + */ + +void NTAPI _PDCLIB_runTlsCallbacks(void * image, DWORD reason, PVOID pv); +void NTAPI _PDCLIB_runTlsCallbacks(void * image, DWORD reason, PVOID pv) +{ + PIMAGE_TLS_CALLBACK * pcb = &__crt_xl_start__; + + while(*pcb) (*(pcb++))(image, reason, pv); +} +#endif + +#ifdef TEST +#include <_PDCLIB_test.h> + +/* Tested in tss_get.c */ +int main( void ) +{ + return TEST_RESULTS; +} + +#endif \ No newline at end of file