signal.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <syscall.h>
  2. #include <bits/types.h>
  3. #include <bits/fcntl.h>
  4. #include <bits/signal.h>
  5. #define SFD_NONBLOCK O_NONBLOCK
  6. #define SFD_CLOEXEC O_CLOEXEC
  7. struct siginfo {
  8. uint32_t signo;
  9. int32_t errno;
  10. int32_t code;
  11. uint32_t pid;
  12. uint32_t uid;
  13. int32_t fd;
  14. uint32_t tid;
  15. uint32_t band;
  16. uint32_t overrun;
  17. uint32_t trapno;
  18. int32_t status;
  19. int32_t intval;
  20. uint64_t ptrval;
  21. uint64_t utime;
  22. uint64_t stime;
  23. uint64_t addr;
  24. uint16_t addr_lsb;
  25. byte pad[46];
  26. } __attribute__((packed));
  27. inline static long sys_signalfd(int fd, struct sigset* set, int flags)
  28. {
  29. const int ssz = sizeof(struct sigset);
  30. return syscall4(NR_signalfd4, fd, (long)set, ssz, flags);
  31. }
  32. inline static long sys_sigaction(int signum, const struct sigaction* act,
  33. struct sigaction* oldact)
  34. {
  35. const int ssz = sizeof(struct sigset);
  36. return syscall4(NR_rt_sigaction, signum, (long)act, (long)oldact, ssz);
  37. }
  38. inline static long sys_sigprocmask(int how, const struct sigset* set,
  39. struct sigset* oldset)
  40. {
  41. const int ssz = sizeof(struct sigset);
  42. return syscall4(NR_rt_sigprocmask, how, (long)set, (long)oldset, ssz);
  43. }
  44. inline static long sys_kill(int pid, int sig)
  45. {
  46. return syscall2(NR_kill, pid, sig);
  47. }