/* * Generic syscall call. * Upon entry * %eax: system call number * %ebx: arg0 to system call * %ecx: arg.. * %edx: arg.. * %esi: arg.. * %edi: arg.. * We push these (to save them) load them up with the * values from the calling frame (not all will actually be valid) * and make the syscall. */ #include .text .type syscall, @function .globl syscall .align 4 syscall: push %eax push %ebx push %ecx push %edx push %esi push %edi mov 28(%esp),%eax mov 32(%esp),%ebx mov 36(%esp),%ecx mov 40(%esp),%edx mov 44(%esp),%esi mov 48(%esp),%edi int $0x80 cmpl $-129, %eax jb 1f negl %eax pushl %eax call __set_errno addl $4, %esp orl $-1, %eax 1: pop %edi pop %esi pop %edx pop %ecx pop %ebx pop %eax ret