On 5/1/2011 12:44 PM, David Simcha 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.
Add asserts on that pointer value going out of range, and keep working backwards until the point where the value goes wrong is discovered.
_______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
