summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2022-04-11 13:23:22 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2022-04-27 10:06:07 -0400
commitee11d04363ed8aa1d73a0cda16076a39e668d163 (patch)
tree8cb2853ac6cd99442f7ff7c4e4f979e7674301e4
parent318e0005b5a3a522854ced7162f3eee95f964bd9 (diff)
downloadhaskell-ee11d04363ed8aa1d73a0cda16076a39e668d163.tar.gz
Enable eventlog support in all ways by default
Here we deprecate the eventlogging RTS ways and instead enable eventlog support in the remaining ways. This simplifies packaging and reduces GHC compilation times (as we can eliminate two whole compilations of the RTS) while simplifying the end-user story. The trade-off is a small increase in binary sizes in the case that the user does not want eventlogging support, but we think that this is a fine trade-off. This also revealed a latent RTS bug: some files which included `Cmm.h` also assumed that it defined various macros which were in fact defined by `Config.h`, which `Cmm.h` did not include. Fixing this in turn revealed that `StgMiscClosures.cmm` failed to import various spinlock statistics counters, as evidenced by the failed unregisterised build. Closes #18948.
-rw-r--r--compiler/GHC/Driver/Session.hs5
-rw-r--r--compiler/GHC/Platform/Ways.hs10
-rw-r--r--compiler/GHC/Unit/Info.hs10
-rw-r--r--compiler/GHC/Utils/Error.hs12
-rw-r--r--configure.ac9
-rw-r--r--docs/users_guide/9.4.1-notes.rst7
-rw-r--r--docs/users_guide/phases.rst6
-rw-r--r--ghc/ghc-bin.cabal.in9
-rw-r--r--ghc/ghc.mk5
-rw-r--r--hadrian/cfg/system.config.in1
-rw-r--r--hadrian/doc/flavours.md28
-rw-r--r--hadrian/doc/user-settings.md9
-rw-r--r--hadrian/src/Expression.hs6
-rw-r--r--hadrian/src/Settings/Builders/Ghc.hs3
-rw-r--r--hadrian/src/Settings/Default.hs4
-rw-r--r--hadrian/src/Settings/Flavours/Benchmark.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Development.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Quick.hs7
-rw-r--r--hadrian/src/Settings/Flavours/QuickCross.hs7
-rw-r--r--hadrian/src/Settings/Flavours/Quickest.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Validate.hs3
-rw-r--r--hadrian/src/Settings/Packages.hs4
-rw-r--r--hadrian/src/Way.hs23
-rw-r--r--mk/config.mk.in30
-rw-r--r--mk/ways.mk42
-rw-r--r--rts/StgMiscClosures.cmm5
-rw-r--r--rts/include/Cmm.h1
-rw-r--r--rts/include/rts/Config.h9
-rw-r--r--rts/rts.cabal.in4
-rw-r--r--testsuite/config/ghc2
-rw-r--r--testsuite/tests/rts/Makefile6
-rw-r--r--testsuite/tests/rts/all.T12
-rw-r--r--testsuite/tests/rts/flags/all.T2
33 files changed, 92 insertions, 195 deletions
diff --git a/compiler/GHC/Driver/Session.hs b/compiler/GHC/Driver/Session.hs
index e6e0557492..997eb94140 100644
--- a/compiler/GHC/Driver/Session.hs
+++ b/compiler/GHC/Driver/Session.hs
@@ -2106,7 +2106,10 @@ dynamic_flags_deps = [
------- ways ---------------------------------------------------------------
, make_ord_flag defGhcFlag "prof" (NoArg (addWayDynP WayProf))
- , make_ord_flag defGhcFlag "eventlog" (NoArg (addWayDynP WayTracing))
+ , (Deprecated, defFlag "eventlog"
+ $ noArgM $ \d -> do
+ deprecate "the eventlog is now enabled in all runtime system ways"
+ return d)
, make_ord_flag defGhcFlag "debug" (NoArg (addWayDynP WayDebug))
, make_ord_flag defGhcFlag "threaded" (NoArg (addWayDynP WayThreaded))
diff --git a/compiler/GHC/Platform/Ways.hs b/compiler/GHC/Platform/Ways.hs
index 6bb8aed87f..955a9bcea0 100644
--- a/compiler/GHC/Platform/Ways.hs
+++ b/compiler/GHC/Platform/Ways.hs
@@ -68,7 +68,6 @@ data Way
| WayThreaded -- ^ (RTS only) Multithreaded runtime system
| WayDebug -- ^ Debugging, enable trace messages and extra checks
| WayProf -- ^ Profiling, enable cost-centre stacks and profiling reports
- | WayTracing -- ^ (RTS only) enable event logging (tracing)
| WayDyn -- ^ Dynamic linking
deriving (Eq, Ord, Show, Read)
@@ -118,7 +117,6 @@ wayTag WayThreaded = "thr"
wayTag WayDebug = "debug"
wayTag WayDyn = "dyn"
wayTag WayProf = "p"
-wayTag WayTracing = "l" -- "l" for "logging"
-- | Return true for ways that only impact the RTS, not the generated code
wayRTSOnly :: Way -> Bool
@@ -127,7 +125,6 @@ wayRTSOnly WayDyn = False
wayRTSOnly WayProf = False
wayRTSOnly WayThreaded = True
wayRTSOnly WayDebug = True
-wayRTSOnly WayTracing = True
-- | Filter ways that have an impact on compilation
fullWays :: Ways -> Ways
@@ -143,7 +140,6 @@ wayDesc WayThreaded = "Threaded"
wayDesc WayDebug = "Debug"
wayDesc WayDyn = "Dynamic"
wayDesc WayProf = "Profiling"
-wayDesc WayTracing = "Tracing"
-- | Turn these flags on when enabling this way
wayGeneralFlags :: Platform -> Way -> [GeneralFlag]
@@ -159,7 +155,6 @@ wayGeneralFlags _ WayDyn = [Opt_PIC, Opt_ExternalDynamicRefs]
-- PIC objects can be linked into a .so, we have to compile even
-- modules of the main program with -fPIC when using -dynamic.
wayGeneralFlags _ WayProf = []
-wayGeneralFlags _ WayTracing = []
-- | Turn these flags off when enabling this way
wayUnsetGeneralFlags :: Platform -> Way -> [GeneralFlag]
@@ -170,7 +165,6 @@ wayUnsetGeneralFlags _ WayDyn = [Opt_SplitSections]
-- There's no point splitting when we're going to be dynamically linking.
-- Plus it breaks compilation on OSX x86.
wayUnsetGeneralFlags _ WayProf = []
-wayUnsetGeneralFlags _ WayTracing = []
-- | Pass these options to the C compiler when enabling this way
wayOptc :: Platform -> Way -> [String]
@@ -182,7 +176,6 @@ wayOptc platform WayThreaded = case platformOS platform of
wayOptc _ WayDebug = []
wayOptc _ WayDyn = []
wayOptc _ WayProf = ["-DPROFILING"]
-wayOptc _ WayTracing = ["-DTRACING"]
-- | Pass these options to linker when enabling this way
wayOptl :: Platform -> Way -> [String]
@@ -198,7 +191,6 @@ wayOptl platform WayThreaded =
wayOptl _ WayDebug = []
wayOptl _ WayDyn = []
wayOptl _ WayProf = []
-wayOptl _ WayTracing = []
-- | Pass these options to the preprocessor when enabling this way
wayOptP :: Platform -> Way -> [String]
@@ -207,7 +199,6 @@ wayOptP _ WayThreaded = []
wayOptP _ WayDebug = []
wayOptP _ WayDyn = []
wayOptP _ WayProf = ["-DPROFILING"]
-wayOptP _ WayTracing = ["-DTRACING"]
-- | Consult the RTS to find whether it has been built with profiling enabled.
@@ -268,7 +259,6 @@ hostWays = Set.unions
, if hostIsProfiled then Set.singleton WayProf else Set.empty
, if hostIsThreaded then Set.singleton WayThreaded else Set.empty
, if hostIsDebugged then Set.singleton WayDebug else Set.empty
- , if hostIsTracing then Set.singleton WayTracing else Set.empty
]
-- | Host "full" ways (i.e. ways that have an impact on the compilation,
diff --git a/compiler/GHC/Unit/Info.hs b/compiler/GHC/Unit/Info.hs
index db00a9b91a..41142f653f 100644
--- a/compiler/GHC/Unit/Info.hs
+++ b/compiler/GHC/Unit/Info.hs
@@ -211,14 +211,8 @@ unitHsLibs namever ways0 p = map (mkDynName . addSuffix . ST.unpack) (unitLibrar
-- the name of a shared library is libHSfoo-ghc<version>.so
-- we leave out the _dyn, because it is superfluous
- -- debug and profiled RTSs include support for -eventlog
- ways2 | ways1 `hasWay` WayDebug || ways1 `hasWay` WayProf
- = removeWay WayTracing ways1
- | otherwise
- = ways1
-
- tag = waysTag (fullWays ways2)
- rts_tag = waysTag ways2
+ tag = waysTag (fullWays ways1)
+ rts_tag = waysTag ways1
mkDynName x
| not (ways0 `hasWay` WayDyn) = x
diff --git a/compiler/GHC/Utils/Error.hs b/compiler/GHC/Utils/Error.hs
index db8107a65f..ef6dd4f07d 100644
--- a/compiler/GHC/Utils/Error.hs
+++ b/compiler/GHC/Utils/Error.hs
@@ -521,16 +521,8 @@ easily compute totals with tools like ghc-events-analyze (see below).
Producing an eventlog for GHC
-----------------------------
-To actually produce the eventlog, you need an eventlog-capable GHC build:
-
- With Hadrian:
- $ hadrian/build -j "stage1.ghc-bin.ghc.link.opts += -eventlog"
-
- With Make:
- $ make -j GhcStage2HcOpts+=-eventlog
-
-You can then produce an eventlog when compiling say hello.hs by simply
-doing:
+You can produce an eventlog when compiling, for instance, hello.hs by simply
+running:
If GHC was built by Hadrian:
$ _build/stage1/bin/ghc -ddump-timings hello.hs -o hello +RTS -l
diff --git a/configure.ac b/configure.ac
index 6b41a7e392..65d949988f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -219,14 +219,6 @@ if test "$WithGhc" != ""; then
else
AC_SUBST(GhcThreadedRts, NO)
fi
-
- dnl Same for an event-logging RTS.
- if echo ${RTS_WAYS_STAGE0} | tr ' ' '\n' | grep '^l$' 2>&1 >/dev/null
- then
- AC_SUBST(GhcEventLoggingRts, YES)
- else
- AC_SUBST(GhcEventLoggingRts, NO)
- fi
fi
dnl ** Must have GHC to build GHC
@@ -1260,7 +1252,6 @@ echo "\
Bootstrapping using : $WithGhc
which is version : $GhcVersion
with threaded RTS? : $GhcThreadedRts
- with eventlog RTS? : $GhcEventLoggingRts
"
if test "x$CcLlvmBackend" = "xYES"; then
diff --git a/docs/users_guide/9.4.1-notes.rst b/docs/users_guide/9.4.1-notes.rst
index 0273859173..345badec57 100644
--- a/docs/users_guide/9.4.1-notes.rst
+++ b/docs/users_guide/9.4.1-notes.rst
@@ -192,6 +192,13 @@ Compiler
type variables when given a polymorphic type. (It used to instantiate
inferred type variables.)
+Runtime system
+~~~~~~~~~~~~~~~~
+
+- Support for GHC's eventlog is now enabled in all runtime system configurations,
+ eliminating the need to pass the :ghc-flag:`-eventlog` flag to use the eventlog.
+ This flag has been deprecated (:ghc-ticket:`18948`).
+
``base`` library
~~~~~~~~~~~~~~~~
diff --git a/docs/users_guide/phases.rst b/docs/users_guide/phases.rst
index fdb08a4209..54ed63a06c 100644
--- a/docs/users_guide/phases.rst
+++ b/docs/users_guide/phases.rst
@@ -1046,14 +1046,16 @@ for example).
:type: dynamic
:category: linking
+ :since: Unconditionally enabled with 9.4 and later
+
Link the program with the "eventlog" version of the runtime system.
A program linked in this way can generate a runtime trace of events
(such as thread start/stop) to a binary file :file:`{program}.eventlog`,
which can then be interpreted later by various tools. See
:ref:`rts-eventlog` for more information.
- :ghc-flag:`-eventlog` can be used with :ghc-flag:`-threaded`. It is implied by
- :ghc-flag:`-debug`.
+ Note that as of GHC 9.4 and later eventlog support is included in
+ the RTS by default and the :ghc-flag:`-eventlog` is deprecated.
.. ghc-flag:: -rtsopts[=⟨none|some|all|ignore|ignoreAll⟩]
:shortdesc: Control whether the RTS behaviour can be tweaked via command-line
diff --git a/ghc/ghc-bin.cabal.in b/ghc/ghc-bin.cabal.in
index 8a9178a183..946086b305 100644
--- a/ghc/ghc-bin.cabal.in
+++ b/ghc/ghc-bin.cabal.in
@@ -27,11 +27,6 @@ Flag threaded
Default: True
Manual: True
-Flag eventlog
- Description: Link the ghc executable against the event-logging RTS
- Default: True
- Manual: True
-
Executable ghc
Default-Language: Haskell2010
@@ -94,10 +89,6 @@ Executable ghc
if flag(threaded)
ghc-options: -threaded
- -- Same for GhcEventLoggingRts
- if flag(eventlog)
- ghc-options: -eventlog
-
Other-Extensions:
CPP
NondecreasingIndentation
diff --git a/ghc/ghc.mk b/ghc/ghc.mk
index 627f4bc13c..fcfb61f65a 100644
--- a/ghc/ghc.mk
+++ b/ghc/ghc.mk
@@ -67,11 +67,6 @@ else
ghc_stage1_CONFIGURE_OPTS += -f-threaded
endif
-# Same for an event-logging RTS.
-ifeq "$(GhcEventLoggingRts)" "NO"
-ghc_stage1_CONFIGURE_OPTS += -f-eventlog
-endif
-
ifeq "$(GhcProfiled)" "YES"
ghc_stage2_PROGRAM_WAY = p
endif
diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in
index ddb6f54cb6..ae70823202 100644
--- a/hadrian/cfg/system.config.in
+++ b/hadrian/cfg/system.config.in
@@ -88,7 +88,6 @@ ghc-minor-version = @GhcMinVersion@
ghc-patch-level = @GhcPatchLevel@
bootstrap-threaded-rts = @GhcThreadedRts@
-bootstrap-event-logging-rts = @GhcEventLoggingRts@
project-name = @ProjectName@
project-version = @ProjectVersion@
diff --git a/hadrian/doc/flavours.md b/hadrian/doc/flavours.md
index f0d34ddc90..3ef7ac5a3a 100644
--- a/hadrian/doc/flavours.md
+++ b/hadrian/doc/flavours.md
@@ -292,26 +292,16 @@ information. The following table lists ways that are built in different flavours
<th>default<br>perf<br>prof<br>devel1<br>devel2</td>
<td>vanilla</td>
<td>vanilla<br>profiling<br>dynamic</td>
- <td>logging<br>debug<br>threaded<br>threadedDebug<br>threadedLogging
- <br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic
- <br>loggingDynamic<br>threadedLoggingDynamic
- </td>
- <td>
- logging<br>debug<br>threaded<br>threadedDebug<br>
- threadedLogging<br>threadedProfiling
- <br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic
- <br>loggingDynamic<br>threadedLoggingDynamic
- </td>
+ <td>debug<br>threaded<br>threadedDebug<br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic</td>
+ <td>debug<br>threaded<br>threadedDebug<br>threadedProfiling<br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic</td>
</tr>
<tr>
<th>static</td>
<td>vanilla</td>
<td>vanilla<br>profiling</td>
- <td>logging<br>debug<br>threaded<br>threadedDebug<br>threadedLogging
- </td>
+ <td>debug<br>threaded<br>threadedDebug</td>
<td>
- logging<br>debug<br>threaded<br>threadedDebug<br>
- threadedLogging<br>threadedProfiling
+ debug<br>threaded<br>threadedDebug<br>threadedProfiling
</td>
<td>Only in<br>prof<br>flavour</td>
<td>Only in<br>prof<br>flavour</td>
@@ -320,14 +310,8 @@ information. The following table lists ways that are built in different flavours
<th>quick<br>quick-validate<br>quick-debug</th>
<td>vanilla</td>
<td>vanilla<br>dynamic</td>
- <td>logging<br>debug<br>threaded<br>threadedDebug<br>threadedLogging
- <br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic
- <br>loggingDynamic<br>threadedLoggingDynamic
- </td>
- <td>logging<br>debug<br>threaded<br>threadedDebug<br>threadedLogging
- <br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic
- <br>loggingDynamic<br>threadedLoggingDynamic
- </td>
+ <td>debug<br>threaded<br>threadedDebug<br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic</td>
+ <td>debug<br>threaded<br>threadedDebug<br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic</td>
</tr>
<tr>
<th>quickest<br>bench</th>
diff --git a/hadrian/doc/user-settings.md b/hadrian/doc/user-settings.md
index 0cc7807755..82f9964ac6 100644
--- a/hadrian/doc/user-settings.md
+++ b/hadrian/doc/user-settings.md
@@ -324,15 +324,14 @@ One can alternatively supply settings from the command line or a
For example, putting the following in a file at `_build/hadrian.settings`:
``` make
-stage1.ghc-bin.ghc.link.opts += -eventlog
+stage1.ghc-bin.ghc.link.opts += -debug
*.base.ghc.*.opts += -v3
```
and running hadrian with the default build root (`_build`), would respectively
-link the stage 2 GHC executable (using the stage 1 GHC) with the `-eventlog`
-flag, so that stage 2 GHC supports producing eventlogs with `+RTS -l`, and use
-`-v3` on all GHC commands used to build anything related to `base`, whatever
-the stage.
+link the stage 2 GHC executable (using the stage 1 GHC) with the `-debug`
+flag and use `-v3` on all GHC commands used to build anything related to
+`base`, whatever the stage.
We could equivalently specify those settings on the command-line:
diff --git a/hadrian/src/Expression.hs b/hadrian/src/Expression.hs
index 821b7d5a1e..3d6b9b896c 100644
--- a/hadrian/src/Expression.hs
+++ b/hadrian/src/Expression.hs
@@ -9,7 +9,7 @@ module Expression (
-- ** Predicates
(?), stage, stage0, stage1, stage2, notStage0, threadedBootstrapper,
- eventLoggingBootstrapper, package, notPackage, packageOneOf,
+ package, notPackage, packageOneOf,
libraryPackage, builder, way, input, inputs, output, outputs,
-- ** Evaluation
@@ -132,10 +132,6 @@ notStage0 = notM stage0
threadedBootstrapper :: Predicate
threadedBootstrapper = expr (flag BootstrapThreadedRts)
--- | Whether or not the bootstrapping compiler provides an event-logging RTS.
-eventLoggingBootstrapper :: Predicate
-eventLoggingBootstrapper = expr (flag BootstrapEventLoggingRts)
-
-- | Is a certain package /not/ built right now?
notPackage :: Package -> Predicate
notPackage = notM . package
diff --git a/hadrian/src/Settings/Builders/Ghc.hs b/hadrian/src/Settings/Builders/Ghc.hs
index 6c47c2fba1..9dd481d7fe 100644
--- a/hadrian/src/Settings/Builders/Ghc.hs
+++ b/hadrian/src/Settings/Builders/Ghc.hs
@@ -240,12 +240,9 @@ wayGhcArgs = do
, (Threaded `wayUnit` way) ? arg "-optc-DTHREADED_RTS"
, (Debug `wayUnit` way) ? arg "-optc-DDEBUG"
, (Profiling `wayUnit` way) ? arg "-prof"
- , supportsEventlog way ? arg "-eventlog"
, (way == debug || way == debugDynamic) ?
pure ["-ticky", "-DTICKY_TICKY"] ]
- where supportsEventlog w = any (`wayUnit` w) [Logging, Profiling, Debug]
-
packageGhcArgs :: Args
packageGhcArgs = do
package <- getPackage
diff --git a/hadrian/src/Settings/Default.hs b/hadrian/src/Settings/Default.hs
index 3b3498461c..b13f65cd92 100644
--- a/hadrian/src/Settings/Default.hs
+++ b/hadrian/src/Settings/Default.hs
@@ -178,12 +178,10 @@ defaultRtsWays = Set.fromList <$>
[ pure [vanilla, threaded]
, notStage0 ? pure
[ profiling, threadedProfiling, debugProfiling, threadedDebugProfiling
- , logging, threadedLogging
, debug, threadedDebug
]
, notStage0 ? platformSupportsSharedLibs ? pure
- [ dynamic, threadedDynamic, debugDynamic, loggingDynamic
- , threadedDebugDynamic, threadedLoggingDynamic
+ [ dynamic, threadedDynamic, debugDynamic, threadedDebugDynamic
]
]
diff --git a/hadrian/src/Settings/Flavours/Benchmark.hs b/hadrian/src/Settings/Flavours/Benchmark.hs
index e4c5de0199..4e5cea0635 100644
--- a/hadrian/src/Settings/Flavours/Benchmark.hs
+++ b/hadrian/src/Settings/Flavours/Benchmark.hs
@@ -11,7 +11,7 @@ benchmarkFlavour = defaultFlavour
{ name = "bench"
, args = defaultBuilderArgs <> benchmarkArgs <> defaultPackageArgs
, libraryWays = pure $ Set.fromList [vanilla]
- , rtsWays = pure $ Set.fromList [vanilla, threaded, logging, threadedLogging] }
+ , rtsWays = pure $ Set.fromList [vanilla, threaded] }
benchmarkArgs :: Args
benchmarkArgs = sourceArgs SourceArgs
diff --git a/hadrian/src/Settings/Flavours/Development.hs b/hadrian/src/Settings/Flavours/Development.hs
index 7e83c5641d..75c0886bce 100644
--- a/hadrian/src/Settings/Flavours/Development.hs
+++ b/hadrian/src/Settings/Flavours/Development.hs
@@ -13,7 +13,7 @@ developmentFlavour ghcStage = defaultFlavour
{ name = "devel" ++ show (fromEnum ghcStage)
, args = defaultBuilderArgs <> developmentArgs ghcStage <> defaultPackageArgs
, libraryWays = pure $ Set.fromList [vanilla]
- , rtsWays = pure $ Set.fromList [vanilla, logging, debug, threaded, threadedLogging, threadedDebug]
+ , rtsWays = pure $ Set.fromList [vanilla, debug, threaded, threadedDebug]
, dynamicGhcPrograms = return False
, ghcDebugAssertions = True }
diff --git a/hadrian/src/Settings/Flavours/Quick.hs b/hadrian/src/Settings/Flavours/Quick.hs
index 2ddf45b1a1..afffa4ceb7 100644
--- a/hadrian/src/Settings/Flavours/Quick.hs
+++ b/hadrian/src/Settings/Flavours/Quick.hs
@@ -23,11 +23,10 @@ quickFlavour = defaultFlavour
, rtsWays = Set.fromList <$>
mconcat
[ pure
- [ vanilla, threaded, logging, debug
- , threadedDebug, threadedLogging, threaded ]
+ [ vanilla, threaded, debug
+ , threadedDebug, threaded ]
, notStage0 ? platformSupportsSharedLibs ? pure
- [ dynamic, debugDynamic, threadedDynamic, loggingDynamic
- , threadedDebugDynamic, threadedLoggingDynamic ]
+ [ dynamic, debugDynamic, threadedDynamic, threadedDebugDynamic ]
] }
quickArgs :: Args
diff --git a/hadrian/src/Settings/Flavours/QuickCross.hs b/hadrian/src/Settings/Flavours/QuickCross.hs
index 35b0dcc988..45e23402e4 100644
--- a/hadrian/src/Settings/Flavours/QuickCross.hs
+++ b/hadrian/src/Settings/Flavours/QuickCross.hs
@@ -20,11 +20,10 @@ quickCrossFlavour = defaultFlavour
, rtsWays = Set.fromList <$>
mconcat
[ pure
- [ vanilla, threaded, logging, debug
- , threadedDebug, threadedLogging, threaded ]
+ [ vanilla, threaded, debug, threadedDebug, threaded ]
, notStage0 ? platformSupportsSharedLibs ? pure
- [ dynamic, debugDynamic, threadedDynamic, loggingDynamic
- , threadedDebugDynamic, threadedLoggingDynamic ]
+ [ dynamic, debugDynamic, threadedDynamic
+ , threadedDebugDynamic ]
] }
quickCrossArgs :: Args
diff --git a/hadrian/src/Settings/Flavours/Quickest.hs b/hadrian/src/Settings/Flavours/Quickest.hs
index 6ab1ed3068..ee695d99b1 100644
--- a/hadrian/src/Settings/Flavours/Quickest.hs
+++ b/hadrian/src/Settings/Flavours/Quickest.hs
@@ -12,7 +12,7 @@ quickestFlavour = defaultFlavour
{ name = "quickest"
, args = defaultBuilderArgs <> quickestArgs <> defaultPackageArgs
, libraryWays = pure (Set.fromList [vanilla])
- , rtsWays = pure (Set.fromList [vanilla, threaded, threadedLogging, logging])
+ , rtsWays = pure (Set.fromList [vanilla, threaded])
, dynamicGhcPrograms = return False }
quickestArgs :: Args
diff --git a/hadrian/src/Settings/Flavours/Validate.hs b/hadrian/src/Settings/Flavours/Validate.hs
index 913e431b58..e722d16061 100644
--- a/hadrian/src/Settings/Flavours/Validate.hs
+++ b/hadrian/src/Settings/Flavours/Validate.hs
@@ -18,10 +18,9 @@ validateFlavour = werror $ defaultFlavour
, notStage0 ? platformSupportsSharedLibs ? pure [dynamic]
]
, rtsWays = Set.fromList <$>
- mconcat [ pure [vanilla, threaded, debug, logging, threadedDebug, threadedLogging]
+ mconcat [ pure [vanilla, threaded, debug, threadedDebug]
, notStage0 ? platformSupportsSharedLibs ? pure
[ dynamic, threadedDynamic, debugDynamic, threadedDebugDynamic
- , loggingDynamic, threadedLoggingDynamic
]
]
}
diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index d4b8810810..d88c96115e 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -94,9 +94,6 @@ packageArgs = do
-- We build a threaded stage N, N>1 if the configuration calls
-- for it.
((ghcThreaded <$> expr flavour) `cabalFlag` "threaded")
- -- Don't try to build stage 1 with an event-logging RTS if
- -- the bootstrapping compiler doesn't support it.
- , orM [notStage0, eventLoggingBootstrapper] `cabalFlag` "eventlog"
]
]
@@ -376,7 +373,6 @@ rtsPackageArgs = package rts ? do
[ builder (Cabal Flags) ? mconcat
[ any (wayUnit Profiling) rtsWays `cabalFlag` "profiling"
, any (wayUnit Debug) rtsWays `cabalFlag` "debug"
- , any (wayUnit Logging) rtsWays `cabalFlag` "logging"
, any (wayUnit Dynamic) rtsWays `cabalFlag` "dynamic"
, useSystemFfi `cabalFlag` "use-system-libffi"
, useLibffiForAdjustors `cabalFlag` "libffi-adjustors"
diff --git a/hadrian/src/Way.hs b/hadrian/src/Way.hs
index 99aa7e28a9..044d781661 100644
--- a/hadrian/src/Way.hs
+++ b/hadrian/src/Way.hs
@@ -1,10 +1,10 @@
module Way (
WayUnit (..), Way, wayUnit, addWayUnit, removeWayUnit, wayFromUnits, allWays,
- vanilla, profiling, dynamic, profilingDynamic, threaded, debug, logging,
- threadedDebug, threadedProfiling, threadedLogging, threadedDynamic,
+ vanilla, profiling, dynamic, profilingDynamic, threaded, debug,
+ threadedDebug, threadedProfiling, threadedDynamic,
threadedDebugProfiling, threadedDebugDynamic, threadedProfilingDynamic,
- threadedLoggingDynamic, debugProfiling, debugDynamic, loggingDynamic,
+ debugProfiling, debugDynamic,
wayPrefix, waySuffix, hisuf, osuf, hcsuf, obootsuf, hibootsuf, ssuf
) where
@@ -28,10 +28,6 @@ profilingDynamic :: Way
profilingDynamic = wayFromUnits [Profiling, Dynamic]
-- RTS only ways below. See compiler/GHC/Driver/Session.hs.
--- | Build RTS with event logging.
-logging :: Way
-logging = wayFromUnits [Logging]
-
-- | Build multithreaded RTS.
threaded :: Way
threaded = wayFromUnits [Threaded]
@@ -41,28 +37,25 @@ debug :: Way
debug = wayFromUnits [Debug]
-- | Various combinations of RTS only ways.
-threadedDebug, threadedProfiling, threadedLogging, threadedDynamic,
+threadedDebug, threadedProfiling, threadedDynamic,
threadedDebugProfiling, threadedDebugDynamic, threadedProfilingDynamic,
- threadedLoggingDynamic, debugProfiling, debugDynamic, loggingDynamic :: Way
+ debugProfiling, debugDynamic :: Way
threadedDebug = wayFromUnits [Threaded, Debug]
threadedProfiling = wayFromUnits [Threaded, Profiling]
-threadedLogging = wayFromUnits [Threaded, Logging]
threadedDynamic = wayFromUnits [Threaded, Dynamic]
threadedDebugProfiling = wayFromUnits [Threaded, Debug, Profiling]
threadedDebugDynamic = wayFromUnits [Threaded, Debug, Dynamic]
threadedProfilingDynamic = wayFromUnits [Threaded, Profiling, Dynamic]
-threadedLoggingDynamic = wayFromUnits [Threaded, Logging, Dynamic]
debugProfiling = wayFromUnits [Debug, Profiling]
debugDynamic = wayFromUnits [Debug, Dynamic]
-loggingDynamic = wayFromUnits [Logging, Dynamic]
-- | All ways supported by the build system.
allWays :: [Way]
allWays =
- [ vanilla, profiling, dynamic, profilingDynamic, threaded, debug, logging
- , threadedDebug, threadedProfiling, threadedLogging, threadedDynamic
+ [ vanilla, profiling, dynamic, profilingDynamic, threaded, debug
+ , threadedDebug, threadedProfiling, threadedDynamic
, threadedDebugProfiling, threadedDebugDynamic, threadedProfilingDynamic
- , threadedLoggingDynamic, debugProfiling, debugDynamic, loggingDynamic ]
+ , debugProfiling, debugDynamic ]
wayPrefix :: Way -> String
wayPrefix way | way == vanilla = ""
diff --git a/mk/config.mk.in b/mk/config.mk.in
index a80d47abe8..10ba35b79b 100644
--- a/mk/config.mk.in
+++ b/mk/config.mk.in
@@ -169,9 +169,6 @@ GhcWithSMP := $(strip $(if $(filter YESNO, $(ArchSupportsSMP)$(GhcUnregisterised
# Whether or not the bootstrapping GHC supplies a threaded RTS.
GhcThreadedRts = @GhcThreadedRts@
-# Whether or not the bootstrapping GHC supplies an event-logging RTS.
-GhcEventLoggingRts = @GhcEventLoggingRts@
-
# Whether to include GHCi in the compiler. Depends on whether the RTS linker
# has support for this OS/ARCH combination.
@@ -230,31 +227,22 @@ BuildSharedLibs=$(strip $(if $(findstring dyn,$(GhcLibWays)),YES,NO))
# make sense here:
#
# thr : threaded
-# thr_p : threaded + profiled + eventlog
-# debug : debugging + eventlog
-# thr_debug : debugging + threaded, + eventlog
-# l : eventlog
-# p : profiled + eventlog
-# thr_l : threaded + eventlog
-#
-# Note how there are a few cases which are handled specially (in packageHsLibs)
-# to reduce the number of distinct ways,
-#
-# debug implies eventlog
-# profiled implies eventlog
-#
-# This means, for instance, that there is no debug_l way.
+# thr_p : threaded + profiled
+# debug : debugging
+# thr_debug : debugging + threaded
+# p : profiled
#
-GhcRTSWays=l
+# While the eventlog used to be enabled in only a subset of ways, we now always
+# enable it.
# Usually want the debug version
-GhcRTSWays += debug
+GhcRTSWays = debug
# We always have the threaded versions, but note that SMP support may be disabled
# (see GhcWithSMP).
-GhcRTSWays += thr thr_debug thr_l
+GhcRTSWays += thr thr_debug
GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),thr_p,)
-GhcRTSWays += $(if $(findstring dyn, $(GhcLibWays)),dyn debug_dyn thr_dyn thr_debug_dyn l_dyn thr_l_dyn,)
+GhcRTSWays += $(if $(findstring dyn, $(GhcLibWays)),dyn debug_dyn thr_dyn thr_debug_dyn,)
GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),thr_debug_p debug_p,)
# We can only build GHCi threaded if we have a threaded RTS:
diff --git a/mk/ways.mk b/mk/ways.mk
index 4a1305e33b..53f900f80e 100644
--- a/mk/ways.mk
+++ b/mk/ways.mk
@@ -24,13 +24,12 @@
# - thr: threaded
# - debug: debugging
# - p: profiled
-# - l: eventlog
# - dyn: dynamically-linked
#
# The ways currently defined.
#
-ALL_WAYS=v l debug dyn thr thr_l p_dyn p debug_dyn thr_dyn thr_p_dyn thr_debug_dyn thr_debug debug_p thr_debug_p l_dyn thr_l_dyn thr_p
+ALL_WAYS=v debug dyn thr p_dyn p debug_dyn thr_dyn thr_p_dyn thr_debug_dyn thr_debug debug_p thr_debug_p thr_p
#
# The following ways currently are treated specially,
@@ -46,11 +45,7 @@ WAY_v_HC_OPTS= -static
# Way 'p':
WAY_p_NAME=profiling
-WAY_p_HC_OPTS= -static -prof -eventlog
-
-# Way 'l':
-WAY_l_NAME=event logging
-WAY_l_HC_OPTS= -static -eventlog
+WAY_p_HC_OPTS= -static -prof
#
# These ways apply to the RTS only:
@@ -62,31 +57,27 @@ WAY_thr_HC_OPTS= -static -optc-DTHREADED_RTS
# Way 'thr_p':
WAY_thr_p_NAME=threaded profiling
-WAY_thr_p_HC_OPTS= -static -prof -eventlog -optc-DTHREADED_RTS
-
-# Way 'thr_l':
-WAY_thr_l_NAME=threaded event logging
-WAY_thr_l_HC_OPTS= -static -optc-DTHREADED_RTS -eventlog
+WAY_thr_p_HC_OPTS= -static -prof -optc-DTHREADED_RTS
# Way 'debug':
WAY_debug_NAME=debug
-WAY_debug_HC_OPTS= -static -optc-DDEBUG -ticky -DTICKY_TICKY -optc-DTICKY_TICKY -eventlog
+WAY_debug_HC_OPTS= -static -optc-DDEBUG -ticky -DTICKY_TICKY -optc-DTICKY_TICKY
# Way 'debug_p':
WAY_debug_p_NAME=debug profiled
-WAY_debug_p_HC_OPTS= -static -optc-DDEBUG -prof -eventlog
+WAY_debug_p_HC_OPTS= -static -optc-DDEBUG -prof
# Way 'p':
WAY_p_NAME=profiling
-WAY_p_HC_OPTS= -static -prof -eventlog
+WAY_p_HC_OPTS= -static -prof
# Way 'thr_debug':
WAY_thr_debug_NAME=threaded debug
-WAY_thr_debug_HC_OPTS= -static -optc-DTHREADED_RTS -optc-DDEBUG -eventlog
+WAY_thr_debug_HC_OPTS= -static -optc-DTHREADED_RTS -optc-DDEBUG
# Way 'thr_debug_p':
-WAY_thr_debug_p_NAME=threaded debug profiling event logging
-WAY_thr_debug_p_HC_OPTS= -static -optc-DTHREADED_RTS -optc-DDEBUG -prof -eventlog
+WAY_thr_debug_p_NAME=threaded debug profiling
+WAY_thr_debug_p_HC_OPTS= -static -optc-DTHREADED_RTS -optc-DDEBUG -prof
# Way 'dyn': build dynamic shared libraries
WAY_dyn_NAME=dyn
@@ -94,11 +85,11 @@ WAY_dyn_HC_OPTS=-fPIC -dynamic
# Way 'p_dyn':
WAY_p_dyn_NAME=p_dyn
-WAY_p_dyn_HC_OPTS=-fPIC -dynamic -prof -eventlog
+WAY_p_dyn_HC_OPTS=-fPIC -dynamic -prof
# Way 'thr_p_dyn':
WAY_thr_p_dyn_NAME=thr_p_dyn
-WAY_thr_p_dyn_HC_OPTS=-fPIC -dynamic -prof -eventlog -optc-DTHREADED_RTS
+WAY_thr_p_dyn_HC_OPTS=-fPIC -dynamic -prof -optc-DTHREADED_RTS
# Way 'thr_dyn':
WAY_thr_dyn_NAME=thr_dyn
@@ -106,16 +97,9 @@ WAY_thr_dyn_HC_OPTS=-fPIC -dynamic -optc-DTHREADED_RTS
# Way 'thr_debug_dyn':
WAY_thr_debug_dyn_NAME=thr_debug_dyn
-WAY_thr_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DTHREADED_RTS -optc-DDEBUG -eventlog
+WAY_thr_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DTHREADED_RTS -optc-DDEBUG
# Way 'debug_dyn':
WAY_debug_dyn_NAME=debug_dyn
-WAY_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DDEBUG -ticky -DTICKY_TICKY -optc-DTICKY_TICKY -eventlog
-
-# Way 'l_dyn':
-WAY_l_dyn_NAME=event logging dynamic
-WAY_l_dyn_HC_OPTS= -fPIC -dynamic -eventlog
+WAY_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DDEBUG -ticky -DTICKY_TICKY -optc-DTICKY_TICKY
-# Way 'thr_l_dyn':
-WAY_thr_l_dyn_NAME=threaded event logging dynamic
-WAY_thr_l_dyn_HC_OPTS= -fPIC -dynamic -optc-DTHREADED_RTS -eventlog
diff --git a/rts/StgMiscClosures.cmm b/rts/StgMiscClosures.cmm
index c2e4071ddf..dbdd2d71fa 100644
--- a/rts/StgMiscClosures.cmm
+++ b/rts/StgMiscClosures.cmm
@@ -18,6 +18,11 @@ import ghczmprim_GHCziTypes_Izh_info;
import AcquireSRWLockExclusive;
import ReleaseSRWLockExclusive;
+#if defined(PROF_SPIN)
+import whitehole_lockClosure_spin;
+import whitehole_lockClosure_yield;
+#endif
+
/* ----------------------------------------------------------------------------
Stack underflow
------------------------------------------------------------------------- */
diff --git a/rts/include/Cmm.h b/rts/include/Cmm.h
index 55d201d94d..0bdb704035 100644
--- a/rts/include/Cmm.h
+++ b/rts/include/Cmm.h
@@ -354,6 +354,7 @@
Constants.
-------------------------------------------------------------------------- */
+#include "rts/Config.h"
#include "rts/Constants.h"
#include "DerivedConstants.h"
#include "rts/storage/ClosureTypes.h"
diff --git a/rts/include/rts/Config.h b/rts/include/rts/Config.h
index cb1e90a78d..c5f34638e0 100644
--- a/rts/include/rts/Config.h
+++ b/rts/include/rts/Config.h
@@ -26,12 +26,11 @@
#define USING_LIBBFD 1
#endif
-/* DEBUG and PROFILING both imply TRACING */
-#if defined(DEBUG) || defined(PROFILING)
-#if !defined(TRACING)
+/*
+ * We previously only offer the eventlog in a subset of RTS ways; we now
+ * enable it unconditionally to simplify packaging. See #18948.
+ */
#define TRACING
-#endif
-#endif
/* DEBUG implies TICKY_TICKY */
#if defined(DEBUG)
diff --git a/rts/rts.cabal.in b/rts/rts.cabal.in
index 3602db3b91..ff60f1b456 100644
--- a/rts/rts.cabal.in
+++ b/rts/rts.cabal.in
@@ -91,10 +91,6 @@ library
extra-library-flavours: _debug _thr_debug
if flag(dynamic)
extra-dynamic-library-flavours: _debug _thr_debug
- if flag(logging)
- extra-library-flavours: _l _thr_l
- if flag(dynamic)
- extra-dynamic-library-flavours: _l _thr_l
if flag(dynamic)
extra-dynamic-library-flavours: _thr
diff --git a/testsuite/config/ghc b/testsuite/config/ghc
index 79dd1b0294..4cf62776ab 100644
--- a/testsuite/config/ghc
+++ b/testsuite/config/ghc
@@ -82,7 +82,7 @@ config.way_flags = {
'sanity' : ['-debug'],
'threaded1' : ['-threaded', '-debug'],
'threaded1_ls' : ['-threaded', '-debug'],
- 'threaded2' : ['-O', '-threaded', '-eventlog'],
+ 'threaded2' : ['-O', '-threaded'],
'threaded2_hT' : ['-O', '-threaded'],
'hpc' : ['-O', '-fhpc'],
'prof_hc_hb' : ['-O', '-prof', '-static', '-fprof-auto'],
diff --git a/testsuite/tests/rts/Makefile b/testsuite/tests/rts/Makefile
index fe35bd4d2c..d7bb87ae91 100644
--- a/testsuite/tests/rts/Makefile
+++ b/testsuite/tests/rts/Makefile
@@ -121,19 +121,19 @@ KeepCafs:
.PHONY: EventlogOutput1
EventlogOutput1:
- "$(TEST_HC)" -eventlog -v0 EventlogOutput.hs
+ "$(TEST_HC)" -v0 EventlogOutput.hs
./EventlogOutput +RTS -l -olhello.eventlog
ls hello.eventlog >/dev/null
.PHONY: EventlogOutput2
EventlogOutput2:
- "$(TEST_HC)" -eventlog -v0 EventlogOutput.hs
+ "$(TEST_HC)" -v0 EventlogOutput.hs
./EventlogOutput +RTS -l
ls EventlogOutput.eventlog >/dev/null
.PHONY: EventlogOutputNull
EventlogOutputNull:
- "$(TEST_HC)" -eventlog -rtsopts -v0 EventlogOutput.hs
+ "$(TEST_HC)" -rtsopts -v0 EventlogOutput.hs
./EventlogOutput +RTS -l --null-eventlog-writer
test ! -e EventlogOutput.eventlog
diff --git a/testsuite/tests/rts/all.T b/testsuite/tests/rts/all.T
index 75dcf5ac58..d907ceff62 100644
--- a/testsuite/tests/rts/all.T
+++ b/testsuite/tests/rts/all.T
@@ -160,11 +160,11 @@ test('rtsflags002', [ only_ways(['normal']) ], compile_and_run, ['-with-rtsopts=
# variants of the RTS by default
test('traceEvent', [ omit_ways(['dyn', 'ghci'] + prof_ways),
extra_run_opts('+RTS -ls -RTS') ],
- compile_and_run, ['-eventlog'])
+ compile_and_run, [''])
test('traceBinaryEvent', [ omit_ways(['dyn', 'ghci'] + prof_ways),
extra_run_opts('+RTS -ls -RTS') ],
- compile_and_run, ['-eventlog'])
+ compile_and_run, [''])
# Test that -ol flag works as expected
test('EventlogOutput1',
@@ -209,7 +209,7 @@ test('ipeEventLog',
# In general this test should work on Darwin - Just not on our CI.
when(opsys('darwin'), fragile(0))
],
- compile_and_run, ['ipeEventLog_lib.c -eventlog'])
+ compile_and_run, ['ipeEventLog_lib.c'])
# Manually create IPE entries, force the initialization of the underlying hash map
# and dump them to event log (stderr).
@@ -225,7 +225,7 @@ test('ipeEventLog_fromMap',
# In general this test should work on Darwin - Just not on our CI.
when(opsys('darwin'), fragile(0))
],
- compile_and_run, ['ipeEventLog_lib.c -eventlog'])
+ compile_and_run, ['ipeEventLog_lib.c'])
test('T4059', [], makefile_test, ['T4059'])
@@ -486,10 +486,10 @@ test('T13676',
ghci_script, ['T13676.script'])
test('InitEventLogging',
[only_ways(['normal']), extra_run_opts('+RTS -RTS')],
- compile_and_run, ['-eventlog InitEventLogging_c.c'])
+ compile_and_run, ['InitEventLogging_c.c'])
test('RestartEventLogging',
[only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')],
- compile_and_run, ['-eventlog RestartEventLogging_c.c'])
+ compile_and_run, ['RestartEventLogging_c.c'])
test('T17088',
[only_ways(['normal']), extra_run_opts('+RTS -c -A256k -RTS')],
diff --git a/testsuite/tests/rts/flags/all.T b/testsuite/tests/rts/flags/all.T
index 04c2907fce..e60e58f0c1 100644
--- a/testsuite/tests/rts/flags/all.T
+++ b/testsuite/tests/rts/flags/all.T
@@ -54,4 +54,4 @@ test('T12870h',
test('T20006', [extra_run_opts('+RTS --eventlog-flush-interval=1')],
compile_and_run,
- ['-eventlog'])
+ [''])