[klibc] [PATCH] fix non-RT sigsuspend()

H. Peter Anvin hpa at zytor.com
Mon May 14 15:36:18 PDT 2012

On 05/05/2012 02:32 PM, Thorsten Glaser wrote:
> While the userspace function signature is
> 	int sigsuspend(const sigset_t *maskptr)
> there are several variants of how this is mapped into kernel
> functions: one for rt_sigsuspend and several, mutually incompatible,
> legacy ones, split by architectures. Before this commit, klibc did
> not care about that and passed maskptr as first and only argument
> to the syscall, leading to junk in other argument slots. There are
> several non-RT variants:
> 	1) int sigsuspend(sigset_t mask)
> 	2) long sigsuspend(sigset_t mask)
> 	3) int sigsuspend(int ignored1,
> 	    unsigned long ignored2, sigset_t mask)
> 	4) int sigsuspend(int ignored1, int ignored2, sigset_t mask)
> 	5) long sigsuspend(int ignored1, int ignored2, sigset_t mask)
> Note how none of these accepts a pointer, they all want the value.
> 	6) (none at all, only RT exists)

OK, so the real question becomes: can we just switch all the
architectures to rt instead?


More information about the klibc mailing list