aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2024-07-08 15:54:24 +0200
committerGitHub <noreply@github.com>2024-07-08 15:54:24 +0200
commitec2234560ac55fe62d1fb4dbaccfcb529e019ab6 (patch)
tree6d1110d1c068b1b31c5e6bedcc9f907a4a412336 /core
parent8491e2491cd6fe4ea1b5205614f43f1a525cb77f (diff)
parentddad2011e241cf1e17ebe6f5bdac557493e3e357 (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.odin4
-rw-r--r--core/sys/darwin/xnu_system_call_numbers.odin4
-rw-r--r--core/sys/darwin/xnu_system_call_wrappers.odin4
-rw-r--r--core/sys/info/cpu_darwin_arm64.odin2
-rw-r--r--core/sys/unix/sysctl_darwin.odin63
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