syscall.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "syscall.h"
  2. #define _syscall0(NUMBER) ({ \
  3. int retval; \
  4. asm volatile("int $0x80" : "=a"(retval) : "a"(NUMBER) : "memory"); \
  5. retval; \
  6. })
  7. #define _syscall1(NUMBER, ARG1) ({ \
  8. int retval; \
  9. asm volatile( \
  10. "int $0x80" \
  11. : "=a"(retval) \
  12. : "a"(NUMBER), "b"(ARG1) \
  13. : "memory"); \
  14. retval; \
  15. })
  16. #define _syscall2(NUMBER, ARG1, ARG2) ({ \
  17. int retval; \
  18. asm volatile( \
  19. "int $0x80" \
  20. : "=a"(retval) \
  21. : "a"(NUMBER), "b"(ARG1), "c"(ARG2) \
  22. : "memory"); \
  23. retval; \
  24. })
  25. #define _syscall3(NUMBER, ARG1, ARG2, ARG3) ({ \
  26. int retval; \
  27. asm volatile( \
  28. "int $0x80" \
  29. : "=a"(retval) \
  30. : "a"(NUMBER), "b"(ARG1), "c"(ARG2), "d"(ARG3) \
  31. : "memory"); \
  32. retval; \
  33. })
  34. uint32_t getpid(void)
  35. {
  36. return _syscall0(SYS_GETPID);
  37. }