1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright 2026 The FreeBSD Foundation 5 * 6 * This software were developed by 7 * Konstantin Belousov <kib@FreeBSD.org> under sponsorship from 8 * the FreeBSD Foundation. 9 */ 10 11 #include <errno.h> 12 #include <unistd.h> 13 14 pid_t 15 rfork_thread(int flags, void *stack_addr, int (*start_fn)(void *), void *arg) 16 { 17 pid_t res; 18 int ret; 19 20 /* 21 * Generic implementation cannot switch stacks. Only 22 * architecture-specific code knows how to do it. Require 23 * that caller knows that, and refuse to do operate if the 24 * stack was supplied. 25 * 26 * Note that implementations that do switch stack, would fault 27 * immediately if the passed stack is NULL. They do not need to 28 * specifically check for the NULL stack value. 29 */ 30 if (stack_addr != NULL) { 31 errno = EOPNOTSUPP; 32 return (-1); 33 } 34 res = rfork(flags); 35 if (res == 0) { 36 ret = start_fn(arg); 37 _exit(ret); 38 } 39 return (res); 40 } 41