[PATCH 1/4] support: Add xclone
Florian Weimer
fweimer@redhat.com
Wed Dec 23 11:35:54 GMT 2020
* Adhemerval Zanella:
> diff --git a/support/xclone.c b/support/xclone.c
> new file mode 100644
> index 0000000000..e7efffb82b
> --- /dev/null
> +++ b/support/xclone.c
> @@ -0,0 +1,46 @@
> +/* Auxiliary wrapper to issue the clone symbol.
Same wording issue as before.
> + Copyright (C) 2020 Free Software Foundation, Inc.
> + This file is part of the GNU C Library.
> +
> + The GNU C Library is free software; you can redistribute it and/or
> + modify it under the terms of the GNU Lesser General Public
> + License as published by the Free Software Foundation; either
> + version 2.1 of the License, or (at your option) any later version.
> +
> + The GNU C Library is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + Lesser General Public License for more details.
> +
> + You should have received a copy of the GNU Lesser General Public
> + License along with the GNU C Library; if not, see
> + <https://www.gnu.org/licenses/>. */
> +
> +#include <stackinfo.h> /* For _STACK_GROWS_{UP,DOWN}. */
> +#include <xsched.h>
> +
> +pid_t
> +xclone (int (*fn) (void *arg), void *arg, void *stack, size_t stack_size,
> + int flags)
> +{
> + pid_t r = -1;
> +
> +#ifdef __linux__
> +# ifdef __ia64__
> + extern int __clone2 (int (*fn) (void *arg), void *stack, size_t stack_size,
> + int flags, void *arg, ...);
> + r = __clone2 (f, stack, stack_size, flags, arg, /* ptid */ NULL,
> + /* tls */ NULL, /* ctid */ ctid);
> +# else
> +# if _STACK_GROWS_DOWN
> + r = clone (fn, stack + stack_size, flags, arg, /* ptid */ NULL,
> + /* tls */ NULL, /* ctid */ NULL);
> +# elif _STACK_GROWS_UP
> + r = clone (fn, stack, flags, arg, /* ptid */ NULL, /* tls */ NULL,
> + &ctid);
> +# endif
> +# endif
> +#endif
> +
> + return r;
> +}
Maybe #ifdef CLONE_VM instead of #ifdef __linux__? And around the whole
function definition?
Then you can check for an error return from the system call, too, to
match the x* function pattern.
Thanks,
Florian
--
Red Hat GmbH, https://de.redhat.com/ , Registered seat: Grasbrunn,
Commercial register: Amtsgericht Muenchen, HRB 153243,
Managing Directors: Charles Cachera, Brian Klemm, Laurie Krebs, Michael O'Neill
More information about the Libc-alpha
mailing list