[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