Fix access violation on Windows while static linking

This commit is contained in:
theoractice 2016-03-22 19:14:54 +08:00
parent de202fa375
commit 61cf8f74d9
2 changed files with 23 additions and 2 deletions

View File

@ -147,5 +147,6 @@ In chronological order:
* [2016-03-14] Additional functional Assembly Kernels for Cortex-A57
* [2016-03-14] Optimize Dgemm 4x4 for Cortex-A57
* [Your name or handle] <[email or website]>
* [Date] [Brief summary of your changes]
* theoractice <https://github.com/theoractice/>
* [2016-03-20] Fix compiler error in VisualStudio with CMake
* [2016-03-22] Fix access violation on Windows while static linking

View File

@ -1452,6 +1452,26 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReser
}
return TRUE;
}
/*
This is to allow static linking.
Code adapted from Google performance tools:
https://gperftools.googlecode.com/git-history/perftools-1.0/src/windows/port.cc
Reference:
https://sourceware.org/ml/pthreads-win32/2008/msg00028.html
*/
static int on_process_term(void)
{
gotoblas_quit();
return 0;
}
#pragma comment(linker, "/INCLUDE:__tls_used")
#pragma data_seg(push, old_seg)
#pragma data_seg(".CRT$XLB")
static void (APIENTRY *dll_callback)(HINSTANCE h, DWORD ul_reason_for_call, PVOID pv) = DllMain;
#pragma data_seg(".CRT$XTU")
static int(*p_process_term)(void) = on_process_term;
#pragma data_seg(pop, old_seg)
#endif
#if (defined(C_PGI) || (!defined(C_SUN) && defined(F_INTERFACE_SUN))) && (defined(ARCH_X86) || defined(ARCH_X86_64))