Hi,
I don't agree with these changes.
If we need a DllEntry in the lib, then we should use the one that is provided by mingw-w64 (all this code is 100% mingw-w64). It simply returns true (thats exactly what the one in MS CRT does) and works for gcc and MSVC. Also what's the point of DisableThreadLibraryCalls() here? As you wrote yourself, no DllMain only means "I have nothing more to initialize than the CRT". But this disables the CRT thread initializion, too. There is also no need for weak symbols, we can simply call the stub DllMain, since it doesn't (shouldn't) do anything.
Regards, Timo
Am 27.08.2012 01:31, schrieb jgardou@svn.reactos.org:
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 else() list(APPEND MSVCRTEX_SOURCE startup/gccmain.c) endif()startup/mscdllmain.c)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)
DllEntryPoint (hDllHandle, DLL_PROCESS_DETACH, lpreserved); _CRT_INIT (hDllHandle, DLL_PROCESS_DETACH, lpreserved); }DllMain (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/mscdllm... ============================================================================== --- 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