diff options
| author | PucklaJ <jonaas.pucher000000@gmail.com> | 2024-04-28 11:56:19 +0200 |
|---|---|---|
| committer | PucklaJ <jonaas.pucher000000@gmail.com> | 2024-04-28 11:56:19 +0200 |
| commit | d1a205e2cfb44df31801201fc8818e02527b45dc (patch) | |
| tree | 433af5e8faa1c8298372e563940ed0e1657fa76e /core/sys | |
| parent | 7f301790d0e1828082f8f314475a332084026dd5 (diff) | |
[sys/linux]: Remove clone syscall and call it directly in fork on arm64
Diffstat (limited to 'core/sys')
| -rw-r--r-- | core/sys/linux/sys.odin | 22 |
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) |