+
+__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