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