linux/arch/x86/um/stub_64.S
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#include <as-layout.h>
   3
   4.section .__syscall_stub, "ax"
   5        .globl batch_syscall_stub
   6batch_syscall_stub:
   7        /* %rsp has the pointer to first operation */
   8        mov     %rsp, %rbx
   9        add     $0x10, %rsp
  10again:
  11        /* load length of additional data */
  12        mov     0x0(%rsp), %rax
  13
  14        /* if(length == 0) : end of list */
  15        /* write possible 0 to header */
  16        mov     %rax, 8(%rbx)
  17        cmp     $0, %rax
  18        jz      done
  19
  20        /* save current pointer */
  21        mov     %rsp, 8(%rbx)
  22
  23        /* skip additional data */
  24        add     %rax, %rsp
  25
  26        /* load syscall-# */
  27        pop     %rax
  28
  29        /* load syscall params */
  30        pop     %rdi
  31        pop     %rsi
  32        pop     %rdx
  33        pop     %r10
  34        pop     %r8
  35        pop     %r9
  36
  37        /* execute syscall */
  38        syscall
  39
  40        /* check return value */
  41        pop     %rcx
  42        cmp     %rcx, %rax
  43        je      again
  44
  45done:
  46        /* save return value */
  47        mov     %rax, (%rbx)
  48
  49        /* stop */
  50        int3
  51