You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

linux_syscall.S 627B

123456789101112131415161718192021222324252627282930313233
  1. .section ".data"
  2. .globl linux_errno
  3. linux_errno: .int 0
  4. .section ".text"
  5. .code64
  6. .globl linux_syscall
  7. .type linux_syscall, @function
  8. linux_syscall:
  9. movq %rdi, %rax // C arg1 -> syscall number
  10. movq %rsi, %rdi // C arg2 -> syscall arg1
  11. movq %rdx, %rsi // C arg3 -> syscall arg2
  12. movq %rcx, %rdx // C arg4 -> syscall arg3
  13. movq %r8, %r10 // C arg5 -> syscall arg4
  14. movq %r9, %r8 // C arg6 -> syscall arg5
  15. movq 8(%rsp), %r9 // C arg7 -> syscall arg6
  16. syscall
  17. cmpq $-4095, %rax
  18. jae 1f
  19. ret
  20. 1:
  21. negq %rax
  22. movl %eax, linux_errno
  23. movq $-1, %rax
  24. ret
  25. .size linux_syscall, . - linux_syscall