From patchwork Sat Aug 5 18:39:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131533 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp610621vqr; Sat, 5 Aug 2023 12:48:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHP+1TDiZ/UmJumLm1UDCWbK06M2PocWRoVfxk7Eom7LMs9svoNYDsb1KcYgmPSdgTqSwg8 X-Received: by 2002:a2e:8811:0:b0:2b9:cb50:c1f9 with SMTP id x17-20020a2e8811000000b002b9cb50c1f9mr3646126ljh.32.1691264909945; Sat, 05 Aug 2023 12:48:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691264909; cv=none; d=google.com; s=arc-20160816; b=wajjaWhFsDn7UL8RNP7gcfjcz7vGEQuekBdDmGXWmw59zHyDr+EQHq/9Ai2/zAuIH4 gm7RT2wfJ0IhJFqX686VF1ADpvy7/7uKC/8jewv1GLMKYWiLI2aAX5Bo2AYqxrTuJ4W4 UEcWD0In5BmGUKPPZer6bx6n7Wm6WD1neXejd4E3pItmM+4C2N5hFRduO6epasN2zXP1 hAmtrOwZGzT3SF109JkuVfgi9YZ7JMMsEGZqWEK2UgIdTPqYqyWfhFjVMAFwKI6vgtQ6 a9W7/9DQcuQFU/aE/9/cqKQOcYZqw+jNTjetiQ2qVOm7fbbYKdr8RSa9ybRyVvq5bBh1 90CA== 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=DXOwvPKksXQP8X8iKZF9MewrqLrkS27jF/peIW7PLe4=; fh=qDuYiBigcDB5OOi2VEjvZowinM7+A028kB0vdTLYbmY=; b=Q859o1lml5SgFWClopMQBjGWo3Vm87CoGj5BN7mS4da3fD1IUJ3ryPqhhg0S3Nsa3q z3tJmYKYPcEes8asIMmZgmm6dOMd0djK1QVKLWD2/byyZBo7FjPLEt7uTMyUy1PLa3kv aR/5tI43J7hJyvevMKOnIlFnvHkwfh0+m6E/jsbuV54RK7amn5D6ckKiOVJtex84doSl TkJXv41XhrxwiAaZ4KSFNs1B0jiQNhbLicBxv1M0P4AeDmODA+emEWFJvwpvsoFle35Y lwWC0grAGiJj56Z527vsqmRYYA73LqFTm32DQe0sNOeuGJPcW4nVUmnCoQ7qaTq9o15F Aprg== 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 rs14-20020a170907036e00b0099bcfa1f75dsi3453915ejb.206.2023.08.05.12.48.06; Sat, 05 Aug 2023 12:48:29 -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 S230109AbjHESlo (ORCPT + 99 others); Sat, 5 Aug 2023 14:41:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229441AbjHESln (ORCPT ); Sat, 5 Aug 2023 14:41:43 -0400 Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52263B7; Sat, 5 Aug 2023 11:41:40 -0700 (PDT) X-QQ-mid: bizesmtp89t1691260768tw064d93 Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:39:26 +0800 (CST) X-QQ-SSF: 01200000000000E0X000B00A0000000 X-QQ-FEAT: Bal8MUPVNvSRP1gcMhZpw5y2IOuTCiThWveMGsSRcCoNINeBt6NEHTQF/z1J7 8PsW4DBq4HaNrUALysyLgnajul0e+YkZvYbyUI6xVOYj5O1Ki63mDgwTuEPIEe0wt3lkpgG ghTTc7KBE/etbITpNxfuyPecpBWMDbLICqW8TTmpsfK9UieTq0wmrukFLWKKTYRj/bxHLeJ qEfuA/nx3ZsbU7q9gnqSAcI9d0h7puDDHRNOpES9HEV3tKdSvVDW+Ab8d8iqLKv5CVrPPCq 2VhgpYkBLvl/2t8cVrBrV9lkxn52Fqt5WapUPrqvhbpBhvM+kwHez3KQYiY/VstskvzLqP/ nU2vMLhI1uHWLeLU1siP2aHTM5hN0oAWumWIuGKKWSBQYtTm7IciZfkP4q7CPRtK0ICoKVF bq+VasuDa2I= X-QQ-GoodBg: 0 X-BIZMAIL-ID: 11633529993115481996 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Subject: [PATCH v6 1/8] tools/nolibc: add support for powerpc Date: Sun, 6 Aug 2023 02:39:26 +0800 Message-Id: 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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_PASS,URIBL_BLOCKED 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: 1773419794353228643 X-GMAIL-MSGID: 1773419794353228643 Both syscall declarations and _start code definition are added for powerpc to nolibc. Like mips, powerpc uses a register (exactly, the summary overflow bit) to record the error occurred, and uses another register to return the value [1]. So, the return value of every syscall declaration must be normalized to match the __sysret() helper, return -value when there is an error, otheriwse, return value directly. Glibc and musl use different methods to check the summary overflow bit, glibc (sysdeps/unix/sysv/linux/powerpc/sysdep.h) saves the cr register to r0 at first, and then check the summary overflow bit in cr0: mfcr r0 r0 & (1 << 28) ? -r3 : r3 --> 10003c14: 7c 00 00 26 mfcr r0 10003c18: 74 09 10 00 andis. r9,r0,4096 10003c1c: 41 82 00 08 beq 0x10003c24 10003c20: 7c 63 00 d0 neg r3,r3 Musl (arch/powerpc/syscall_arch.h) directly checks the summary overflow bit with the 'bns' instruction, it is smaller: /* no summary overflow bit means no error, return value directly */ bns+ 1f /* otherwise, return negated value */ neg r3, r3 1: --> 10000418: 40 a3 00 08 bns 0x10000420 1000041c: 7c 63 00 d0 neg r3,r3 Like musl, Linux (arch/powerpc/include/asm/vdso/gettimeofday.h) uses the same method for do_syscall_2() too. Here applies the second method to get smaller size. [1]: https://man7.org/linux/man-pages/man2/syscall.2.html Reviewed-by: Thomas Weißschuh Signed-off-by: Zhangjin Wu --- tools/include/nolibc/arch-powerpc.h | 197 ++++++++++++++++++++++++++++ tools/include/nolibc/arch.h | 2 + 2 files changed, 199 insertions(+) create mode 100644 tools/include/nolibc/arch-powerpc.h diff --git a/tools/include/nolibc/arch-powerpc.h b/tools/include/nolibc/arch-powerpc.h new file mode 100644 index 000000000000..8332c9d3e5d6 --- /dev/null +++ b/tools/include/nolibc/arch-powerpc.h @@ -0,0 +1,197 @@ +/* SPDX-License-Identifier: LGPL-2.1 OR MIT */ +/* + * PowerPC specific definitions for NOLIBC + * Copyright (C) 2023 Zhangjin Wu + */ + +#ifndef _NOLIBC_ARCH_POWERPC_H +#define _NOLIBC_ARCH_POWERPC_H + +#include "compiler.h" +#include "crt.h" + +/* Syscalls for PowerPC : + * - stack is 16-byte aligned + * - syscall number is passed in r0 + * - arguments are in r3, r4, r5, r6, r7, r8, r9 + * - the system call is performed by calling "sc" + * - syscall return comes in r3, and the summary overflow bit is checked + * to know if an error occurred, in which case errno is in r3. + * - the arguments are cast to long and assigned into the target + * registers which are then simply passed as registers to the asm code, + * so that we don't have to experience issues with register constraints. + */ + +#define _NOLIBC_SYSCALL_CLOBBERLIST \ + "memory", "cr0", "r12", "r11", "r10", "r9" + +#define my_syscall0(num) \ +({ \ + register long _ret __asm__ ("r3"); \ + register long _num __asm__ ("r0") = (num); \ + \ + __asm__ volatile ( \ + " sc\n" \ + " bns+ 1f\n" \ + " neg %0, %0\n" \ + "1:\n" \ + : "=r"(_ret), "+r"(_num) \ + : \ + : _NOLIBC_SYSCALL_CLOBBERLIST, "r8", "r7", "r6", "r5", "r4" \ + ); \ + _ret; \ +}) + +#define my_syscall1(num, arg1) \ +({ \ + register long _ret __asm__ ("r3"); \ + register long _num __asm__ ("r0") = (num); \ + register long _arg1 __asm__ ("r3") = (long)(arg1); \ + \ + __asm__ volatile ( \ + " sc\n" \ + " bns+ 1f\n" \ + " neg %0, %0\n" \ + "1:\n" \ + : "=r"(_ret), "+r"(_num) \ + : "0"(_arg1) \ + : _NOLIBC_SYSCALL_CLOBBERLIST, "r8", "r7", "r6", "r5", "r4" \ + ); \ + _ret; \ +}) + + +#define my_syscall2(num, arg1, arg2) \ +({ \ + register long _ret __asm__ ("r3"); \ + register long _num __asm__ ("r0") = (num); \ + register long _arg1 __asm__ ("r3") = (long)(arg1); \ + register long _arg2 __asm__ ("r4") = (long)(arg2); \ + \ + __asm__ volatile ( \ + " sc\n" \ + " bns+ 1f\n" \ + " neg %0, %0\n" \ + "1:\n" \ + : "=r"(_ret), "+r"(_num), "+r"(_arg2) \ + : "0"(_arg1) \ + : _NOLIBC_SYSCALL_CLOBBERLIST, "r8", "r7", "r6", "r5" \ + ); \ + _ret; \ +}) + + +#define my_syscall3(num, arg1, arg2, arg3) \ +({ \ + register long _ret __asm__ ("r3"); \ + register long _num __asm__ ("r0") = (num); \ + register long _arg1 __asm__ ("r3") = (long)(arg1); \ + register long _arg2 __asm__ ("r4") = (long)(arg2); \ + register long _arg3 __asm__ ("r5") = (long)(arg3); \ + \ + __asm__ volatile ( \ + " sc\n" \ + " bns+ 1f\n" \ + " neg %0, %0\n" \ + "1:\n" \ + : "=r"(_ret), "+r"(_num), "+r"(_arg2), "+r"(_arg3) \ + : "0"(_arg1) \ + : _NOLIBC_SYSCALL_CLOBBERLIST, "r8", "r7", "r6" \ + ); \ + _ret; \ +}) + + +#define my_syscall4(num, arg1, arg2, arg3, arg4) \ +({ \ + register long _ret __asm__ ("r3"); \ + register long _num __asm__ ("r0") = (num); \ + register long _arg1 __asm__ ("r3") = (long)(arg1); \ + register long _arg2 __asm__ ("r4") = (long)(arg2); \ + register long _arg3 __asm__ ("r5") = (long)(arg3); \ + register long _arg4 __asm__ ("r6") = (long)(arg4); \ + \ + __asm__ volatile ( \ + " sc\n" \ + " bns+ 1f\n" \ + " neg %0, %0\n" \ + "1:\n" \ + : "=r"(_ret), "+r"(_num), "+r"(_arg2), "+r"(_arg3), \ + "+r"(_arg4) \ + : "0"(_arg1) \ + : _NOLIBC_SYSCALL_CLOBBERLIST, "r8", "r7" \ + ); \ + _ret; \ +}) + + +#define my_syscall5(num, arg1, arg2, arg3, arg4, arg5) \ +({ \ + register long _ret __asm__ ("r3"); \ + register long _num __asm__ ("r0") = (num); \ + register long _arg1 __asm__ ("r3") = (long)(arg1); \ + register long _arg2 __asm__ ("r4") = (long)(arg2); \ + register long _arg3 __asm__ ("r5") = (long)(arg3); \ + register long _arg4 __asm__ ("r6") = (long)(arg4); \ + register long _arg5 __asm__ ("r7") = (long)(arg5); \ + \ + __asm__ volatile ( \ + " sc\n" \ + " bns+ 1f\n" \ + " neg %0, %0\n" \ + "1:\n" \ + : "=r"(_ret), "+r"(_num), "+r"(_arg2), "+r"(_arg3), \ + "+r"(_arg4), "+r"(_arg5) \ + : "0"(_arg1) \ + : _NOLIBC_SYSCALL_CLOBBERLIST, "r8" \ + ); \ + _ret; \ +}) + +#define my_syscall6(num, arg1, arg2, arg3, arg4, arg5, arg6) \ +({ \ + register long _ret __asm__ ("r3"); \ + register long _num __asm__ ("r0") = (num); \ + register long _arg1 __asm__ ("r3") = (long)(arg1); \ + register long _arg2 __asm__ ("r4") = (long)(arg2); \ + register long _arg3 __asm__ ("r5") = (long)(arg3); \ + register long _arg4 __asm__ ("r6") = (long)(arg4); \ + register long _arg5 __asm__ ("r7") = (long)(arg5); \ + register long _arg6 __asm__ ("r8") = (long)(arg6); \ + \ + __asm__ volatile ( \ + " sc\n" \ + " bns+ 1f\n" \ + " neg %0, %0\n" \ + "1:\n" \ + : "=r"(_ret), "+r"(_num), "+r"(_arg2), "+r"(_arg3), \ + "+r"(_arg4), "+r"(_arg5), "+r"(_arg6) \ + : "0"(_arg1) \ + : _NOLIBC_SYSCALL_CLOBBERLIST \ + ); \ + _ret; \ +}) + +/* 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"))) + */ +#ifdef __no_stack_protector +#undef __no_stack_protector +#define __no_stack_protector __attribute__((__optimize__("-fno-stack-protector"))) +#endif + +/* startup code */ +void __attribute__((weak, noreturn, optimize("Os", "omit-frame-pointer"))) __no_stack_protector _start(void) +{ + __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 */ + "li 0, 0\n" /* zero the frame pointer */ + "stwu 1, -16(1)\n" /* the initial stack frame */ + "bl _start_c\n" /* transfer to c runtime */ + ); + __builtin_unreachable(); +} + +#endif /* _NOLIBC_ARCH_POWERPC_H */ diff --git a/tools/include/nolibc/arch.h b/tools/include/nolibc/arch.h index 82b43935650f..e276fb0680af 100644 --- a/tools/include/nolibc/arch.h +++ b/tools/include/nolibc/arch.h @@ -25,6 +25,8 @@ #include "arch-aarch64.h" #elif defined(__mips__) && defined(_ABIO32) #include "arch-mips.h" +#elif defined(__powerpc__) +#include "arch-powerpc.h" #elif defined(__riscv) #include "arch-riscv.h" #elif defined(__s390x__) From patchwork Sat Aug 5 18:40:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131547 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp629699vqr; Sat, 5 Aug 2023 13:53:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEfy68DfzOJkAT7znBgZvQH1U1akZ6NBX7AiHHF2t2YhcT7y9G8xPX3lqcxaIYgbTXHu9u1 X-Received: by 2002:a05:6a00:180c:b0:66a:386c:e6a6 with SMTP id y12-20020a056a00180c00b0066a386ce6a6mr7512477pfa.6.1691268795852; Sat, 05 Aug 2023 13:53:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691268795; cv=none; d=google.com; s=arc-20160816; b=IjXiWOZfRIC6Zteh1MyvEpz5X97vFYCypABoDuALVTGohBnlo/WdWjWHa6tH1Em0+a umkgY/YrsptXu3LkMcpKL2O7608yKW49A1mSJDv133lvKeqdOmpB+1FNXeWii0twogqg Q8Qkhl3d4NNpMc970sEgwndfV4XhD9qVddVSq95gTICZpyytGvwTFJ82F3EgWZgQGkKC mpkPG2WV3QMFw9enW3uRwBmMrJQ264PTbP39n2L9Ozc6xS18RuumXzFOrvgW9a8z9baa Oud4N84QmV0IchmKSEv2oUrf9ldH2HRbF9LFk05d4kf9zcKy/hhg3Ct5AMYJOcVL7RSr iJPA== 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=qDuYiBigcDB5OOi2VEjvZowinM7+A028kB0vdTLYbmY=; b=aGn8jwr53FUCJ1xuh5GTu0O20wvAhpohSIoA1E0f3KFeGC9gl8f81tD6tsJ5LwHfJg QPCgGeFF+MDk8vi9X5iloWsYiM1ICpMVIdhnZReZE9Tp9zX9v94eZFDQvVxDRvrGQD8Z Crol/U69wc1njpURE7To9sKLQc/RbC2HJiWG3MPnnNqmXNSIKRi2CLyJlMlwltfjMpik 2YxuLxQ3+Qf5RYuzlwXOaw+BcZYB6wb4E9ofoN+tyG4hXBi2DBHSwufnB3Guf0hU+ogD O6mQvDrZIfl+GB0VcAR2Jg/eBtebl2p+l0IRyo94vLe3rwujAp/LLAq7kIUMHtbou4Dl 2dnA== 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 u21-20020a056a00159500b00643ba887601si3597173pfk.307.2023.08.05.13.53.03; Sat, 05 Aug 2023 13:53:15 -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 S230012AbjHESkv (ORCPT + 99 others); Sat, 5 Aug 2023 14:40:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229441AbjHESku (ORCPT ); Sat, 5 Aug 2023 14:40:50 -0400 Received: from smtpbgeu2.qq.com (smtpbgeu2.qq.com [18.194.254.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90E5FB7; Sat, 5 Aug 2023 11:40:44 -0700 (PDT) X-QQ-mid: bizesmtp77t1691260833tbkk0zgs Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:40:32 +0800 (CST) X-QQ-SSF: 01200000000000E0X000B00A0000000 X-QQ-FEAT: 96VJ2VzXm/qdtVNFs2llxvJYD1e7vTK/6sALo+w7KpYnEx5xxyFVMgmbni986 I+ubWSZeNYyKq7ve3SC2kqvKaunRY+GWoCA9DxAFziLaMTjrTAEzJnMm54xMLRQrBRO1vpt UElu7Wn3n99SnR7UnCtVyGOrhb433wF9G9nvE5EafhPnryICXtaazTBbnRwTdeieN6GqEzp hxlufo1G+WxGmiOppTQYcrDrtun2YC6ofAup1A2/xTBvhBIUZhVUzTZxOCOwiD4fbfPiGYT yzImKaZ1m145V2VTqnF/f/tb5BfBILZYAY2vGfcsnhDzcg90DgjIgcTt1Rv/DvvjNZ4JCaP HZQUN5Gj87cuy8toh2/opdzwH3Lf5a5FCUifUKg2JwHb+gX9QqWWCANxMiTCSweA39za5wi X-QQ-GoodBg: 0 X-BIZMAIL-ID: 16661133259475389670 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Subject: [PATCH v6 2/8] tools/nolibc: add support for powerpc64 Date: Sun, 6 Aug 2023 02:40:31 +0800 Message-Id: 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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_PASS, T_SPF_HELO_TEMPERROR,URIBL_BLOCKED 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: 1773423868829219631 X-GMAIL-MSGID: 1773423868829219631 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(); } From patchwork Sat Aug 5 18:41:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131545 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp624759vqr; Sat, 5 Aug 2023 13:34:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE6g6tSQOKBtZuhTOQsYUujOI94JAzysai3NeUEBYct1hoZyx5X7hOTmYdLCO6ZUS2MewXX X-Received: by 2002:a17:902:f551:b0:1bb:25bd:d091 with SMTP id h17-20020a170902f55100b001bb25bdd091mr5957201plf.30.1691267697564; Sat, 05 Aug 2023 13:34:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691267697; cv=none; d=google.com; s=arc-20160816; b=KvEg65Xm0pvARbZoBmiIN+HgpZXpCMynLY2Dlb9J5Yn320wxtrx+gSeI/+mpF6Wa5N XXvThlzaVrfei8Mmw3C2tPksmiONdc9urZ/yYCMj6ezmgR6aPCvSXg0tf5fPAWCn5ofC CeQ6R/SnLDwoV26NSZaNHS2H5tJeYjt3pile2T6EiJjJYADWCt/n8dYXO6iH50Jfk4xm IVIOEEP7i51JyRh9afpQGgKBU7st6szr1EVsuG8XonJN3N3H3uIObiJnmOHik1t0zpwZ 5rNjz3VeqJLCnK+A6TFwIG6KpVbMBd2xAImpOqN1E5R1UHr/BAEaHU36wYz+EHuUvgXH Zfcg== 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=fr5HXDHe4IPO2aoWpZjHi2q4YbHKEctOO+LZC/JwWIU=; fh=qDuYiBigcDB5OOi2VEjvZowinM7+A028kB0vdTLYbmY=; b=NXx1r3ZjoAe1VBMDmSZ5cC1bV+6v0Ma9d0sKLhRX2sjQFSjLqdIII1BjP7W7Ueg9ZR J5E3oCmx0q5XlDPdORoY3E2liBm/+dWWxGaoW6dm8G2uzg+PN4qEjXCH8hGx0jf08I3u gbLXbkmptP8ElDr1JWBXZBMs9lwKnzYyNu67DpwZFfMhUnazUguvkmXhxJCtgdU5Y9eP l7QY5R0oHWQmtJdqKddOso3VmzYEwTPulPH7kDmhva/1qMp9tj89BG5pdkSHyKYwx6pE GrWMf+N/bQaqs88LeKXMHszrTSRYJiqevoOYDMYjgkg+Ra9EiLDPydG91BmEnkXG+Dc0 miyw== 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 kx16-20020a170902f95000b001ae4a01a7e0si3550354plb.236.2023.08.05.13.34.43; Sat, 05 Aug 2023 13:34:57 -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 S230136AbjHESlz (ORCPT + 99 others); Sat, 5 Aug 2023 14:41:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45500 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229441AbjHESlx (ORCPT ); Sat, 5 Aug 2023 14:41:53 -0400 Received: from smtpbgjp3.qq.com (smtpbgjp3.qq.com [54.92.39.34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68F8B2D4C; Sat, 5 Aug 2023 11:41:50 -0700 (PDT) X-QQ-mid: bizesmtp67t1691260899t6cf1r65 Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:41:38 +0800 (CST) X-QQ-SSF: 01200000000000E0X000B00A0000000 X-QQ-FEAT: R3vftN8GVq9j6Bylp15jreMTJinzIvlatqaLrzbecsnQVNxVi8XtRY9nuYXQ8 FjgSfV4Q21eLjBTMzuyabCA9ZGEY902lQ+xVApsWxVRTSwstUpZGHCBIRTVvRm7Pd07Mqgx kXfNGI8v5UuApOteuGFcdRCjWeEsKfbLShtvg3hzPISjH9okYxBMBAsJ9jQgGzUq6fZcElP B9gcP6QG+V8qfdpbebO1btNmhqIRK7hGXpwOZYtiyJim012yG4l5pRosXa+Clgtq1oBxYMX uh/gSoikFpW8EGsyi/yBYpIwEWN0UySxdsIosZGv1CSAhn8CKu81gT8hfAw6jL9xJ3yyjD/ h5+aDPUNckuxAKNhiODX4PRhxuZ9ho2T0YWBrvNg6RLA8Z9aNEX3ldTJB5sqAF0hUjpc4hs X-QQ-GoodBg: 0 X-BIZMAIL-ID: 1314215475769393101 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Subject: [PATCH v6 3/8] selftests/nolibc: add XARCH and ARCH mapping support Date: Sun, 6 Aug 2023 02:41:37 +0800 Message-Id: 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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,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: 1773422717318107284 X-GMAIL-MSGID: 1773422717318107284 Most of the CPU architectures have different variants, but kernel usually only accepts parts of them via the ARCH variable, the others should be customized via kernel config files. To simplify testing, a new XARCH variable is added to extend the kernel's ARCH with a few variants of the same architecture, and it is used to customize variant specific variables, at last XARCH is converted to the kernel's ARCH: e.g. make run XARCH= | \ | `-> variant specific variables: | IMAGE, DEFCONFIG, QEMU_ARCH, QEMU_ARGS, CFLAGS ... \ `---> kernel's ARCH XARCH and ARCH are carefully mapped to allow users to pass architecture variants via XARCH or pass architecture via ARCH from cmdline. PowerPC is the first user and also a very good reference architecture of this mapping, it has variants with different combinations of 32-bit/64-bit and bit endian/little endian. To use this mapping, the other architectures can refer to PowerPC, If the target architecture only has one variant, XARCH is simply an alias of ARCH, no additional mapping required. Suggested-by: Willy Tarreau Link: https://lore.kernel.org/lkml/20230702171715.GD16233@1wt.eu/ Link: https://lore.kernel.org/lkml/20230730061801.GA7690@1wt.eu/ Reviewed-by: Thomas Weißschuh Signed-off-by: Zhangjin Wu --- tools/testing/selftests/nolibc/Makefile | 46 ++++++++++++++++++------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index f42adef87e12..46a2312b06f5 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -14,6 +14,27 @@ include $(srctree)/scripts/subarch.include ARCH = $(SUBARCH) endif +# XARCH extends the kernel's ARCH with a few variants of the same +# architecture that only differ by the configuration, the toolchain +# and the Qemu program used. It is copied as-is into ARCH except for +# a few specific values which are mapped like this: +# +# XARCH | ARCH | config +# -------------|-----------|------------------------- +# ppc | powerpc | 32 bits +# ppc64 | powerpc | 64 bits big endian +# ppc64le | powerpc | 64 bits little endian +# +# It is recommended to only use XARCH, though it does not harm if +# ARCH is already set. For simplicity, ARCH is sufficient for all +# architectures where both are equal. + +# configure default variants for target kernel supported architectures +XARCH = $(or $(XARCH_$(ARCH)),$(ARCH)) + +# map from user input variants to their kernel supported architectures +ARCH := $(or $(ARCH_$(XARCH)),$(XARCH)) + # kernel image names by architecture IMAGE_i386 = arch/x86/boot/bzImage IMAGE_x86_64 = arch/x86/boot/bzImage @@ -24,7 +45,7 @@ IMAGE_mips = vmlinuz IMAGE_riscv = arch/riscv/boot/Image IMAGE_s390 = arch/s390/boot/bzImage IMAGE_loongarch = arch/loongarch/boot/vmlinuz.efi -IMAGE = $(IMAGE_$(ARCH)) +IMAGE = $(IMAGE_$(XARCH)) IMAGE_NAME = $(notdir $(IMAGE)) # default kernel configurations that appear to be usable @@ -37,7 +58,7 @@ DEFCONFIG_mips = malta_defconfig DEFCONFIG_riscv = defconfig DEFCONFIG_s390 = defconfig DEFCONFIG_loongarch = defconfig -DEFCONFIG = $(DEFCONFIG_$(ARCH)) +DEFCONFIG = $(DEFCONFIG_$(XARCH)) # optional tests to run (default = all) TEST = @@ -52,7 +73,7 @@ QEMU_ARCH_mips = mipsel # works with malta_defconfig QEMU_ARCH_riscv = riscv64 QEMU_ARCH_s390 = s390x QEMU_ARCH_loongarch = loongarch64 -QEMU_ARCH = $(QEMU_ARCH_$(ARCH)) +QEMU_ARCH = $(QEMU_ARCH_$(XARCH)) # QEMU_ARGS : some arch-specific args to pass to qemu QEMU_ARGS_i386 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)" @@ -64,7 +85,7 @@ QEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_s390 = -M s390-ccw-virtio -m 1G -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_loongarch = -M virt -append "console=ttyS0,115200 panic=-1 $(TEST:%=NOLIBC_TEST=%)" -QEMU_ARGS = $(QEMU_ARGS_$(ARCH)) $(QEMU_ARGS_EXTRA) +QEMU_ARGS = $(QEMU_ARGS_$(XARCH)) $(QEMU_ARGS_EXTRA) # OUTPUT is only set when run from the main makefile, otherwise # it defaults to this nolibc directory. @@ -81,7 +102,7 @@ CFLAGS_mips = -EL CFLAGS_STACKPROTECTOR ?= $(call cc-option,-mstack-protector-guard=global $(call cc-option,-fstack-protector-all)) CFLAGS ?= -Os -fno-ident -fno-asynchronous-unwind-tables -std=c89 \ $(call cc-option,-fno-stack-protector) \ - $(CFLAGS_$(ARCH)) $(CFLAGS_STACKPROTECTOR) + $(CFLAGS_$(XARCH)) $(CFLAGS_STACKPROTECTOR) LDFLAGS := -s REPORT ?= awk '/\[OK\][\r]*$$/{p++} /\[FAIL\][\r]*$$/{if (!f) printf("\n"); f++; print;} /\[SKIPPED\][\r]*$$/{s++} \ @@ -96,24 +117,25 @@ help: @echo " sysroot create the nolibc sysroot here (uses \$$ARCH)" @echo " nolibc-test build the executable (uses \$$CC and \$$CROSS_COMPILE)" @echo " libc-test build an executable using the compiler's default libc instead" - @echo " run-user runs the executable under QEMU (uses \$$ARCH, \$$TEST)" + @echo " run-user runs the executable under QEMU (uses \$$XARCH, \$$TEST)" @echo " initramfs prepare the initramfs with nolibc-test" - @echo " defconfig create a fresh new default config (uses \$$ARCH)" - @echo " kernel (re)build the kernel with the initramfs (uses \$$ARCH)" - @echo " run runs the kernel in QEMU after building it (uses \$$ARCH, \$$TEST)" - @echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$ARCH, \$$TEST)" + @echo " defconfig create a fresh new default config (uses \$$XARCH)" + @echo " kernel (re)build the kernel with the initramfs (uses \$$XARCH)" + @echo " run runs the kernel in QEMU after building it (uses \$$XARCH, \$$TEST)" + @echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$XARCH, \$$TEST)" @echo " clean clean the sysroot, initramfs, build and output files" @echo "" @echo "The output file is \"run.out\". Test ranges may be passed using \$$TEST." @echo "" @echo "Currently using the following variables:" @echo " ARCH = $(ARCH)" + @echo " XARCH = $(XARCH)" @echo " CROSS_COMPILE = $(CROSS_COMPILE)" @echo " CC = $(CC)" @echo " OUTPUT = $(OUTPUT)" @echo " TEST = $(TEST)" - @echo " QEMU_ARCH = $(if $(QEMU_ARCH),$(QEMU_ARCH),UNKNOWN_ARCH) [determined from \$$ARCH]" - @echo " IMAGE_NAME = $(if $(IMAGE_NAME),$(IMAGE_NAME),UNKNOWN_ARCH) [determined from \$$ARCH]" + @echo " QEMU_ARCH = $(if $(QEMU_ARCH),$(QEMU_ARCH),UNKNOWN_ARCH) [determined from \$$XARCH]" + @echo " IMAGE_NAME = $(if $(IMAGE_NAME),$(IMAGE_NAME),UNKNOWN_ARCH) [determined from \$$XARCH]" @echo "" all: run From patchwork Sat Aug 5 18:42:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131532 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp609897vqr; Sat, 5 Aug 2023 12:45:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHDREGNdlFEP7HoPVu8stAo+V3ZkZ+w+c1zKrfRloHhllmwqfAvpOdcinAQ/xVJglW7VFQA X-Received: by 2002:aa7:d90d:0:b0:523:1ce9:1f49 with SMTP id a13-20020aa7d90d000000b005231ce91f49mr3560885edr.42.1691264741803; Sat, 05 Aug 2023 12:45:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691264741; cv=none; d=google.com; s=arc-20160816; b=BbHIcjE3rpLZfCaAFxzE1ZTQ/1+nHVv0gB6FKxVGQeQ25CFscr2EKcD2K3EbXvmcnj nDsD+aIQCTVyvS5X4HeIQlZe8qxn9meSxT6U+KuwI8vl1XRgXT3wseYY3uH3l6mbM1uM ujICye/paWX3OhPas3TFDvTKTz0re7nFx/OTp2pggCMFps90lYBAMLZTfz4MIwNsq7Oz Q7mBfmgafsxxpRXSizj0qzN3sgLJ+0x2SrHnN09OvZMXYIXKRVKfD0wWxOhcuLx5A0zx OZk4pgX5CbvdW7LlV+Ui0lJQT1m0aLSSjioLzl4nenD54ikzO6H8YqWTxPyrhjnc3eJ0 uoNw== 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=B5Qq3b4PY0lN2T/7w2g+yOLzvibgslE5tAvkbrcirPg=; fh=qDuYiBigcDB5OOi2VEjvZowinM7+A028kB0vdTLYbmY=; b=p8yLefUPAtelj08h2QL3c/BBjIGrx6Q9mUzfYtxPMNswO7MTF0iYsEBfyw+e0rPImi cIYGkBS86sLkcKc8XYlUMpnrljz2hpusLjJaC1xdrlhEuYLMv00i/UiUghExhOX71RTM 5H6eg7BFgcXF1xUlYu5MiscrXoezARKFIaOnsRY7Hvf8sjmYa1G/p/fvRB1BtG/RnmLH TV8QMr/SWAdQtzuEC4u+cdgO6OguF4MmG3CB0hztYvYhGVFZyj/xAr/GMTa2DczU6qLG RlqKNRIFNf9qXp9CSOPfZ20YAmdYOqTooXoqRCzcZKH3ue3Va+FFeS7tnQrPcWHiBaUZ 6/jg== 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 n19-20020aa7c693000000b005222831c8acsi3193556edq.691.2023.08.05.12.45.18; Sat, 05 Aug 2023 12:45:41 -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 S230185AbjHESnE (ORCPT + 99 others); Sat, 5 Aug 2023 14:43:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46156 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229441AbjHESnD (ORCPT ); Sat, 5 Aug 2023 14:43:03 -0400 Received: from smtpbgau2.qq.com (smtpbgau2.qq.com [54.206.34.216]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7FA21FA; Sat, 5 Aug 2023 11:43:00 -0700 (PDT) X-QQ-mid: bizesmtp82t1691260969t7f7paue Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:42:48 +0800 (CST) X-QQ-SSF: 01200000000000E0X000B00A0000000 X-QQ-FEAT: hoArX50alxHe+LG930oTCoN8UcIoR96135u+XWn6mkEwd0LvnmOseMiK8ZsCV qTdHjFayED5dmWG/j2aRiB/U7nISQB6crrt+wKiBXvCD+SVM9GlVhi4TqAo7HUs7MKxEl+e ntC0Q8LUNa0MemGLXOrJ699PaKzoDM8K9Aq264BQM2akqEdUVivCkPVb2irFUO1PuqKvj7d b+kpaTH0ZWlSNLQGey/P84QkeMgvRneKrCpvEctlKMW/Tk6LF3uSu2N3P2OjRA4yaDU50EC IQiqh2rlLFyyxOB7lbutJI5PbVPKNzeYXbGDdgoDym7a7Xpblweq7xoTzYo2Jx7VQMkSIFT Yqxn5kVoVso9Spa+uZ0pBEBuA193UlPX2Hh1vC14yKviuS1mkPTNfT6MTJCa/XEvo5HQZcT s2f1kFm1vAE= X-QQ-GoodBg: 0 X-BIZMAIL-ID: 1566790808252503887 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Subject: [PATCH v6 4/8] selftests/nolibc: add test support for ppc Date: Sun, 6 Aug 2023 02:42:43 +0800 Message-Id: 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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_PASS,URIBL_BLOCKED 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: 1773419617801943054 X-GMAIL-MSGID: 1773419617801943054 Kernel uses ARCH=powerpc for both 32-bit and 64-bit PowerPC, here adds a ppc variant for 32-bit PowerPC and uses it as the default variant of powerpc architecture. Users can pass XARCH=ppc (or ARCH=powerpc) to test 32-bit PowerPC. The default qemu-system-ppc g3beige machine [1] is used to run 32-bit powerpc kernel with pmac32_defconfig. The missing PMACZILOG serial tty and console are enabled in another patch [2]. Note, - zImage doesn't boot due to "qemu-system-ppc: Some ROM regions are overlapping" error, so, vmlinux is used instead. - since the VSX support may be disabled in kernel side, to avoid "illegal instruction" errors due to missing VSX kernel support, let's simply let compiler not generate vector/scalar (VSX) instructions via the '-mno-vsx' option. - as 'man gcc' shows, '-mmultiple' is used to generate code that uses the load multiple word instructions and the store multiple word instructions. Those instructions do not work when the processor is in little-endian mode (except PPC740/PPC750), so, we only enable it for big endian powerpc. [1]: https://qemu.readthedocs.io/en/latest/system/ppc/powermac.html [2]: https://lore.kernel.org/lkml/bb7b5f9958b3e3a20f6573ff7ce7c5dc566e7e32.1690982937.git.tanyuan@tinylab.org/ Suggested-by: Willy Tarreau Link: https://lore.kernel.org/lkml/ZL9leVOI25S2+0+g@1wt.eu/ Reviewed-by: Thomas Weißschuh Signed-off-by: Zhangjin Wu --- tools/testing/selftests/nolibc/Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 46a2312b06f5..cac501e0c7cf 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -30,9 +30,11 @@ endif # architectures where both are equal. # configure default variants for target kernel supported architectures +XARCH_powerpc = ppc XARCH = $(or $(XARCH_$(ARCH)),$(ARCH)) # map from user input variants to their kernel supported architectures +ARCH_ppc = powerpc ARCH := $(or $(ARCH_$(XARCH)),$(XARCH)) # kernel image names by architecture @@ -42,6 +44,7 @@ IMAGE_x86 = arch/x86/boot/bzImage IMAGE_arm64 = arch/arm64/boot/Image IMAGE_arm = arch/arm/boot/zImage IMAGE_mips = vmlinuz +IMAGE_ppc = vmlinux IMAGE_riscv = arch/riscv/boot/Image IMAGE_s390 = arch/s390/boot/bzImage IMAGE_loongarch = arch/loongarch/boot/vmlinuz.efi @@ -55,6 +58,7 @@ DEFCONFIG_x86 = defconfig DEFCONFIG_arm64 = defconfig DEFCONFIG_arm = multi_v7_defconfig DEFCONFIG_mips = malta_defconfig +DEFCONFIG_ppc = pmac32_defconfig DEFCONFIG_riscv = defconfig DEFCONFIG_s390 = defconfig DEFCONFIG_loongarch = defconfig @@ -70,6 +74,7 @@ QEMU_ARCH_x86 = x86_64 QEMU_ARCH_arm64 = aarch64 QEMU_ARCH_arm = arm QEMU_ARCH_mips = mipsel # works with malta_defconfig +QEMU_ARCH_ppc = ppc QEMU_ARCH_riscv = riscv64 QEMU_ARCH_s390 = s390x QEMU_ARCH_loongarch = loongarch64 @@ -82,6 +87,7 @@ QEMU_ARGS_x86 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $( QEMU_ARGS_arm64 = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_arm = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" +QEMU_ARGS_ppc = -M g3beige -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_s390 = -M s390-ccw-virtio -m 1G -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_loongarch = -M virt -append "console=ttyS0,115200 panic=-1 $(TEST:%=NOLIBC_TEST=%)" @@ -97,6 +103,7 @@ else Q=@ endif +CFLAGS_ppc = -m32 -mbig-endian -mno-vsx $(call cc-option,-mmultiple) CFLAGS_s390 = -m64 CFLAGS_mips = -EL CFLAGS_STACKPROTECTOR ?= $(call cc-option,-mstack-protector-guard=global $(call cc-option,-fstack-protector-all)) From patchwork Sat Aug 5 18:43:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131535 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp613449vqr; Sat, 5 Aug 2023 12:59:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGZ4Y2AF2VQA6kxBNHDJdLuO93v3fVXo916tL4vkH7xMYWhotmGTe8CA7fAyBLMcl6wqhtd X-Received: by 2002:aa7:d6d2:0:b0:522:37fc:71fb with SMTP id x18-20020aa7d6d2000000b0052237fc71fbmr4301765edr.37.1691265549062; Sat, 05 Aug 2023 12:59:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691265549; cv=none; d=google.com; s=arc-20160816; b=GSrafgKY5/VrPlJdW/6LCusFqQ4cLmyZB2EZVkJFxMTRFY1Pz4R2fFNUCoEL0cBImI aKUlM5uD/R4GiafVm+NMo6WbsubDeVUQUIhqR4W/bi2jOFvhlhwnlRjniaYieflzQcUi +9cD5Sl/S79NVrJzAkvHZBsPCtY4PbOthFOohvGm3p1MlksJYax1GNIjQTzDlg9YH4a6 o6bfaQUEmE773mWvJOZu8gbTBeVRSRHsmenP9PmTW7iId6T9aEkMV//rT6PsIVRJGxjp 6dHLShMDidXZvjrpv8DkM+QSqmGvxILhdz7NQvV4fUYoDiU9LRwqhEHyveAhvF5mDPuG WD5g== 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=tbyhH7ZkFQbCXfLxGBGuiu9Uz2/60Vm3FM5UFmKdgZ4=; fh=qDuYiBigcDB5OOi2VEjvZowinM7+A028kB0vdTLYbmY=; b=RtUgjeHv5Vl0W2PUSXKe1x0VNioInMeptXEU/iAF3CoHWtAo7HvgHibbfm6H7i80qY 3OSt/VgEBWih1Dnjm3hkoq5ebXdMqnrBAWv8ggV899aGIQ7rdm/Ud6STkrj1UV4FfiPw YhcWr5Sg7aFj6DEg5XUM9u49rh0QZL29eimGJuYYPwBV+FXZtcvoHEmAW5CEGTEq+NhE jhntuNF75v89M9RRJr+PYuNMfunHNZZbTFWH29RQL6GhrA2h8yVzoCkaDBG8IJASsJkD RPX9q1LZBzEhUYxjrMH3pi0diNqfAo5pPFK99LrdVP1Xk3ti7fB7b0LIzAYFXqn6XDb3 KLSA== 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 o18-20020aa7c512000000b005230d2fde4bsi3321057edq.639.2023.08.05.12.58.45; Sat, 05 Aug 2023 12:59:09 -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 S230178AbjHESoO (ORCPT + 99 others); Sat, 5 Aug 2023 14:44:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46852 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229441AbjHESoM (ORCPT ); Sat, 5 Aug 2023 14:44:12 -0400 Received: from smtpbguseast2.qq.com (smtpbguseast2.qq.com [54.204.34.130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 166F81BE4; Sat, 5 Aug 2023 11:44:09 -0700 (PDT) X-QQ-mid: bizesmtp81t1691261034tbgrmf1h Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:43:53 +0800 (CST) X-QQ-SSF: 00200000000000E0X000B00A0000000 X-QQ-FEAT: aRJAvSRewFYU4SW2XrRMbeVjTtmWizIV2aT4qPHNUwsXnhy5ooszTAXsDyuid KPxZh/k6Tu3wnF7+7MSV1i5DmzWuqjNsXVelJGMecR+8kSgpDKQH9bNwbwA6S0aOTT+wOJ6 r7yLn7NoBe0D0B56Z2bzxKLLQaN7Rr37cw4gapbooNST8jmWoG11rkfZw719q4kn73iLugy TQP2xKPdKaGem6Sz8Mi2mJjTmh//kcx3M3Xuf+fZSnq/fQv4OrHnlf/9kxCY2CnswtfAkVt ishKI8baPY9FDdWBzpCV1+rPtWizDnW86rlHYF0Fpin9oXU9016SLZ6TAjwFIS2e+/h0Fxc tr5b5xRceoo8EimWJ5BV2DE92VcyVb4ZK/xUXwG7aZp+CWxr3g96R8Ai80kmRCcjJGIXHF+ ltxAbgVXkFU= X-QQ-GoodBg: 0 X-BIZMAIL-ID: 10814934079519102711 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Subject: [PATCH v6 5/8] selftests/nolibc: add test support for ppc64le Date: Sun, 6 Aug 2023 02:43:53 +0800 Message-Id: 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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_PASS,URIBL_BLOCKED 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: 1773420464302067314 X-GMAIL-MSGID: 1773420464302067314 Kernel uses ARCH=powerpc for both 32-bit and 64-bit PowerPC, here adds a ppc64le variant for little endian 64-bit PowerPC, users can pass XARCH=ppc64le to test it. The powernv machine of qemu-system-ppc64le is used for there is just a working powernv_defconfig. As the document [1] shows: PowerNV (as Non-Virtualized) is the “bare metal” platform using the OPAL firmware. It runs Linux on IBM and OpenPOWER systems and it can be used as an hypervisor OS, running KVM guests, or simply as a host OS. Notes, - since the VSX support may be disabled in kernel side, to avoid "illegal instruction" errors due to missing VSX kernel support, let's simply let compiler not generate vector/scalar (VSX) instructions via the '-mno-vsx' option. - little endian ppc64 prefers elfv2 to elfv1 if the toolchain (e.g. gcc 13.1.0) supports it, let's align with kernel, otherwise, our elfv1 binary will not run on kernel with elfv2 ABI. [1]: https://qemu.readthedocs.io/en/latest/system/ppc/powernv.html Suggested-by: Willy Tarreau Link: https://lore.kernel.org/lkml/20230722120747.GC17311@1wt.eu/ Reviewed-by: Thomas Weißschuh Signed-off-by: Zhangjin Wu --- tools/testing/selftests/nolibc/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index cac501e0c7cf..586f278ddd66 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -35,6 +35,7 @@ XARCH = $(or $(XARCH_$(ARCH)),$(ARCH)) # map from user input variants to their kernel supported architectures ARCH_ppc = powerpc +ARCH_ppc64le = powerpc ARCH := $(or $(ARCH_$(XARCH)),$(XARCH)) # kernel image names by architecture @@ -45,6 +46,7 @@ IMAGE_arm64 = arch/arm64/boot/Image IMAGE_arm = arch/arm/boot/zImage IMAGE_mips = vmlinuz IMAGE_ppc = vmlinux +IMAGE_ppc64le = arch/powerpc/boot/zImage IMAGE_riscv = arch/riscv/boot/Image IMAGE_s390 = arch/s390/boot/bzImage IMAGE_loongarch = arch/loongarch/boot/vmlinuz.efi @@ -59,6 +61,7 @@ DEFCONFIG_arm64 = defconfig DEFCONFIG_arm = multi_v7_defconfig DEFCONFIG_mips = malta_defconfig DEFCONFIG_ppc = pmac32_defconfig +DEFCONFIG_ppc64le = powernv_defconfig DEFCONFIG_riscv = defconfig DEFCONFIG_s390 = defconfig DEFCONFIG_loongarch = defconfig @@ -75,6 +78,7 @@ QEMU_ARCH_arm64 = aarch64 QEMU_ARCH_arm = arm QEMU_ARCH_mips = mipsel # works with malta_defconfig QEMU_ARCH_ppc = ppc +QEMU_ARCH_ppc64le = ppc64le QEMU_ARCH_riscv = riscv64 QEMU_ARCH_s390 = s390x QEMU_ARCH_loongarch = loongarch64 @@ -88,6 +92,7 @@ QEMU_ARGS_arm64 = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC QEMU_ARGS_arm = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_ppc = -M g3beige -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" +QEMU_ARGS_ppc64le = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_s390 = -M s390-ccw-virtio -m 1G -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_loongarch = -M virt -append "console=ttyS0,115200 panic=-1 $(TEST:%=NOLIBC_TEST=%)" @@ -104,6 +109,7 @@ Q=@ endif CFLAGS_ppc = -m32 -mbig-endian -mno-vsx $(call cc-option,-mmultiple) +CFLAGS_ppc64le = -m64 -mlittle-endian -mno-vsx $(call cc-option,-mabi=elfv2) CFLAGS_s390 = -m64 CFLAGS_mips = -EL CFLAGS_STACKPROTECTOR ?= $(call cc-option,-mstack-protector-guard=global $(call cc-option,-fstack-protector-all)) From patchwork Sat Aug 5 18:44:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131531 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp608454vqr; Sat, 5 Aug 2023 12:40:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGjtFDiSyHkDzIZOuU9G8XtlSbNtWGO0MM3deLtS+FfP/tzlNgfMXaLTbQjjZFk5wAWYsjg X-Received: by 2002:a17:903:249:b0:1bb:1e69:28be with SMTP id j9-20020a170903024900b001bb1e6928bemr5153990plh.42.1691264412071; Sat, 05 Aug 2023 12:40:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691264412; cv=none; d=google.com; s=arc-20160816; b=e3SwJtF1MQth2wtU9U+UlyFMCOuBBhMlF/tK9Qz1NnQLZPj7qaXvPer6bpM56JY7/p QVbDNECOR0fS/1CkcPLApJ66kdQUTnfQ2SVbjMcf0kvpt6fJ/L0zRUaKsvJ1oG0AW3hF k81Mu9dDu83b+k+V0hl4u+3GBNVlGcHwbJgYhO189aF2NubLsG9e4YlviQ10YObf/PI5 wqD/DzirRr4lc6NWidkL3tzeClvgVYcH73HSTs7W+S+7KWhXy3HeRKPoolIkvOhjlOjt f1QyFvzZXF4QBNVtNJBK3yasUbLgG+DdR1Hth2Io7vO3z3W44bX40mln3/4zy8Zkmg8D ZjoA== 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=5ah4HSixMKkHd/9VeoarIYfc2qS0ap5Qru4vnudljWU=; fh=qDuYiBigcDB5OOi2VEjvZowinM7+A028kB0vdTLYbmY=; b=ibQL95nLNXyJ2SUlA9v0MKV7NDA4E4iIHrH2Y/v3Dd9oIsNUlNpi/qqfDd6cWdRw6r RkB6VWbOx41vdb1FGqEvgHWrIIVTfse74VECMkKyaI1AdiWvpnZa9L1iTWIy2D/JJghb PT7ca1DhoLB9prSr2BmDiBPniTu3xbuiC4r5nJ0tcmyay1I1zyBeTIb/K3Hbr3QUnroA C5QI/CQZanPGtcqAthqKvtzUiCxH6GgGICNVditnRbUNVqbCLT2gO2OopLMDXHFjkBvG rjvxwXQhPl/qmqMTTxUygPZoF2+nd1uS+CiOFl6FjjE9jGygttGsT5OqMhCoyhIi3mu/ x51g== 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 p20-20020a170902e35400b001b9ed01eb1dsi3352015plc.361.2023.08.05.12.39.59; Sat, 05 Aug 2023 12:40:12 -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 S230211AbjHESpQ (ORCPT + 99 others); Sat, 5 Aug 2023 14:45:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229441AbjHESpO (ORCPT ); Sat, 5 Aug 2023 14:45:14 -0400 Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E9331BE4; Sat, 5 Aug 2023 11:45:10 -0700 (PDT) X-QQ-mid: bizesmtp78t1691261100tidbvvh9 Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:44:59 +0800 (CST) X-QQ-SSF: 00200000000000E0X000B00A0000000 X-QQ-FEAT: UJd4nZbM1CcH9VmzxClkr0cKwdDukNdu9aGDvRmht/UB70m5zE7F3giKejMEj JUN8J66vLKn6mlGW3Jza2xaIB5Dh3+tIqiX8BmRKEZdO/aVqXvaCjk2QGC5PbLe/PwxVoE7 QOQ5UaPdMgrfUR3NQ2dtJ6cJitapMwzZBd8444fG/y8C2dhF0xfwSxhLCfEj899ySPFTRHB Dtr8zZkNc+NXt1h7Vg90U1eMsyaBJmTTZA50nbUho6y7PR4SnOOalGqPj+mpW3rScYtcU8I ZxneTrjfDCaKRQJp8QYbBK+3fpxIOP96gwZ3tzMQZukeyd/fOivAc8c1OXlTuVsOHzJQ3uC vHgSVGmha1k+9tLwiVb48pIVmrmEa21PY5X4tAiBEfD84E+uo3V2luZqBBIeVDErI59BfyS ESGfsOOjJQM= X-QQ-GoodBg: 0 X-BIZMAIL-ID: 3337033072005867611 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Subject: [PATCH v6 6/8] selftests/nolibc: add test support for ppc64 Date: Sun, 6 Aug 2023 02:44:58 +0800 Message-Id: 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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_PASS,URIBL_BLOCKED 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: 1773419271836598013 X-GMAIL-MSGID: 1773419271836598013 Kernel uses ARCH=powerpc for both 32-bit and 64-bit PowerPC, here adds a ppc64 variant for big endian 64-bit PowerPC, users can pass XARCH=ppc64 to test it. The powernv machine of qemu-system-ppc64 is used with powernv_be_defconfig. As the document [1] shows: PowerNV (as Non-Virtualized) is the “bare metal” platform using the OPAL firmware. It runs Linux on IBM and OpenPOWER systems and it can be used as an hypervisor OS, running KVM guests, or simply as a host OS. Notes, - differs from little endian 64-bit PowerPC, vmlinux is used instead of zImage, because big endian zImage [2] only boot on qemu with x-vof=on (added from qemu v7.0) and a fixup patch [3] for qemu v7.0.51: - since the VSX support may be disabled in kernel side, to avoid "illegal instruction" errors due to missing VSX kernel support, let's simply let compiler not generate vector/scalar (VSX) instructions via the '-mno-vsx' option. - as 'man gcc' shows, '-mmultiple' is used to generate code that uses the load multiple word instructions and the store multiple word instructions. Those instructions do not work when the processor is in little-endian mode (except PPC740/PPC750), so, we only enable it for big endian powerpc. - for big endian ppc64, as the help message from arch/powerpc/Kconfig shows, the V2 ABI is standard for 64-bit little-endian, but for big-endian it is less well tested by kernel and toolchain, so, use elfv1 as-is, no need to explicitly ask toolchain to use elfv2 here. [1]: https://qemu.readthedocs.io/en/latest/system/ppc/powernv.html [2]: https://github.com/linuxppc/issues/issues/402 [3]: https://lore.kernel.org/qemu-devel/20220504065536.3534488-1-aik@ozlabs.ru/ Suggested-by: Willy Tarreau Link: https://lore.kernel.org/lkml/20230722121019.GD17311@1wt.eu/ Link: https://lore.kernel.org/lkml/20230719043353.GC5331@1wt.eu/ Reviewed-by: Thomas Weißschuh Signed-off-by: Zhangjin Wu --- tools/testing/selftests/nolibc/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 586f278ddd66..452d8e424d28 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -35,6 +35,7 @@ XARCH = $(or $(XARCH_$(ARCH)),$(ARCH)) # map from user input variants to their kernel supported architectures ARCH_ppc = powerpc +ARCH_ppc64 = powerpc ARCH_ppc64le = powerpc ARCH := $(or $(ARCH_$(XARCH)),$(XARCH)) @@ -46,6 +47,7 @@ IMAGE_arm64 = arch/arm64/boot/Image IMAGE_arm = arch/arm/boot/zImage IMAGE_mips = vmlinuz IMAGE_ppc = vmlinux +IMAGE_ppc64 = vmlinux IMAGE_ppc64le = arch/powerpc/boot/zImage IMAGE_riscv = arch/riscv/boot/Image IMAGE_s390 = arch/s390/boot/bzImage @@ -61,6 +63,7 @@ DEFCONFIG_arm64 = defconfig DEFCONFIG_arm = multi_v7_defconfig DEFCONFIG_mips = malta_defconfig DEFCONFIG_ppc = pmac32_defconfig +DEFCONFIG_ppc64 = powernv_be_defconfig DEFCONFIG_ppc64le = powernv_defconfig DEFCONFIG_riscv = defconfig DEFCONFIG_s390 = defconfig @@ -78,6 +81,7 @@ QEMU_ARCH_arm64 = aarch64 QEMU_ARCH_arm = arm QEMU_ARCH_mips = mipsel # works with malta_defconfig QEMU_ARCH_ppc = ppc +QEMU_ARCH_ppc64 = ppc64 QEMU_ARCH_ppc64le = ppc64le QEMU_ARCH_riscv = riscv64 QEMU_ARCH_s390 = s390x @@ -92,6 +96,7 @@ QEMU_ARGS_arm64 = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC QEMU_ARGS_arm = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_ppc = -M g3beige -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" +QEMU_ARGS_ppc64 = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_ppc64le = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" QEMU_ARGS_s390 = -M s390-ccw-virtio -m 1G -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" @@ -109,6 +114,7 @@ Q=@ endif CFLAGS_ppc = -m32 -mbig-endian -mno-vsx $(call cc-option,-mmultiple) +CFLAGS_ppc64 = -m64 -mbig-endian -mno-vsx $(call cc-option,-mmultiple) CFLAGS_ppc64le = -m64 -mlittle-endian -mno-vsx $(call cc-option,-mabi=elfv2) CFLAGS_s390 = -m64 CFLAGS_mips = -EL From patchwork Sat Aug 5 18:46:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131536 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp613713vqr; Sat, 5 Aug 2023 13:00:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHJgu+yn5Iw8kJ9mWbc7zhuLuDrv/xAIBEFLoDW8wbnRf+r2zsXgmVcKfSMCaj87otZe2FT X-Received: by 2002:aa7:d357:0:b0:522:2add:5841 with SMTP id m23-20020aa7d357000000b005222add5841mr3498075edr.7.1691265609169; Sat, 05 Aug 2023 13:00:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691265609; cv=none; d=google.com; s=arc-20160816; b=oO+2ec4dypST7K7KxetFwLBv+xx9kYTyBgeM8RCpPsbGzDBrFqt8fGFpCXicJsIR+g ZiZSWTYRaqL8Pjx3P1OqCzqG9jqXiZZeWbQlojN0yJKur+OCgj4OnF0WgR+eP8zI++2g xuOWCkmDoELM3MGPZX/SJ+Fcd7CaB1Pefg91QuKLIr0ULI3HQdNuBwXP2CHm8YIIODyp aAnIj/qAFHekpmzkSrwifkADovgPolRpc0gcx/urt0cujfS20ocU3lO6mh4KR7wCnItv B5aDz6YmK3zXu/ZiQ+YKTSk6K+KDmN035j+gsWVM6+s9vzgpxwncZ8BbbB/p9i4T9sVc RJWA== 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=/IJSXiWDPy2yGiaXHnr8zkVQOuEYalzKCAyxj+SCrHM=; fh=W7bimvGvo0lTWlwz0fu1fcegkvlIQ1MGOcj/f5qtBos=; b=Z0/PRf2KynN0g5mVnxJWr32i1Q6OFIM+cos9jcfDL6C4XVl758AnwAFC5iTcurnOtt jsykPOR5lW68NVcUITpRuQw/uKq5Q2V2nR9gBPdbWz9rHNZopFERu7eP5sNOxU0t7D4K s2LlHIfzNn7+Gq8aIILd9bdzVj8xBDOkk2+z6WeLWotgtfYvPbRIbugcut9TY6so451c 1aQCC3v4h35D+C7EhP0eSJ9u3c6qpkOuF2c2RXBM2blIPYcz7z7uoySIeMTMQMj53SWN KvxIVXf3BD6+dG3FVkMjwXBhYD2oNFQ7OC2wPVnw4WfSARda81T1R4kE/eRd/uLZpmq2 Ygtg== 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 i10-20020a50fc0a000000b0052228322ac8si3544348edr.154.2023.08.05.12.59.45; Sat, 05 Aug 2023 13:00:09 -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 S230222AbjHESqW (ORCPT + 99 others); Sat, 5 Aug 2023 14:46:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230050AbjHESqU (ORCPT ); Sat, 5 Aug 2023 14:46:20 -0400 Received: from smtpbgeu2.qq.com (smtpbgeu2.qq.com [18.194.254.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D533A1BE4; Sat, 5 Aug 2023 11:46:15 -0700 (PDT) X-QQ-mid: bizesmtp74t1691261166tr51mwlx Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:46:04 +0800 (CST) X-QQ-SSF: 01200000000000E0X000B00A0000000 X-QQ-FEAT: +bXiSo2NuBc72kCN4qQlj4Lqddv9gwYnm8KLDRKgB14qter2jdJhaXimrmWeM D52Gx8aygUqGks7WCB4egYTk1EGgdkEO4Mcwot44W9Y1Q5PwQDzn/l3o57xypA2QSzQWQu0 DnzqJnukzzvI8wlNJRM0jRPfJe0mWtRftQSA/HyBAaeRbWRkI3IPKW+M5xzHwJNw5iqVaZm b/20AAOOucrtZI9C3sFm+h4XTl+69Z8g7H83NEc29mgajdCYmDy6M52xcVVR+r7HnZnIqDg YrQ4R+/JYYUcRGAj/PPPw/j9whd6kALZXTQqEXji6V6l+THjFC+8sFgdOaMum5HNx+d9nC5 a8RBztzXYf3FvbezqbF5bH6jxV0m64GqVZ3NjvXYVBl0onb/QMkQ/UMYY040Q== X-QQ-GoodBg: 0 X-BIZMAIL-ID: 10931000458716054793 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de Subject: [PATCH v6 7/8] selftests/nolibc: allow customize CROSS_COMPILE by architecture Date: Sun, 6 Aug 2023 02:46:03 +0800 Message-Id: <8f21df212f07a43d7534dedfd2beb4c8a2e05308.1691259983.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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_PASS, T_SPF_HELO_TEMPERROR 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: 1773420526933235943 X-GMAIL-MSGID: 1773420526933235943 Some cross compilers may not just be prefixed with ARCH, customize them by architecture may simplify the test a lot, especially, when iterate with ARCH. After customizing this for every architecture, the minimal test argument will be architecture itself, no CROSS_COMPILE required to be passed. If the prefix of installed cross compiler is not the same as the one customized, we can also pass CROSS_COMPILE as before or even pass CROSS_COMPILE_. Signed-off-by: Zhangjin Wu --- tools/testing/selftests/nolibc/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 452d8e424d28..45d231b9c5c2 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -55,6 +55,12 @@ IMAGE_loongarch = arch/loongarch/boot/vmlinuz.efi IMAGE = $(IMAGE_$(XARCH)) IMAGE_NAME = $(notdir $(IMAGE)) +# CROSS_COMPILE: cross toolchain prefix by architecture +CROSS_COMPILE ?= $(CROSS_COMPILE_$(XARCH)) + +# make sure CC is prefixed with CROSS_COMPILE +$(call allow-override,CC,$(CROSS_COMPILE)gcc) + # default kernel configurations that appear to be usable DEFCONFIG_i386 = defconfig DEFCONFIG_x86_64 = defconfig From patchwork Sat Aug 5 18:47:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 131534 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp612534vqr; Sat, 5 Aug 2023 12:55:43 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGlx+42yT/QoBZE4e4J7/sOOYplngBWhj/+/lMbPbs2pNG7/CQpY2QYZPGd27lkBKezr+bL X-Received: by 2002:a19:915c:0:b0:4fc:3756:754e with SMTP id y28-20020a19915c000000b004fc3756754emr3235172lfj.56.1691265342840; Sat, 05 Aug 2023 12:55:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691265342; cv=none; d=google.com; s=arc-20160816; b=zbzr16VCBiV3IsflWUZqd3jVSala/bzimnXsErVhvCEmdyITpYQcyz2gH3qEOZf9eo ZIEPRC1ajX1Bc6EwSnmCWwq2Nw1npz1YONPtC3L7kcy/8ajRLnTWqhfEBFLgtmdcK5N/ FQyZ5TBnYJRqG5QJZFmsYSbQCORqxsyejaQ3VhNIbVMs8fBlJ2zu6Q1srGdd9+RgzlOg HqROFXpTOgmD707GbYQzmQepLGldIKpdYlz0J/iAS1tpIE/FtMStzl4lB6TPUg06GgBv wNZx3ST5uz06B4wQTPSpZKQBVNf3p3sn/rKbERwDEy7oZoQ8In/8VYgjTGk/eJ1GEt/a KlMQ== 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=L9HB5rL0JQJNyd0hIyFZbK/IKYHiO6F6eQgdSy/U/UU=; fh=W7bimvGvo0lTWlwz0fu1fcegkvlIQ1MGOcj/f5qtBos=; b=Tuz726CdzomSCILRlJFDBZu0gFZpO3zFjPOTVyAa/P5GEfuWOCxRgACsWMRen6l7cm Wi+sgWuoRvN3zLYSQE9R6nUMz6anBxtY5XI2/Q8rjyQTAFUCOK4Y67UFW681zrPCrJDD 9AAPIU17tx6S+tiRKjXvn6YhAiBGOuRbV6rh2148wsNgsq7MO7mCyjZHkwoExLbFx7zb XFuWWY9hf+xBCH7tR36ee04+Dyu+cYpxHFiFDbHZXsjmJjFH1WUpHnRrAr1+Hn/ZuoVy MSHDaUuTdWlyTBTFsGfoFYlFDzAUxm7o6Gsz/AofCA/6X+QggtYCiofTh75iIMiNi7H2 LTRw== 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 o18-20020aa7c512000000b005230d2fde4bsi3321057edq.639.2023.08.05.12.55.19; Sat, 05 Aug 2023 12:55:42 -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 S229708AbjHESr2 (ORCPT + 99 others); Sat, 5 Aug 2023 14:47:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229662AbjHESr0 (ORCPT ); Sat, 5 Aug 2023 14:47:26 -0400 Received: from smtpbgau1.qq.com (smtpbgau1.qq.com [54.206.16.166]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 670622D72; Sat, 5 Aug 2023 11:47:22 -0700 (PDT) X-QQ-mid: bizesmtp82t1691261231ty7dc1hm Received: from linux-lab-host.localdomain ( [116.30.131.233]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 06 Aug 2023 02:47:10 +0800 (CST) X-QQ-SSF: 01200000000000E0X000B00A0000000 X-QQ-FEAT: IflLXxRcVR1gTGRr2ilcxmRzcus46IF74wtKQ1oFpYWF072KtLJW0K9dIyVlQ tohiSan5e61KVmLF1i837mkqkFeEpBoKGRNFKxoJR7iO7LtaKY504LrTMtnCdLw3BYmNgR0 uAi3fjj2iGvwuTi3rX88NGC8qRmaNrQaKg1Z9XcDF7Lj0ZJrxsHLZIh4VM2TT+i3H1cW0y7 qcJ+At/jX0gv6Djuqg7s54+B6Il6vJ24id4luOv9ZOxNwnxIXbeIPQr5OH2x0C04z0ga7vt Hxy0/9GCxzQbl2AlPzJ6lKTqHblp+b1WlhabeplbLHHAzCY/Vvi5tTAuJrvo/1ny6BZSttY kHzK8vCDkB0l2k6jjCiaTu9GUsveogjLy9M0n/VrT6raAe5sFlMMbf46ftfwEgLPzuxUDYw X-QQ-GoodBg: 0 X-BIZMAIL-ID: 2403698746126952363 From: Zhangjin Wu To: w@1wt.eu Cc: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, tanyuan@tinylab.org, thomas@t-8ch.de Subject: [PATCH v6 8/8] selftests/nolibc: customize CROSS_COMPILE for 32/64-bit powerpc Date: Sun, 6 Aug 2023 02:47:09 +0800 Message-Id: <2c3ac4542621ddc4b2cab006ae8e3a7b709921f1.1691259983.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=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,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: 1773420248114744498 X-GMAIL-MSGID: 1773420248114744498 The little-endian powerpc64le compilers provided by Ubuntu and Fedora are able to compile big endian kernel and big endian nolibc-test [1]. These default CROSS_COMPILE settings allow to test target architectures with: $ cd /path/to/tools/testing/selftests/nolibc/ $ for arch in ppc ppc64 ppc64le; do \ make run-user XARCH=$arch | grep "status: "; \ done If want to use another cross compiler, please simply pass CROSS_COMPILE or CC as before. For example, it is able to build 64-bit nolibc-test with the big endian powerpc64-linux-gcc crosstool from [2]: $ wget -c https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-powerpc64-linux.tar.xz $ tar xvf x86_64-gcc-13.1.0-nolibc-powerpc64-linux.tar.xz $ export PATH=$PWD/gcc-13.1.0-nolibc/powerpc64-linux/bin/:$PATH $ export CROSS_COMPILE_ppc=powerpc64-linux- $ export CROSS_COMPILE_ppc64=powerpc64-linux- $ export CROSS_COMPILE_ppc64le=powerpc64-linux- $ for arch in ppc ppc64 ppc64le; do \ make run-user XARCH=$arch | grep "status: "; \ done Or specify CC directly with full path: $ export CC=$PWD/gcc-13.1.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc $ for arch in ppc ppc64 ppc64le; do \ make run-user XARCH=$arch | grep "status: "; \ done [1]: https://github.com/open-power/skiboot [2]: https://mirrors.edge.kernel.org/pub/tools/crosstool/ Signed-off-by: Zhangjin Wu --- tools/testing/selftests/nolibc/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 45d231b9c5c2..b4171a754eb2 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -56,6 +56,9 @@ IMAGE = $(IMAGE_$(XARCH)) IMAGE_NAME = $(notdir $(IMAGE)) # CROSS_COMPILE: cross toolchain prefix by architecture +CROSS_COMPILE_ppc ?= powerpc-linux-gnu- +CROSS_COMPILE_ppc64 ?= powerpc64le-linux-gnu- +CROSS_COMPILE_ppc64le ?= powerpc64le-linux-gnu- CROSS_COMPILE ?= $(CROSS_COMPILE_$(XARCH)) # make sure CC is prefixed with CROSS_COMPILE