[GHC] #7747: debug_p RTS is buggy (debugging and profiled)

GHC cvs-ghc at haskell.org
Thu Mar 7 23:14:19 CET 2013


#7747: debug_p RTS is buggy (debugging and profiled)
-----------------------------+----------------------------------------------
Reporter:  ezyang            |          Owner:  ezyang          
    Type:  bug               |         Status:  new             
Priority:  normal            |      Component:  Profiling       
 Version:  7.7               |       Keywords:                  
      Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
 Failure:  Runtime crash     |      Blockedby:                  
Blocking:                    |        Related:                  
-----------------------------+----------------------------------------------
Description changed by ezyang:

Old description:

> I think some of the sanity assertions that debugging enables are not
> being adjusted adequately when profiling is turned on. We probably never
> caught this because we don't build debug_p by default. I see some worse
> problems under some more complicated test-cases but lets go with the
> simple case first!
>
> {{{
> fib :: Integer -> Integer
> fib 0 = 1
> fib 1 = 1
> fib n = fib (n-1) + fib (n-2)
>
> main = print (fib 25)
> }}}
>
> built as
>
> {{{
> /srv/code/ghc-build-tick/inplace/bin/ghc-stage2 -fforce-recomp -fprof-
> drop -prof -debug --make dp.hs -O -rtsopts
> }}}
>
> run as
>
> {{{
> ezyang at javelin:~/Dev/haskell$ ./dp +RTS -DS
> cap 0: initialised
> dp: internal error: checkClosure: found EVACUATED closure 0
>     (GHC version 7.7 for x86_64_unknown_linux)
>     Please report this as a GHC bug:
> http://www.haskell.org/ghc/reportabug
> Aborted (core dumped)
> }}}
>
> Here is the GDB backtrace:
>
> {{{
> Program received signal SIGABRT, Aborted.
> 0x00007ffff6ec4425 in raise () from /lib/x86_64-linux-gnu/libc.so.6
> (gdb) bt
> #0  0x00007ffff6ec4425 in raise () from /lib/x86_64-linux-gnu/libc.so.6
> #1  0x00007ffff6ec7b8b in abort () from /lib/x86_64-linux-gnu/libc.so.6
> #2  0x0000000000a552b7 in rtsFatalInternalErrorFn (s=0xba5038
> "checkClosure: found EVACUATED closure %d", ap=0x7fffffffd4d8) at
> rts/RtsMessages.c:170
> #3  0x0000000000a54eef in barf (s=0xba5038 "checkClosure: found EVACUATED
> closure %d") at rts/RtsMessages.c:42
> #4  0x0000000000a6a368 in checkClosure (p=0x7ffff64fe988) at
> rts/sm/Sanity.c:237
> #5  0x0000000000a6aa54 in checkHeapChain (bd=0x7ffff6403f80) at
> rts/sm/Sanity.c:450
> #6  0x0000000000a6b2f1 in checkGeneration (gen=0xe7a0e0,
> after_major_gc=rtsFalse) at rts/sm/Sanity.c:706
> #7  0x0000000000a6b3bc in checkFullHeap (after_major_gc=rtsFalse) at
> rts/sm/Sanity.c:724
> #8  0x0000000000a6b42b in checkSanity (after_gc=rtsFalse,
> major_gc=rtsFalse) at rts/sm/Sanity.c:733
> #9  0x0000000000a662bb in GarbageCollect (collect_gen=0,
> do_heap_census=rtsFalse, gc_type=0, cap=0xe6b680 <MainCapability>) at
> rts/sm/GC.c:298
> #10 0x0000000000a579dd in scheduleDoGC (pcap=0x7fffffffd860,
> task=0xe8ccf0, force_major=rtsFalse) at rts/Schedule.c:1651
> #11 0x0000000000a56f92 in schedule (initialCapability=0xe6b680
> <MainCapability>, task=0xe8ccf0) at rts/Schedule.c:553
> #12 0x0000000000a582b6 in scheduleWaitThread (tso=0x7ffff6405378,
> ret=0x0, pcap=0x7fffffffd930) at rts/Schedule.c:2359
> #13 0x0000000000a98156 in rts_evalLazyIO (cap=0x7fffffffd930, p=0xdc2840,
> ret=0x0) at rts/RtsAPI.c:497
> #14 0x0000000000a54d5b in real_main () at rts/RtsMain.c:63
> #15 0x0000000000a54e4a in hs_main (argc=3, argv=0x7fffffffda98,
> main_closure=0xdc2840, rts_config=...) at rts/RtsMain.c:114
> #16 0x0000000000404bb3 in main ()
> }}}
>
> and here is the heap in the vicinity of the problem:
>
> {{{
> (gdb) pmem (0x7ffff64fe988-16) 16
> 0x7ffff64fe9f0: 0x9d51c0 <integerzmgmp_GHCziIntegerziType_Szh_con_info>
> 0x7ffff64fe9e8: 0x7ffff6405189
> 0x7ffff64fe9e0: 0x0
> 0x7ffff64fe9d8: 0xdc2650
> 0x7ffff64fe9d0: 0xa79210 <stg_BLACKHOLE_info>
> 0x7ffff64fe9c8: 0x5
> 0x7ffff64fe9c0: 0x0
> 0x7ffff64fe9b8: 0xdc2650
> 0x7ffff64fe9b0: 0x9d51c0 <integerzmgmp_GHCziIntegerziType_Szh_con_info>
> 0x7ffff64fe9a8: 0x7ffff6405169
> 0x7ffff64fe9a0: 0x0
> 0x7ffff64fe998: 0xdc2650
> 0x7ffff64fe990: 0xa79210 <stg_BLACKHOLE_info>
> 0x7ffff64fe988: 0x7ffff64fe909
> 0x7ffff64fe980: 0xdc26d1
> 0x7ffff64fe978: 0x0
> }}}

New description:

 I think some of the sanity assertions that debugging enables are not being
 adjusted adequately when profiling is turned on. We probably never caught
 this because we don't build debug_p by default. I see some worse problems
 under some more complicated test-cases but lets go with the simple case
 first!

 {{{
 fib :: Integer -> Integer
 fib 0 = 1
 fib 1 = 1
 fib n = fib (n-1) + fib (n-2)

 main = print (fib 25)
 }}}

 built as

 {{{
 /srv/code/ghc-build-tick/inplace/bin/ghc-stage2 -fforce-recomp -fprof-drop
 -prof -debug --make dp.hs -O -rtsopts
 }}}

 run as

 {{{
 ezyang at javelin:~/Dev/haskell$ ./dp +RTS -DS
 cap 0: initialised
 dp: internal error: checkClosure: found EVACUATED closure 0
     (GHC version 7.7 for x86_64_unknown_linux)
     Please report this as a GHC bug:
 http://www.haskell.org/ghc/reportabug
 Aborted (core dumped)
 }}}

 Here is the GDB backtrace:

 {{{
 Program received signal SIGABRT, Aborted.
 0x00007ffff6ec4425 in raise () from /lib/x86_64-linux-gnu/libc.so.6
 (gdb) bt
 #0  0x00007ffff6ec4425 in raise () from /lib/x86_64-linux-gnu/libc.so.6
 #1  0x00007ffff6ec7b8b in abort () from /lib/x86_64-linux-gnu/libc.so.6
 #2  0x0000000000a552b7 in rtsFatalInternalErrorFn (s=0xba5038
 "checkClosure: found EVACUATED closure %d", ap=0x7fffffffd4d8) at
 rts/RtsMessages.c:170
 #3  0x0000000000a54eef in barf (s=0xba5038 "checkClosure: found EVACUATED
 closure %d") at rts/RtsMessages.c:42
 #4  0x0000000000a6a368 in checkClosure (p=0x7ffff64fe988) at
 rts/sm/Sanity.c:237
 #5  0x0000000000a6aa54 in checkHeapChain (bd=0x7ffff6403f80) at
 rts/sm/Sanity.c:450
 #6  0x0000000000a6b2f1 in checkGeneration (gen=0xe7a0e0,
 after_major_gc=rtsFalse) at rts/sm/Sanity.c:706
 #7  0x0000000000a6b3bc in checkFullHeap (after_major_gc=rtsFalse) at
 rts/sm/Sanity.c:724
 #8  0x0000000000a6b42b in checkSanity (after_gc=rtsFalse,
 major_gc=rtsFalse) at rts/sm/Sanity.c:733
 #9  0x0000000000a662bb in GarbageCollect (collect_gen=0,
 do_heap_census=rtsFalse, gc_type=0, cap=0xe6b680 <MainCapability>) at
 rts/sm/GC.c:298
 #10 0x0000000000a579dd in scheduleDoGC (pcap=0x7fffffffd860,
 task=0xe8ccf0, force_major=rtsFalse) at rts/Schedule.c:1651
 #11 0x0000000000a56f92 in schedule (initialCapability=0xe6b680
 <MainCapability>, task=0xe8ccf0) at rts/Schedule.c:553
 #12 0x0000000000a582b6 in scheduleWaitThread (tso=0x7ffff6405378, ret=0x0,
 pcap=0x7fffffffd930) at rts/Schedule.c:2359
 #13 0x0000000000a98156 in rts_evalLazyIO (cap=0x7fffffffd930, p=0xdc2840,
 ret=0x0) at rts/RtsAPI.c:497
 #14 0x0000000000a54d5b in real_main () at rts/RtsMain.c:63
 #15 0x0000000000a54e4a in hs_main (argc=3, argv=0x7fffffffda98,
 main_closure=0xdc2840, rts_config=...) at rts/RtsMain.c:114
 #16 0x0000000000404bb3 in main ()
 }}}

 and here is the heap in the vicinity of the problem:

 {{{
 (gdb) pmem (p-8) 64
 0x7ffff64fe9a8: 0x7ffff6405369
 0x7ffff64fe9a0: 0x0
 0x7ffff64fe998: 0xdc3650
 0x7ffff64fe990: 0xa79818 <stg_BLACKHOLE_info>
 0x7ffff64fe988: 0x7ffff64fe909
 0x7ffff64fe980: 0x7ffff6405349
 0x7ffff64fe978: 0x0
 0x7ffff64fe970: 0xdc3650
 0x7ffff64fe968: 0xa79818 <stg_BLACKHOLE_info>
 0x7ffff64fe960: 0x7ffff6405201
 0x7ffff64fe958: 0x0
 0x7ffff64fe950: 0xdc3650
 0x7ffff64fe948: 0xa79818 <stg_BLACKHOLE_info>
 }}}

--

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



More information about the ghc-tickets mailing list