Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 .global sys32_helper
0003 sys32_helper:
0004     /* Args: syscall_args_32*, function pointer */
0005     pushl   %ebp
0006     pushl   %ebx
0007     pushl   %esi
0008     pushl   %edi
0009     movl    5*4(%esp), %eax /* pointer to args struct */
0010 
0011     movl    1*4(%eax), %ebx
0012     movl    2*4(%eax), %ecx
0013     movl    3*4(%eax), %edx
0014     movl    4*4(%eax), %esi
0015     movl    5*4(%eax), %edi
0016     movl    6*4(%eax), %ebp
0017     movl    0*4(%eax), %eax
0018 
0019     call    *(6*4)(%esp)    /* Do the syscall */
0020 
0021     /* Now we need to recover without losing any reg values */
0022     pushl   %eax
0023     movl    6*4(%esp), %eax
0024     popl    0*4(%eax)
0025     movl    %ebx, 1*4(%eax)
0026     movl    %ecx, 2*4(%eax)
0027     movl    %edx, 3*4(%eax)
0028     movl    %esi, 4*4(%eax)
0029     movl    %edi, 5*4(%eax)
0030     movl    %ebp, 6*4(%eax)
0031 
0032     popl    %edi
0033     popl    %esi
0034     popl    %ebx
0035     popl    %ebp
0036     ret
0037 
0038     .type sys32_helper, @function
0039     .size sys32_helper, .-sys32_helper
0040 
0041 .global int80_and_ret
0042 int80_and_ret:
0043     int $0x80
0044     ret
0045 
0046     .type int80_and_ret, @function
0047     .size int80_and_ret, .-int80_and_ret
0048 
0049 .section .note.GNU-stack,"",%progbits