50 lines · plain
1/* SPDX-License-Identifier: GPL-2.0 */2.global sys32_helper3sys32_helper:4 /* Args: syscall_args_32*, function pointer */5 pushl %ebp6 pushl %ebx7 pushl %esi8 pushl %edi9 movl 5*4(%esp), %eax /* pointer to args struct */10 11 movl 1*4(%eax), %ebx12 movl 2*4(%eax), %ecx13 movl 3*4(%eax), %edx14 movl 4*4(%eax), %esi15 movl 5*4(%eax), %edi16 movl 6*4(%eax), %ebp17 movl 0*4(%eax), %eax18 19 call *(6*4)(%esp) /* Do the syscall */20 21 /* Now we need to recover without losing any reg values */22 pushl %eax23 movl 6*4(%esp), %eax24 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 %edi33 popl %esi34 popl %ebx35 popl %ebp36 ret37 38 .type sys32_helper, @function39 .size sys32_helper, .-sys32_helper40 41.global int80_and_ret42int80_and_ret:43 int $0x8044 ret45 46 .type int80_and_ret, @function47 .size int80_and_ret, .-int80_and_ret48 49.section .note.GNU-stack,"",%progbits50