Ver código fonte

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.
Rich Felker 11 anos atrás
pai
commit
5f95f965e9
1 arquivos alterados com 7 adições e 7 exclusões
  1. 7 7
      src/misc/syscall.c

+ 7 - 7
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));
 }