linux/arch/x86/um/stub_32.S
<<
>>
Prefs
   1#include <as-layout.h>
   2
   3        .globl syscall_stub
   4.section .__syscall_stub, "ax"
   5
   6        .globl batch_syscall_stub
   7batch_syscall_stub:
   8        /* load pointer to first operation */
   9        mov     $(STUB_DATA+8), %esp
  10
  11again:
  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
  46done:
  47        /* save return value */
  48        mov     %eax, STUB_DATA
  49
  50        /* stop */
  51        int3
  52