On 13.08.2019 20:22, Jaromir Dolecek wrote: > I think the rationale was to make it possible to use for integer values and operations without cast. And make it clear it can hold arbitrary value, not necessarily pointer. Unfortunately intptr_t has different size in 32 vs 64 bit same as void *, which I didnt consider. > > Using (void *) would be bad IMO. If we want to change this, please follow the mac OS and use explicit integer 64bit types instead. This would of course change ABI so needs versioning. > Darwin uses void* for udata. The kevent structure is defined as: struct kevent { uintptr_t ident; /* identifier for this event */ short filter; /* filter for event */ u_short flags; /* action flags for kqueue */ u_int fflags; /* filter flag value */ intptr_t data; /* filter data value */ void *udata; /* opaque user data identifier */ }; https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/kqueue.2.html Imho int64_t make things actually worse. 1. Every pointer than can exceed 32bit intptr_t can just be allocated on a heap and we should pass a pointer to it. 2. int64 does not resolve any C++ issues with strict types. 3. ABI brekage void* does not prevent storing inside it numbers. void* (or char*, int*,...) is a typical userdata argument. It can be found in this form in other places such as set_panel_userptr(3), FTSENT.fts_pointer in fts(3) or tss_set(3). > Jaromir > > > >> Le 12 août 2019 à 14:51, Valery Ushakov <uwe%stderr.spb.ru@localhost> a écrit : >> >>> On Mon, Aug 12, 2019 at 03:43:56 +0000, maya%NetBSD.org@localhost wrote: >>> >>> So, this is when we changed to intptr_t. We also went through a >>> "int64_t udata" revision at some point, later. >>> >>> Module Name: syssrc >>> Committed By: jdolecek >>> Date: Wed Oct 2 19:09:37 UTC 2002 >>> >>> Modified Files: >>> syssrc/sys/sys [kqueue]: event.h >>> >>> Log Message: >>> make 'udata' field of struct kevent intptr_t (was 'void *') >> [...] >>> jdolecek, do you remember why you wanted to switch? >> >> Could it be related to 64-bit kernel vs. 32-bit userland (one of the >> mips ABIs?) >> >> -uwe
Attachment:
signature.asc
Description: OpenPGP digital signature