Work around Cygwin's crash-suppression behavior
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Feb 2011 18:45:10 +0000 (18:45 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Feb 2011 18:45:10 +0000 (18:45 +0000)
Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will
inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be
invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode
when our test apps launch to work around Cygwin's behavior.

Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem
debugger) when launched from Cygwin 1.7

Reviewed by Darin Adler.

Source/JavaScriptCore:

* API/tests/testapi.c: Added a now-needed #include.
(main):
* jsc.cpp:
(main):
Call ::SetErrorMode(0) to undo Cygwin's folly.

* JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Define NOMINMAX like many of our
other projects do so that windows.h won't define min/max macros that interfere with
std::numeric_limits<T>::min/max.

Tools:

* DumpRenderTree/win/DumpRenderTree.cpp:
(main):
* TestWebKitAPI/win/main.cpp:
(main):
* WebKitAPITest/main.cpp:
(main):
* WebKitTestRunner/win/TestControllerWin.cpp:
(WTR::TestController::platformInitialize):
Call ::SetErrorMode(0) to undo Cygwin's folly.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@79695 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/API/tests/testapi.c
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiCommon.vsprops
Source/JavaScriptCore/jsc.cpp
Tools/ChangeLog
Tools/DumpRenderTree/win/DumpRenderTree.cpp
Tools/TestWebKitAPI/win/main.cpp
Tools/WebKitAPITest/main.cpp
Tools/WebKitTestRunner/win/TestControllerWin.cpp

index 1ecfc7e..28d47bb 100644 (file)
 #include <wtf/Assertions.h>
 #include <wtf/UnusedParam.h>
 
+#if OS(WINDOWS)
+#include <windows.h>
+#endif
+
 #if COMPILER(MSVC)
 
 #include <wtf/MathExtras.h>
@@ -819,6 +823,13 @@ static bool checkForCycleInPrototypeChain()
 
 int main(int argc, char* argv[])
 {
+#if OS(WINDOWS)
+    // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
+    // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
+    // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
+    ::SetErrorMode(0);
+#endif
+
     const char *scriptPath = "testapi.js";
     if (argc > 1) {
         scriptPath = argv[1];
index 67d0494..ab6018c 100644 (file)
@@ -1,3 +1,27 @@
+2011-02-25  Adam Roben  <aroben@apple.com>
+
+        Work around Cygwin's crash-suppression behavior
+
+        Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will
+        inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be
+        invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode
+        when our test apps launch to work around Cygwin's behavior.
+
+        Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem
+        debugger) when launched from Cygwin 1.7
+
+        Reviewed by Darin Adler.
+
+        * API/tests/testapi.c: Added a now-needed #include.
+        (main):
+        * jsc.cpp:
+        (main):
+        Call ::SetErrorMode(0) to undo Cygwin's folly.
+
+        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Define NOMINMAX like many of our
+        other projects do so that windows.h won't define min/max macros that interfere with
+        std::numeric_limits<T>::min/max.
+
 2011-02-24  Adam Barth  <abarth@webkit.org>
 
         Reviewed by Eric Seidel.
index 83c9007..1d2060f 100644 (file)
@@ -7,6 +7,7 @@
        <Tool
                Name="VCCLCompilerTool"
                AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\API&quot;;&quot;$(ConfigurationBuildDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(ConfigurationBuildDir)\include\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\include\private\JavaScriptCore&quot;;&quot;$(ConfigurationBuildDir)\include&quot;;&quot;$(ConfigurationBuildDir)\include\private&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
+               PreprocessorDefinitions="NOMINMAX"
                WarningLevel="4"
                Detect64BitPortabilityProblems="true"
                ForcedIncludeFiles="ICUVersion.h"
index 049f843..292e400 100644 (file)
@@ -324,7 +324,13 @@ int jscmain(int argc, char** argv, JSGlobalData*);
 
 int main(int argc, char** argv)
 {
-#if defined(_DEBUG) && OS(WINDOWS)
+#if OS(WINDOWS)
+    // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
+    // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
+    // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
+    ::SetErrorMode(0);
+
+#if defined(_DEBUG)
     _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
     _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
     _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
@@ -332,6 +338,7 @@ int main(int argc, char** argv)
     _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
     _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
 #endif
+#endif
 
 #if COMPILER(MSVC) && !OS(WINCE)
     timeBeginPeriod(1);
index 960c55f..f9c1159 100644 (file)
@@ -1,3 +1,27 @@
+2011-02-25  Adam Roben  <aroben@apple.com>
+
+        Work around Cygwin's crash-suppression behavior
+
+        Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will
+        inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be
+        invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode
+        when our test apps launch to work around Cygwin's behavior.
+
+        Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem
+        debugger) when launched from Cygwin 1.7
+
+        Reviewed by Darin Adler.
+
+        * DumpRenderTree/win/DumpRenderTree.cpp:
+        (main):
+        * TestWebKitAPI/win/main.cpp:
+        (main):
+        * WebKitAPITest/main.cpp:
+        (main):
+        * WebKitTestRunner/win/TestControllerWin.cpp:
+        (WTR::TestController::platformInitialize):
+        Call ::SetErrorMode(0) to undo Cygwin's folly.
+
 2011-02-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>
 
         Reviewed by Andreas Kling.
index 002f4ae..8f7a16c 100644 (file)
@@ -1258,6 +1258,11 @@ static LONG WINAPI exceptionFilter(EXCEPTION_POINTERS*)
 
 int main(int argc, char* argv[])
 {
+    // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
+    // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
+    // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
+    ::SetErrorMode(0);
+
     ::SetUnhandledExceptionFilter(exceptionFilter);
 
     leakChecking = false;
index 3091819..8f81f66 100644 (file)
 
 int main(int argc, const char* argv[])
 {
+    // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
+    // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
+    // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
+    ::SetErrorMode(0);
+
     bool passed = true;
 
     std::string argument(argv[1]);
index a941c30..8b54b01 100644 (file)
@@ -28,6 +28,11 @@ using namespace WebKitAPITest;
 
 int main(int, char*[])
 {
+    // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
+    // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
+    // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
+    ::SetErrorMode(0);
+
     // FIXME: Remove this line once <http://webkit.org/b/32867> is fixed.
     OleInitialize(0);
 
index 5af5503..f290a1d 100644 (file)
@@ -96,6 +96,11 @@ void TestController::notifyDone()
 
 void TestController::platformInitialize()
 {
+    // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
+    // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
+    // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
+    ::SetErrorMode(0);
+
     ::SetUnhandledExceptionFilter(exceptionFilter);
 
     _setmode(1, _O_BINARY);