linux: Use long int for syscall return value

Message ID 20221129112443.2325486-1-lixing@loongson.cn
State Committed
Commit 36d423e2032e98305799071b831691fc4c06deea
Headers
Series linux: Use long int for syscall return value |

Commit Message

lixing Nov. 29, 2022, 11:24 a.m. UTC
  From: Xing Li <lixing@loongson.cn>

The linux syscall ABI returns long, so the generic syscall code for
linux should use long for the return value.

This fixes the truncation of the return value of the syscall function
when that does not fit into an int.
---
 sysdeps/unix/sysv/linux/syscall.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Adhemerval Zanella Nov. 30, 2022, 1:53 p.m. UTC | #1
On 29/11/22 08:24, XingLi wrote:
> From: Xing Li <lixing@loongson.cn>
> 
> The linux syscall ABI returns long, so the generic syscall code for
> linux should use long for the return value.
> 
> This fixes the truncation of the return value of the syscall function
> when that does not fit into an int.
> ---
>  sysdeps/unix/sysv/linux/syscall.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/sysdeps/unix/sysv/linux/syscall.c b/sysdeps/unix/sysv/linux/syscall.c
> index 7303ba7188..8cb0b66b1c 100644
> --- a/sysdeps/unix/sysv/linux/syscall.c
> +++ b/sysdeps/unix/sysv/linux/syscall.c
> @@ -33,7 +33,7 @@ syscall (long int number, ...)
>    long int a5 = va_arg (args, long int);
>    va_end (args);
>  
> -  int r = INTERNAL_SYSCALL_NCS_CALL (number, a0, a1, a2, a3, a4, a5);
> +  long int r = INTERNAL_SYSCALL_NCS_CALL (number, a0, a1, a2, a3, a4, a5);
>    if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (r)))
>      {
>        __set_errno (-r);

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
  

Patch

diff --git a/sysdeps/unix/sysv/linux/syscall.c b/sysdeps/unix/sysv/linux/syscall.c
index 7303ba7188..8cb0b66b1c 100644
--- a/sysdeps/unix/sysv/linux/syscall.c
+++ b/sysdeps/unix/sysv/linux/syscall.c
@@ -33,7 +33,7 @@  syscall (long int number, ...)
   long int a5 = va_arg (args, long int);
   va_end (args);
 
-  int r = INTERNAL_SYSCALL_NCS_CALL (number, a0, a1, a2, a3, a4, a5);
+  long int r = INTERNAL_SYSCALL_NCS_CALL (number, a0, a1, a2, a3, a4, a5);
   if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (r)))
     {
       __set_errno (-r);