#7319: +RTS -xc sometimes results in segfault
------------------------------+---------------------------------------------
 Reporter:  edsko             |          Owner:                  
     Type:  bug               |         Status:  new             
 Priority:  normal            |      Component:  Compiler        
  Version:  7.6.1             |       Keywords:                  
       Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
  Failure:  None/Unknown      |       Testcase:                  
Blockedby:                    |       Blocking:                  
  Related:                    |  
------------------------------+---------------------------------------------
 I have so far been unable to reproduce this in a small example, but in my
 larger examples code compiled with profiling enabled (and -fprof-auto)
 often crashes on an exception. Here's a gdb session illustrating the
 problem:

 {{{
 (gdb) run
 Starting program: /Users/edsko/wt/distributed-process/network-transport-
 tcp/dist/build/TestTCP/TestTCP +RTS -xc
 Reading symbols for shared libraries ++............................. done
 Running "InvalidAddress": *** Exception (reporting due to +RTS -xc):
 (THUNK_2_0), stack trace:
   Network.Transport.TCP.Mock.Socket.getAddrInfo,
   called from Network.Transport.TCP.Internal.forkServer,
   called from Network.Transport.TCP.createTransportExposeInternals,
   called from Network.Transport.TCP.createTransport,
   called from Main.testInvalidAddress.\,
   called from Main.testInvalidAddress,
   called from Main.main,
   called from Main.CAF

 Program received signal EXC_BAD_ACCESS, Could not access memory.
 Reason: 13 at address: 0x0000000000000000
 0x0000000100398c06 in fprintCCS_stderr ()
 (gdb) bt
 #0  0x0000000100398c06 in fprintCCS_stderr ()
 #1  0x00000001003c1e3c in stg_raisezh ()
 Previous frame inner to this frame (gdb could not unwind past this frame)
 }}}

 with ghc 7.4.1; with ghc 7.6.1, it is

 {{{
 Program received signal EXC_BAD_ACCESS, Could not access memory.
 Reason: 13 at address: 0x0000000000000000
 0x000000010037a676 in fprintCCS_stderr ()
 (gdb) bt
 #0  0x000000010037a676 in fprintCCS_stderr ()
 #1  0x00000001003a3e27 in stg_raisezh ()
 Previous frame inner to this frame (gdb could not unwind past this frame)
 }}}

 Without gdb, it looks something like

 {{{
 # dist/build/TestTCP/TestTCP +RTS -xc
 Running "InvalidAddress": *** Exception (reporting due to +RTS -xc):
 (THUNK_2_0), stack trace:
   Network.Transport.TCP.Mock.Socket.getAddrInfo,
   called from Network.Transport.TCP.Internal.forkServer,
   called from Network.Transport.TCP.createTransportExposeInternals,
   called from Network.Transport.TCP.createTransport,
   called from Main.testInvalidAddress.\,
   called from Main.testInvalidAddress,
   called from Main.main,
   called from Main.CAF
 *** Exception (reporting due to +RTS -xc): (BLACKHOLE), stack trace:
   Network.Transport.TCP.Mock.Socket.getAddrInfo,
   called from Network.Transport.TCP.Internal.forkServer,
   called from Network.Transport.TCP.createTransportExposeInternals,
   called from Network.Transport.TCP.createTransport,
   called from Main.testInvalidAddress.\,
   called from Main.testInvalidAddress,
   called from Main.main,
   called from Main.CAF
 *** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
   Network.Transport.TCP.Mock.Socket.getAddrInfo,
   called from Network.Transport.TCP.Internal.forkServer,
   called from Network.Transport.TCP.createTransportExposeInternals,
   called from Network.Transport.TCP.createTransport,
   called from Main.testInvalidAddress.\,
   called from Main.testInvalidAddress,
   called from Main.main,
   called from Main.CAF
 *** Exception (reporting due to +RTS -xc): (THUNK_STATIC), stack trace:
   Main.main
 *** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
   Network.Transport.TCP.Mock.Socket.getAddrInfo,
   called from Network.Transport.TCP.Internal.forkServer,
   called from Network.Transport.TCP.createTransportExposeInternals,
   called from Network.Transport.TCP.createTransport,
   called from Main.testInvalidAddress.\,
   called from Main.testInvalidAddress,
   called from Main.main,
   called from Main.CAF
 Segmentation fault: 11
 }}}

 Note that the place of the Segmentation fault is the place where normally
 the exception would be printed.

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

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to