Browse Source

use syscall_arg_t for arguments in public syscall() function

on x32, this change allows programs which use syscall() with pointers
or 64-bit values as arguments to work correctly, i.e. without
truncation or incorrect sign extension. on all other supported archs,
syscall_arg_t is defined as long, so this change is a no-op.
rs-1.0
Rich Felker 12 years ago
parent
commit
5f95f965e9
  1. 14
      src/misc/syscall.c

14
src/misc/syscall.c

@ -6,14 +6,14 @@
long syscall(long n, ...)
{
va_list ap;
long a,b,c,d,e,f;
syscall_arg_t a,b,c,d,e,f;
va_start(ap, n);
a=va_arg(ap, long);
b=va_arg(ap, long);
c=va_arg(ap, long);
d=va_arg(ap, long);
e=va_arg(ap, long);
f=va_arg(ap, long);
a=va_arg(ap, syscall_arg_t);
b=va_arg(ap, syscall_arg_t);
c=va_arg(ap, syscall_arg_t);
d=va_arg(ap, syscall_arg_t);
e=va_arg(ap, syscall_arg_t);
f=va_arg(ap, syscall_arg_t);
va_end(ap);
return __syscall_ret(__syscall(n,a,b,c,d,e,f));
}

Loading…
Cancel
Save