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.
20 lines
389 B
C
20 lines
389 B
C
#include "syscall.h"
|
|
#include <stdarg.h>
|
|
|
|
#undef syscall
|
|
|
|
long syscall(long n, ...)
|
|
{
|
|
va_list ap;
|
|
syscall_arg_t a,b,c,d,e,f;
|
|
va_start(ap, n);
|
|
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));
|
|
}
|