diff --git a/ghc-lib.cabal b/ghc-lib.cabal
--- a/ghc-lib.cabal
+++ b/ghc-lib.cabal
@@ -1,7 +1,7 @@
 cabal-version: >=1.22
 build-type: Simple
 name: ghc-lib
-version: 9.0.1.20210207
+version: 9.0.1.20210324
 license: BSD3
 license-file: LICENSE
 category: Development
@@ -20,7 +20,6 @@
 extra-source-files:
     ghc-lib/stage0/lib/ghcautoconf.h
     ghc-lib/stage0/lib/ghcplatform.h
-    ghc-lib/stage0/lib/ghcversion.h
     ghc-lib/stage0/lib/DerivedConstants.h
     ghc-lib/stage0/lib/GHCConstantsHaskellExports.hs
     ghc-lib/stage0/lib/GHCConstantsHaskellWrappers.hs
@@ -68,7 +67,7 @@
         build-depends: Win32
     build-depends:
         ghc-prim > 0.2 && < 0.8,
-        base >= 4.12 && < 4.16,
+        base >= 4.13 && < 4.16,
         containers >= 0.5 && < 0.7,
         bytestring >= 0.9 && < 0.11,
         binary == 0.8.*,
@@ -82,7 +81,7 @@
         process >= 1 && < 1.7,
         hpc == 0.6.*,
         exceptions == 0.10.*,
-        ghc-lib-parser == 9.0.1.20210207
+        ghc-lib-parser == 9.0.1.20210324
     build-tools: alex >= 3.1, happy >= 1.19.4
     other-extensions:
         BangPatterns
diff --git a/ghc-lib/stage0/lib/ghcversion.h b/ghc-lib/stage0/lib/ghcversion.h
deleted file mode 100644
--- a/ghc-lib/stage0/lib/ghcversion.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#if !defined(__GHCVERSION_H__)
-#define __GHCVERSION_H__
-
-#if !defined(__GLASGOW_HASKELL__)
-#define __GLASGOW_HASKELL__ 900
-#endif
-#if !defined(__GLASGOW_HASKELL_FULL_VERSION__)
-#define __GLASGOW_HASKELL_FULL_VERSION__ "9.0.1"
-#endif
-
-#define __GLASGOW_HASKELL_PATCHLEVEL1__ 1
-
-#define MIN_VERSION_GLASGOW_HASKELL(ma,mi,pl1,pl2) (\
-   ((ma)*100+(mi)) <  __GLASGOW_HASKELL__ || \
-   ((ma)*100+(mi)) == __GLASGOW_HASKELL__    \
-          && (pl1) <  __GLASGOW_HASKELL_PATCHLEVEL1__ || \
-   ((ma)*100+(mi)) == __GLASGOW_HASKELL__    \
-          && (pl1) == __GLASGOW_HASKELL_PATCHLEVEL1__ \
-          && (pl2) <= __GLASGOW_HASKELL_PATCHLEVEL2__ )
-
-#endif /* __GHCVERSION_H__ */
diff --git a/libraries/ghci/GHCi/CreateBCO.hs b/libraries/ghci/GHCi/CreateBCO.hs
--- a/libraries/ghci/GHCi/CreateBCO.hs
+++ b/libraries/ghci/GHCi/CreateBCO.hs
@@ -47,11 +47,12 @@
                 ])
 createBCO arr bco
    = 
-#if __GLASGOW_HASKELL__ >= 900
+#if MIN_VERSION_ghc_prim(0, 7, 0)
      do linked_bco <- linkBCO' arr bco
 #else
      do BCO bco# <- linkBCO' arr bco
 #endif
+
         -- Note [Updatable CAF BCOs]
         -- ~~~~~~~~~~~~~~~~~~~~~~~~~
         -- Why do we need mkApUpd0 here?  Otherwise top-level
@@ -69,13 +70,14 @@
         -- See #17424.
         if (resolvedBCOArity bco > 0)
            
-#if __GLASGOW_HASKELL__ >= 900
+#if MIN_VERSION_ghc_prim(0, 7, 0)
            then return (HValue (unsafeCoerce linked_bco))
            else case mkApUpd0# linked_bco of { (# final_bco #) ->
 #else
            then return (HValue (unsafeCoerce# bco#))
            else case mkApUpd0# bco# of { (# final_bco #) ->
 #endif
+
                   return (HValue final_bco) }
 
 
@@ -119,13 +121,14 @@
       writePtrsArrayPtr i (fromRemotePtr r)  marr
     fill (ResolvedBCOPtrBCO bco) i = do
       
-#if __GLASGOW_HASKELL__ >= 900
+#if MIN_VERSION_ghc_prim(0, 7, 0)
       bco <- linkBCO' arr bco
       writePtrsArrayBCO i bco marr
 #else
       BCO bco# <- linkBCO' arr bco
       writePtrsArrayBCO i bco# marr
 #endif
+
     fill (ResolvedBCOPtrBreakArray r) i = do
       BA mba <- localRef r
       writePtrsArrayMBA i mba marr
@@ -153,33 +156,36 @@
 writeArrayAddr# marr i addr s = unsafeCoerce# writeArray# marr i addr s
 
 
-#if __GLASGOW_HASKELL__ >= 900
+#if MIN_VERSION_ghc_prim(0, 7, 0)
 writePtrsArrayBCO :: Int -> BCO -> PtrsArr -> IO ()
 #else
 writePtrsArrayBCO :: Int -> BCO# -> PtrsArr -> IO ()
 #endif
+
 writePtrsArrayBCO (I# i) bco (PtrsArr arr) = IO $ \s ->
   case (unsafeCoerce# writeArray#) arr i bco s of s' -> (# s', () #)
 
 
-#if __GLASGOW_HASKELL__ >= 900
+#if MIN_VERSION_ghc_prim(0, 7, 0)
 writePtrsArrayMBA :: Int -> MutableByteArray# s -> PtrsArr -> IO ()
 #else
 data BCO = BCO BCO#
 writePtrsArrayMBA :: Int -> MutableByteArray# s -> PtrsArr -> IO ()
 #endif
+
 writePtrsArrayMBA (I# i) mba (PtrsArr arr) = IO $ \s ->
   case (unsafeCoerce# writeArray#) arr i mba s of s' -> (# s', () #)
 
 newBCO :: ByteArray# -> ByteArray# -> Array# a -> Int# -> ByteArray# -> IO BCO
 newBCO instrs lits ptrs arity bitmap = IO $ \s ->
   
-#if __GLASGOW_HASKELL__ >= 900
+#if MIN_VERSION_ghc_prim(0, 7, 0)
   newBCO# instrs lits ptrs arity bitmap s
 #else
   case newBCO# instrs lits ptrs arity bitmap s of
     (# s1, bco #) -> (# s1, BCO bco #)
 #endif
+
 
 {- Note [BCO empty array]
    ~~~~~~~~~~~~~~~~~~~~~~
