Defined INLINE_SYSCALL_NOERR_NCS in mips/bits/syscalls.h
commitfa9cfbfcb70bd3736ec54eeeb4d0796aa4b9521f
authorVolodymyr Boyko <boyko.cxx@gmail.com>
Fri, 23 Nov 2018 00:19:55 +0000 (23 02:19 +0200)
committerWaldemar Brodkorb <wbx@openadk.org>
Fri, 23 Nov 2018 13:24:29 +0000 (23 14:24 +0100)
treed1c5c7599703f7024acf6769cdd378e1c0a58b77
parentcbfdb7abf4790bac4da52b2161a12bf8abd9f174
Defined INLINE_SYSCALL_NOERR_NCS in mips/bits/syscalls.h

On Linux/MIPS (O32 ABI) for system call we have two result registers - v0 and a3.
v0 contains actual syscall result on success or error number on fail, a3 set to 0/1
for indicating syscall success/fail. (if a3 == 1, v0 contains errno).
Now as we can see from definition of handle_sys (arch/mips/kernel/scall32-o32.S),
handler treats returned by syscall function (let's call "original") values in
range [-EMAXERRNO; 0[ as -errno, a3 is set to 1 and final returned (to userspace)
value is (-original).

INLINE_SYSCALL_NOERR_NCS defined in mips/bits/syscalls.h will handle
this behaviour.

Signed-off-by: Volodymyr Boyko <boyko.cxx@gmail.com>
libc/sysdeps/linux/mips/bits/syscalls.h