* bump base dependency
* add new header files to cabal file
* bump version, update "tested-with", update stack resolver
+ fix a format string warning in Pack.c
If packing hits a blackhole, the packing thread should block
and retry, to get consistent behaviour at the Haskell level.
To enable this from Haskell, the core routine now checks and
evaluates the blackhole before retrying (i.e. blocks on the
known-to-be-blackholed data).
As the blackhole is not necessarily (and most likely not) the
graphroot, the C code writes its address into the buffer at
position 0. This is OK since packing fails anyway, so the buffer
won't hold any useful data.
Using a PP flag LIBRARY_CODE, the code of Pack.c is split up into
parts necessary for the library and parts required for the RTS
(negation of LIBRARY_CODE); the rest is shared code.
This prepares for fitting the revised Pack.c of packman into the
parallel GHC runtime system. The module should not export any
functions without need, and prefix all exported ones with "pm".
Exported:
int pmtryPackToBuffer(StgClosure* closure, StgArrWords* mutArr);
StgClosure* pmUnpackGraphWrapper(StgArrWords* packBufferArray, Capability* cap);
Old code was wasting a lot of space by packing tags for stack values
to indicate their pointer-hood. Instead, the new version packs the
original bitmap and uses it for unpacking.
The bitmap is actually present at the receiver side, but as part of
the function info table - the function arrives later so it cannot be
used from there.
There is code for the large bitmap case, but it is not activated yet.
Old code was wasting a lot of space by packing tags for stack values
to indicate their pointer-hood. Instead, the new version packs the
original bitmap and uses it for unpacking.
The bitmap is actually present at the receiver side, but as part of
the function info table - the function arrives later so it cannot be
used from there.
There is code for the large bitmap case, but it is not activated yet.
Pack.c should now be thread-safe for unpacking and packing,
as its functions pass around an explicitly allocated state.
changes should eventually go back into the RTS code (but we
need to see the performance first).
The PAP case has not been rewritten yet, it should be revised
to pack the bitmap instead of tagging the packed stack elements.