[GHC] #8134: ghc enters a loop while building 7.6.3 for powerpc64 platform.
GHC
ghc-devs at haskell.org
Sat Nov 2 20:58:22 UTC 2013
#8134: ghc enters a loop while building 7.6.3 for powerpc64 platform.
-------------------------------------+-----------------------------
Reporter: k0da | Owner:
Type: bug | Status: patch
Priority: normal | Milestone: 7.6.3
Component: Compiler | Version: 7.6.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: powerpc64
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+-----------------------------
Comment (by Austin Seipp <austin@…>):
In [changeset:"a4b1a43542b11d09dd3b603d82c5a0e99da67d74/ghc"]:
{{{
#!CommitTicketReference repository="ghc"
revision="a4b1a43542b11d09dd3b603d82c5a0e99da67d74"
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 at linux.vnet.ibm.com>
Signed-off-by: Austin Seipp <austin at well-typed.com>
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8134#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list