From patchwork Mon Aug 7 11:00:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131797 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp1372536vqr; Mon, 7 Aug 2023 04:14:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHi2etbSJnCcWaYDOENmJaKLA4QD6qPpkG6Bgdqr6OdTZbn41qY+Bk4XeIJW7u6/OltT7UA X-Received: by 2002:a05:6a00:c8d:b0:666:ad0c:c0f4 with SMTP id a13-20020a056a000c8d00b00666ad0cc0f4mr10983005pfv.23.1691406859846; Mon, 07 Aug 2023 04:14:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691406859; cv=none; d=google.com; s=arc-20160816; b=cwBLnRW3ySSIss44u7FrFkH+Mdkxf5kCHHk9Vwqi1zmPLbZVuE8gA+BDuuXKu1an4Z loez3HOgdq590+hpfV4iPwm1wGj0m1Ot5w6npa/kYY7Cx7XNLoKGkNOFtf51L2SVUhfK akooZ7MoTBNt3UIMGIaNbnma8XFlABELluIyc7FIyJ/+gSspVIbmjWUTLTW8kT+5p4B9 G43YoYLQr1EHAEjMtVFCLHHmaXWEy+amEX/whBAM3+6Lqek4L59x/a4irgZJUlZXo0e6 9+h4Aul/LWsie9535P5vtdp5wwbTDZbMPGMB2lDFzqFPnyAWJ70vUai80eMSpfxmCtQW uPiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from; bh=fVj+0p7cCBs4QusH5jCsSAUWL46R4385kLgf5IE1XEw=; fh=4kyRmfVhkNqTj3S5PwYNQORpqUFDUBmlaW9TALwg/Vw=; b=fIoOiF0zTZwIJsORN+6Q+V2YXWNiQxnTPIJizL1At25A1vzDbRD8A49EN8ZRhFeAW8 lpP/e8IqT6UDdyL8G1qSNiGoUSBLHBMn2lAXw6F+eLK4sSwT35ZAuK/GEc/dubgIynKT V5kcUyyG9yyoVqDTYDZHEb4xRrdrj/s57RW9yGHq/cgX/sT1Y8IfwK9D7NJerDNZTy1u VbGQpMfaKm/D6W7xlkS8z60/zo3G21QNgswztayCM7JFkDfZ9JuPGMiy67UeWfdYfFRx VKQM559oKq1VhCtrAY3yANdHAWlJrt4QV26PQZJsasFmkaItcv3VA0xWKOU+CFwasl41 NrWA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f2-20020a056a00238200b0064d28479818si5680215pfc.96.2023.08.07.04.14.00; Mon, 07 Aug 2023 04:14:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231783AbjHGLBO (ORCPT + 99 others); Mon, 7 Aug 2023 07:01:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40022 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229697AbjHGLBJ (ORCPT ); Mon, 7 Aug 2023 07:01:09 -0400 Received: from bg4.exmail.qq.com (bg4.exmail.qq.com [43.155.65.254]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4AF61701; Mon, 7 Aug 2023 04:01:03 -0700 (PDT) X-QQ-mid: bizesmtp64t1691406050t3gsqv07 Received: from linux-lab-host.localdomain ( [116.30.130.12]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 07 Aug 2023 19:00:49 +0800 (CST) X-QQ-SSF: 01200000000000E0X000000A0000000 X-QQ-FEAT: J5JfekO1WsimCxeLeaIRwLKPUP4hLs0KL6RLQnScNWp3T1pU0LAVZjC4TPlkd k87XCapHbL4LiEUGX5UZzfPUuqLPBeuaVV+KP1TgwYN7UkHO+yVc+ABChQVqPXW25W9OJby 8VJAFTRRJjcUrn3uVYbuqzR+WQyMe0Bn25SZCtFh1UrDUTCf1zjc2R9uAAUYlXWusvIOFve EFf8yDr5+a4HBvMgz8LsmEVwLXWMGmuKVjORDG8muFdZOfP0KYtkaZcPyPTqRLyc7qJ3IhA SWfMtQ5ktT3lDR7PRBcoVeNvp4D4X0KTJQ9rGNoNog53rAKrSD5ZfQF6n1KebVvS50WvULX i1BA8QyGptm586LBXjH4xN8xN3X+gV2DtmyvFzbSqd37csOi48U/HGkUDf7Y/bz6a6+fmgO X-QQ-GoodBg: 0 X-BIZMAIL-ID: 355986596095762811 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux@weissschuh.net, tanyuan@tinylab.org, thomas@t-8ch.de Subject: [PATCH] tools/nolibc: silence ppc64 compile warnings Date: Mon, 7 Aug 2023 19:00:48 +0800 Message-Id: <682bbec9ff358b3726daee00752dbe0abc99370a.1691405029.git.falcon@tinylab.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:tinylab.org:qybglogicsvrgz:qybglogicsvrgz5a-1 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773568639886949687 X-GMAIL-MSGID: 1773568639886949687 Silence the following warnings reported by the new -Wall -Wextra options with pure assembly code. In file included from sysroot/powerpc/include/stdio.h:13, from nolibc-test.c:13: sysroot/powerpc/include/arch.h: In function '_start': sysroot/powerpc/include/arch.h:192:32: warning: unused variable 'r2' [-Wunused-variable] 192 | register volatile long r2 __asm__ ("r2") = (void *)&TOC - (void *)_start; | ^~ sysroot/powerpc/include/arch.h:187:97: warning: optimization may eliminate reads and/or writes to register variables [-Wvolatile-register-var] 187 | void __attribute__((weak, noreturn, optimize("Os", "omit-frame-pointer"))) __no_stack_protector _start(void) | ^~~~~~ Since only elfv2 ABI requires to save the TOC/GOT pointer to r2 register, when using elfv1 ABI, the old C code is simply ignored by the compiler, but the compiler can not ignore the inline assembly code and will introduce build failure or running segfaults. So, let's further only add the new assembly code for elfv2 ABI with the checking of _CALL_ELF == 2. Link: https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.pdf Link: https://www.llvm.org/devmtg/2014-04/PDFs/Talks/Euro-LLVM-2014-Weigand.pdf Signed-off-by: Zhangjin Wu --- Hi, Willy When rebase on latest 20230806-for-6.6-1 branch, -Wall -Wextra reported the above warnings. Here uses volatile inline assembly code instead of C code to silence the unused and optimization warnings. And since only elfv2 require to save TOC pointer to r2 register, this further only add the assembly code for elfv2. BR, Zhangjin --- tools/include/nolibc/arch-powerpc.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tools/include/nolibc/arch-powerpc.h b/tools/include/nolibc/arch-powerpc.h index 76c3784f9dc7..ac212e6185b2 100644 --- a/tools/include/nolibc/arch-powerpc.h +++ b/tools/include/nolibc/arch-powerpc.h @@ -187,9 +187,17 @@ void __attribute__((weak, noreturn, optimize("Os", "omit-frame-pointer"))) __no_stack_protector _start(void) { #ifdef __powerpc64__ - /* On 64-bit PowerPC, save TOC/GOT pointer to r2 */ - extern char TOC __asm__ (".TOC."); - register volatile long r2 __asm__ ("r2") = (void *)&TOC - (void *)_start; +#if _CALL_ELF == 2 + /* with -mabi=elfv2, save TOC/GOT pointer to r2 + * r12 is global entry pointer, we use it to compute TOC from r12 + * https://www.llvm.org/devmtg/2014-04/PDFs/Talks/Euro-LLVM-2014-Weigand.pdf + * https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.pdf + */ + __asm__ volatile ( + "addis 2, 12, .TOC. - _start@ha\n" + "addi 2, 2, .TOC. - _start@l\n" + ); +#endif /* _CALL_ELF == 2 */ __asm__ volatile ( "mr 3, 1\n" /* save stack pointer to r3, as arg1 of _start_c */