Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
04235c00 AL |
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 |