sigset_t for new arches
Vineet Gupta
Vineet.Gupta1@synopsys.com
Tue Nov 14 00:28:00 GMT 2017
On 11/13/2017 02:54 PM, H.J. Lu wrote:
> On Mon, Nov 13, 2017 at 2:29 PM, Vineet Gupta
> <Vineet.Gupta1@synopsys.com> wrote:
>> Hi,
>>
>> This came to light when initial testing ARC port to glibc.
>>
>> ARC glibc sigaction wrapper was failing as Linux kernel expects sa_mask
>> (sigset_t) to be 2 words (for the asm-generic syscall ABI mandated for newer
>> arches) while glibc defines it to be 32 words.
>>
>> The quick fix is to lie to kernel about it - and following works. This is
>> also approach taken by few other arches.
>>
>> return INLINE_SYSCALL(rt_sigaction, 4,
>> - sig, act, oact, sizeof(act->sa_mask));
>> + sig, act, oact, _NSIG / 8);
>>
>>
>> However, IMHO, it would be nicer to just define sigset_t to be 2 words wide
>> for the relevant arch. If nothing else it would conserver some memory.
>>
>> My proposal is to define _SIGSET_NWORDS per arch in some header, with a
>> fallback header defaulting to what the current value is. Does this make
>> sense ? If yes, should this be in a new header or put in existing hdr etc.
>
> No. See:
>
> https://sourceware.org/ml/libc-alpha/2017-11/msg00412.html
I don't see how this is solving the case of sigaction() where kernel is expecting
2 * 4 bytes, but glibc has it defined as 32 * 4. Perhaps your work needs to be
extended to more syscalls.
More information about the Libc-alpha
mailing list