Author: jgardou Date: Mon Aug 27 21:34:42 2012 New Revision: 57183
URL: http://svn.reactos.org/svn/reactos?rev=57183&view=rev Log: [MSVCRTEX] - Better fix for DLLs not providing a DllMain function, as per Timo's remarks.
Added: trunk/reactos/lib/sdk/crt/startup/dllmain.c - copied unchanged from r57179, trunk/reactos/lib/sdk/crt/startup/mscdllmain.c Removed: trunk/reactos/lib/sdk/crt/startup/mscdllmain.c Modified: trunk/reactos/lib/sdk/crt/msvcrtex.cmake trunk/reactos/lib/sdk/crt/startup/crtdll.c
Modified: trunk/reactos/lib/sdk/crt/msvcrtex.cmake URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/msvcrtex.cmake?... ============================================================================== --- trunk/reactos/lib/sdk/crt/msvcrtex.cmake [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/msvcrtex.cmake [iso-8859-1] Mon Aug 27 21:34:42 2012 @@ -21,6 +21,7 @@ startup/charmax.c startup/merr.c startup/atonexit.c + startup/dllmain.c startup/txtmode.c startup/pesect.c startup/tlsmcrt.c @@ -66,9 +67,7 @@ endif()
if(MSVC) - list(APPEND MSVCRTEX_SOURCE - startup/mscmain.c - startup/mscdllmain.c) + list(APPEND MSVCRTEX_SOURCE startup/mscmain.c) else() list(APPEND MSVCRTEX_SOURCE startup/gccmain.c) endif()
Modified: trunk/reactos/lib/sdk/crt/startup/crtdll.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/startup/crtdll.... ============================================================================== --- trunk/reactos/lib/sdk/crt/startup/crtdll.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/startup/crtdll.c [iso-8859-1] Mon Aug 27 21:34:42 2012 @@ -50,19 +50,7 @@
extern int mingw_app_type;
-/* - * It is possible that a DLL provides no DllMain entry point. - * Mark it as a weak symbol for GCC. - * Tests show that at link time, MSVC looks for a function first in the object files provided, and then - * in the libraries. This means that we must provide a basic implementation in msvcrtex, which will be used - * if none is found in the object files provided to link.exe. - * This also means that we can't rely on a DllMain function implemented in a static library when linking a DLL. - */ -#ifdef __GNUC__ -extern WINBOOL WINAPI DllMain (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) __attribute__((weak)); -#else extern WINBOOL WINAPI DllMain (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved); -#endif
extern WINBOOL WINAPI DllEntryPoint (HANDLE, DWORD, LPVOID);
@@ -210,12 +198,10 @@ } if (dwReason == DLL_PROCESS_ATTACH) __main (); - if(DllMain) - retcode = DllMain(hDllHandle,dwReason,lpreserved); + retcode = DllMain(hDllHandle,dwReason,lpreserved); if (dwReason == DLL_PROCESS_ATTACH && ! retcode) { - if(DllMain) - DllMain (hDllHandle, DLL_PROCESS_DETACH, lpreserved); + DllMain (hDllHandle, DLL_PROCESS_DETACH, lpreserved); DllEntryPoint (hDllHandle, DLL_PROCESS_DETACH, lpreserved); _CRT_INIT (hDllHandle, DLL_PROCESS_DETACH, lpreserved); }
Removed: trunk/reactos/lib/sdk/crt/startup/mscdllmain.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/startup/mscdllm... ============================================================================== --- trunk/reactos/lib/sdk/crt/startup/mscdllmain.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/startup/mscdllmain.c (removed) @@ -1,11 +1,0 @@ -#include <oscalls.h> -#define _DECL_DLLMAIN -#include <process.h> - -WINBOOL WINAPI DllMain (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) -{ - /* If the DLL provides no DllMain, then chances are that it doesn't bother with thread initialization */ - if(dwReason == DLL_PROCESS_ATTACH) - DisableThreadLibraryCalls(hDllHandle); - return TRUE; -}