2.4.17: sys_sigsuspend does not return value

From: Pavel Machek (pavel@suse.cz)
Date: Fri Jan 18 2002 - 16:08:26 EST


Hi!

>From 2.4.17:

asmlinkage int
sys_sigsuspend(int history0, int history1, old_sigset_t mask)
{
        struct pt_regs * regs = (struct pt_regs *) &history0;
        sigset_t saveset;

        mask &= _BLOCKABLE;
        spin_lock_irq(&current->sigmask_lock);
        saveset = current->blocked;
        siginitset(&current->blocked, mask);
        recalc_sigpending(current);
        spin_unlock_irq(&current->sigmask_lock);

        regs->eax = -EINTR;
        while (1) {
                current->state = TASK_INTERRUPTIBLE;
                schedule();
                if (do_signal(regs, &saveset))
                        return -EINTR;
        }
}

...Which looks to me like it returns something undefined when
do_signal returns 0. What prevents gcc from having "top secret" value
in eax, and from returning that value to userspace?
                                                                        Pavel

-- 
(about SSSCA) "I don't say this lightly.  However, I really think that the U.S.
no longer is classifiable as a democracy, but rather as a plutocracy." --hpa
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Jan 23 2002 - 21:00:29 EST