fix(os_linux): call ppoll instead on arm64

This commit is contained in:
Rickard Andersson
2023-06-14 23:26:43 +03:00
parent 091c515fea
commit d6540d9077
2 changed files with 17 additions and 4 deletions

View File

@@ -440,9 +440,7 @@ pollfd :: struct {
nfds_t :: distinct c.uint
sigset_t :: struct {
__val: [16]c.ulong,
}
sigset_t :: distinct u64
foreign libc {
@(link_name="__errno_location") __errno_location :: proc() -> ^int ---

View File

@@ -2079,7 +2079,22 @@ sys_select :: proc "contextless" (nfds: int, readfds, writefds, exceptfds: rawpt
}
sys_poll :: proc "contextless" (fds: rawptr, nfds: uint, timeout: int) -> int {
return int(intrinsics.syscall(SYS_poll, uintptr(fds), uintptr(nfds), uintptr(timeout)))
// NOTE: specialcased here because `arm64` does not have `poll`
when ODIN_ARCH != .arm64 {
// redefined because we can't depend on the `unix` module here
timespec :: struct {
tv_sec: i64,
tv_nsec: i64,
}
seconds := i64(timeout / 1_000)
nanoseconds := i64((timeout % 1000) * 1_000_000)
timeout_spec := timespec{seconds, nanoseconds}
return int(intrinsics.syscall(SYS_ppoll, uintptr(fds), uintptr(nfds), uintptr(&timeout_spec), uintptr(0), uintptr(8)))
} else {
return int(intrinsics.syscall(SYS_poll, uintptr(fds), uintptr(nfds), uintptr(timeout)))
}
}
sys_ppoll :: proc "contextless" (fds: rawptr, nfds: uint, timeout: rawptr, sigmask: rawptr, sigsetsize: uint) -> int {