Skip to content

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
Edited by Javier Sagredo
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information