From 9be9f0bb2c6761a424d9e151594c61af29163be7 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 28 Jan 2024 22:05:13 +0000 Subject: [PATCH] Remove `core:os` dependency for `runtime.os_write` on linux --- base/runtime/os_specific_any.odin | 1 + base/runtime/os_specific_linux.odin | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 base/runtime/os_specific_linux.odin diff --git a/base/runtime/os_specific_any.odin b/base/runtime/os_specific_any.odin index 7dc41c3c9..c36f43e21 100644 --- a/base/runtime/os_specific_any.odin +++ b/base/runtime/os_specific_any.odin @@ -1,4 +1,5 @@ //+build !darwin +//+build !linux //+build !freestanding //+build !js //+build !wasi diff --git a/base/runtime/os_specific_linux.odin b/base/runtime/os_specific_linux.odin new file mode 100644 index 000000000..9116bb32e --- /dev/null +++ b/base/runtime/os_specific_linux.odin @@ -0,0 +1,22 @@ +//+private +package runtime + +import "base:intrinsics" + +_os_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) { + when ODIN_ARCH == .amd64 { + SYS_write :: uintptr(1) + } else when ODIN_ARCH == .arm64 { + SYS_write :: uintptr(64) + } else when ODIN_ARCH == .i386 { + SYS_write :: uintptr(4) + } else when ODIN_ARCH == .arm32 { + SYS_write :: uintptr(4) + } + + ret := int(intrinsics.syscall(SYS_write, uintptr(stderr), uintptr(raw_data(data)), uintptr(len(data)))) + if ret < 0 && ret > -4096 { + return 0, _OS_Errno(-ret) + } + return ret, 0 +}