Skip to content
Snippets Groups Projects
  1. Mar 09, 2024
  2. Mar 08, 2024
    • Ben Gamari's avatar
      rts: Fix SET_HDR initialization of retainer set · 38a4b6ab
      Ben Gamari authored and Marge Bot's avatar Marge Bot committed
      This fixes a regression in retainer set profiling introduced by
      b0293f78. Prior to that commit
      the heap traversal word would be initialized by `SET_HDR` using
      `LDV_RECORD_CREATE`. However, the commit added a `doingLDVProfiling`
      check in `LDV_RECORD_CREATE`, meaning that this initialization no longer
      happened.
      
      Given that this initialization was awkwardly indirectly anyways, I have
      fixed this by explicitly initializating the heap traversal word to
      `NULL` in `SET_PROF_HDR`. This is equivalent to the previous behavior,
      but much more direct.
      
      Fixes #24513.
      38a4b6ab
  3. Mar 06, 2024
  4. Mar 01, 2024
    • Torsten Schmits's avatar
      Introduce ListTuplePuns extension · d91d00fc
      Torsten Schmits authored and Marge Bot's avatar Marge Bot committed
      This implements Proposal 0475, introducing the `ListTuplePuns` extension
      which is enabled by default.
      
      Disabling this extension makes it invalid to refer to list, tuple and
      sum type constructors by using built-in syntax like `[Int]`,
      `(Int, Int)`, `(# Int#, Int# #)` or `(# Int | Int #)`.
      Instead, this syntax exclusively denotes data constructors for use with
      `DataKinds`.
      The conventional way of referring to these data constructors by
      prefixing them with a single quote (`'(Int, Int)`) is now a parser
      error.
      
      Tuple declarations have been moved to `GHC.Tuple.Prim` and the `Solo`
      data constructor has been renamed to `MkSolo` (in a previous commit).
      Unboxed tuples and sums now have real source declarations in `GHC.Types`.
      Unit and solo types for tuples are now called `Unit`, `Unit#`, `Solo`
      and `Solo#`.
      Constraint tuples now have the unambiguous type constructors `CTuple<n>`
      as well as `CUnit` and `CSolo`, defined in `GHC.Classes` like before.
      
      A new parser construct has been added for the unboxed sum data
      constructor declarations.
      
      The type families `Tuple`, `Sum#` etc. that were intended to provide
      nicer syntax have been omitted from this change set due to inference
      problems, to be implemented at a later time.
      See the MR discussion for more info.
      
      Updates the submodule utils/haddock.
      Updates the cabal submodule due to new language extension.
      
          Metric Increase:
              haddock.base
      
          Metric Decrease:
              MultiLayerModulesTH_OneShot
              size_hello_artifact
      
      Proposal document: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0475-tuple-syntax.rst
      
      Merge request: ghc/ghc!8820
      
      Tracking ticket: ghc/ghc#21294
      d91d00fc
  5. Feb 28, 2024
    • Teo Camarasu's avatar
      rts: avoid checking bdescr of value outside of Haskell heap · 74b24a9b
      Teo Camarasu authored and Teo Camarasu's avatar Teo Camarasu committed
      In nonmovingTidyWeaks we want to check if the key of a weak pointer
      lives in the non-moving heap. We do this by checking the flags of the
      block the key lives in. But we need to be careful with values that live
      outside the Haskell heap, since they will lack a block descriptor and
      looking for one may lead to a segfault. In this case we should just
      accept that it isn't on the non-moving heap.
      
      Resolves #24492
      74b24a9b
  6. Feb 27, 2024
  7. Feb 25, 2024
  8. Feb 21, 2024
  9. Feb 17, 2024
  10. Feb 14, 2024
  11. Feb 13, 2024
  12. Feb 12, 2024
    • Teo Camarasu's avatar
      nonmoving: Add support for heap profiling · bedb4f0d
      Teo Camarasu authored and Marge Bot's avatar Marge Bot committed
      Add support for heap profiling while using the nonmoving collector.
      
      We greatly simply the implementation by disabling concurrent collection for
      GCs when heap profiling is enabled. This entails that the marked objects on
      the nonmoving heap are exactly the live objects.
      
      Note that we match the behaviour for live bytes accounting by taking the size
      of objects on the nonmoving heap to be that of the segment's block
      rather than the object itself.
      
      Resolves #22221
      bedb4f0d
    • Sylvain Henry's avatar
      JS: add support for linking C sources · aef587f6
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      Support linking C sources with JS output of the JavaScript backend.
      See the added documentation in the users guide.
      
      The implementation simply extends the JS linker to use the objects (.o)
      that were already produced by the emcc compiler and which were filtered
      out previously. I've also added some options to control the link with C
      functions (see the documentation about pragmas).
      
      With this change I've successfully compiled the direct-sqlite package
      which embeds the sqlite.c database code. Some wrappers are still
      required (see the documentation about wrappers) but everything generic
      enough to be reused for other libraries have been integrated into
      rts/js/mem.js.
      aef587f6
    • Sylvain Henry's avatar
      JS: handle stored null StablePtr · df9fd9f7
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      Some Haskell codes unsafely cast StablePtr into ptr to compare against
      NULL. E.g. in direct-sqlite:
      
        if castStablePtrToPtr aggStPtr /= nullPtr then
      
      where `aggStPtr` is read (`peek`) from zeroed memory initially.
      
      We fix this by giving these StablePtr the same representation as other
      null pointers. It's safe because StablePtr at offset 0 is unused (for
      this exact reason).
      df9fd9f7
  13. Feb 10, 2024
    • Matthew Pickering's avatar
      rts: eras profiling mode · b0293f78
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      The eras profiling mode is useful for tracking the life-time of
      closures. When a closure is written, the current era is recorded in the
      profiling header. This records the era in which the closure was created.
      
      * Enable with -he
      * User mode: Use functions ghc-experimental module GHC.Profiling.Eras to modify the era
      * Automatically: --automatic-era-increment, increases the user era on major
        collections
      * The first era is era 1
      * -he<era> can be used with other profiling modes to select a specific
        era
      
      If you just want to record the era but not to perform heap profiling you
      can use `-he --no-automatic-heap-samples`.
      
      https://well-typed.com/blog/2024/01/ghc-eras-profiling/
      
      Fixes #24332
      b0293f78
Loading