aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/clone_internal.h24
1 files changed, 19 insertions, 5 deletions
diff --git a/include/clone_internal.h b/include/clone_internal.h
index 4b23ef33ce..73b8114df4 100644
--- a/include/clone_internal.h
+++ b/include/clone_internal.h
@@ -1,10 +1,24 @@
-#ifndef _CLONE3_H
-#include_next <clone3.h>
+#ifndef _CLONE_INTERNAL_H
+#define _CLONE_INTERNAL_H
-extern __typeof (clone3) __clone3;
+#include <clone3.h>
-/* The internal wrapper of clone/clone2 and clone3. If __clone3 returns
- -1 with ENOSYS, fall back to clone or clone2. */
+/* The clone3 syscall provides a superset of the functionality of the clone
+ interface. The kernel might extend __CL_ARGS struct in the future, with
+ each version with a diffent __SIZE. If the child is created, it will
+ start __FUNC function with __ARG arguments.
+
+ Different than kernel, the implementation also returns EINVAL for an
+ invalid NULL __CL_ARGS or __FUNC (similar to __clone).
+
+ This function is only implemented if the ABI defines HAVE_CLONE3_WRAPPER.
+*/
+extern int __clone3 (struct clone_args *__cl_args, size_t __size,
+ int (*__func) (void *__arg), void *__arg);
+
+/* The internal wrapper of clone/clone2 and clone3. Different than __clone3,
+ it will align the stack if required. If __clone3 returns -1 with ENOSYS,
+ fall back to clone or clone2. */
extern int __clone_internal (struct clone_args *__cl_args,
int (*__func) (void *__arg), void *__arg);