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 20 years ago
parent
commit
3ae9a40e28
1 changed files with 2 additions and 1 deletions
  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;