From 8ba79833fb4d29d14db437864747d20d4137cf3a Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Thu, 28 Jul 2005 03:58:43 +0000 Subject: the errno settings was fixed but the return value was still being clobbered ... fix that too --- libc/sysdeps/linux/i386/__syscall_error.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libc/sysdeps/linux/i386/__syscall_error.c b/libc/sysdeps/linux/i386/__syscall_error.c index 507cf2ab7..133500cb6 100644 --- a/libc/sysdeps/linux/i386/__syscall_error.c +++ b/libc/sysdeps/linux/i386/__syscall_error.c @@ -36,10 +36,11 @@ * We have to stash the errno from %eax in a local stack var because * __set_errno will prob call a function thus clobbering %eax on us. */ -void attribute_hidden __syscall_error(void) +int attribute_hidden __syscall_error(void) { - register int eax asm("%eax"); - int stack = -eax; - __set_errno(stack); - eax = -1; + register int edx asm("%edx"); + asm("mov %eax, %edx"); + asm("negl %edx"); + __set_errno(edx); + return -1; } -- cgit v1.2.3