X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/2a49908006b177c4d6354309333d06b1b96e4887..87067c7f16425837971f5c1b5fd0fc5338757377:/lunaix-os/usr/libc/arch/i386/signal.c?ds=sidebyside diff --git a/lunaix-os/usr/libc/arch/i386/signal.c b/lunaix-os/usr/libc/arch/i386/signal.c index 681f193..d4026c6 100644 --- a/lunaix-os/usr/libc/arch/i386/signal.c +++ b/lunaix-os/usr/libc/arch/i386/signal.c @@ -1,7 +1,6 @@ #include "syscall.h" #include - -__LXSYSCALL2(int, signal, int, signum, sighandler_t, handler); +#include __LXSYSCALL1(int, sigpending, sigset_t, *set); __LXSYSCALL1(int, sigsuspend, const sigset_t, *mask); @@ -14,3 +13,48 @@ __LXSYSCALL3(int, *set, sigset_t, *oldset); + +__LXSYSCALL2(int, sys_sigaction, int, signum, struct sigaction*, action); + +__LXSYSCALL2(int, kill, pid_t, pid, int, signum); + +extern void +sigtrampoline(); + +sighandler_t +signal(int signum, sighandler_t handler) +{ + struct sigaction sa = { .sa_handler = (void*)handler, + .sa_mask = (sigset_t)-1, + .sa_sigaction = (void*)sigtrampoline }; + + sys_sigaction(signum, &sa); + + return handler; +} + +int +raise(int signum) +{ + return kill(0, signum); +} + +int +sigaction(int signum, struct sigaction* action) +{ + return sys_sigaction(signum, action); +} + +struct siguctx +{ + void* sigact; + void (*sa_handler)(int); + unsigned char saved_frame[0]; +}; + +void +sig_dohandling(int signum, void* siginfo, void* sigctx) +{ + struct siguctx* uctx = (struct siguctx*)sigctx; + uctx->sa_handler(signum); +} \ No newline at end of file