summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-11-12 11:48:30 +0100
committerCorinna Vinschen <corinna@vinschen.de>2015-11-12 11:48:30 +0100
commitd03f429727e0e61fad4b52c9bc94011b85ef7b21 (patch)
tree3185ceddb486c7ef4d8097bb0cedc0b550ea4a71
parent1968c57d9c0d5eb8fff94d8bcc6d4d82ee0c7d47 (diff)
downloadcygnal-d03f429727e0e61fad4b52c9bc94011b85ef7b21.tar.gz
cygnal-d03f429727e0e61fad4b52c9bc94011b85ef7b21.tar.bz2
cygnal-d03f429727e0e61fad4b52c9bc94011b85ef7b21.zip
Fix crash at process init on 64 bit XP/2003 under WOW64
* init.cc (munge_threadfunc): Don't call NtQueryInformationThread with ThreadQuerySetWin32StartAddress info class on XP 64 and Server 2003 64. It crashes. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/init.cc9
-rw-r--r--winsup/cygwin/release/2.3.114
3 files changed, 26 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 0e96d150e..8e40c2f31 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-12 Corinna Vinschen <corinna@vinschen.de>
+
+ * init.cc (munge_threadfunc): Don't call NtQueryInformationThread with
+ ThreadQuerySetWin32StartAddress info class on XP 64 and Server 2003 64.
+ It crashes.
+
2015-11-09 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 1.
diff --git a/winsup/cygwin/init.cc b/winsup/cygwin/init.cc
index 69e66a029..c6f0e3de9 100644
--- a/winsup/cygwin/init.cc
+++ b/winsup/cygwin/init.cc
@@ -57,9 +57,12 @@ munge_threadfunc ()
{
char *threadfunc = NULL;
- NtQueryInformationThread (NtCurrentThread (),
- ThreadQuerySetWin32StartAddress,
- &threadfunc, sizeof threadfunc, NULL);
+ if (wincap.wow64_has_secondary_stack ())
+ threadfunc = ebp[threadfunc_ix[0]];
+ else
+ NtQueryInformationThread (NtCurrentThread (),
+ ThreadQuerySetWin32StartAddress,
+ &threadfunc, sizeof threadfunc, NULL);
if (!search_for || threadfunc == search_for)
{
search_for = NULL;
diff --git a/winsup/cygwin/release/2.3.1 b/winsup/cygwin/release/2.3.1
new file mode 100644
index 000000000..5299d2304
--- /dev/null
+++ b/winsup/cygwin/release/2.3.1
@@ -0,0 +1,14 @@
+What's new:
+-----------
+
+
+What changed:
+-------------
+
+
+Bug Fixes
+---------
+
+- The fix for wine introduced in 2.3.0 crashes in 32 bit Cygwin on 64 bit XP
+ and 64 bit Server 2003 only. This should work now.
+ Addresses: https://cygwin.com/ml/cygwin/2015-11/msg00187.html