diff options
author | Austin Seipp <austin@well-typed.com> | 2014-02-17 06:48:04 -0600 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2014-02-17 06:48:04 -0600 |
commit | b626c3d4ce0e66216705ba8355c914dc809e3fe7 (patch) | |
tree | ea12f446c58453dbcf204a59e77d3e4ed430903d | |
parent | dc080915597065087b3821b3ded0a621a7e2fae7 (diff) | |
download | haskell-b626c3d4ce0e66216705ba8355c914dc809e3fe7.tar.gz |
Add comments explaining #8754
Signed-off-by: Austin Seipp <austin@well-typed.com>
-rw-r--r-- | ghc/Main.hs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/ghc/Main.hs b/ghc/Main.hs index 1aa65531a3..0011aa986f 100644 --- a/ghc/Main.hs +++ b/ghc/Main.hs @@ -77,7 +77,7 @@ import Data.Maybe main :: IO () main = do - defaultsHook + defaultsHook -- See Note [-Bsymbolic and hooks] hSetBuffering stdout LineBuffering hSetBuffering stderr LineBuffering GHC.defaultErrorHandler defaultFatalMessager defaultFlushOut $ do @@ -821,4 +821,23 @@ unknownFlagsErr fs = throwGhcException $ UsageError $ concatMap oneError fs [] -> "" suggs -> "did you mean one of:\n" ++ unlines (map (" " ++) suggs)) +{- Note [-Bsymbolic and hooks] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-Bsymbolic is a flag that prevents the binding of references to global +symbols to symbols outside the shared library being compiled (see `man +ld`). When dynamically linking, we don't use -Bsymbolic on the RTS +package: that is because we want hooks to be overridden by the user, +we don't want to constrain them to the RTS package. + +Unfortunately this seems to have broken somehow on OS X: as a result, +defaultHooks (in hschooks.c) is not called, which does not initialize +the GC stats. As a result, this breaks things like `:set +s` in GHCi +(#8754). As a hacky workaround, we instead call 'defaultHooks' +directly to initalize the flags in the RTS. + +A biproduct of this, I believe, is that hooks are likely broken on OS +X when dynamically linking. But this probably doesn't affect most +people since we're linking GHC dynamically, but most things themselves +link statically. +-} foreign import ccall safe "defaultsHook" defaultsHook :: IO () |