root/tools/testing/selftests/x86/raw_syscall_helper_32.S

/* [<][>][^][v][top][bottom][index][help] */
   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

/* [<][>][^][v][top][bottom][index][help] */