linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
	valentin.schneider@arm.com, linux-kernel@vger.kernel.org,
	Willy Tarreau <w@1wt.eu>
Subject: [PATCH 4/9] tools/nolibc: implement fork() based on clone()
Date: Thu, 21 Jan 2021 08:20:26 +0100	[thread overview]
Message-ID: <20210121072031.23777-5-w@1wt.eu> (raw)
In-Reply-To: <20210121072031.23777-1-w@1wt.eu>

Some archs such as arm64 do not have fork() and have to use clone()
instead so let's make fork() always use clone() when available. This
requires to include signal.h to get the definition of SIGCHLD.
[This is nolibc's upstream commit d2dc42fd6149]

Signed-off-by: Willy Tarreau <w@1wt.eu>
---
 tools/include/nolibc/nolibc.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/tools/include/nolibc/nolibc.h b/tools/include/nolibc/nolibc.h
index 9209da89044a..fdd5524e0e54 100644
--- a/tools/include/nolibc/nolibc.h
+++ b/tools/include/nolibc/nolibc.h
@@ -271,6 +271,8 @@ struct stat {
 #define WEXITSTATUS(status)   (((status) & 0xff00) >> 8)
 #define WIFEXITED(status)     (((status) & 0x7f) == 0)
 
+/* for SIGCHLD */
+#include <asm/signal.h>
 
 /* Below comes the architecture-specific code. For each architecture, we have
  * the syscall declarations and the _start code definition. This is the only
@@ -1529,7 +1531,15 @@ int sys_execve(const char *filename, char *const argv[], char *const envp[])
 static __attribute__((unused))
 pid_t sys_fork(void)
 {
+#ifdef __NR_clone
+	/* note: some archs only have clone() and not fork(). Different archs
+	 * have a different API, but most archs have the flags on first arg and
+	 * will not use the rest with no other flag.
+	 */
+	return my_syscall5(__NR_clone, SIGCHLD, 0, 0, 0, 0);
+#else
 	return my_syscall0(__NR_fork);
+#endif
 }
 
 static __attribute__((unused))
-- 
2.28.0


  parent reply	other threads:[~2021-01-21  7:28 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-21  7:20 [PATCH 0/9] tools/nolibc: fix build issues on aarch64 after unistd cleanup Willy Tarreau
2021-01-21  7:20 ` [PATCH 1/9] tools/nolibc: the definition dup() was missing Willy Tarreau
2021-01-21  7:20 ` [PATCH 2/9] tools/nolibc: make dup2() rely on dup3() when available Willy Tarreau
2021-01-21  7:20 ` [PATCH 3/9] tools/nolibc: make getpgrp() fall back to getpgid(0) Willy Tarreau
2021-01-21  7:20 ` Willy Tarreau [this message]
2021-01-21  7:20 ` [PATCH 5/9] tools/nolibc: implement poll() based on ppoll() Willy Tarreau
2021-01-21  7:20 ` [PATCH 6/9] tools/nolibc: get timeval, timespec and timezone from linux/time.h Willy Tarreau
2021-01-21  7:20 ` [PATCH 7/9] tools/nolibc: remove incorrect definitions of __ARCH_WANT_* Willy Tarreau
2021-01-21  7:20 ` [PATCH 8/9] tools/nolibc: emit a detailed error when missing alternate syscall number definitions Willy Tarreau
2021-01-21  7:20 ` [PATCH 9/9] tools/nolibc: fix position of -lgcc in the documented example Willy Tarreau
2021-01-21  7:48 ` [PATCH 10/9] tools/rcutorture: fix position of -lgcc in mkinitrd.sh Willy Tarreau
2021-01-21 11:05 ` [PATCH 0/9] tools/nolibc: fix build issues on aarch64 after unistd cleanup Valentin Schneider
2021-01-21 11:07   ` Willy Tarreau
2021-01-21 11:13   ` Mark Rutland
2021-01-21 11:11 ` Mark Rutland
2021-01-21 14:18   ` Willy Tarreau
2021-01-21 19:54     ` Paul E. McKenney
2021-01-21 20:17       ` Willy Tarreau
2021-01-21 21:36         ` Paul E. McKenney
2021-01-22 12:03   ` Paul E. McKenney
2021-01-22 12:25     ` Mark Rutland
2021-01-22 15:42       ` Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210121072031.23777-5-w@1wt.eu \
    --to=w@1wt.eu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=paulmck@kernel.org \
    --cc=valentin.schneider@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).