From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x141.google.com (mail-il1-x141.google.com [IPv6:2607:f8b0:4864:20::141]) by sourceware.org (Postfix) with ESMTPS id 09516385DC0F for ; Tue, 7 Apr 2020 13:59:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 09516385DC0F Received: by mail-il1-x141.google.com with SMTP id f16so3241526ilj.9 for ; Tue, 07 Apr 2020 06:59:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=lOz7V9aKHRiEZFtgedD43M1vkg7tdevKVywJn7bN8Nw=; b=HvDUoAvlfBsO2RuL8lG8ch1Lqp3SU/9Nh7hcA4Xz9vVESgF0FhuPpgPj3QlmV6hBSr vOITURuLYuVSacCuS3KOdgcuR33TJv4n/tDasLXGxkqhG0JbwciVLwqRIj6SchrHu/rh Y/6VnuTggDA65Gss7UJXSwHo+chHWeoe4bTJKlRpUBEyNEPVCF19YOnNANFexHyIVOsD SobUH07rcH4SHyGFRYO/aEc3nTUayYZUYuZGUs9jh6hu/w1mv0sb2sUjK4UB0/3+RNDK tVoe+58kra/G+Z+Jiyjt85+I5ZoGudn/CpnC4qVheDlM/TLaHmaLP2gMF+Ax0dA93UPU oxjw== X-Gm-Message-State: AGi0PuZt3KuVS2fKb4ErSHxG/8LH3Om7ZmtsCVJ267I6A95Zl3Ua6O6p ylqc9pd2WnezZuNoeGJgQGc9OlEmZcvZmfS95UErAA== X-Google-Smtp-Source: APiQypLA+gG4Y4/L5d8xyB2i9tV/YrmWsd3gisPQJttzhTyDSejXmEKDu0EyJehbkgH7OPS8lwpF+8dymV5Op6HtoeY= X-Received: by 2002:a92:d5c2:: with SMTP id d2mr2448965ilq.213.1586267994494; Tue, 07 Apr 2020 06:59:54 -0700 (PDT) MIME-Version: 1.0 References: <20200403203201.7494-1-adhemerval.zanella@linaro.org> <20200403203201.7494-5-adhemerval.zanella@linaro.org> <6ff26c0d-224e-5d89-3d48-8800ea9ec639@linaro.org> <8fceb58e-53b4-36d6-7a46-f787a8f141be@linaro.org> <202edea2-8789-f107-4a42-9c7a5d08e497@linaro.org> In-Reply-To: <202edea2-8789-f107-4a42-9c7a5d08e497@linaro.org> From: "H.J. Lu" Date: Tue, 7 Apr 2020 06:59:18 -0700 Message-ID: Subject: Re: [PATCH v4 04/21] nptl: x32: Fix Race conditions in pthread cancellation [BZ#12683] To: Adhemerval Zanella Cc: Joseph Myers , GNU C Library Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-6.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Apr 2020 13:59:56 -0000 On Tue, Apr 7, 2020 at 6:55 AM Adhemerval Zanella wrote: > > > > On 07/04/2020 10:41, H.J. Lu wrote: > > On Tue, Apr 7, 2020 at 6:40 AM H.J. Lu wrote: > >> > >> On Tue, Apr 7, 2020 at 6:33 AM Adhemerval Zanella > >> wrote: > >>> > >>> > >>> > >>> On 07/04/2020 09:54, H.J. Lu wrote: > >>>> On Tue, Apr 7, 2020 at 5:47 AM Adhemerval Zanella via Libc-alpha > >>>> 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. > >> > >> Have you looked at sysdeps/unix/sysv/linux/x86_64/sysdep.h? > >> > > > > /* Create a variable 'name' based on type 'X' to avoid explicit types. > > This is mainly used set use 64-bits arguments in x32. */ > > #define TYPEFY(X, name) __typeof__ ((X) - (X)) name > > /* Explicit cast the argument to avoid integer from pointer warning on > > x32. */ > > #define ARGIFY(X) ((__typeof__ ((X) - (X))) (X)) > > > > Yes, I was the one that actually added them (78ca091cdd2). But for this > case, the issue is it requires another implicit cast on the > __syscall_cancel call itself. The difference here is the call is not > done through an asm input anymore. Do you have a git branch I can try? -- H.J.