root/arch/x86/um/stub_32.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #include <as-layout.h>
   3 
   4 .section .__syscall_stub, "ax"
   5 
   6         .globl batch_syscall_stub
   7 batch_syscall_stub:
   8         /* load pointer to first operation */
   9         mov     $(STUB_DATA+8), %esp
  10 
  11 again:
  12         /* load length of additional data */
  13         mov     0x0(%esp), %eax
  14 
  15         /* if(length == 0) : end of list */
  16         /* write possible 0 to header */
  17         mov     %eax, STUB_DATA+4
  18         cmpl    $0, %eax
  19         jz      done
  20 
  21         /* save current pointer */
  22         mov     %esp, STUB_DATA+4
  23 
  24         /* skip additional data */
  25         add     %eax, %esp
  26 
  27         /* load syscall-# */
  28         pop     %eax
  29 
  30         /* load syscall params */
  31         pop     %ebx
  32         pop     %ecx
  33         pop     %edx
  34         pop     %esi
  35         pop     %edi
  36         pop     %ebp
  37 
  38         /* execute syscall */
  39         int     $0x80
  40 
  41         /* check return value */
  42         pop     %ebx
  43         cmp     %ebx, %eax
  44         je      again
  45 
  46 done:
  47         /* save return value */
  48         mov     %eax, STUB_DATA
  49 
  50         /* stop */
  51         int3

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