[SIGIO]         = sigio_handler,
        [SIGVTALRM]     = timer_handler };
 
-static void sig_handler_common(int sig, struct sigcontext *sc)
+static void sig_handler_common(int sig, mcontext_t *mc)
 {
        struct uml_pt_regs r;
        int save_errno = errno;
        r.is_user = 0;
        if (sig == SIGSEGV) {
                /* For segfaults, we want the data from the sigcontext. */
-               copy_sc(&r, sc);
-               GET_FAULTINFO_FROM_SC(r.faultinfo, sc);
+               copy_sc(&r, (struct sigcontext *)mc);
+               GET_FAULTINFO_FROM_MC(r.faultinfo, mc);
        }
 
        /* enable signals if sig isn't IRQ signal */
 static int signals_enabled;
 static unsigned int signals_pending;
 
-void sig_handler(int sig, struct sigcontext *sc)
+void sig_handler(int sig, mcontext_t *mc)
 {
        int enabled;
 
 
        block_signals();
 
-       sig_handler_common(sig, sc);
+       sig_handler_common(sig, mc);
 
        set_signals(enabled);
 }
 
-static void real_alarm_handler(struct sigcontext *sc)
+static void real_alarm_handler(mcontext_t *mc)
 {
        struct uml_pt_regs regs;
 
-       if (sc != NULL)
-               copy_sc(®s, sc);
+       if (mc != NULL)
+               copy_sc(®s, (struct sigcontext *)mc);
        regs.is_user = 0;
        unblock_signals();
        timer_handler(SIGVTALRM, ®s);
 }
 
-void alarm_handler(int sig, struct sigcontext *sc)
+void alarm_handler(int sig, mcontext_t *mc)
 {
        int enabled;
 
 
        block_signals();
 
-       real_alarm_handler(sc);
+       real_alarm_handler(mc);
        set_signals(enabled);
 }
 
                panic("enabling signal stack failed, errno = %d\n", errno);
 }
 
-static void (*handlers[_NSIG])(int sig, struct sigcontext *sc) = {
+static void (*handlers[_NSIG])(int sig, mcontext_t *mc) = {
        [SIGSEGV] = sig_handler,
        [SIGBUS] = sig_handler,
        [SIGILL] = sig_handler,
        [SIGVTALRM] = alarm_handler
 };
 
-static void handle_signal(int sig, struct sigcontext *sc)
+
+static void hard_handler(int sig, siginfo_t *info, void *p)
 {
+       struct ucontext *uc = p;
+       mcontext_t *mc = &uc->uc_mcontext;
        unsigned long pending = 1UL << sig;
 
        do {
                while ((sig = ffs(pending)) != 0){
                        sig--;
                        pending &= ~(1 << sig);
-                       (*handlers[sig])(sig, sc);
+                       (*handlers[sig])(sig, mc);
                }
 
                /*
        } while (pending);
 }
 
-static void hard_handler(int sig, siginfo_t *info, void *p)
-{
-       struct ucontext *uc = p;
-       handle_signal(sig, (struct sigcontext *) &uc->uc_mcontext);
-}
-
 void set_handler(int sig)
 {
        struct sigaction action;