From patchwork Thu Aug 3 11:45:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 130529 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f41:0:b0:3e4:2afc:c1 with SMTP id v1csp1098710vqx; Thu, 3 Aug 2023 05:05:21 -0700 (PDT) X-Google-Smtp-Source: APBJJlHZZLMoZwZO34OrGkD2JcWecQ124OvFFTs/rFpAcIricd1Zxv/qlRlbTw9Fga1vZb08+UJ3 X-Received: by 2002:a17:903:247:b0:1bb:dc48:644a with SMTP id j7-20020a170903024700b001bbdc48644amr17988947plh.49.1691064320341; Thu, 03 Aug 2023 05:05:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691064320; cv=none; d=google.com; s=arc-20160816; b=MoXyOiyRkbAcuTfgZLgXJ25YMISjjkxqRR8eplQoBoWFwOGcXJuJMlvBBLFfPk9L0j 0Pqw7zY69qn7yP53a8wYWxjohVqz5tILo+ghLQ1dTU4zkdHsgNm4GwPgbsDYEg5D+ETc Ped54gE3K8PC472ZylegVghTjoJNA6gtYt0QyTfJW2T3rGulxWBcE+Z/H1G0AHxocqPB 9YFx/4UOE22QLpZJ1dB4QoAy7mSPPirF8RrdM7VnWCFu/aMb0GtdOR+F1Y7WidvB8VAi ArnSJSxVvLZYvkK2sfKgaDbivGpAJMuorsvlUlJGUyavYY3Lv7L0BBFCUa0jYDGYVrzC z3ZQ== 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=xLRKBMx4MkugeQYFCPXNX+2rpI4s3ZQRa+3mCC/Wtps=; fh=tASeuIQHteoNQCzEpqxQcSlYcvsywztgoQaVg5gEA5g=; b=LMaZisMASpp11uJpSwXh5tOVmwfitm14L0ZJfpckV0sttSrTaZKvmLO5tI9MpmhfvW db+Z0Zc7u6csKLhIlPWYy9BWrTdYNIl0xbpS3XVwqVxRv35ejIPplXe6stfd0fw1K5Nt +QhU1DqetwekugFMw2KEXboQxGGqJ2pZQFOOkvd7DdpyavC4lkem35RlMcOhl1B07JBh Dyo3wsZXjMsgajTXEV/wqGJd+HUmKJp3QhwCGSNny2stthX5KdhDxeENB3ikSu9Imwbi uSS95LEPKb85jB/TQhU1JFyzQgsrIKe/Yjy8hzY/UpA0Aha+TltX3IRR6tVOtGkFnuUq yi5g== 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 w11-20020a170902e88b00b001b8af930e3dsi5239344plg.487.2023.08.03.05.04.39; Thu, 03 Aug 2023 05:05:20 -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 S234903AbjHCLpj (ORCPT + 99 others); Thu, 3 Aug 2023 07:45:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231809AbjHCLpi (ORCPT ); Thu, 3 Aug 2023 07:45:38 -0400 Received: from bg4.exmail.qq.com (bg4.exmail.qq.com [43.155.65.254]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A459E53; Thu, 3 Aug 2023 04:45:35 -0700 (PDT) X-QQ-mid: bizesmtp69t1691063125tg1fzsd3 Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 03 Aug 2023 19:45:24 +0800 (CST) X-QQ-SSF: 01200000000000E0X000000A0000000 X-QQ-FEAT: ttAhR/+4Rmn6jmIP+0Hmn2EiMIaK/dXPR2h8oFsixpBU5+fEg+Tl16A7g8IDn V+7uny2HFf9kLnF0aRaGC7tzTYcLUah2ZyENwpGeLaAtWUOtH4fumWubfnhqQm61+9sg62I zQfC09UIsC0arXak6/fWmPo6e5uluB4tF9h/afLai0tKr3OgfWVb3D67U2xILjVVePJTiZy 6zu7B0/oS9lzLI0jPw00FQznupRD04FI3JlPN6JUC9ImIYL8exYYplO+kDgyDYMPYcprY52 vAQE4zJKXHup1A79jLuv9HWM+HM4EnirZgRnx1uw0O8Qz6eQm/jTx1ye1jrAu6rgfGu2fvc kWtUYEsm6AoLuwtIhZO21OAHsps3zZaKBiPJUOLAZOaYmFw/tvbLzVaX7s/Wc9x+ofRH61r X-QQ-GoodBg: 0 X-BIZMAIL-ID: 14348619306806666930 From: Zhangjin Wu To: thomas@t-8ch.de, w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, =?utf-8?q?Thomas_Wei?= =?utf-8?q?=C3=9Fschuh?= Subject: [PATCH v5 2/8] tools/nolibc: add support for powerpc64 Date: Thu, 3 Aug 2023 19:45:19 +0800 Message-Id: <624b1b87470d7179ac8b6e7be1f6a2dc50004570.1691062722.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_BLOCKED,RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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: 1773209460568088303 X-GMAIL-MSGID: 1773209460568088303 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. First, 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 | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/include/nolibc/arch-powerpc.h b/tools/include/nolibc/arch-powerpc.h index 8332c9d3e5d6..76c3784f9dc7 100644 --- a/tools/include/nolibc/arch-powerpc.h +++ b/tools/include/nolibc/arch-powerpc.h @@ -172,6 +172,7 @@ _ret; \ }) +#ifndef __powerpc64__ /* FIXME: For 32-bit PowerPC, with newer gcc compilers (e.g. gcc 13.1.0), * "omit-frame-pointer" fails with __attribute__((no_stack_protector)) but * works with __attribute__((__optimize__("-fno-stack-protector"))) @@ -180,10 +181,24 @@ #undef __no_stack_protector #define __no_stack_protector __attribute__((__optimize__("-fno-stack-protector"))) #endif +#endif /* !__powerpc64__ */ /* 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 */ @@ -191,6 +206,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(); }