From patchwork Wed Jul 26 14:50:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 126451 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a985:0:b0:3e4:2afc:c1 with SMTP id t5csp482474vqo; Wed, 26 Jul 2023 08:31:50 -0700 (PDT) X-Google-Smtp-Source: APBJJlEoPQcfPDkwSHYn4aWrr5AeZV/gW/d7V36PX1NQWoPtLfaTWXwXnUaXv3QsIt5EQqD6TT5X X-Received: by 2002:a05:6402:2d4:b0:522:1d1d:1de8 with SMTP id b20-20020a05640202d400b005221d1d1de8mr1878388edx.2.1690385510474; Wed, 26 Jul 2023 08:31:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690385510; cv=none; d=google.com; s=arc-20160816; b=SKtn5PL0Ckft6B+nECQ3BhodvVmtz6NqEsQLsApyawhI1MsMcq05MtoPXhHwwix7aj diC3PtFNIBaCppYxVNZvTArRNS3kD1zU88ZPvS+fLCbjyRds7xrmZ4Qs/n9ledJ1UESQ XJkcbUExmOYYXsVOlq4svD+ssV8wIzJuz7AruB8dssVyu3FqHlZJ3rPQPI9L7sfWigmX P1/iAoz09f7uLAW1Lyon6F6lQhX9PhqH0hCAuHWwiFn1kOn+7v60TGGW3i3dE7fWY5fe jKTryXgEl64kJJM7Ze0xHD6FvBvr7IV9dmNEjCecXCf7WmRdGRYUXQUIGuSKbH3Wwvx6 WBTw== 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:references:in-reply-to:message-id:date:subject:cc:to :from; bh=jkrybNONK7n5ax3ASfjpgx9XyKx849vL2QXiSHfWItI=; fh=+UJGAEU2Zd20Ffzlyw2DOtwfBiThnaWweXJeIpZW2cQ=; b=vEgyBnOPXiT+mKo4E7840tVE9hunqXsQhtzN4XI2hp4awd3O0KScsfOSQ9amNl152S 3pvtnSdvnYPL8X2t7avceIzx8+LREn2P24/qsoZlJwRnvr1D7H0XK0IgyeS2yjupjU6S p/yQtfP5wgPRMG18NCd/nVLJusNfT2ApiMPhb0rIPzxpaRFAVfyg8iTwdT1f6Bcjh/fb HbSJaMcfoBrz3QYFTHVcZGdqxV1tkD2/p1KmtIjKKuZnLwJ8Hi/yhLwsfdWzmSB34OKA /AgiHLmr848PjcQb+gbcD+FtN5oAB9hX2voC5rNWxo9p46VDm86JEW/5BFPa2i8etqAN 9O1Q== 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 h2-20020a50ed82000000b00522294d0aa0si5521694edr.590.2023.07.26.08.31.25; Wed, 26 Jul 2023 08:31:50 -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 S233759AbjGZOwE (ORCPT + 99 others); Wed, 26 Jul 2023 10:52:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38226 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232277AbjGZOwA (ORCPT ); Wed, 26 Jul 2023 10:52:00 -0400 Received: from bg4.exmail.qq.com (bg4.exmail.qq.com [43.155.65.254]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCD7D19A0; Wed, 26 Jul 2023 07:51:58 -0700 (PDT) X-QQ-mid: bizesmtp74t1690383109tpb94mlh Received: from localhost.localdomain ( [61.141.78.189]) by bizesmtp.qq.com (ESMTP) with id ; Wed, 26 Jul 2023 22:51:48 +0800 (CST) X-QQ-SSF: 01200000000000D0X000000A0000000 X-QQ-FEAT: OtIeQkg1QQHHCIiiAVCObq1XZpMiZZrep3CdnHIkv0Cbq1h4RDrOm7rMYOmUZ TPmC2nvXS5zvaOqkRcYFP7EfRTxQFyzdfssN9/Zr9xCoiY3tRyPj8srSEwFivyx8xeQaLQX b3Odf2maFdKYvMj0gCu2tmb4PLz2APzE+8iPcs1RsXJWOiOSXyUWSY4BvsyCLc/90ENTR0t vkfEksPIiQbt4oShglA/Z3TXba5fVnLCA5jXsgBn4u+TmtrrxNqAHTiAvJBk9QW/oXJw0GX yHdj+I2fEEDUD8nlIrzcPleDk+h/UglC9Cr8TQPiTBTknIe75gEv+IJOBa/s3LWCAetWPu1 JqzNl/k0pRQXeSgeoZ6pjTQJDInAolTF/IwBwWez3jMOCp2mJukfmi+T11QwA== X-QQ-GoodBg: 0 X-BIZMAIL-ID: 1055855130666732953 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, thomas@t-8ch.de, =?utf-8?q?Thomas_Wei?= =?utf-8?q?=C3=9Fschuh?= Subject: [PATCH v2 2/7] tools/nolibc: add support for powerpc64 Date: Wed, 26 Jul 2023 22:50:46 +0800 Message-Id: <7a406115cb891105e554d2bebb3532a5de70f5ca.1690373704.git.falcon@tinylab.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:tinylab.org:qybglogicsvrgz:qybglogicsvrgz5a-1 X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=no 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: 1772497677448013644 X-GMAIL-MSGID: 1772497677448013644 This follows the 64-bit PowerPC ABI [1], refers to the slides: "A new ABI for little-endian PowerPC64 Design & Implementation" [2] and the musl code in arch/powerpc64/crt_arch.h. Firstly, stdu and clrrdi are used instead of stwu and clrrwi for powerpc64. Second, the stack frame size is increased to 32 bytes for powerpc64, 32 bytes is the minimal stack frame size supported described in [2]. Besides, the TOC pointer (GOT pointer) must be saved to r2. This works on both little endian and big endian 64-bit PowerPC. [1]: https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.pdf [2]: https://www.llvm.org/devmtg/2014-04/PDFs/Talks/Euro-LLVM-2014-Weigand.pdf Reviewed-by: Thomas Weißschuh Signed-off-by: Zhangjin Wu --- tools/include/nolibc/arch-powerpc.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/include/nolibc/arch-powerpc.h b/tools/include/nolibc/arch-powerpc.h index caa943e1521a..d783ed0b5dbd 100644 --- a/tools/include/nolibc/arch-powerpc.h +++ b/tools/include/nolibc/arch-powerpc.h @@ -175,6 +175,19 @@ /* startup code */ 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; + + __asm__ volatile ( + "mr 3, 1\n" /* save stack pointer to r3, as arg1 of _start_c */ + "clrrdi 1, 1, 4\n" /* align the stack to 16 bytes */ + "li 0, 0\n" /* zero the frame pointer */ + "stdu 1, -32(1)\n" /* the initial stack frame */ + "bl _start_c\n" /* transfer to c runtime */ + ); +#else __asm__ volatile ( "mr 3, 1\n" /* save stack pointer to r3, as arg1 of _start_c */ "clrrwi 1, 1, 4\n" /* align the stack to 16 bytes */ @@ -182,6 +195,7 @@ void __attribute__((weak, noreturn, optimize("Os", "omit-frame-pointer"))) __no_ "stwu 1, -16(1)\n" /* the initial stack frame */ "bl _start_c\n" /* transfer to c runtime */ ); +#endif __builtin_unreachable(); }