From patchwork Mon May 29 20:01:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhangjin Wu X-Patchwork-Id: 100419 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp1749363vqr; Mon, 29 May 2023 13:24:11 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4qq2mT/0RdBqlSEuTVxPxU1WlFOw7NqIz+Mt5fc58DhXdyNOP5LzFIxSMVcLgvZI5qLHHI X-Received: by 2002:a17:902:b20c:b0:1ae:8b4b:327d with SMTP id t12-20020a170902b20c00b001ae8b4b327dmr175018plr.42.1685391851297; Mon, 29 May 2023 13:24:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685391851; cv=none; d=google.com; s=arc-20160816; b=dGoAWlZJZ0Y/YplvxcFGJwzaRhBvHUgYBO72ytG4EbSjlYvJuwU+NtXo49bXNcIu1h axJUtcRsgPfM8HHCZIIFlmjQM1qA51tVBWjT8WaiRXgJSRLkoVYKtbGi46t9X93WsVHl r++9oAFXbbq+IA9fRTaEhGlwtsAZLHC4MAFc3WCMUdVUO1T9jkuyTY91BjgNIhPEU5xs KE4O6cpWQpyo81/XOhLnvShE1dK5ZTxvIxdAxsUhbaT1+fR3+xIlzBh878PHPw4YmlWk h4e5AexTG/2sBCdLGg/ibX5rm4rD20gA1xWuHWteKPMj31TrwHBcDz/tpfjHgOW2+3Zs zaQQ== 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=gDoU3O0IVGoZ1IBu3dgXw3rC9jps/gzm4oWKt7CoNpw=; b=I3LgO0yXHa5mG53HHLWmx5S0mVQlyQ+Es4MGqm1JlMl6HuFqJKHUustbQQOEYPSxU3 /IW5thod63MaFBwl9axgjY4sLw+1GZRc4tFXZoSzNL5e39aWJFAt02+cJ/JKnkyvaXyc PVX35tCrKgsHsp3q137myBYGQ9wQgjCcHmKhvktKiUn4CwbRvT38quRS+4QMIwY+rkm9 TpuBG+YzxTcZo2/joBa9EtNTqR3uT7Z554BGdUTs2S2yHNlKViJ8zgHZR6DIKRaRrJtX H7HFPJTVSLfE6m4y/GYl++y/VYRsrR8tSpDIxOTJMjlx+xxRPJZtKUqXr+RhtPrsxKrj zscw== 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 c24-20020a170902b69800b001a63889512csi6258932pls.135.2023.05.29.13.23.58; Mon, 29 May 2023 13:24:11 -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 S229611AbjE2UCT (ORCPT + 99 others); Mon, 29 May 2023 16:02:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229561AbjE2UCR (ORCPT ); Mon, 29 May 2023 16:02:17 -0400 Received: from bg4.exmail.qq.com (bg4.exmail.qq.com [43.154.221.58]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CE2BECF; Mon, 29 May 2023 13:02:15 -0700 (PDT) X-QQ-mid: bizesmtp82t1685390525tz5qfwin Received: from linux-lab-host.localdomain ( [119.123.130.80]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 30 May 2023 04:02:04 +0800 (CST) X-QQ-SSF: 01200000000000D0V000000A0000000 X-QQ-FEAT: znfcQSa1hKbqS/wmQkhqLdwrSmiDHvyr6TKGy5erBP95lAX2a5SNTQj/PK8Ly 8Q83734ok7p3uV3bvpoEUwgs/ETtKRKuQB1PRX5jqAcr3G2iCef+kteIP98SFtKkceBncv+ MU25NzwaU1R+nbXctsMuEFHS4GBXB9qUQ0DCeQXoztp3RNnsWwxo8HnSRzot7jR2VfW2qdn 29yKvC/LFYAoenIfSYWVRR4hZ8lMsHjfDJ9j4zsH/TH/t6nPtK+9vP1YoxnWxDgYLfCbZ4c mg5+yl3HmrTNLLQb+iT5TFdh2GXi5osb3dyKJfwwtXfTWtDSt5YeDV3rGF3HkCOdyhQFJ6J 6+l86v9uzLe/q46AZmM1/ZbROiYVJMj7zfWr2h1gTU8UOyK/JX+o2QuEH055w== X-QQ-GoodBg: 0 X-BIZMAIL-ID: 4662585006422710528 From: Zhangjin Wu To: w@1wt.eu Cc: arnd@arndb.de, falcon@tinylab.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-riscv@lists.infradead.org, thomas@t-8ch.de Subject: [PATCH v2 12/13] tools/nolibc: sys_wait4: add waitid syscall support Date: Tue, 30 May 2023 04:01:13 +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:qybglogicsvrsz:qybglogicsvrsz3a-3 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1767261445967396144?= X-GMAIL-MSGID: =?utf-8?q?1767261445967396144?= rv32 uses the generic include/uapi/asm-generic/unistd.h and it has no __NR_wait4 after kernel commit d4c08b9776b3 ("riscv: Use latest system call ABI"), use __NR_waitid instead. This code is based on sysdeps/unix/sysv/linux/wait4.c of glibc. Signed-off-by: Zhangjin Wu --- tools/include/nolibc/sys.h | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h index 533233094733..a32b90b1fd3b 100644 --- a/tools/include/nolibc/sys.h +++ b/tools/include/nolibc/sys.h @@ -12,6 +12,7 @@ /* system includes */ #include +#include /* for siginfo_t */ #include /* for SIGCHLD */ #include #include @@ -1373,7 +1374,56 @@ int unlink(const char *path) static __attribute__((unused)) pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage) { +#ifdef __NR_wait4 return my_syscall4(__NR_wait4, pid, status, options, rusage); +#elif defined(__NR_waitid) + siginfo_t infop; + int idtype = P_PID; + int ret; + + if (pid < -1) { + idtype = P_PGID; + pid *= -1; + } else if (pid == -1) { + idtype = P_ALL; + } else if (pid == 0) { + idtype = P_PGID; + } + + options |= WEXITED; + + ret = my_syscall5(__NR_waitid, idtype, pid, &infop, options, rusage); + if (ret < 0) + return ret; + + if (status) { + switch (infop.si_code) { + case CLD_EXITED: + *status = W_EXITCODE(infop.si_status, 0); + break; + case CLD_DUMPED: + *status = WCOREFLAG | infop.si_status; + break; + case CLD_KILLED: + *status = infop.si_status; + break; + case CLD_TRAPPED: + case CLD_STOPPED: + *status = W_STOPCODE(infop.si_status); + break; + case CLD_CONTINUED: + *status = W_CONTINUED; + break; + default: + *status = 0; + break; + } + } + + return infop.si_pid; +#else +#error Neither __NR_wait4 nor __NR_waitid defined, cannot implement sys_wait4() +#endif } static __attribute__((unused))