diff --git a/compiler/ghci/Linker.hs b/compiler/ghci/Linker.hs
index b3135e1d2bfcbe125db635b0045febd5e90feecf..ace2c702b298d241d1fd8c55e5795fafd3431077 100644
--- a/compiler/ghci/Linker.hs
+++ b/compiler/ghci/Linker.hs
@@ -115,7 +115,7 @@ readPLS dl =
 
 modifyMbPLS_
   :: DynLinker -> (Maybe PersistentLinkerState -> IO (Maybe PersistentLinkerState)) -> IO ()
-modifyMbPLS_ dl f = modifyMVar_ (dl_mpls dl) f 
+modifyMbPLS_ dl f = modifyMVar_ (dl_mpls dl) f
 
 emptyPLS :: DynFlags -> PersistentLinkerState
 emptyPLS _ = PersistentLinkerState {
@@ -350,7 +350,7 @@ linkCmdLineLibs' hsc_env pls =
                       in nub $ map normalise paths
       let lib_paths = nub $ lib_paths_base ++ gcc_paths
       all_paths_env <- addEnvPaths "LD_LIBRARY_PATH" all_paths
-      traceM "all_paths" (ppr all_paths_env)
+      pprTraceM "all_paths" (ppr all_paths_env)
       pathCache <- mapM (addLibrarySearchPath hsc_env) all_paths_env
 
       pls1 <- foldM (preloadLib hsc_env lib_paths framework_paths) pls
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index e94798aede2bd4c431fbd77341176ea813bbcdd9..52843b4cb0af55220736afeba903c16103d5e052 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -2812,7 +2812,7 @@ parseDynamicFlagsFull activeFlags cmdline dflags0 args = do
   let (dflags5, consistency_warnings) = makeDynFlagsConsistent dflags4
 
   -- Set timer stats & heap size
-  when (enableTimeStats dflags5) $ liftIO enableTimingStats
+--  when (enableTimeStats dflags5) $ liftIO enableTimingStats
   case (ghcHeapSize dflags5) of
     Just x -> liftIO (setHeapSize x)
     _      -> return ()
@@ -5967,8 +5967,12 @@ decodeSize str
         n      = readRational m
         pred c = isDigit c || c == '.'
 
-foreign import ccall unsafe "setHeapSize"       setHeapSize       :: Int -> IO ()
-foreign import ccall unsafe "enableTimingStats" enableTimingStats :: IO ()
+setHeapSize :: Int -> IO ()
+setHeapSize _ = return ()
+enableTimingStats :: IO ()
+enableTimingStats = return ()
+--foreign import ccall unsafe "setHeapSize"       setHeapSize       :: Int -> IO ()
+--foreign import ccall unsafe "enableTimingStats" enableTimingStats :: IO ()
 
 -- -----------------------------------------------------------------------------
 -- Types for managing temporary files.
diff --git a/compiler/typecheck/TcCanonical.hs b/compiler/typecheck/TcCanonical.hs
index 47c4cc807c988f33d606d3391566272eada421e2..2bf4609f855725b811c58c4f38c26e1facf63952 100644
--- a/compiler/typecheck/TcCanonical.hs
+++ b/compiler/typecheck/TcCanonical.hs
@@ -2,6 +2,8 @@
 
 module TcCanonical(
      canonicalize,
+     canEqNC,
+     can_eq_nc,
      unifyDerived,
      makeSuperClasses, maybeSym,
      StopOrContinue(..), stopWith, continueWith,
diff --git a/hadrian/ghci.sh b/hadrian/ghci.sh
index 4c9b9c67103c304b6c3b2496abdc4623ea360648..daadd9a181cbe275b6b9eb450748e631cf5e79f5 100755
--- a/hadrian/ghci.sh
+++ b/hadrian/ghci.sh
@@ -2,5 +2,8 @@
 
 set -e
 
-GHC_FLAGS=$(TERM=dumb CABFLAGS=-v0 . "hadrian/build.cabal.sh" tool-args -q --build-root=.hadrian_ghci --flavour=ghc-in-ghci "$@")
-ghci $GHC_FLAGS -fno-code -fwrite-interface -hidir=.hadrian_ghci/interface -O0 ghc/Main.hs
+GHC=/home/matt/ghc/m559b/stage1/bin/ghc
+export GHC_LOADED_INTO_GHCI=1
+GHC_FLAGS=$(TERM=dumb CABFLAGS=-v0 . "hadrian/build.cabal.sh"  tool-args -q --build-root=.hadrian_ghci --flavour=ghc-in-ghci "$@")
+echo $GHC_FLAGS
+/home/matt/ghc/m559b/stage1/bin/ghc --interactive -fexternal-interpreter -O0 $GHC_FLAGS -fwrite-interface -hidir=.hadrian_ghci/interface -O0 -DGHC_LOADED_INTO_GHCI -Lcompiler/parser ghc/Main.hs
diff --git a/hadrian/src/Rules.hs b/hadrian/src/Rules.hs
index 78e3790d487140418435256bd3c91ab8f3ee2f82..9c8adec4d046bfc7ffbceae25c88819397df3e76 100644
--- a/hadrian/src/Rules.hs
+++ b/hadrian/src/Rules.hs
@@ -6,6 +6,7 @@ import qualified Hadrian.Oracles.Cabal.Rules
 import qualified Hadrian.Oracles.DirectoryContents
 import qualified Hadrian.Oracles.Path
 import qualified Hadrian.Oracles.TextFile
+import Hadrian.Haskell.Cabal.Type
 
 import Expression
 import qualified Oracles.ModuleFiles
@@ -55,10 +56,16 @@ toolArgsTarget = do
     need [ root <//> dir -/- "CmmParse.hs" ]
     need [ root <//> dir -/- "CmmLex.hs" ]
 
+    let context = vanillaContext Stage0 compiler
+    cSrcs' <- interpretInContext (vanillaContext Stage0 compiler)
+                                (getContextData cSrcs)
+    cObjs <- mapM (objectPath context) cSrcs'
+    need cObjs
+
     -- Find out the arguments that are needed to load a module into the
     -- session
     arg_list <- interpret fake_target getArgs
-    liftIO $ putStrLn (intercalate " " arg_list)
+    liftIO $ putStrLn (intercalate " " (arg_list ++ cObjs))
 
 allStages :: [Stage]
 allStages = [minBound .. maxBound]
diff --git a/hadrian/src/Settings/Builders/Ghc.hs b/hadrian/src/Settings/Builders/Ghc.hs
index 81fc9d183a82f5738e0ddb7d8b7a3576b040b063..076b925cfc4f445927196e51e07f0596047dd458 100644
--- a/hadrian/src/Settings/Builders/Ghc.hs
+++ b/hadrian/src/Settings/Builders/Ghc.hs
@@ -40,7 +40,7 @@ compileC = builder (Ghc CompileCWithGhc) ? do
     let ccArgs = [ getContextData ccOpts
                  , getStagedSettingList ConfCcArgs
                  , cIncludeArgs
-                 , Dynamic `wayUnit` way ? pure [ "-fPIC", "-DDYNAMIC" ] ]
+                 , pure [ "-fPIC", "-DDYNAMIC" ] ]
     mconcat [ arg "-Wall"
             , ghcLinkArgs
             , commonGhcArgs
diff --git a/utils/genprimopcode/ParserM.hs b/utils/genprimopcode/ParserM.hs
index 61fce96acaa72a6111d64c24edec588218f24298..ada6291ca3544ee9613a3e22c22ffe83e8d6270f 100644
--- a/utils/genprimopcode/ParserM.hs
+++ b/utils/genprimopcode/ParserM.hs
@@ -42,10 +42,10 @@ instance Monad ParserM where
                                             Left err ->
                                                 Left err
     return a = ParserM $ \i s -> Right (i, s, a)
-    fail err = ParserM $ \_ _ -> Left err
+    --fail err = ParserM $ \_ _ -> Left err
 
---instance MonadFail ParserM where
---  fail err = ParserM $ \_ _ -> Left err
+instance MonadFail ParserM where
+  fail err = ParserM $ \_ _ -> Left err
 
 run_parser :: ParserM a -> (String -> Either String a)
 run_parser (ParserM f)