From 86b891f0de066ff67c4197918227eda4dec55d22 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Wed, 4 Nov 2009 16:30:39 +0000 Subject: [PATCH] #3604: treat TH with -dynamic in the same way as -prof That is, you have to build the library/program without -dynamic first, to get plain object files, and then build it again with -dynamic. I still need to check whether any changes to Cabal are required to make this work. --- compiler/ghci/Linker.lhs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/compiler/ghci/Linker.lhs b/compiler/ghci/Linker.lhs index a7e9492..43bd80e 100644 --- a/compiler/ghci/Linker.lhs +++ b/compiler/ghci/Linker.lhs @@ -528,7 +528,16 @@ dieWith span msg = ghcError (ProgramError (showSDoc (mkLocMessage span msg))) checkNonStdWay :: DynFlags -> SrcSpan -> IO (Maybe String) checkNonStdWay dflags srcspan = do let tag = buildTag dflags - if null tag || tag == "dyn" then return Nothing else do + if null tag {- || tag == "dyn" -} then return Nothing else do + -- see #3604: object files compiled for way "dyn" need to link to the + -- dynamic packages, so we can't load them into a statically-linked GHCi. + -- we have to treat "dyn" in the same way as "prof". + -- + -- In the future when GHCi is dynamically linked we should be able to relax + -- this, but they we may have to make it possible to load either ordinary + -- .o files or -dynamic .o files into GHCi (currently that's not possible + -- because the dynamic objects contain refs to e.g. __stginit_base_Prelude_dyn + -- whereas we have __stginit_base_Prelude_. let default_osuf = phaseInputExt StopLn if objectSuf dflags == default_osuf then failNonStd srcspan -- 1.7.10.4