From 833157ecc9a69be8e9a452f60b9de1896628f3b7 Mon Sep 17 00:00:00 2001 From: flysand7 Date: Wed, 18 Sep 2024 07:52:22 +1100 Subject: [PATCH 1/3] [sys/linux]: Fix the order of arguments for ptrace cont, singlestep and syscall --- core/sys/linux/sys.odin | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/core/sys/linux/sys.odin b/core/sys/linux/sys.odin index 5ee07a93d41..05b40c06a5b 100644 --- a/core/sys/linux/sys.odin +++ b/core/sys/linux/sys.odin @@ -1443,8 +1443,9 @@ ptrace_traceme :: proc "contextless" (rq: PTrace_Traceme_Type) -> (Errno) { } ptrace_peek :: proc "contextless" (rq: PTrace_Peek_Type, pid: Pid, addr: uintptr) -> (uint, Errno) { - ret := syscall(SYS_ptrace, rq, pid, addr) - return errno_unwrap(ret, uint) + res: uint = --- + ret := syscall(SYS_ptrace, rq, pid, addr, &res) + return res, Errno(-ret) } ptrace_poke :: proc "contextless" (rq: PTrace_Poke_Type, pid: Pid, addr: uintptr, data: uint) -> (Errno) { @@ -1493,12 +1494,12 @@ ptrace_setregset :: proc "contextless" (rq: PTrace_Setregset_Type, pid: Pid, not } ptrace_getsiginfo :: proc "contextless" (rq: PTrace_Getsiginfo_Type, pid: Pid, si: ^Sig_Info) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, si) + ret := syscall(SYS_ptrace, rq, pid, si, rawptr(nil)) return Errno(-ret) } ptrace_peeksiginfo :: proc "contextless" (rq: PTrace_Peeksiginfo_Type, pid: Pid, si: ^Sig_Info) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, si) + ret := syscall(SYS_ptrace, rq, pid, si, rawptr(nil)) return Errno(-ret) } @@ -1518,52 +1519,52 @@ ptrace_setoptions :: proc "contextless" (rq: PTrace_Setoptions_Type, pid: Pid, o } ptrace_geteventmsg :: proc "contextless" (rq: PTrace_Geteventmsg_Type, pid: Pid, msg: ^uint) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, msg) + ret := syscall(SYS_ptrace, rq, pid, msg, rawptr(nil)) return Errno(-ret) } ptrace_cont :: proc "contextless" (rq: PTrace_Cont_Type, pid: Pid, sig: Signal) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, sig) + ret := syscall(SYS_ptrace, rq, pid, rawptr(nil), sig) return Errno(-ret) } ptrace_singlestep :: proc "contextless" (rq: PTrace_Singlestep_Type, pid: Pid, sig: Signal) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, sig) + ret := syscall(SYS_ptrace, rq, pid, rawptr(nil), sig) return Errno(-ret) } ptrace_syscall :: proc "contextless" (rq: PTrace_Syscall_Type, pid: Pid, sig: Signal) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, sig) + ret := syscall(SYS_ptrace, rq, pid, rawptr(nil), sig) return Errno(-ret) } ptrace_sysemu :: proc "contextless" (rq: PTrace_Sysemu_Type, pid: Pid, sig: Signal) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, sig) + ret := syscall(SYS_ptrace, rq, pid, rawptr(nil), sig) return Errno(-ret) } ptrace_sysemu_singlestep :: proc "contextless" (rq: PTrace_Sysemu_Singlestep_Type, pid: Pid, sig: Signal) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, sig) + ret := syscall(SYS_ptrace, rq, pid, rawptr(nil), sig) return Errno(-ret) } ptrace_listen :: proc "contextless" (rq: PTrace_Listen_Type, pid: Pid) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid) + ret := syscall(SYS_ptrace, rq, pid, 0, rawptr(nil)) return Errno(-ret) } ptrace_interrupt :: proc "contextless" (rq: PTrace_Interrupt_Type, pid: Pid) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid) + ret := syscall(SYS_ptrace, rq, pid, 0, rawptr(nil)) return Errno(-ret) } ptrace_attach :: proc "contextless" (rq: PTrace_Attach_Type, pid: Pid) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid) + ret := syscall(SYS_ptrace, rq, pid, 0, rawptr(nil)) return Errno(-ret) } ptrace_seize :: proc "contextless" (rq: PTrace_Seize_Type, pid: Pid, opt: PTrace_Options) -> (Errno) { - ret := syscall(SYS_ptrace, rq, pid, 0, transmute(u32) opt) + ret := syscall(SYS_ptrace, rq, pid, 0, transmute(u32) opt, rawptr(nil)) return Errno(-ret) } From 9973e0255c5397ff98fa044b1e5ce6a69ab0aa56 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Tue, 17 Sep 2024 23:19:20 +0200 Subject: [PATCH 2/3] fix error interrupt error check --- tests/core/sys/posix/structs.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/sys/posix/structs.odin b/tests/core/sys/posix/structs.odin index 95b6258f4e9..1bc1af70f30 100644 --- a/tests/core/sys/posix/structs.odin +++ b/tests/core/sys/posix/structs.odin @@ -63,7 +63,7 @@ execute_struct_checks :: proc(t: ^testing.T) { waiting: for { status: i32 wpid := posix.waitpid(pid, &status, {}) - if status == posix.EINTR { + if status == -1 && posix.errno() == .EINTR { continue } if !testing.expectf(t, wpid != -1, "waitpid() failure: %v", posix.strerror()) { From 80cc2f541628f91f7635272ec87147bd90509a96 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Tue, 17 Sep 2024 23:28:29 +0200 Subject: [PATCH 3/3] fix it more --- tests/core/sys/posix/structs.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/sys/posix/structs.odin b/tests/core/sys/posix/structs.odin index 1bc1af70f30..a4e9c8d9024 100644 --- a/tests/core/sys/posix/structs.odin +++ b/tests/core/sys/posix/structs.odin @@ -63,7 +63,7 @@ execute_struct_checks :: proc(t: ^testing.T) { waiting: for { status: i32 wpid := posix.waitpid(pid, &status, {}) - if status == -1 && posix.errno() == .EINTR { + if wpid == -1 && posix.errno() == .EINTR { continue } if !testing.expectf(t, wpid != -1, "waitpid() failure: %v", posix.strerror()) {