diff --git a/hadrian/src/Hadrian/Haskell/Cabal.hs b/hadrian/src/Hadrian/Haskell/Cabal.hs
index db20e470076a0462f34504b51354058112a1acb0..17249efd79fc2e327c90fa8aa5223cb32d10afcc 100644
--- a/hadrian/src/Hadrian/Haskell/Cabal.hs
+++ b/hadrian/src/Hadrian/Haskell/Cabal.hs
@@ -10,18 +10,25 @@
 -- Cabal files.
 -----------------------------------------------------------------------------
 module Hadrian.Haskell.Cabal (
-    pkgVersion, pkgUnitId, pkgSynopsis, pkgDescription, pkgSimpleIdentifier,
+    pkgPackageName, pkgVersion, pkgUnitId,
+    pkgSynopsis, pkgDescription, pkgSimpleIdentifier,
     pkgDependencies, pkgGenericDescription, cabalArchString, cabalOsString
     ) where
 
 import Development.Shake
-import Distribution.PackageDescription (GenericPackageDescription)
+import Distribution.PackageDescription (GenericPackageDescription, unPackageName, PackageDescription (package))
+import qualified Distribution.Types.PackageId as Cabal
+import qualified Distribution.Types.GenericPackageDescription as Cabal
 
 import Hadrian.Haskell.Cabal.Type
 import Hadrian.Oracles.Cabal
 import Hadrian.Package
 import {-# SOURCE #-} Hadrian.Haskell.Hash (pkgUnitId)
 
+-- | The name of the package as written in the package's cabal file.
+pkgPackageName :: Package -> Action String
+pkgPackageName =
+    fmap (unPackageName . Cabal.pkgName . package . Cabal.packageDescription) . pkgGenericDescription
 
 -- | Read a Cabal file and return the package version. The Cabal file is tracked.
 pkgVersion :: Package -> Action String
@@ -52,7 +59,8 @@ pkgDescription = fmap description . readPackageData
 -- returns a crude overapproximation of actual dependencies. The Cabal file is
 -- tracked.
 pkgDependencies :: Package -> Action [PackageName]
-pkgDependencies = fmap (map pkgName . packageDependencies) . readPackageData
+pkgDependencies =
+    fmap (map Hadrian.Package.pkgName . packageDependencies) . readPackageData
 
 -- | Read a Cabal file and return the 'GenericPackageDescription'. The Cabal
 -- file is tracked.
diff --git a/hadrian/src/Settings/Builders/Ghc.hs b/hadrian/src/Settings/Builders/Ghc.hs
index 77d99bf30e2e2ea6fdc6310d78b94b3491860084..9e49961db7c1596ac5ced6cc25546ba74b0f48f8 100644
--- a/hadrian/src/Settings/Builders/Ghc.hs
+++ b/hadrian/src/Settings/Builders/Ghc.hs
@@ -254,13 +254,17 @@ packageGhcArgs = do
     -- sets `-this-unit-id ghc` when hadrian is building stage0, which will
     -- overwrite this one.
     pkgId   <- expr $ pkgUnitId stage package
+    pkgName <- expr $ pkgPackageName package
     mconcat [ arg "-hide-all-packages"
             , arg "-no-user-package-db"
             , arg "-package-env -"
             , packageDatabaseArgs
             -- We want to pass -this-unit-id for executables as well for multi-repl to
             -- work with executable packages but this is buggy on GHC-9.0.2
-            , (isLibrary package || (ghc_ver >= makeVersion [9,2,1])) ?  arg ("-this-unit-id " ++ pkgId)
+            , (isLibrary package || (ghc_ver >= makeVersion [9,2,1])) ? mconcat
+                [ arg ("-this-unit-id " ++ pkgId)
+                , arg ("-this-package-name " ++ pkgName)
+                ]
             , map ("-package-id " ++) <$> getContextData depIds ]
 
 includeGhcArgs :: Args