(root)/
glibc-2.38/
include/
clone_internal.h
       1  #ifndef _CLONE_INTERNAL_H
       2  #define _CLONE_INTERNAL_H
       3  
       4  #include <clone3.h>
       5  
       6  /* The clone3 syscall provides a superset of the functionality of the clone
       7     interface.  The kernel might extend __CL_ARGS struct in the future, with
       8     each version with a different __SIZE.  If the child is created, it will
       9     start __FUNC function with __ARG arguments.
      10  
      11     Different than kernel, the implementation also returns EINVAL for an
      12     invalid NULL __CL_ARGS or __FUNC (similar to __clone).
      13  
      14     All callers are responsible for correctly aligning the stack.  The stack is
      15     not aligned prior to the syscall (this differs from the exported __clone).
      16  
      17     This function is only implemented if the ABI defines HAVE_CLONE3_WRAPPER.
      18  */
      19  extern int __clone3 (struct clone_args *__cl_args, size_t __size,
      20  		     int (*__func) (void *__arg), void *__arg);
      21  
      22  /* The internal wrapper of clone/clone2 and clone3.  Different than __clone3,
      23     it will align the stack if required.  If __clone3 returns -1 with ENOSYS,
      24     fall back to clone or clone2.  */
      25  extern int __clone_internal (struct clone_args *__cl_args,
      26  			     int (*__func) (void *__arg), void *__arg);
      27  /* clone3 wrapper with a sticky check to avoid re-issuing the syscall if
      28     it fails with ENOSYS.  */
      29  extern int __clone3_internal (struct clone_args *cl_args,
      30  			      int (*func) (void *args), void *arg)
      31       attribute_hidden;
      32  /* The fallback code which calls clone/clone2 based on clone3 arguments.  */
      33  extern int __clone_internal_fallback (struct clone_args *__cl_args,
      34  				      int (*__func) (void *__arg),
      35  				      void *__arg)
      36       attribute_hidden;
      37  
      38  #ifndef _ISOMAC
      39  libc_hidden_proto (__clone3)
      40  libc_hidden_proto (__clone_internal)
      41  #endif
      42  
      43  #endif