stub_64.S 795 B

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