Browse Source

Jeroen Dobbelaere writes:

Because variables are linked to fixed registers, there is a problem in :
     (*__errno_location())=(-_r0);

As __errno_location() uses r0 to return the address of the errno location,
the negated address will be assigned instead of the error code.

Attached patch will resolve this.
Eric Andersen 21 năm trước cách đây
mục cha
commit
3ae9a40e28
1 tập tin đã thay đổi với 2 bổ sung1 xóa
  1. 2 1
      libc/sysdeps/linux/arm/syscall.c

+ 2 - 1
libc/sysdeps/linux/arm/syscall.c

@@ -41,7 +41,8 @@ long syscall(long sysnum, long a, long b, long c, long d, long e, long f)
 	      "r"(_r6)
 	    : "memory");
     if(_r0 >=(unsigned long) -4095) {
-	(*__errno_location())=(-_r0);
+	long err = _r0;
+	(*__errno_location())=(-err);
 	_r0=(unsigned long) -1;
     }
     return (long) _r0;