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 
49 .section .note.GNU-stack,"",%progbits
50