From 3ae9a40e28c7c4b06ac0f06837162bf4ac9d60d8 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 5 May 2004 06:56:03 +0000 Subject: 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. --- libc/sysdeps/linux/arm/syscall.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libc/sysdeps/linux/arm/syscall.c') diff --git a/libc/sysdeps/linux/arm/syscall.c b/libc/sysdeps/linux/arm/syscall.c index ec2907939..65afa03ae 100644 --- a/libc/sysdeps/linux/arm/syscall.c +++ b/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; -- cgit v1.2.3