Is core.atomic not saving and restoring a register it should? Sent from my iPhone
On May 1, 2011, at 12:44 PM, David Simcha <[email protected]> wrote: > Update: The segfaults on Linux64 are also being caused by the low order bit > corruption bug. Whenever I look at the chain of pointer dereferences in GDB > by viewing the registers and disassembly on crash, the segfault is always > caused by dereferencing a pointer to some memory address that's clearly > illegal. (On x64 user mode addresses can't have their high order bits set, > and the addresses being dereferenced often do. See > http://en.wikipedia.org/wiki/X64#Virtual_address_space_details .) This wild > pointer is obtained by dereferencing another pointer whose low order bits are > always equal to TaskStatus.done. For example, if TaskStatus.done == 2, the > pointer might be something like 0x0000ABCD EF123402. If TaskStatus.done == > 1, it will be something like 0x0000ABCD EF123401. > > Therefore, somehow the low order bits of pointers are getting corrupted with > the value of TaskStatus.done in several places. This is strong evidence that > the underlying issue is a codegen bug or a bug in the ASM for the atomic ops, > not a concurrency bug. > _______________________________________________ > phobos mailing list > [email protected] > http://lists.puremagic.com/mailman/listinfo/phobos _______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
