[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