syscall.hpp 538 B

1234567891011121314151617181920212223
  1. #pragma once
  2. #include <kernel/interrupt.h>
  3. #include <types/types.h>
  4. // return value is stored in %eax and %edx
  5. typedef void (*syscall_handler)(interrupt_stack* data);
  6. inline uint32_t syscall(uint32_t num, uint32_t arg1 = 0, uint32_t arg2 = 0)
  7. {
  8. asm volatile(
  9. "movl %1, %%edi\n"
  10. "movl %2, %%esi\n"
  11. "movl %3, %%eax\n"
  12. "int $0x80\n"
  13. "movl %%eax, %0"
  14. : "=g"(num)
  15. : "g"(arg1), "g"(arg2), "g"(num)
  16. : "eax", "edx", "edi", "esi");
  17. return num;
  18. }
  19. void init_syscall(void);