[PATCH v4 04/21] nptl: x32: Fix Race conditions in pthread cancellation [BZ#12683]

Adhemerval Zanella adhemerval.zanella@linaro.org
Tue Apr 7 13:33:36 GMT 2020



On 07/04/2020 09:54, H.J. Lu wrote:
> On Tue, Apr 7, 2020 at 5:47 AM Adhemerval Zanella via Libc-alpha
> <libc-alpha@sourceware.org> wrote:
>>
>>
>>
>> On 03/04/2020 18:22, Joseph Myers wrote:
>>> On Fri, 3 Apr 2020, Adhemerval Zanella via Libc-alpha wrote:
>>>
>>>> This patches adds the x32 modification required for the BZ#12683.
>>>> It follows the x86_64-x32 ABI and pointers are zero-extended.
>>>> However, compiler may not see such cases and accuse a cast from pointer
>>>> to integer of different size and for such cases the warning is
>>>> explict disabled.
>>>
>>> MIPS n32 uses an intermediate cast to (__typeof__ ((X) - (X))), so that a
>>> conversion to a different size is never directly from a pointer type.
>>> Does something like that help here to avoid the warning without needing to
>>> use diagnostic pragmas?
>>
>> The intermediate cast to (__typeof__ ((X) - (X))) is not suffice for x32
>> (the resulting argumetn it will passed as function argument instead of
>> asm input).  I have replaced with:
>>
>>   #define __SSC(__x)                                              \
>>   ({                                                            \
>>     __syscall_arg_t __arg = sizeof (1 ? (__x) : 0ULL) < 8       \
>>       ? (unsigned long int) (uintptr_t)(__x)                    \
>>       : (__syscall_arg_t) (__typeof__ ((__x) - (__x))) (__x);   \
>>     __arg;                                                      \
>>   })
>>
> 
> Have you looked at libc-pointer-arith.h?

That was my first approach, by using cast_to_integer macro. I tried to
change its internals to zero extend pointers correctly, but I couldn't
find a easier way without also adding the cast point suppression
warning in this original patch.  


More information about the Libc-alpha mailing list