Author: jgardou
 Date: Sun Aug 26 23:31:49 2012
 New Revision: 57171
 URL: 
http://svn.reactos.org/svn/reactos?rev=57171&view=rev
 Log:
 [MINGWEX]
 - mark DllMain as a weak symbol for GCC.
 - supply a stubbed DllMain for MSVC.
 - DllMain is optional, and some DLLs don't implement it. That doesn't
 mean that they have no entry point, it means "I have nothing more to
 initialize than the CRT".
 Added:
      trunk/reactos/lib/sdk/crt/startup/mscdllmain.c   (with props)
 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] Sun Aug 26
 23:31:49 2012
 @@ -66,7 +66,9 @@
   endif()
   if(MSVC)
 -    list(APPEND MSVCRTEX_SOURCE startup/mscmain.c)
 +    list(APPEND MSVCRTEX_SOURCE
 +        startup/mscmain.c
 +        startup/mscdllmain.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] Sun Aug 26
 23:31:49 2012
 @@ -50,7 +50,19 @@
   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);
 @@ -198,10 +210,12 @@
       }
     if (dwReason == DLL_PROCESS_ATTACH)
       __main ();
 -  retcode = DllMain(hDllHandle,dwReason,lpreserved);
 +  if(DllMain)
 +    retcode = DllMain(hDllHandle,dwReason,lpreserved);
     if (dwReason == DLL_PROCESS_ATTACH && ! retcode)
       {
 -    DllMain (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
 +    if(DllMain)
 +      DllMain (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
       DllEntryPoint (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
       _CRT_INIT (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
       }
 Added: trunk/reactos/lib/sdk/crt/startup/mscdllmain.c
 URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/startup/mscdll…
 ==============================================================================
 --- trunk/reactos/lib/sdk/crt/startup/mscdllmain.c (added)
 +++ trunk/reactos/lib/sdk/crt/startup/mscdllmain.c [iso-8859-1] Sun
 Aug 26 23:31:49 2012
 @@ -1,0 +1,11 @@
 +#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;
 +}
 Propchange: trunk/reactos/lib/sdk/crt/startup/mscdllmain.c
 ------------------------------------------------------------------------------
      svn:eol-style = native
 
 _______________________________________________
 Ros-dev mailing list
 Ros-dev(a)reactos.org