summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2014-10-10 15:29:18 +0000
committerCorinna Vinschen <corinna@vinschen.de>2014-10-10 15:29:18 +0000
commit3ab591cf71a5302ead4eaa1eeff9242717cfdcad (patch)
treeb7affacc2be2bb796e9606186d6287b4bdffcbed
parent7a84e9c4bcf9d38a7400bf797e5a4ec8d200b916 (diff)
downloadcygnal-3ab591cf71a5302ead4eaa1eeff9242717cfdcad.tar.gz
cygnal-3ab591cf71a5302ead4eaa1eeff9242717cfdcad.tar.bz2
cygnal-3ab591cf71a5302ead4eaa1eeff9242717cfdcad.zip
* 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.
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/dcrt0.cc2
-rw-r--r--winsup/cygwin/dlfcn.cc4
-rw-r--r--winsup/cygwin/dll_init.cc2
4 files changed, 13 insertions, 1 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index f970d8ab4..ed36c5db0 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+2014-10-10 Corinna Vinschen <corinna@vinschen.de>
+
+ * 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.
+
2014-10-09 Corinna Vinschen <corinna@vinschen.de>
* fhandler_procsys.cc (fhandler_procsys::readdir): Just test
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 02c0ad11d..ac741a689 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -393,11 +393,13 @@ check_sanity_and_sync (per_process *p)
api_fatal ("cygwin DLL and APP are out of sync -- API version mismatch %u > %u",
p->api_major, cygwin_version.api_major);
+#ifndef __x86_64__
/* This is a kludge to work around a version of _cygwin_common_crt0
which overwrote the cxx_malloc field with the local DLL copy.
Hilarity ensues if the DLL is not loaded while the process
is forking. */
__cygwin_user_data.cxx_malloc = &default_cygwin_cxx_malloc;
+#endif
}
child_info NO_COPY *child_proc_info;
diff --git a/winsup/cygwin/dlfcn.cc b/winsup/cygwin/dlfcn.cc
index c27adf675..6bcdac92d 100644
--- a/winsup/cygwin/dlfcn.cc
+++ b/winsup/cygwin/dlfcn.cc
@@ -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 ();
diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc
index 3fcb448b9..51ef186a3 100644
--- a/winsup/cygwin/dll_init.cc
+++ b/winsup/cygwin/dll_init.cc
@@ -640,7 +640,7 @@ dll_dllcrt0_1 (VOID *x)
when loaded either statically or dynamically. Because this leaves
a stale pointer into demapped memory space if the DLL is unloaded
by a call to dlclose, we prevent this happening for dynamically
- loaded DLLS in dlopen by saving and restoring cxx_malloc around
+ loaded DLLs in dlopen by saving and restoring cxx_malloc around
the call to LoadLibrary, which invokes the DLL's startup sequence.
Modern DLLs won't even attempt to override the pointer when loaded
statically, but will write their overrides directly into the