summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/sysdeps/linux/i386/syscall.S17
1 files changed, 11 insertions, 6 deletions
diff --git a/libc/sysdeps/linux/i386/syscall.S b/libc/sysdeps/linux/i386/syscall.S
index 7c49625b2..00e52c300 100644
--- a/libc/sysdeps/linux/i386/syscall.S
+++ b/libc/sysdeps/linux/i386/syscall.S
@@ -25,20 +25,25 @@
.type syscall,%function
.align 4
syscall:
+ pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
- movl 36(%esp),%edi /* Load the 5 syscall argument registers */
- movl 32(%esp),%esi
- movl 28(%esp),%edx
- movl 24(%esp),%ecx
- movl 20(%esp),%ebx
- movl 16(%esp),%eax /* Load syscall number into %eax. */
+
+ movl 44(%esp),%ebp /* Load the 6 syscall argument registers */
+ movl 40(%esp),%edi
+ movl 36(%esp),%esi
+ movl 32(%esp),%edx
+ movl 28(%esp),%ecx
+ movl 24(%esp),%ebx
+ movl 20(%esp),%eax /* Load syscall number into %eax. */
int $0x80
popl %ebx
popl %esi
popl %edi
+ popl %ebp
+
cmpl $-4095,%eax
jae __error
ret /* Return to caller. */