aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Chagin <dchagin@FreeBSD.org>2022-03-31 17:42:03 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2022-03-31 17:42:03 +0000
commitc7ef7c3facaf663c3da2d91916bcb2f162fc300e (patch)
treee80f36c0e3cedb4522fdc6b1d6331ac526f41842
parentd7e1e138ec66e410f525413b0caed089139f3cc0 (diff)
downloadsrc-c7ef7c3facaf663c3da2d91916bcb2f162fc300e.tar.gz
src-c7ef7c3facaf663c3da2d91916bcb2f162fc300e.zip
linux(4): Add support for __WALL wait option bit.
As FreeBSD does not have __WALL option bit analogue explicitly set all possible option bits to emulate Linux __WALL wait option bit. Reviewed by: emaste Differential revision: https://reviews.freebsd.org/D31555 MFC after: 2 weeks
-rw-r--r--sys/compat/linux/linux_misc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index e2c231ed3460..6eae0fc01694 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -1063,6 +1063,14 @@ linux_wait4(struct thread *td, struct linux_wait4_args *args)
*/
options |= WEXITED | WTRAPPED;
+ /*
+ * As FreeBSD does not have __WALL option bit analogue explicitly set all
+ * possible option bits to emulate Linux __WALL wait option bit. The same
+ * for waitid system call.
+ */
+ if ((args->options & __WALL) != 0)
+ options |= WUNTRACED | WCONTINUED | WLINUXCLONE;
+
if (args->pid == WAIT_ANY) {
idtype = P_ALL;
id = 0;
@@ -1096,6 +1104,9 @@ linux_waitid(struct thread *td, struct linux_waitid_args *args)
options = 0;
linux_to_bsd_waitopts(args->options, &options);
+ if ((args->options & __WALL) != 0)
+ options |= WEXITED | WTRAPPED | WUNTRACED |
+ WCONTINUED | WLINUXCLONE;
switch (args->idtype) {
case LINUX_P_ALL: