From ec4a3f7bb5a6535a3e823ebf1df061aa203a1bea Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Tue, 9 Apr 2019 00:03:20 -0700 Subject: [PATCH] [LibOS] Emulate clone(CLONE_VFORK | CLONE_VM | SIGCHLD) as vfork() Some runtimes use clone(CLONE_VFORK | CLONE_VM | SIGCHLD) for vfork(). --- LibOS/shim/src/sys/shim_clone.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/LibOS/shim/src/sys/shim_clone.c b/LibOS/shim/src/sys/shim_clone.c index b456429a..b6648958 100644 --- a/LibOS/shim/src/sys/shim_clone.c +++ b/LibOS/shim/src/sys/shim_clone.c @@ -171,6 +171,13 @@ int shim_do_clone (int flags, void * user_stack_addr, int * parent_tidptr, int * set_parent_tid = NULL; int ret = 0; + /* special case for vfork. some runtime uses clone() for vfork */ + if (flags == (CLONE_VFORK | CLONE_VM | SIGCHLD) && + user_stack_addr == NULL && parent_tidptr == NULL && + child_tidptr == NULL && tls == NULL) { + return shim_do_vfork(); + } + assert((flags & ~(CLONE_PARENT_SETTID|CLONE_CHILD_SETTID| CLONE_CHILD_CLEARTID|CLONE_SETTLS| CLONE_VM|CLONE_FILES|