This is a corrected fix for ticket #4867, "ghci displays negative floats incorrectly". The previous patch sometimes gave incorrect offset to values in the __const section of the __TEXT segment. The new patch arranges a zero fixup for non-external, not-global offset table signed relocations. This is apparently what is required, though documentation on this point is scarce. With this change Doubles are negated properly, because the sign bit mask is loaded from the correct offset. This was tested both on HEAD and the 7.0 branch.
This patch fixes the erroneous relocations that caused the bug in ticket #4867. External addresses and global offset table entries were relocated correctly, but all other relocations were incorrectly calculated. This caused, for example, bad references to constants stored in the __const section of the __TEXT segment. This bug only affected OS X on 64-bit platforms.
Found-by: Valgrind. Thanks Julian!
Now we keep any partially-full blocks in the gc_thread structs after each GC, rather than moving them to the generation. This should give us slightly better locality (though I wasn't able to measure any difference). Also in this patch: better sanity checking with THREADED.
This is an improvement from my GC branch, that helps performance for intensive message-passing communication between Capabilities.
…& docs It is still (silently) accepted for backwards compatibility.
So we can now get these in ThreadScope: 19487000: cap 1: stopping thread 6 (blocked on black hole owned by thread 4) Note: needs an update to ghc-events. Older ThreadScopes will just ignore the new information.