Home | History | Annotate | Download | only in x86
      1 /* SPDX-License-Identifier: GPL-2.0 */
      2 .global sys32_helper
      3 sys32_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
     42 int80_and_ret:
     43 	int	$0x80
     44 	ret
     45 
     46 	.type int80_and_ret, @function
     47 	.size int80_and_ret, .-int80_and_ret
     48