Commit | Line | Data |
---|---|---|
04235c00 AL |
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 |