packages feed

Cabal revisions of ghc-stack-profiler-0.2.0.0

Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.

revision 1
-cabal-version: 3.8-name: ghc-stack-profiler-version: 0.2.0.0-license: BSD-3-Clause-author: Hannes Siebenhandl, Wen Kokke, Matthew Pickering-maintainer: hannes@well-typed.com-build-type: Simple-synopsis: RTS Callstack profiler for GHC.-description:-  RTS Callstack profiler for GHC.--  The main idea is to periodically sample the Haskell callstack and use IPE and [stack annotation](https://www.well-typed.com/blog/2025/09/better-haskell-stack-traces/) information in order to understand the source locations which-  correspond to the stack frames.-  To profile a program it needs to be compiled and instrumented with the 'ghc-stack-profiler' package via:--  @-  import GHC.Stack.Profiler.Sampler--  main :: IO ()-  main = 'withStackProfilerForMyThread' ('SampleIntervalMs' 10) $ do-      ...-  @--  This will spawn a profiling thread that will periodically take a snapshot of the current RTS callstack of your program and serialises it to the eventlog.--  To improve readability of the profile, compile the program with @-finfo-table-map@ and @-fdistinct-constructor-tables@.-  Using @cabal@, this can be achieved with an appropriate @cabal.project@ file:--  @-  packages: ...--  ...--  package *-      ghc-options: -finfo-table-map -fdistinct-constructor-tables-  @--  To emit the eventlog messages by the profiler, you need to run your program with the @-l@ RTS flag, for example via:--  @-  ./\<program\> ... +RTS -l -RTS-  @--  This will write out an eventlog to @\<program\>.eventlog@ which can be transformed for [speedscope.app](https://www.speedscope.app/) via the script 'ghc-stack-profiler-speedscope'.--  @-  ghc-stack-profiler-speedscope \<program\>.eventlog-  @--  The resulting profile @\<program\>.eventlog.json@ can be viewed and further analysed in [speedscope.app](https://www.speedscope.app/).--  Note that the results are affected by compilation optimisation options, such as @-fno-omit-yields@.--extra-doc-files: CHANGELOG.md-category: Profiling, Benchmarking, Development-tested-with:-  ghc ==9.10.3-  ghc ==9.12.2-  ghc ==9.14.1--common warnings-  ghc-options:-    -Wall-    -Wunused-packages--common exts-  default-extensions:-    DeriveGeneric-    DerivingStrategies-    DuplicateRecordFields-    LambdaCase-    NamedFieldPuns-    NoImportQualifiedPost-    PatternSynonyms-    ViewPatterns--  default-language: GHC2021--flag use-ghc-trace-events-  description:-    Use the package 'ghc-trace-events'. Disabling this flag makes it much easier to use @ghc-stack-profiler@ on the @ghc@ codebase, as-    we don't have to package 'ghc-trace-events' for hadrian. Always enabled on GHC <9.12.--  manual: True-  default: True--flag control-  description:-    Enable @eventlog-socket@ control commands.--  manual: True-  default: False--library-  import:-    warnings, exts--  exposed-modules:-    Debug.Trace.Binary.Compat-    GHC.Internal.ClosureTypes.Compat-    GHC.Internal.Heap.Closures.Compat-    GHC.Internal.InfoProv.Types.Compat-    GHC.Internal.Stack.Constants.Compat-    GHC.Internal.Stack.Decode.Compat-    GHC.Stack.Annotation.Experimental.Compat-    GHC.Stack.Profiler-    GHC.Stack.Profiler.Commands-    GHC.Stack.Profiler.Decode-    GHC.Stack.Profiler.FFI-    GHC.Stack.Profiler.Manager-    GHC.Stack.Profiler.Stack.Compat-    GHC.Stack.Profiler.Stack.Decode-    GHC.Stack.Profiler.SymbolTable-    GHC.Stack.Profiler.Util--  build-depends:-    async >=2.2 && <2.2.6,-    base >=4.20 && <4.23,-    binary >=0.8.9.3 && <0.11,-    bytestring >=0.11 && <0.13,-    containers >=0.6.8 && <0.9,-    ghc-heap >=9.10.1 && <9.16,-    ghc-internal >=9.1001 && <9.1600,-    ghc-stack-profiler-core ==0.2.0.0,-    stm ^>=2.5.3.0 || ^>=2.5.0.0,-    text >=2 && <2.2,--  hs-source-dirs:-    src--  if impl(ghc >=9.14)-    build-depends: ghc-experimental >=9.1400 && <9.1600--  if flag(use-ghc-trace-events) || impl(ghc <9.12)-    cpp-options:-      -DUSE_GHC_TRACE_EVENTS--    build-depends:-      ghc-trace-events ^>=0.1.2.10-  else-    build-depends:-      ghc-prim >=0.6.0 && <1--  -- Custom stack decoding for GHC <9.14.2-  -- Fixes https://github.com/well-typed/ghc-stack-profiler/issues/14-  -- See https://gitlab.haskell.org/ghc/ghc/-/issues/27009 for the fix.-  if impl(ghc <9.14.2)-    cmm-sources:-      cbits/Stack.cmm--    c-sources:-      cbits/Stack_c.c--  -- eventlog-socket custom command support-  if flag(control) && !os(windows)-    cpp-options:-      -DEVENTLOG_SOCKET_SUPPORT--    build-depends:-      eventlog-socket ^>=0.1.3--source-repository head-  type: git-  location: https://github.com/well-typed/ghc-stack-profiler.git-  subdir: ghc-stack-profiler+cabal-version: 3.8
+name: ghc-stack-profiler
+version: 0.2.0.0
+x-revision: 1
+license: BSD-3-Clause
+author: Hannes Siebenhandl, Wen Kokke, Matthew Pickering
+maintainer: hannes@well-typed.com
+build-type: Simple
+synopsis: RTS Callstack profiler for GHC.
+description:
+  RTS Callstack profiler for GHC.
+
+  The main idea is to periodically sample the Haskell callstack and use IPE and [stack annotation](https://www.well-typed.com/blog/2025/09/better-haskell-stack-traces/) information in order to understand the source locations which
+  correspond to the stack frames.
+  To profile a program it needs to be compiled and instrumented with the 'ghc-stack-profiler' package via:
+
+  @
+  import GHC.Stack.Profiler.Sampler
+
+  main :: IO ()
+  main = 'withStackProfilerForMyThread' ('SampleIntervalMs' 10) $ do
+      ...
+  @
+
+  This will spawn a profiling thread that will periodically take a snapshot of the current RTS callstack of your program and serialises it to the eventlog.
+
+  To improve readability of the profile, compile the program with @-finfo-table-map@ and @-fdistinct-constructor-tables@.
+  Using @cabal@, this can be achieved with an appropriate @cabal.project@ file:
+
+  @
+  packages: ...
+
+  ...
+
+  package *
+      ghc-options: -finfo-table-map -fdistinct-constructor-tables
+  @
+
+  To emit the eventlog messages by the profiler, you need to run your program with the @-l@ RTS flag, for example via:
+
+  @
+  ./\<program\> ... +RTS -l -RTS
+  @
+
+  This will write out an eventlog to @\<program\>.eventlog@ which can be transformed for [speedscope.app](https://www.speedscope.app/) via the script 'ghc-stack-profiler-speedscope'.
+
+  @
+  ghc-stack-profiler-speedscope \<program\>.eventlog
+  @
+
+  The resulting profile @\<program\>.eventlog.json@ can be viewed and further analysed in [speedscope.app](https://www.speedscope.app/).
+
+  Note that the results are affected by compilation optimisation options, such as @-fno-omit-yields@.
+
+extra-doc-files: CHANGELOG.md
+category: Profiling, Benchmarking, Development
+tested-with:
+  ghc ==9.10.3
+  ghc ==9.12.2
+  ghc ==9.14.1
+
+common warnings
+  ghc-options:
+    -Wall
+    -Wunused-packages
+
+common exts
+  default-extensions:
+    DeriveGeneric
+    DerivingStrategies
+    DuplicateRecordFields
+    LambdaCase
+    NamedFieldPuns
+    NoImportQualifiedPost
+    PatternSynonyms
+    ViewPatterns
+
+  default-language: GHC2021
+
+flag use-ghc-trace-events
+  description:
+    Use the package 'ghc-trace-events'. Disabling this flag makes it much easier to use @ghc-stack-profiler@ on the @ghc@ codebase, as
+    we don't have to package 'ghc-trace-events' for hadrian. Always enabled on GHC <9.12.
+
+  manual: True
+  default: True
+
+flag control
+  description:
+    Enable @eventlog-socket@ control commands.
+
+  manual: True
+  default: False
+
+library
+  import:
+    warnings, exts
+
+  exposed-modules:
+    Debug.Trace.Binary.Compat
+    GHC.Internal.ClosureTypes.Compat
+    GHC.Internal.Heap.Closures.Compat
+    GHC.Internal.InfoProv.Types.Compat
+    GHC.Internal.Stack.Constants.Compat
+    GHC.Internal.Stack.Decode.Compat
+    GHC.Stack.Annotation.Experimental.Compat
+    GHC.Stack.Profiler
+    GHC.Stack.Profiler.Commands
+    GHC.Stack.Profiler.Decode
+    GHC.Stack.Profiler.FFI
+    GHC.Stack.Profiler.Manager
+    GHC.Stack.Profiler.Stack.Compat
+    GHC.Stack.Profiler.Stack.Decode
+    GHC.Stack.Profiler.SymbolTable
+    GHC.Stack.Profiler.Util
+
+  build-depends:
+    async >=2.2 && <2.2.6,
+    base >=4.20 && <4.23,
+    binary >=0.8.9.1 && <0.11,
+    bytestring >=0.11 && <0.13,
+    containers >=0.6.8 && <0.9,
+    ghc-heap >=9.10.1 && <9.16,
+    ghc-internal >=9.1001 && <9.1600,
+    ghc-stack-profiler-core ==0.2.0.0,
+    stm ^>=2.5.3.0 || ^>=2.5.0.0,
+    text >=2 && <2.2,
+
+  hs-source-dirs:
+    src
+
+  if impl(ghc >=9.14)
+    build-depends: ghc-experimental >=9.1400 && <9.1600
+
+  if flag(use-ghc-trace-events) || impl(ghc <9.12)
+    cpp-options:
+      -DUSE_GHC_TRACE_EVENTS
+
+    build-depends:
+      ghc-trace-events ^>=0.1.2.10
+  else
+    build-depends:
+      ghc-prim >=0.6.0 && <1
+
+  -- Custom stack decoding for GHC <9.14.2
+  -- Fixes https://github.com/well-typed/ghc-stack-profiler/issues/14
+  -- See https://gitlab.haskell.org/ghc/ghc/-/issues/27009 for the fix.
+  if impl(ghc <9.14.2)
+    cmm-sources:
+      cbits/Stack.cmm
+
+    c-sources:
+      cbits/Stack_c.c
+
+  -- eventlog-socket custom command support
+  if flag(control) && !os(windows)
+    cpp-options:
+      -DEVENTLOG_SOCKET_SUPPORT
+
+    build-depends:
+      eventlog-socket ^>=0.1.3
+
+source-repository head
+  type: git
+  location: https://github.com/well-typed/ghc-stack-profiler.git
+  subdir: ghc-stack-profiler