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.
This commit is contained in:
parent
f162c064ab
commit
5f95f965e9
1 changed files with 7 additions and 7 deletions
|
|
@ -6,14 +6,14 @@
|
||||||
long syscall(long n, ...)
|
long syscall(long n, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
long a,b,c,d,e,f;
|
syscall_arg_t a,b,c,d,e,f;
|
||||||
va_start(ap, n);
|
va_start(ap, n);
|
||||||
a=va_arg(ap, long);
|
a=va_arg(ap, syscall_arg_t);
|
||||||
b=va_arg(ap, long);
|
b=va_arg(ap, syscall_arg_t);
|
||||||
c=va_arg(ap, long);
|
c=va_arg(ap, syscall_arg_t);
|
||||||
d=va_arg(ap, long);
|
d=va_arg(ap, syscall_arg_t);
|
||||||
e=va_arg(ap, long);
|
e=va_arg(ap, syscall_arg_t);
|
||||||
f=va_arg(ap, long);
|
f=va_arg(ap, syscall_arg_t);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return __syscall_ret(__syscall(n,a,b,c,d,e,f));
|
return __syscall_ret(__syscall(n,a,b,c,d,e,f));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue