#4993: getDirectoryContents goes into an infinite loop
---------------------------+------------------------------------------------
Reporter: bos | Owner:
Type: bug | Status: closed
Priority: normal | Component: libraries/directory
Version: 7.0.1 | Resolution: invalid
Keywords: | Testcase:
Blockedby: | Os: Linux
Blocking: | Architecture: x86
Failure: Runtime crash |
---------------------------+------------------------------------------------
Changes (by bos):
* status: new => closed
* resolution: => invalid
Comment:
I've got it figured out. It's not a GHC bug, and it's quite subtle.
So. On a 32-bit system, glibc relies on being able to do tricks like
%gs:-1234 to get negative offsets from the TLS (thread-local storage)
base. But in fact that's really gsbase + (big positive number), and glibc
relies on wraparound to get the resulting negative value. But the CPU only
does that iff the segment limit is a full 4G.
Under Xen, segments are clipped to protect the hypervisor, so we need a
version of glibc which spends a couple more instructions to compute the
negative offset without relying on segment wrapping.
This is done via an {{{ld.so.conf}}} entry:
{{{
hwcap 1 nosegneg
}}}
The above directs {{{ldconfig}}} and {{{ld.so}}} to use the Xen-friendly
version of glibc.
So this isn't really a GHC bug at all, but perhaps a boxgrinder bug. In
any case, the symptom is appearing in GHC :-(
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4993#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs