* dlfcn.cc (dlopen): Disable old 32 bit code on 64 bit.

* dcrt0.cc (check_sanity_and_sync): Ditto.
	* dll_init.cc (dll_dllcrt0_1): Fix typo in comment.
This commit is contained in:
Corinna Vinschen
2014-10-10 15:29:18 +00:00
parent 7a84e9c4bc
commit 3ab591cf71
4 changed files with 13 additions and 1 deletions

View File

@@ -135,6 +135,7 @@ dlopen (const char *name, int flags)
if (last_bs && !wcschr (last_bs, L'.'))
wcscat (last_bs, L".");
#ifndef __x86_64__
/* Workaround for broken DLLs built against Cygwin versions 1.7.0-49
up to 1.7.0-57. They override the cxx_malloc pointer in their
DLL initialization code even if loaded dynamically. This is a
@@ -150,6 +151,7 @@ dlopen (const char *name, int flags)
/* Store original cxx_malloc pointer. */
struct per_process_cxx_malloc *tmp_malloc;
tmp_malloc = __cygwin_user_data.cxx_malloc;
#endif
if (!(flags & RTLD_NOLOAD)
|| (ret = GetModuleHandleW (path)) != NULL)
@@ -160,8 +162,10 @@ dlopen (const char *name, int flags)
(HMODULE *) &ret);
}
#ifndef __x86_64__
/* Restore original cxx_malloc pointer. */
__cygwin_user_data.cxx_malloc = tmp_malloc;
#endif
if (!ret)
__seterrno ();