From 26d107ce64abae9a80755405e2539b40c65e09d2 Mon Sep 17 00:00:00 2001 From: Ian Simonson Date: Wed, 13 Mar 2024 08:06:57 -0700 Subject: [PATCH 1/5] Add getrusage syscall for mac/darwin The syscall number existed but the wrapper for calling it did not. Also adds the RUsage struct to receive the data. Naming is kept the same as in sys/linux --- core/sys/darwin/darwin.odin | 24 +++++++++++++++++++ core/sys/darwin/xnu_system_call_wrappers.odin | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/core/sys/darwin/darwin.odin b/core/sys/darwin/darwin.odin index 0b3efb1f5..8009b72bd 100644 --- a/core/sys/darwin/darwin.odin +++ b/core/sys/darwin/darwin.odin @@ -2,3 +2,27 @@ package darwin Bool :: b8 + +timespec :: struct { + seconds: int, + microseconds: int, +} + +RUsage :: struct { + utime: timespec, + stime: timespec, + maxrss_word: int, + ixrss_word: int, + idrss_word: int, + isrss_word: int, + minflt_word: int, + majflt_word: int, + nswap_word: int, + inblock_word: int, + oublock_word: int, + msgsnd_word: int, + msgrcv_word: int, + nsignals_word: int, + nvcsw_word: int, + nivcsw_word: int, +} diff --git a/core/sys/darwin/xnu_system_call_wrappers.odin b/core/sys/darwin/xnu_system_call_wrappers.odin index 3b051ac19..74a2dbd2e 100644 --- a/core/sys/darwin/xnu_system_call_wrappers.odin +++ b/core/sys/darwin/xnu_system_call_wrappers.odin @@ -417,3 +417,7 @@ syscall_chdir :: #force_inline proc "contextless" (path: cstring) -> c.int { syscall_fchdir :: #force_inline proc "contextless" (fd: c.int, path: cstring) -> c.int { return cast(c.int)intrinsics.syscall(unix_offset_syscall(.getentropy), uintptr(fd), transmute(uintptr)path) } + +syscall_getrusage :: #force_inline proc "contextless" (who: c.int, rusage: ^RUsage) -> c.int { + return cast(c.int) intrinsics.syscall(unix_offset_syscall(.getrusage), uintptr(who), uintptr(rusage)) +} From 8917a7ef886a6d5e21feb0e78217b321fa2b58cd Mon Sep 17 00:00:00 2001 From: Ian Simonson Date: Wed, 13 Mar 2024 14:51:17 -0700 Subject: [PATCH 2/5] Make RUsage more inline with macos man page Swap to tabs to adhere to the Odin Core library standard and also rename the rusage fields to match the actual definitions from the macos bsd man pages --- core/sys/darwin/darwin.odin | 39 +++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/core/sys/darwin/darwin.odin b/core/sys/darwin/darwin.odin index 8009b72bd..ed4783816 100644 --- a/core/sys/darwin/darwin.odin +++ b/core/sys/darwin/darwin.odin @@ -3,26 +3,27 @@ package darwin Bool :: b8 -timespec :: struct { - seconds: int, - microseconds: int, +timeval :: struct { + tv_sec: int, + tv_usec: int, } RUsage :: struct { - utime: timespec, - stime: timespec, - maxrss_word: int, - ixrss_word: int, - idrss_word: int, - isrss_word: int, - minflt_word: int, - majflt_word: int, - nswap_word: int, - inblock_word: int, - oublock_word: int, - msgsnd_word: int, - msgrcv_word: int, - nsignals_word: int, - nvcsw_word: int, - nivcsw_word: int, + ru_utime: timeval, + ru_stime: timeval, + ru_maxrss: int, + ru_ixrss: int, + ru_idrss: int, + ru_isrss: int, + ru_minflt: int, + ru_majflt: int, + ru_nswap: int, + ru_inblock: int, + ru_oublock: int, + ru_msgsnd: int, + ru_msgrcv: int, + ru_nsignals: int, + ru_nvcsw: int, + ru_nivcsw: int, } + From 34c4389d754e52583c0bb767f12602db531bc488 Mon Sep 17 00:00:00 2001 From: Ian Simonson Date: Wed, 13 Mar 2024 14:58:56 -0700 Subject: [PATCH 3/5] No need for timeval definition It already existed so lets just use that rather than redeclaring it --- core/sys/darwin/darwin.odin | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/sys/darwin/darwin.odin b/core/sys/darwin/darwin.odin index ed4783816..2af7c47c6 100644 --- a/core/sys/darwin/darwin.odin +++ b/core/sys/darwin/darwin.odin @@ -3,11 +3,6 @@ package darwin Bool :: b8 -timeval :: struct { - tv_sec: int, - tv_usec: int, -} - RUsage :: struct { ru_utime: timeval, ru_stime: timeval, From c7bec2962e901c1790be8f677a3739735197c2cb Mon Sep 17 00:00:00 2001 From: Ian Simonson Date: Thu, 14 Mar 2024 07:21:26 -0700 Subject: [PATCH 4/5] Fix __darwin_suseconds_t definition __darwin_suseconds_t is defined as long which on macos 64 bit systems is equivalent to 8 bytes. It is equivalent to Odin int type _not_ i32 --- core/sys/darwin/xnu_system_call_wrappers.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sys/darwin/xnu_system_call_wrappers.odin b/core/sys/darwin/xnu_system_call_wrappers.odin index 74a2dbd2e..b2ddc7550 100644 --- a/core/sys/darwin/xnu_system_call_wrappers.odin +++ b/core/sys/darwin/xnu_system_call_wrappers.odin @@ -125,7 +125,7 @@ DARWIN_MAXCOMLEN :: 16 /*--==========================================================================--*/ __darwin_ino64_t :: u64 -__darwin_time_t :: u32 +__darwin_time_t :: int __darwin_dev_t :: i32 __darwin_mode_t :: u16 __darwin_off_t :: i64 From 835effdef1bbe2ce0b653194357fa76fa64b12d0 Mon Sep 17 00:00:00 2001 From: Ian Simonson Date: Thu, 14 Mar 2024 09:36:57 -0700 Subject: [PATCH 5/5] Use c.long rather than int --- core/sys/darwin/darwin.odin | 30 ++++++++++--------- core/sys/darwin/xnu_system_call_wrappers.odin | 2 +- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/core/sys/darwin/darwin.odin b/core/sys/darwin/darwin.odin index 2af7c47c6..a3e07277c 100644 --- a/core/sys/darwin/darwin.odin +++ b/core/sys/darwin/darwin.odin @@ -1,24 +1,26 @@ //+build darwin package darwin +import "core:c" + Bool :: b8 RUsage :: struct { ru_utime: timeval, ru_stime: timeval, - ru_maxrss: int, - ru_ixrss: int, - ru_idrss: int, - ru_isrss: int, - ru_minflt: int, - ru_majflt: int, - ru_nswap: int, - ru_inblock: int, - ru_oublock: int, - ru_msgsnd: int, - ru_msgrcv: int, - ru_nsignals: int, - ru_nvcsw: int, - ru_nivcsw: int, + ru_maxrss: c.long, + ru_ixrss: c.long, + ru_idrss: c.long, + ru_isrss: c.long, + ru_minflt: c.long, + ru_majflt: c.long, + ru_nswap: c.long, + ru_inblock: c.long, + ru_oublock: c.long, + ru_msgsnd: c.long, + ru_msgrcv: c.long, + ru_nsignals: c.long, + ru_nvcsw: c.long, + ru_nivcsw: c.long, } diff --git a/core/sys/darwin/xnu_system_call_wrappers.odin b/core/sys/darwin/xnu_system_call_wrappers.odin index b2ddc7550..8a09d4418 100644 --- a/core/sys/darwin/xnu_system_call_wrappers.odin +++ b/core/sys/darwin/xnu_system_call_wrappers.odin @@ -125,7 +125,7 @@ DARWIN_MAXCOMLEN :: 16 /*--==========================================================================--*/ __darwin_ino64_t :: u64 -__darwin_time_t :: int +__darwin_time_t :: c.long __darwin_dev_t :: i32 __darwin_mode_t :: u16 __darwin_off_t :: i64