diff options
-rw-r--r-- | libc/sysdeps/linux/i386/__syscall_error.c | 11 |
1 files 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; } |