Eventlog + Debugging flag order shows unexpected behaviour
Summary
Order of debug options and eventlog result in unexpected behavior.
-
-Dm
: emits messages-Dm
to stderr✅ -
-Dm -l
: emits messages-Dm
to the eventlog✅ -
-l -Dm
: emits-Dm
to stderr and enables what I believe is-Ds
⚠
Steps to reproduce
Any program would suffice. I can provide this one:
$ cat A.hs
module Main where
{-# NOINLINE fib #-}
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
main = do
print (fib 30)
$ ghc A.hs -debug
[1 of 2] Compiling Main ( A.hs, A.o )
[2 of 2] Linking A [Objects changed]
$ ./A +RTS -Dm 2>&1 | head
STM: 0x5b0780 : lock_stm()
STM: stmPreGCHook
STM: 0x5b0780 : unlock_stm()
STM: 0x5b0780 : lock_stm()
STM: stmPreGCHook
STM: 0x5b0780 : unlock_stm()
STM: 0x5b0780 : lock_stm()
STM: stmPreGCHook
STM: 0x5b0780 : unlock_stm()
STM: 0x5b0780 : lock_stm()
$ ./A +RTS -l -Dm 2>&1 | head
created capset 0 of type 2
created capset 1 of type 3
cap 0: initialised
assigned cap 0 to capset 0
assigned cap 0 to capset 1
cap 0: created thread 1[""]
cap 0: running thread 1[""] (ThreadRunGHC)
cap 0: thread 1[""] stopped (stack overflow, size 104)
cap 0: running thread 1[""] (ThreadRunGHC)
cap 0: thread 1[""] stopped (yielding)
$ ./A +RTS -Dm -l 2>&1 | head
832040
Expected behavior
I would expect -Ds
not to be enabled by this combination of flags, and furthermore I though the order of the options should not modify the behaviour.
Environment
- GHC version used: 9.6.3
Optional:
- Operating System: Ubuntu 23.10
- System Architecture: x86_64-linux