aboutsummaryrefslogtreecommitdiff
path: root/core/sys/linux/sys.odin
diff options
context:
space:
mode:
authorPucklaJ <jonaas.pucher000000@gmail.com>2024-04-28 11:56:19 +0200
committerPucklaJ <jonaas.pucher000000@gmail.com>2024-04-28 11:56:19 +0200
commitd1a205e2cfb44df31801201fc8818e02527b45dc (patch)
tree433af5e8faa1c8298372e563940ed0e1657fa76e /core/sys/linux/sys.odin
parent7f301790d0e1828082f8f314475a332084026dd5 (diff)
[sys/linux]: Remove clone syscall and call it directly in fork on arm64
Diffstat (limited to 'core/sys/linux/sys.odin')
-rw-r--r--core/sys/linux/sys.odin22
1 files changed, 2 insertions, 20 deletions
diff --git a/core/sys/linux/sys.odin b/core/sys/linux/sys.odin
index a9ec3c24e..57827d45c 100644
--- a/core/sys/linux/sys.odin
+++ b/core/sys/linux/sys.odin
@@ -730,31 +730,13 @@ getsockopt :: proc {
}
/*
- Creates a new ("child") process, in a manner similar to fork.
- Available since Linux 1.0? (<2.4)
-
- Note(flysand): this syscall is not documented, but the bottom 8 bits of flags
- are for exit signal
-*/
-clone :: proc "contextless" (flags: u64, stack: rawptr, parent_tid, child_tid: ^i32, tls: u64) -> (i64, Errno) {
- when ODIN_ARCH == .amd64 {
- ret := syscall(SYS_clone, flags, stack, parent_tid, child_tid, tls)
- return errno_unwrap(ret, i64)
- } else {
- ret := syscall(SYS_clone, flags, stack, parent_tid, tls, child_tid)
- return errno_unwrap(ret, i64)
- }
-}
-
-/*
Creates a copy of the running process.
Available since Linux 1.0.
*/
fork :: proc "contextless" () -> (Pid, Errno) {
when ODIN_ARCH == .arm64 {
- ret, err := clone(u64(Signal.SIGCHLD), nil, nil, nil, 0)
- if err != .NONE do return Pid(ret), err
- return Pid(ret), err
+ ret := syscall(SYS_clone, u64(Signal.SIGCHLD), cast(rawptr) nil, cast(rawptr) nil, cast(rawptr) nil, u64(0))
+ return errno_unwrap(ret, Pid)
} else {
ret := syscall(SYS_fork)
return errno_unwrap(ret, Pid)