!lheuhImcToQZYTQTuI:nixos.org

Nix on macOS

1153 Members
“There are still many issues with the Darwin platform but most of it is quite usable.” — http://yves.gnu-darwin.org183 Servers

Load older messages


SenderMessageTime
22 Dec 2025
@ihar.hrachyshka:matrix.orgIhar Hrachyshkawhich extensions? link?16:57:48
@reckenrode:matrix.orgRandy Eckenrodehttps://github.com/apple-oss-distributions/xnu/blob/f6217f891ac0bb64f3d375211650a4c1ff8ca1ea/libsyscall/wrappers/select-base.c#L16916:58:24
@reckenrode:matrix.orgRandy EckenrodeIt appears the check may be happening prior to the syscall?17:00:49
@ihar.hrachyshka:matrix.orgIhar Hrachyshkaimplies we would need our own libSystem or smth? :D17:01:09
@reckenrode:matrix.orgRandy EckenrodeDarwin doesn’t support alternate libcs. There is no guarantee of syscall compatibility between kernel versions.17:01:45
@reckenrode:matrix.orgRandy Eckenrode(You can try to do it. Go did. Someone got Musl working. If you encounter problems, you’ll be informed that you shouldn’t be doing that.)17:02:35
@ihar.hrachyshka:matrix.orgIhar Hrachyshkaguess we could ship a custom select in glib... with some kind of runtime check during build to avoid broken glib if they ever change the behavior...17:04:34
@reckenrode:matrix.orgRandy Eckenrodehttps://github.com/apple-oss-distributions/xnu/blob/f6217f891ac0bb64f3d375211650a4c1ff8ca1ea/bsd/sys/_types/_fd_def.h#L37_L4017:04:36
@reckenrode:matrix.orgRandy Eckenrode What happens if you define your own FD_SETSIZE? 17:04:52
@ihar.hrachyshka:matrix.orgIhar HrachyshkaI assume that since libSystem is as it was compiled with the 1024 limit, it won't do much. but let me check.17:05:51
@reckenrode:matrix.orgRandy EckenrodeThe checks are inline functions in the header.17:06:44
@reckenrode:matrix.orgRandy Eckenrode Or setting _DARWIN_UNLIMITED_SELECT with select? 17:07:08
@reckenrode:matrix.orgRandy Eckenrode * Or defining _DARWIN_UNLIMITED_SELECT when using select? 17:07:19
@reckenrode:matrix.orgRandy Eckenrode * Or defining _DARWIN_UNLIMITED_SELECT when using select or pselect? 17:07:42
@ihar.hrachyshka:matrix.orgIhar Hrachyshka

I copied half of that file, commented out include for select.h, removed the check and now it works

=== Test 2: pselect() with FD >= FD_SETSIZE (DANGEROUS!) ===
This test intentionally demonstrates undefined behavior
Attempting to add FD 1024 to fd_set (FD_SETSIZE=1024)...
WARNING: This will cause undefined behavior!
Before FD_SET: fd_set memory looks normal
fd_set bytes before: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Calling FD_SET(1024, &dangerous_set)...
fd_set bytes after:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Memory corruption may have occurred!
Attempting pselect() with corrupted fd_set...
pselect() unexpectedly succeeded with 0 ready FDs

I don't know if "works" means more than "it returned 0" but...

17:11:29
@reckenrode:matrix.orgRandy EckenrodeWhat if you just set that define before including any headers?17:13:44
@reckenrode:matrix.orgRandy Eckenrode With both select and pselect? 17:14:00
@reckenrode:matrix.orgRandy Eckenrodehttps://developer.apple.com/library/archive/releasenotes/Darwin/SymbolVariantsRelNotes/index.html17:16:13
@reckenrode:matrix.orgRandy Eckenrode

Setting the _DARWIN_UNLIMITED_SELECT macro will select the extension variants of select() and pselect(), which uses the $DARWIN_EXTSN suffix. The extended versions do not fail if the first argument is greater than FD_SETSIZE. This was the original BSD behavior.

17:17:01
@ihar.hrachyshka:matrix.orgIhar Hrachyshkayes defining just _DARWIN_UNLIMITED_SELECT works too.17:21:01
@ihar.hrachyshka:matrix.orgIhar HrachyshkaI will try to enable it for glib and see if it fixes qemu. that said... any reason to ever not have it set when running on darwin?17:29:02
@reckenrode:matrix.orgRandy EckenrodeNot sure. Probably not. The check is for POSIX compliance.17:31:49
@reckenrode:matrix.orgRandy Eckenrodehttps://devblogs.microsoft.com/oldnewthing/20221102-00/?p=10734317:34:21
@reckenrode:matrix.orgRandy Eckenrode * https://devblogs.microsoft.com/oldnewthing/20221102-00/? 17:34:30
@reckenrode:matrix.orgRandy Eckenrode * 17:34:35
@ihar.hrachyshka:matrix.orgIhar Hrachyshka

claims on how this works

Apple's libc has a pretty wild feature (guarded by _DARWIN_UNLIMITED_SELECT, on by default) which allows fds above FD_SETSIZE. It works by checking the address of the fd_set: if it's within the current thread's stack, then the call will fail, under the assumption that it's a stack-allocated fd_set.
But if the address is NOT within the current thread's stack, select() assumes you know what you're doing and will allow the call, trusting you have allocated sufficient memory for the high fds in the fd_set.

so there may be some condition to fulfill to make it work.

which I think is not satisfied for qemu main loop fds?

17:34:35
@reckenrode:matrix.orgRandy EckenrodeThat Old New Thing article provides a good explanation why things are the way they are.17:37:21
@ihar.hrachyshka:matrix.orgIhar Hrachyshka(taht said, in my test program I also define fds[] on stack and it "succeeds" so maybe claims are wrong)17:38:40
@reckenrode:matrix.orgRandy EckenrodeWhat about the emulation? How does it allocate the set?17:39:46
@ihar.hrachyshka:matrix.orgIhar Hrachyshka"emulation"? you mean g_poll macos implementation?17:40:35

Show newer messages


Back to Room ListRoom Version: 6