diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 446381e2070c4bf10dd51e78cd05f28fa051cc99..094984be2e9d5992866c6ab27c07cab146fc473e 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -157,7 +157,7 @@ import Module
 import PackageConfig
 import {-# SOURCE #-} Hooks
 import {-# SOURCE #-} PrelNames ( mAIN )
-import {-# SOURCE #-} Packages (PackageState)
+import {-# SOURCE #-} Packages (PackageState, emptyPackageState)
 import DriverPhases     ( Phase(..), phaseInputExt )
 import Config
 import CmdLineParser
@@ -1480,7 +1480,8 @@ defaultDynFlags mySettings =
         packageFlags            = [],
         packageEnv              = Nothing,
         pkgDatabase             = Nothing,
-        pkgState                = panic "no package state yet: call GHC.setSessionDynFlags",
+        -- This gets filled in with GHC.setSessionDynFlags
+        pkgState                = emptyPackageState,
         ways                    = defaultWays mySettings,
         buildTag                = mkBuildTag (defaultWays mySettings),
         rtsBuildTag             = mkBuildTag (defaultWays mySettings),
diff --git a/compiler/main/Packages.hs b/compiler/main/Packages.hs
index 985a11a36c1d9f85a693890c850fecfda3824e35..16ee352243bf49b031e800622b1867ed822a5c07 100644
--- a/compiler/main/Packages.hs
+++ b/compiler/main/Packages.hs
@@ -8,6 +8,7 @@ module Packages (
 
         -- * Reading the package config, and processing cmdline args
         PackageState(preloadPackages),
+        emptyPackageState,
         initPackages,
         readPackageConfigs,
         getPackageConfRefs,
@@ -287,6 +288,14 @@ data PackageState = PackageState {
   installedPackageIdMap :: InstalledPackageIdMap
   }
 
+emptyPackageState :: PackageState
+emptyPackageState = PackageState {
+    pkgIdMap = emptyUFM,
+    preloadPackages = [],
+    moduleNameDb = Map.empty,
+    installedPackageIdMap = Map.empty
+    }
+
 type InstalledPackageIdMap = Map InstalledPackageId PackageKey
 type InstalledPackageIndex = Map InstalledPackageId PackageConfig
 
diff --git a/compiler/main/Packages.hs-boot b/compiler/main/Packages.hs-boot
index f2343b66c9d739e8f3417d0b7ff8b8f499b38ef8..bac04bc20ad1111bbf7250e1bfd0bace309e6c5f 100644
--- a/compiler/main/Packages.hs-boot
+++ b/compiler/main/Packages.hs-boot
@@ -4,3 +4,4 @@ import {-# SOURCE #-} Module (PackageKey)
 import {-# SOURCE #-} DynFlags (DynFlags)
 data PackageState
 packageKeyPackageIdString :: DynFlags -> PackageKey -> Maybe String
+emptyPackageState :: PackageState