digitalmars.D - Losing 32 bits of a void pointer
- sumo (34/34) Feb 18 2014 I am using D & epoll on Fedora 3.12.10-300.fc20.x86_64 and am
- sumo (27/29) Feb 18 2014 For giggles the D kevent version on FreeBSD has no problems
- sumo (4/6) Mar 24 2014 For anyone who runs in to this, it is a because the epoll_event
- deadalnix (2/9) Mar 24 2014 Thumb up !
- Andrej Mitrovic (3/6) Mar 24 2014 I'm really surprised this wasn't caught sooner. I thought epoll was
- Paolo Invernizzi (5/13) Mar 24 2014 Here we are using epoll a lot, but right now we have custom
I am using D & epoll on Fedora 3.12.10-300.fc20.x86_64 and am running into a very odd issue. The data.ptr value of the epoll_event struct when it comes back from the epoll_wait call seems to have lost the top 32 bits. GDB session produced the following: Before epoll $3 = {events = 1, data = {ptr = 0x7ffff7ee2e80, fd = -135385472, u32 = 4159581824, u64 = 140737352969856}} (gdb) x/20g ev 0x7ffff7ee5ff0: 0x0000000000000001 0x00007ffff7ee2e80 0x7ffff7ee6000: 0x0000000000000000 0x0000000000000000 After epoll $4 = {events = 1, data = {ptr = 0xf7ee2e80, fd = -135385472, u32 = 4159581824, u64 = 4159581824}} 0x7fffffffe0e0: 0x0000000000000001 0x00000000f7ee2e80 0x7fffffffe0f0: 0x0000000000000001 0x0000000000000000 A similar gdb session with a simple C program produced the following: Before epoll $1 = {events = 1, data = {ptr = 0x7fbe184d9d00, fd = 407739648, u32 = 407739648, u64 = 140454428253440}} after epoll $2 = {ptr = 0x7fbe184d9d00, fd = 407739648, u32 = 407739648, u64 = 1404544282534 Source is at https://bitbucket.org/sumitraja/sioford/src/64ee53513876c1763a5e04b9611da64a5d96cced/source/devent/ev ntqueue.d?at=master with break points at eventqueue.d:238 and eventqueue.d:253 I can't figure out what exactly I am doing wrong here so any insights would be of great help. I have seen the issue on Debian with a 3.2 kernel as well. Happens with both "DMD64 D Compiler v2.064" and the Fedora repository version of "LDC - the LLVM D compiler (0.12.0)" (Release : 53.20130805git967b986.fc20). Thanks Sumit
Feb 18 2014
On Wednesday, 19 February 2014 at 02:39:39 UTC, sumo wrote:I am using D & epoll on Fedora 3.12.10-300.fc20.x86_64 and am running into a very odd issue.For giggles the D kevent version on FreeBSD has no problems (80079af00 is pointer to the event object): Before kevent: 0x800799f40: 0x0000000000000007 0x000000000005ffff 0x800799f50: 0x0000000000000000 0x000000080079af00 <--- 0x800799f60: 0x00000000004fdca0 0x0000000000000000 0x800799f70: 0x000000080079af80 0x0000000000000000 0x800799f80: 0x00000000004fcc60 0x0000000000000000 0x800799f90: 0x0000000000000000 0x0000000000000000 0x800799fa0: 0x0000000000508ae0 0x0000000000000000 0x800799fb0: 0x00000000d2040200 0x0000000000000000 0x800799fc0: 0x00000000005141a0 0x0000000000000000 0x800799fd0: 0x0000000800798fc0 0x0000000801817070 After kevent: 0x7fffffffd778: 0x0000000000000007 0x000000000000ffff 0x7fffffffd788: 0x0000000000000001 0x000000080079af00 <--- 0x7fffffffd798: 0x0000000800798f40 0x00007fffffffd7c0 0x7fffffffd7a8: 0x000000000041deb0 0x000000080079af80 0x7fffffffd7b8: 0x0000000800798f40 0x00007fffffffd850 0x7fffffffd7c8: 0x00000000004222a3 0x0000000000405990 0x7fffffffd7d8: 0x00007fffffffd82f 0x0000000800798f40 0x7fffffffd7e8: 0x0000000000000000 0x0000000000422440 0x7fffffffd7f8: 0x000000080079af80 0x0000000000000000 0x7fffffffd808: 0x0000000000422380 0x0000000001807000 I couldn't get gdb to print the actual structure - <incomplete type>
Feb 18 2014
On Wednesday, 19 February 2014 at 02:39:39 UTC, sumo wrote:I am using D & epoll on Fedora 3.12.10-300.fc20.x86_64 and am running into a very odd issue.For anyone who runs in to this, it is a because the epoll_event struct is packed on x86_64 bits processors. Have created a pull for druntime.
Mar 24 2014
On Monday, 24 March 2014 at 20:45:13 UTC, sumo wrote:On Wednesday, 19 February 2014 at 02:39:39 UTC, sumo wrote:Thumb up !I am using D & epoll on Fedora 3.12.10-300.fc20.x86_64 and am running into a very odd issue.For anyone who runs in to this, it is a because the epoll_event struct is packed on x86_64 bits processors. Have created a pull for druntime.
Mar 24 2014
On 3/24/14, sumo <sumitraja gmail.com> wrote:For anyone who runs in to this, it is a because the epoll_event struct is packed on x86_64 bits processors. Have created a pull for druntime.I'm really surprised this wasn't caught sooner. I thought epoll was supposed to be popular. Maybe not so much in the context of D?
Mar 24 2014
On Monday, 24 March 2014 at 23:16:38 UTC, Andrej Mitrovic wrote:On 3/24/14, sumo <sumitraja gmail.com> wrote:Here we are using epoll a lot, but right now we have custom declarations for external API. --- PaoloFor anyone who runs in to this, it is a because the epoll_event struct is packed on x86_64 bits processors. Have created a pull for druntime.I'm really surprised this wasn't caught sooner. I thought epoll was supposed to be popular. Maybe not so much in the context of D?
Mar 24 2014