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