1/* SPDX-License-Identifier: GPL-2.0 */ 2.global sys32_helper 3sys32_helper: 4 /* Args: syscall_args_32*, function pointer */ 5 pushl %ebp 6 pushl %ebx 7 pushl %esi 8 pushl %edi 9 movl 5*4(%esp), %eax /* pointer to args struct */ 10 11 movl 1*4(%eax), %ebx 12 movl 2*4(%eax), %ecx 13 movl 3*4(%eax), %edx 14 movl 4*4(%eax), %esi 15 movl 5*4(%eax), %edi 16 movl 6*4(%eax), %ebp 17 movl 0*4(%eax), %eax 18 19 call *(6*4)(%esp) /* Do the syscall */ 20 21 /* Now we need to recover without losing any reg values */ 22 pushl %eax 23 movl 6*4(%esp), %eax 24 popl 0*4(%eax) 25 movl %ebx, 1*4(%eax) 26 movl %ecx, 2*4(%eax) 27 movl %edx, 3*4(%eax) 28 movl %esi, 4*4(%eax) 29 movl %edi, 5*4(%eax) 30 movl %ebp, 6*4(%eax) 31 32 popl %edi 33 popl %esi 34 popl %ebx 35 popl %ebp 36 ret 37 38 .type sys32_helper, @function 39 .size sys32_helper, .-sys32_helper 40 41.global int80_and_ret 42int80_and_ret: 43 int $0x80 44 ret 45 46 .type int80_and_ret, @function 47 .size int80_and_ret, .-int80_and_ret 48