bit-big-endian
commit
a4b1a43542b11d09dd3b603d82c5a0e99da67d74
Author: Austin Seipp <austin@well-typed.com>
Date: Fri Nov 1 22:17:01 2013 -0500
Fix loop on 64bit Big-Endian platforms (#8134)
This is a fun one.
In the RTS, `cas` expects a pointer to StgWord which will translate to
unsigned long (8 bytes under LP64.) But we had previously declared
token_locked as *StgBool* - which evaluates to 'int' (4 bytes under
LP64.) That means we fail to provide enough storage for the cas
primitive, causing it to corrupt memory on a 64bit platform.
Hilariously, this somehow did not affect little-endian platforms (ARM,
x86, etc) before. That's because to clear our lock token, we would say:
token_locked = 0;
But because token_locked is 32bits technically, this only writes to
half of the 64bit quantity. On a Big-Endian machine, this won't do
anything. That is, token_locked starts as 0:
/ token_locked
|
v
0x00000000
and the first cas modifies the memory to:
/ valid / corrupted
| |
v v
0x00000000 0x00000001
We then clear token_locked, but this doesn't change the corrupted 4
bytes of memory. And then we try to lock the token again, spinning until
it is released - clearly a deadlock.
Related: Windows (amd64) doesn't follow LP64, but LLP64, where both
int and long are 4 bytes, so this shouldn't change anything on these
platforms.
Thanks to Reid Barton for helping the diagnosis. Also, thanks to Jens
Peterson who confirmed this also fixes building GHC on Fedora/ppc64 and
Fedora/s390x.
Authored-by: Gustavo Luiz Duarte <gustavold@linux.vnet.ibm.com>
Signed-off-by: Austin Seipp <austin@well-typed.com>
Gbp-Pq: Name 64-bit-big-endian
Avoid generating empty llvm.used definitions.
Avoid generating empty llvm.used definitions.
LLVM 3.3rc3 complains when the llvm.used global is an empty array, so don't
define llvm.used at all when it would be empty.
Gbp-Pq: Name llvm-3.3-compat
cabal-bug-1087
Preprocessed files would be written to dist/build instead of
dist/build/my-test-suite/my-test-suite-tmp, causing them not to be
found during compilation.
Fixes #1087.
Author: Johan Tibell <johan.tibell@gmail.com>
Origin: https://github.com/haskell/cabal/commit/
dd691fa6791d67981388ec044b28343879d8c2b1
Gbp-Pq: Name cabal-bug-1087.patch