Skip to content
Snippets Groups Projects
  1. Jun 10, 2024
    • Reinier Maas's avatar
      70d3f785
    • davide's avatar
      45dcfc64
    • Duncan Coutts's avatar
    • Duncan Coutts's avatar
      Add Note [Byte arrays outside of the HEAP_ALLOCED space] · 7cdfb04e
      Duncan Coutts authored
      And refer to it from the various places involved in the scheme.
      7cdfb04e
    • Duncan Coutts's avatar
      f810809f
    • Duncan Coutts's avatar
      Update user guide for byte arrays outside of the heap · 7b06912a
      Duncan Coutts authored
      Add a sub-subsection in the chapter on GHC extensions to the FFI, under
      the existing Memory Allocation subsection.
      
      Explain that it's permitted to have {Mutable}ByteArray# outside the heap
      and the tricky associated constraints. Mention the new primop
      placeByteArray#.
      7b06912a
    • Duncan Coutts's avatar
      Add test T17747 · 71b840b4
      Duncan Coutts authored
      Closes issue #17747
      
      Test that we can allocate ByteArray#s outside of the HEAP_ALLOCED()
      address space without upsetting the GC. To be extra sure we attach weak
      pointers with C finalizers to the ByteArray#s. We keep them alive and
      run a major GC so that the GC has to trace the live ByteArray#s.
      
      Prior to the first patch in this series, doing this would upset the GC
      because the GC does not expect heap objects with closure type ARR_WORDS
      to exist outside the GC heap.
      
      > internal error: evacuate(static): strange closure type 42
      
      Finally we allow everything to be GC'd again, and check that the C
      finalizers did run.
      
      This feature also required a change to the isByteArrayPinned# which
      itself required a CMM implementation of the HEAP_ALLOCED system. So we
      also add a check that the CMM and C implementations of HEAP_ALLOCED
      agree with each other.
      71b840b4
    • Duncan Coutts's avatar
      Fix isByteArrayPinned# for the !HEAP_ALLOCATED case · be9e4975
      Duncan Coutts authored
      The isByteArrayPinned# primop works by looking up the block descriptor
      for the byte array to see if it lives in a pinned area or not. This of
      course cannot work for byte arrays that are not HEAP_ALLOCATED since
      they don't have block descriptors.
      
      The solution is to check if it is HEAP_ALLOCATED first. Since this is
      done in CMM code we make use of the new HEAP_ALLOCATED support for CMM.
      It is a bit awkward since it does not have a uniform interface.
      be9e4975
    • Duncan Coutts's avatar
      Define HEAP_ALLOCED for CMM code · 4d4bddb4
      Duncan Coutts authored
      Allow rts/sm/HeapAlloc.h to be #included by CMM code and have it provide
      a suitable implementation of HEAP_ALLOCED.
      
      The HEAP_ALLOCED system has three implementations, the large address
      space case, two fallbakc impls, one for 32bit and one for 64bit. The
      first two are simple enough that we can provide a HEAP_ALLOCED macro
      that can be used in a CMM expression context.
      
      The 64bit fallback case is rather more tricky. We provide a different
      interface to HEAP_ALLOCED for this case, which has to be called in a
      statement/"callish" style.
      4d4bddb4
    • Duncan Coutts's avatar
      Add new primop placeByteArray# · 438dc732
      Duncan Coutts authored
      It places a byte array heap object header at the given address, which
      must be outside the heap. It also sets the byte array size.
      438dc732
    • Duncan Coutts's avatar
      Permit ARR_WORDS closures outside HEAP_ALLOCED space · 43e7531b
      Duncan Coutts authored
      In the GC, evacuate() is prepared to deal with some heap objects that
      are not in the HEAP_ALLOCED() memory space. These are mainly the heap
      objects that GHC puts into the data sections of object files.
      
      It is also useful however to allow ByteArray# and MutableByteArray#
      heap objects to appear outside of the HEAP_ALLOCED() memory space. These
      have the ARR_WORDS closure type and contain no pointer should be easy to
      deal with. Indeed evacuate() already deals with closure types for
      constructors containing no pointers by doing nothing.
      
      So we just tack the ARR_WORDS case into this group of closure types that
      are permitted outside the HEAP_ALLOCED area but otherwise ignored.
      43e7531b
    • Cheng Shao's avatar
      rts: replace ad-hoc MYTASK_USE_TLV with proper CC_SUPPORTS_TLS · f3017dd3
      Cheng Shao authored and Marge Bot's avatar Marge Bot committed
      This patch replaces the ad-hoc `MYTASK_USE_TLV` with the
      `CC_SUPPORTS_TLS` macro. If TLS support is detected by autoconf, then
      we should use that for managing `myTask` in the threaded RTS.
      f3017dd3
    • jeffrey young's avatar
      JS: establish single source of truth for symbols · 6bd850e8
      jeffrey young authored and Marge Bot's avatar Marge Bot committed
      In pursuit of: #22736.
      
      This MR moves ad-hoc symbols used throughout the js backend into a
      single symbols file. Why? First, this cleans up the code by removing
      ad-hoc strings created on the fly and therefore makes the code more
      maintainable. Second, it makes it much easier to eventually type these
      identifiers.
      6bd850e8
  2. Jun 09, 2024
  3. Jun 08, 2024
  4. Jun 07, 2024
  5. Jun 06, 2024
  6. Jun 05, 2024
Loading