Commits on Source (13)
-
edfe6140
-
This patch removes pre-C11 legacy code paths related to INLINE_HEADER/STATIC_INLINE/EXTERN_INLINE macros, ensure EXTERN_INLINE is treated as static inline in most cases (fixes #24945), and also corrects the comments accordingly.
35a64220 -
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.
75d5a448 -
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.
55b0eb1e -
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.
3ef54581 -
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.
f8cfafc5 -
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.
9798a26f -
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#.
fd54a5b9 -
Duncan Coutts authored058a823c
-
Duncan Coutts authored
And refer to it from the various places involved in the scheme.
98563fe0 -
Duncan Coutts authoredb311afd6
-
davide authored63e3f5bc
Showing
- CODEOWNERS 1 addition, 0 deletionsCODEOWNERS
- compiler/GHC/Builtin/primops.txt.pp 78 additions, 0 deletionscompiler/GHC/Builtin/primops.txt.pp
- compiler/GHC/StgToCmm/Prim.hs 1 addition, 0 deletionscompiler/GHC/StgToCmm/Prim.hs
- compiler/GHC/StgToJS/Prim.hs 4 additions, 0 deletionscompiler/GHC/StgToJS/Prim.hs
- docs/users_guide/exts/ffi.rst 31 additions, 0 deletionsdocs/users_guide/exts/ffi.rst
- libraries/ghc-internal/src/GHC/Internal/Exception.hs 1 addition, 1 deletionlibraries/ghc-internal/src/GHC/Internal/Exception.hs
- rts/Inlines.c 5 additions, 3 deletionsrts/Inlines.c
- rts/PrimOps.cmm 36 additions, 10 deletionsrts/PrimOps.cmm
- rts/RtsSymbols.c 1 addition, 0 deletionsrts/RtsSymbols.c
- rts/include/Stg.h 4 additions, 42 deletionsrts/include/Stg.h
- rts/include/rts/storage/HeapAlloc.h 51 additions, 2 deletionsrts/include/rts/storage/HeapAlloc.h
- rts/include/stg/MiscClosures.h 1 addition, 0 deletionsrts/include/stg/MiscClosures.h
- rts/sm/Evac.c 2 additions, 0 deletionsrts/sm/Evac.c
- testsuite/tests/interface-stability/base-exports.stdout 3 additions, 3 deletionstestsuite/tests/interface-stability/base-exports.stdout
- testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs 3 additions, 3 deletions...ce-stability/base-exports.stdout-javascript-unknown-ghcjs
- testsuite/tests/interface-stability/base-exports.stdout-mingw32 3 additions, 3 deletions...ite/tests/interface-stability/base-exports.stdout-mingw32
- testsuite/tests/interface-stability/base-exports.stdout-ws-32 3 additions, 3 deletions...suite/tests/interface-stability/base-exports.stdout-ws-32
- testsuite/tests/rts/Makefile 6 additions, 0 deletionstestsuite/tests/rts/Makefile
- testsuite/tests/rts/T17747.hs 184 additions, 0 deletionstestsuite/tests/rts/T17747.hs
- testsuite/tests/rts/T17747.stdout 8 additions, 0 deletionstestsuite/tests/rts/T17747.stdout
testsuite/tests/rts/T17747.hs
0 → 100644
testsuite/tests/rts/T17747.stdout
0 → 100644