[PATCH] x86-64: Pass a pointer to SYSCALL_CANCEL in pselect.c [BZ #26606]

Adhemerval Zanella adhemerval.zanella@linaro.org
Mon Sep 14 19:25:45 GMT 2020



> Il giorno 14 set 2020, alle ore 09:48, H.J. Lu <HJl.tools@gmail.com> ha scritto:
> 
> On Fri, Sep 11, 2020 at 7:45 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>> 
>> commit a92f4e6299fe0e3cb6f77e79de00817aece501ce
>> Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>> Date:   Mon Jul 6 13:27:12 2020 -0300
>> 
>>    linux: Add time64 pselect support
>> 
>> changed pselect.c to
>> 
>>     r = SYSCALL_CANCEL (pselect6_time64, nfds, readfds, writefds, exceptfds,
>>                          timeout,
>>                          ((__syscall_ulong_t[]){ (uintptr_t) sigmask,
>>                                                  __NSIG_BYTES }));
>> 
>> which doesn't work with x32's ARGIFY and data passed to syscall isn't
>> initialized with sigmask and __NSIG_BYTES.  Change to
>> 
>>     __syscall_ulong_t data[2] =
>>        {
>>          (uintptr_t) sigmask, __NSIG_BYTES
>>        };
>>      r = SYSCALL_CANCEL (pselect6_time64, nfds, readfds, writefds, exceptfds,
>>                          timeout, data);
>> 
>> fixes the issue.
> 
> Here is a patch to add x86-64 pselect.c.  If there are no objections,
> I will check it in tomorrow.
> 

Sign, I forgot the x32 pointer kABI requirement where the INLINE_* macro might not produce the correct code. 

Instead of pushing a x86_64 version, could you patch the generic version instead to use the same strategy (and maybe add a comment why this construct is required)? 

In long term I have some patches to revamp the syscall macros to use proper inline functions, it should avoid this kind of regressions.

> -- 
> H.J.
> <0001-x86-64-Pass-a-pointer-to-SYSCALL_CANCEL-in-pselect.c.patch>


More information about the Libc-alpha mailing list