[GHC] #10435: catastrophic exception-handling disablement on Windows Server 2008 R2

GHC ghc-devs at haskell.org
Wed May 20 09:11:52 UTC 2015


#10435: catastrophic exception-handling disablement on Windows Server 2008 R2
-------------------------------------+-------------------------------------
              Reporter:  malcolmw    |             Owner:  simonmar
                  Type:  bug         |            Status:  new
              Priority:  normal      |         Milestone:
             Component:  Runtime     |           Version:  7.10.1
  System                             |  Operating System:  Windows
              Keywords:  windows,    |   Type of failure:  Runtime crash
  exceptions                         |        Blocked By:
          Architecture:  x86         |   Related Tickets:
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------
 We have found a very strange RTS bug that only manifests on some Windows
 machines, running Windows Server 2008 R2.  It does not occur on our
 Windows 7 machines.  We are not sure whether the installed version of
 Visual C runtime system matters.

 The context is a ghc-compiled executable, that calls a function from a C++
 DLL.  The C++ function throws an exception internally, then catches it,
 and returns normally.  The symptom of the bug is that, from ghc-7.8.1
 onwards, including ghc-7.10.1, the C++ exception is not caught by the C++
 code, but terminates the program catastrophically, with exit code 127.
 When the Haskell executable is compiled by ghc-7.2.3 or before, the bug
 does not happen.

 If, instead of having the main function in Haskell, we write a wrapper
 main function in C++, that calls the Haskell from a DLL (and the Haskell
 then calls back into C++), the bug does not happen.  Hence, we surmise
 there is some ghc RTS initialisation that is specific to Windows, that
 deals with exception handling, and that is incorrect for certain versions
 of Windows.

 Attached to the ticket, please find (a) a C++ module, which exports a
 single function that throws an exception and catches it; (b) a Haskell
 module which imports the C++ via the FFI, and calls it; (c) a build script
 which compiles the C++ to a DLL, using the MSVC compiler, compiles the
 Haskell with ghc, and links them together.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10435>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list