| /* SPDX-License-Identifier: GPL-2.0 */ | |
| .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 |