1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- .global sys32_helper
- sys32_helper:
- /* Args: syscall_args_32*, function pointer */
- pushl %ebp
- pushl %ebx
- pushl %esi
- pushl %edi
- movl 5*4(%esp), %eax /* pointer to args struct */
- movl 1*4(%eax), %ebx
- movl 2*4(%eax), %ecx
- movl 3*4(%eax), %edx
- movl 4*4(%eax), %esi
- movl 5*4(%eax), %edi
- movl 6*4(%eax), %ebp
- movl 0*4(%eax), %eax
- call *(6*4)(%esp) /* Do the syscall */
- /* Now we need to recover without losing any reg values */
- pushl %eax
- movl 6*4(%esp), %eax
- popl 0*4(%eax)
- movl %ebx, 1*4(%eax)
- movl %ecx, 2*4(%eax)
- movl %edx, 3*4(%eax)
- movl %esi, 4*4(%eax)
- movl %edi, 5*4(%eax)
- movl %ebp, 6*4(%eax)
- popl %edi
- popl %esi
- popl %ebx
- popl %ebp
- ret
- .type sys32_helper, @function
- .size sys32_helper, .-sys32_helper
- .global int80_and_ret
- int80_and_ret:
- int $0x80
- ret
- .type int80_and_ret, @function
- .size int80_and_ret, .-int80_and_ret
|