syscall.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef __GBLIBC_SYSCALL_H_
  2. #define __GBLIBC_SYSCALL_H_
  3. #include <stdint.h>
  4. #define SYS_read (0)
  5. #define SYS_write (1)
  6. #define SYS_open (2)
  7. #define SYS_close (3)
  8. #define SYS_stat (4)
  9. #define SYS_fstat (5)
  10. #define SYS_brk (12)
  11. #define SYS_ioctl (16)
  12. #define SYS_pipe (22)
  13. #define SYS_dup (32)
  14. #define SYS_dup2 (33)
  15. #define SYS_sleep (35)
  16. #define SYS_getpid (39)
  17. #define SYS_fork (57)
  18. #define SYS_execve (59)
  19. #define SYS_exit (60)
  20. #define SYS_wait (61)
  21. #define SYS_kill (62)
  22. #define SYS_getdents (78)
  23. #define SYS_getcwd (79)
  24. #define SYS_chdir (80)
  25. #define SYS_umask (95)
  26. #define SYS_gettimeofday (96)
  27. #define SYS_setpgid (109)
  28. #define SYS_getppid (110)
  29. #define SYS_setsid (112)
  30. #define SYS_getsid (124)
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34. static inline uint32_t syscall0(uint32_t no)
  35. {
  36. asm volatile(
  37. "movl %1, %%eax\n"
  38. "int $0x80\n"
  39. "movl %%eax, %0"
  40. : "=g"(no)
  41. : "g"(no)
  42. : "eax");
  43. return no;
  44. }
  45. static inline uint32_t syscall1(uint32_t no, uint32_t arg)
  46. {
  47. asm volatile(
  48. "movl %1, %%edi\n"
  49. "movl %2, %%eax\n"
  50. "int $0x80\n"
  51. "movl %%eax, %0"
  52. : "=g"(no)
  53. : "g"(arg), "g"(no)
  54. : "eax", "edi");
  55. return no;
  56. }
  57. static inline uint32_t syscall2(uint32_t no, uint32_t arg1, uint32_t arg2)
  58. {
  59. asm volatile(
  60. "movl %1, %%edi\n"
  61. "movl %2, %%esi\n"
  62. "movl %3, %%eax\n"
  63. "int $0x80\n"
  64. "movl %%eax, %0"
  65. : "=g"(no)
  66. : "g"(arg1), "g"(arg2), "g"(no)
  67. : "eax", "edi", "esi");
  68. return no;
  69. }
  70. static inline uint32_t syscall3(uint32_t no, uint32_t arg1, uint32_t arg2, uint32_t arg3)
  71. {
  72. asm volatile(
  73. "movl %1, %%edi\n"
  74. "movl %2, %%esi\n"
  75. "movl %3, %%edx\n"
  76. "movl %4, %%eax\n"
  77. "int $0x80\n"
  78. "movl %%eax, %0"
  79. : "=g"(no)
  80. : "g"(arg1), "g"(arg2), "g"(arg3), "g"(no)
  81. : "eax", "edx", "edi", "esi");
  82. return no;
  83. }
  84. #ifdef __cplusplus
  85. }
  86. #endif
  87. #endif