diff options
| author | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2024-07-08 15:54:24 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-08 15:54:24 +0200 |
| commit | ec2234560ac55fe62d1fb4dbaccfcb529e019ab6 (patch) | |
| tree | 6d1110d1c068b1b31c5e6bedcc9f907a4a412336 /core | |
| parent | 8491e2491cd6fe4ea1b5205614f43f1a525cb77f (diff) | |
| parent | ddad2011e241cf1e17ebe6f5bdac557493e3e357 (diff) | |
Merge pull request #3889 from laytan/darwin-remove-implicit-syscall-usage
darwin: remove syscall usage (without -no-crt) to comply to Apple guidelines
Diffstat (limited to 'core')
| -rw-r--r-- | core/sys/darwin/xnu_system_call_helpers.odin | 4 | ||||
| -rw-r--r-- | core/sys/darwin/xnu_system_call_numbers.odin | 4 | ||||
| -rw-r--r-- | core/sys/darwin/xnu_system_call_wrappers.odin | 4 | ||||
| -rw-r--r-- | core/sys/info/cpu_darwin_arm64.odin | 2 | ||||
| -rw-r--r-- | core/sys/unix/sysctl_darwin.odin | 63 |
5 files changed, 60 insertions, 17 deletions
diff --git a/core/sys/darwin/xnu_system_call_helpers.odin b/core/sys/darwin/xnu_system_call_helpers.odin index 753f7f058..7fa59bfe0 100644 --- a/core/sys/darwin/xnu_system_call_helpers.odin +++ b/core/sys/darwin/xnu_system_call_helpers.odin @@ -3,6 +3,10 @@ package darwin import "core:c" import "base:runtime" +// IMPORTANT NOTE: direct syscall usage is not allowed by Apple's review process of apps and should +// be entirely avoided in the builtin Odin collections, these are here for users if they don't +// care about the Apple review process. + // this package uses the sys prefix for the proc names to indicate that these aren't native syscalls but directly call such sys_write_string :: proc (fd: c.int, message: string) -> bool { return syscall_write(fd, raw_data(message), cast(u64)len(message)) diff --git a/core/sys/darwin/xnu_system_call_numbers.odin b/core/sys/darwin/xnu_system_call_numbers.odin index 39d902c79..00ab75a15 100644 --- a/core/sys/darwin/xnu_system_call_numbers.odin +++ b/core/sys/darwin/xnu_system_call_numbers.odin @@ -1,5 +1,9 @@ package darwin +// IMPORTANT NOTE: direct syscall usage is not allowed by Apple's review process of apps and should +// be entirely avoided in the builtin Odin collections, these are here for users if they don't +// care about the Apple review process. + unix_offset_syscall :: proc "contextless" (number: System_Call_Number) -> uintptr { return uintptr(number) + uintptr(0x2000000) } diff --git a/core/sys/darwin/xnu_system_call_wrappers.odin b/core/sys/darwin/xnu_system_call_wrappers.odin index 7100da4f1..d289ee7c1 100644 --- a/core/sys/darwin/xnu_system_call_wrappers.odin +++ b/core/sys/darwin/xnu_system_call_wrappers.odin @@ -3,6 +3,10 @@ package darwin import "core:c" import "base:intrinsics" +// IMPORTANT NOTE: direct syscall usage is not allowed by Apple's review process of apps and should +// be entirely avoided in the builtin Odin collections, these are here for users if they don't +// care about the Apple review process. + /* flock */ LOCK_SH :: 1 /* shared lock */ LOCK_EX :: 2 /* exclusive lock */ diff --git a/core/sys/info/cpu_darwin_arm64.odin b/core/sys/info/cpu_darwin_arm64.odin index 336334bc0..ffa60d1cb 100644 --- a/core/sys/info/cpu_darwin_arm64.odin +++ b/core/sys/info/cpu_darwin_arm64.odin @@ -7,7 +7,7 @@ init_cpu_features :: proc "contextless" () { @(static) features: CPU_Features defer cpu_features = features - try_set :: proc "contextless" (name: string, feature: CPU_Feature) -> (ok: bool) { + try_set :: proc "contextless" (name: cstring, feature: CPU_Feature) -> (ok: bool) { support: b32 if ok = unix.sysctlbyname(name, &support); ok && support { features += { feature } diff --git a/core/sys/unix/sysctl_darwin.odin b/core/sys/unix/sysctl_darwin.odin index 6417961e5..14d3c113a 100644 --- a/core/sys/unix/sysctl_darwin.odin +++ b/core/sys/unix/sysctl_darwin.odin @@ -3,29 +3,60 @@ package unix import "base:intrinsics" -import "core:c" import "core:sys/darwin" _ :: darwin sysctl :: proc "contextless" (mib: []i32, val: ^$T) -> (ok: bool) { - result_size := c.size_t(size_of(T)) - res := darwin.syscall_sysctl( - raw_data(mib), len(mib), - val, &result_size, - nil, 0, - ) - return res == 0 + result_size := uint(size_of(T)) + when ODIN_NO_CRT { + res := darwin.syscall_sysctl( + raw_data(mib), len(mib), + val, &result_size, + nil, 0, + ) + return res == 0 + } else { + foreign { + @(link_name="sysctl") _sysctl :: proc( + name: [^]i32, namelen: u32, + oldp: rawptr, oldlenp: ^uint, + newp: rawptr, newlen: uint, + ) -> i32 --- + } + res := _sysctl( + raw_data(mib), u32(len(mib)), + val, &result_size, + nil, 0, + ) + return res == 0 + } } -sysctlbyname :: proc "contextless" (name: string, val: ^$T) -> (ok: bool) { - result_size := c.size_t(size_of(T)) - res := darwin.syscall_sysctlbyname( - name, - val, &result_size, - nil, 0, - ) - return res == 0 +sysctlbyname :: proc "contextless" (name: cstring, val: ^$T) -> (ok: bool) { + result_size := uint(size_of(T)) + when ODIN_NO_CRT { + res := darwin.syscall_sysctlbyname( + string(name), + val, &result_size, + nil, 0, + ) + return res == 0 + } else { + foreign { + @(link_name="sysctlbyname") _sysctlbyname :: proc( + name: cstring, + oldp: rawptr, oldlenp: ^uint, + newp: rawptr, newlen: uint, + ) -> i32 --- + } + res := _sysctlbyname( + name, + val, &result_size, + nil, 0, + ) + return res == 0 + } } // See sysctl.h for darwin for details |