Files
nuttx/syscall/syscall.csv
T
Marco Casaroli 70c2ef5911 !sched/arch/libc: Give fork() and vfork() their real, separate semantics.
NuttX implemented fork() and vfork() as the same function.  Both were libc
wrappers around a single up_fork() syscall; vfork() differed only by a
trailing waitpid().  Underneath, the child joined the parent's address
environment -- the same addrenv_join() that pthread_create() uses -- and got
a private copy of the stack.  So the child shared .data, .bss and the heap
with its parent and ran concurrently with it.

That is not fork().  It is vfork()-with-a-private-stack under fork()'s name,
and the history says so: today's fork() is NuttX's old vfork(), renamed in
c33d1c9c97 (2023) without any change of behaviour.  The failure was silent --
a program written against POSIX fork() compiled, ran, and had its child's
writes land in the parent's variables.

Separate them into two primitives, chosen by which function the caller
called rather than by what the hardware happens to be:

  fork()   child gets its own copy of the parent's memory at the same
           virtual addresses; runs concurrently.  Only where an address
           environment can be duplicated -- elsewhere it is not declared at
           all, so calling it is a build error naming the function.
  vfork()  child shares the parent's memory; parent suspended until the
           child _exit()s or exec()s.  Implementable everywhere.

Below libc there is still one syscall.  up_fork() gains a bool saying which
primitive the caller used, since the per-architecture register snapshot is
the same for both, and passes it to nxtask_setup_fork(), which is the single
place the memory semantics are decided.  The argument arrives in the first
argument register and is never touched:  each architecture's snapshot takes
some other call-clobbered register for its scratch, so the flag is simply
still there when the C worker is called.

The vfork() parent suspension moves out of libc into nxtask_start_fork(),
released from nxsched_release_tcb() by nxtask_resume_vfork().  Two things
follow: the parent is resumed at exec(), since exec_swap() has already handed
the child's pid to the loaded program by the time the vfork stub exits, and
vfork() no longer depends on CONFIG_SCHED_WAITPID.

Releasing there requires one fix in nxtask_exit().  It raises rtcb->lockcount
directly rather than through sched_lock() while it tears the TCB down, so the
nxsem_post() that wakes the vfork() parent leaves it queued where a blocked
task collects while pre-emption is off -- g_pendingtasks, or g_readytorun on
SMP -- and the matching raw lockcount-- does not publish it the way
sched_unlock() would, leaving the parent stranded with nothing to move it on.
The fix mirrors sched_unlock() for each case:  nxsched_merge_pending(), or
nxsched_deliver_task() under CONFIG_SMP.  Both are no-ops while pre-emption is
still disabled, and up_exit() re-reads this_task() afterwards, so a change of
the ready-to-run head is honoured.  Without it vfork() deadlocks wherever no
other task happens to call sched_unlock() afterwards -- rv-virt:nsh64 and
rv-virt:pnsh64, where NSH is blocked in waitpid() holding the lock, and
qemu-armv8a:citest_smp, which hangs the moment the vfork() test runs.

fork() is built on a new addrenv_fork(), backed by an up_addrenv_fork() hook
that duplicates an address environment into freshly allocated pages mapped at
the same virtual addresses -- unlike up_addrenv_clone(), which copies only
the representation and leaves both pointing at the same page tables.  The
child then adopts the parent's stack geometry rather than being given a
relocated copy: a pointer to a stack local taken before fork() must name the
same object in the child that it named in the parent, and the parent's stack
is already in the duplicate, with its contents, at the parent's address.

No architecture implements up_addrenv_fork() yet, so this commit leaves
fork() unavailable everywhere.  That is the intended state.  It withdraws
fork() from ARCH_ARM, flat ARCH_ARM64, ARCH_RISCV, ARCH_SIM and ARCH_X86_64,
where until now it named the sharing primitive; per-architecture patches
restore it, with POSIX semantics, as up_addrenv_fork() lands.  In the
meantime the sharing primitive is still there under the name that describes
it: vfork() for a child that runs a program, pthread_create() for a second
flow of control that shares memory, posix_spawn() for both at once.

Kconfig: ARCH_HAVE_VFORK inherits ARCH_HAVE_FORK's select lines, conditions
included, so no configuration gains machinery; ARCH_HAVE_FORK is redefined to
mean "can provide POSIX fork() semantics" and now depends on ARCH_ADDRENV.

There is one deliberate departure from "verbatim".  ARCH_ARM selected the
fork family unconditionally, BUILD_KERNEL included, and that has never
worked:  on a kernel build the architecture's fork entry point sees the
kernel's return address and stack pointer rather than the caller's, so the
child resumes at a kernel address.  On qemu-armv7a:knsh master faults in
ostest's fork case with "Child did not run" and then a data abort; without
the condition this change faults the same way through vfork().  ARCH_ARM64
and ARCH_X86_64 already carried "if !BUILD_KERNEL" for exactly this reason --
ARM was the outlier.  Conditioning it turns a runtime fault into an honest
absence, which is the whole point of the change; arch/arm takes the condition
off again in the patch that adds its saved-syscall-frame path.  Only the
MMU-capable ARM ports are affected, since Cortex-M cannot build BUILD_KERNEL
at all.

Also fixes two latent syntax errors found on the way: a missing comma in
riscv_fork.c and mips_fork.c, both in *_FRAMEPOINTER && !SAVE_GP branches
that are never compiled today.

BREAKING CHANGE: fork() is withdrawn from every architecture.  It is no
longer declared in unistd.h, so code that calls it fails to build with an error
naming the function, and the sharing behaviour it used to have is gone rather
than renamed.  CONFIG_ARCH_HAVE_FORK no longer means "fork() exists"; it means
"this configuration can provide POSIX fork() semantics", and no architecture
selects it yet.

Quick fix, chosen by why the call was made:

  to run a program                vfork() + exec*(), or better posix_spawn()
  a second flow of control that   pthread_create()
  shares the caller's memory
  a genuinely independent copy    keep fork(), and wait for the per-arch patch
  of the process                  that implements up_addrenv_fork() and selects
                                  CONFIG_ARCH_HAVE_FORK

Out-of-tree code that tests CONFIG_ARCH_HAVE_FORK to decide whether a
fork-then-exec path is available wants CONFIG_ARCH_HAVE_VFORK instead, which is
selected in exactly the places CONFIG_ARCH_HAVE_FORK used to be.  The full
migration guide is Documentation/guides/fork_vfork_migration.rst.

Assisted-by: Claude Code:claude-opus-5
Signed-off-by: Marco Casaroli <marco.casaroli@gmail.com>
2026-08-10 08:57:30 -03:00

19 KiB

1_assertassert.hvoidFAR const char *intFAR const char *FAR void *
2_exitunistd.hnoreturnint
3accept4sys/socket.hdefined(CONFIG_NET)intintFAR struct sockaddr *FAR socklen_t *int
4adjtimesys/time.hdefined(CONFIG_CLOCK_ADJTIME)intFAR const struct timeval *FAR struct timeval *
5aio_cancelaio.hdefined(CONFIG_FS_AIO)intintFAR struct aiocb *
6aio_fsyncaio.hdefined(CONFIG_FS_AIO)intintFAR struct aiocb *
7aio_readaio.hdefined(CONFIG_FS_AIO)intFAR struct aiocb *
8aio_writeaio.hdefined(CONFIG_FS_AIO)intFAR struct aiocb *
9bindsys/socket.hdefined(CONFIG_NET)intintFAR const struct sockaddr *socklen_t
10boardctlsys/boardctl.hdefined(CONFIG_BOARDCTL)intunsigned intuintptr_t
11chmodsys/stat.hintFAR const char *mode_t
12chownunistd.hintFAR const char *uid_tgid_t
13clearenvstdlib.h!defined(CONFIG_DISABLE_ENVIRON)int
14clocktime.hclock_t
15clock_adjtimesys/timex.hdefined(CONFIG_CLOCK_ADJTIME)intclockid_tstruct timex *
16clock_getrestime.hintclockid_tFAR struct timespec *
17clock_gettimetime.hintclockid_tFAR struct timespec *
18clock_nanosleeptime.hintclockid_tintFAR const struct timespec *FAR struct timespec *
19clock_settimetime.hintclockid_tconst struct timespec*
20closeunistd.hintint
21connectsys/socket.hdefined(CONFIG_NET)intintFAR const struct sockaddr *socklen_t
22dupunistd.hintint
23dup2unistd.hintintint
24epoll_closesys/epoll.hvoidint
25epoll_createsys/epoll.hintint
26epoll_create1sys/epoll.hintint
27epoll_ctlsys/epoll.hintintintintFAR struct epoll_event *
28epoll_pwaitsys/epoll.hintintFAR struct epoll_event *intintFAR const sigset_t *
29epoll_waitsys/epoll.hintintFAR struct epoll_event *intint
30eventfdsys/eventfd.hdefined(CONFIG_EVENT_FD)intunsigned intint
31execnuttx/binfmt/binfmt.h!defined(CONFIG_BINFMT_DISABLE) && !defined(CONFIG_BUILD_KERNEL)intFAR const char *FAR char * const *FAR char * const *FAR const struct symtab_s *int
32execveunistd.h!defined(CONFIG_BINFMT_DISABLE) && defined(CONFIG_LIBC_EXECFUNCS)intFAR const char *FAR char * const []|FAR char * const *FAR char * const []|FAR char * const *
33fchmodsys/stat.hintintmode_t
34fchownunistd.hintintuid_tgid_t
35fcntlfcntl.hintintint...uintptr_t
36fstatsys/stat.hintintFAR struct stat *
37fstatfssys/statfs.hintintFAR struct statfs *
38fsyncunistd.hintint
39ftruncateunistd.hintintoff_t
40futimenssys/stat.hintintconst struct timespec [2]|FAR const struct timespec *
41get_environ_ptrstdlib.h!defined(CONFIG_DISABLE_ENVIRON)FAR char **
42getegidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)gid_t
43getresgidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intgid_t *gid_t *gid_t *
44getresuidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intuid_t *uid_t *uid_t *
45getenvstdlib.h!defined(CONFIG_DISABLE_ENVIRON)FAR char *FAR const char *
46geteuidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)uid_t
47getgidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)gid_t
48gethostnameunistd.hintFAR char *size_t
49getitimersys/time.h!defined(CONFIG_DISABLE_POSIX_TIMERS)intintFAR struct itimerval *
50getpeernamesys/socket.hdefined(CONFIG_NET)intintFAR struct sockaddr *FAR socklen_t *
51getppidunistd.hdefined(CONFIG_SCHED_HAVE_PARENT)pid_t
52getsocknamesys/socket.hdefined(CONFIG_NET)intintFAR struct sockaddr *FAR socklen_t *
53getsockoptsys/socket.hdefined(CONFIG_NET)intintintintFAR void *FAR socklen_t *
54gettimeofdaysys/time.hintFAR struct timeval *FAR struct timezone *
55getuidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)uid_t
56inotify_add_watchsys/inotify.hdefined(CONFIG_FS_NOTIFY)intintFAR const char *uint32_t
57inotify_initsys/inotify.hdefined(CONFIG_FS_NOTIFY)int
58inotify_init1sys/inotify.hdefined(CONFIG_FS_NOTIFY)intint
59inotify_rm_watchsys/inotify.hdefined(CONFIG_FS_NOTIFY)intintint
60insmodnuttx/module.hdefined(CONFIG_MODULE)FAR void *FAR const char *FAR const char *
61ioctlsys/ioctl.hintintint...unsigned long
62killsignal.hintpid_tint
63lchmodsys/stat.hintFAR const char *mode_t
64lchownunistd.hintFAR const char *uid_tgid_t
65linkunistd.hdefined(CONFIG_PSEUDOFS_SOFTLINKS)intFAR const char *FAR const char *
66listensys/socket.hdefined(CONFIG_NET)intintint
67lseekunistd.hoff_tintoff_tint
68lstatsys/stat.hintFAR const char *FAR struct stat *
69lutimenssys/stat.hintFAR const char *const struct timespec [2]|FAR const struct timespec *
70mkdirsys/stat.h!defined(CONFIG_DISABLE_MOUNTPOINT)intFAR const char *mode_t
71mlocksys/mman.hintFAR const void *size_t
72mlockallsys/mman.hintint
73mmapsys/mman.hFAR void *FAR void *size_tintintintoff_t
74mprotectsys/mman.hintFAR void *size_tint
75modhandlenuttx/module.hdefined(CONFIG_MODULE)FAR void *FAR const char *
76mountsys/mount.h!defined(CONFIG_DISABLE_MOUNTPOINT)intFAR const char *FAR const char *FAR const char *unsigned longFAR const void *
77mq_closemqueue.h!defined(CONFIG_DISABLE_MQUEUE)intmqd_t
78mq_getattrmqueue.h!defined(CONFIG_DISABLE_MQUEUE)intmqd_tFAR struct mq_attr *
79mq_notifymqueue.h!defined(CONFIG_DISABLE_MQUEUE)intmqd_tFAR const struct sigevent *
80mq_openmqueue.h!defined(CONFIG_DISABLE_MQUEUE)mqd_tFAR const char *int...mode_tFAR struct mq_attr *
81mq_receivemqueue.h!defined(CONFIG_DISABLE_MQUEUE)ssize_tmqd_tFAR char *size_tFAR unsigned int *
82mq_sendmqueue.h!defined(CONFIG_DISABLE_MQUEUE)intmqd_tFAR const char *size_tunsigned int
83mq_setattrmqueue.h!defined(CONFIG_DISABLE_MQUEUE)intmqd_tFAR const struct mq_attr *FAR struct mq_attr *
84mq_timedreceivemqueue.h!defined(CONFIG_DISABLE_MQUEUE)ssize_tmqd_tFAR char *size_tFAR unsigned int *FAR const struct timespec *
85mq_timedsendmqueue.h!defined(CONFIG_DISABLE_MQUEUE)intmqd_tFAR const char *size_tunsigned intFAR const struct timespec *
86mq_unlinkmqueue.h!defined(CONFIG_DISABLE_MQUEUE)intFAR const char *
87msyncsys/mman.hintFAR void *size_tint
88munlocksys/mman.hintFAR const void *size_t
89munlockallsys/mman.hint
90munmapsys/mman.hintFAR void *size_t
91nanosleeptime.hintFAR const struct timespec *FAR struct timespec *
92nx_mkfifonuttx/fs/fs.hdefined(CONFIG_PIPES) && CONFIG_DEV_FIFO_SIZE > 0intFAR const char *mode_tsize_t
93nx_pthread_createnuttx/pthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_trampoline_tFAR pthread_t *FAR const pthread_attr_t *pthread_startroutine_tpthread_addr_t
94nx_pthread_exitnuttx/pthread.h!defined(CONFIG_DISABLE_PTHREAD)noreturnpthread_addr_t
95nx_vsyslognuttx/syslog/syslog.h!defined(CONFIG_SYSLOG_TO_SCHED_NOTE)intintFAR const IPTR char *FAR va_list *
96nxsched_get_stackinfonuttx/sched.hintpid_tFAR struct stackinfo_s *
97nxsem_tickwaitnuttx/semaphore.hintFAR sem_t *uint32_t
98nxsem_clockwaitnuttx/semaphore.hintFAR sem_t *clockid_tFAR const struct timespec *
99nxsem_closenuttx/semaphore.hdefined(CONFIG_FS_NAMED_SEMAPHORES)intFAR sem_t *
100nxsem_destroynuttx/semaphore.hintFAR sem_t *
101nxsem_getprioceilingnuttx/semaphore.hdefined(CONFIG_PRIORITY_PROTECT)intFAR const sem_t *FAR int *
102nxsem_opennuttx/semaphore.hdefined(CONFIG_FS_NAMED_SEMAPHORES)intFAR sem_t **FAR const char *int...mode_tunsigned int
103nxsem_post_slownuttx/semaphore.hintFAR sem_t *
104nxsem_resetnuttx/semaphore.hintFAR sem_t *int16_t
105nxsem_set_protocolnuttx/semaphore.hdefined(CONFIG_PRIORITY_INHERITANCE)intFAR sem_t *int
106nxsem_setprioceilingnuttx/semaphore.hdefined(CONFIG_PRIORITY_PROTECT)intFAR sem_t *intFAR int *
107nxsem_timedwaitnuttx/semaphore.hintFAR sem_t *FAR const struct timespec *
108nxsem_trywait_slownuttx/semaphore.hintFAR sem_t *
109nxsem_unlinknuttx/semaphore.hdefined(CONFIG_FS_NAMED_SEMAPHORES)intFAR const char *
110nxsem_wait_slownuttx/semaphore.hintFAR sem_t *
111openfcntl.hintFAR const char *int...mode_t
112pgallocnuttx/arch.hdefined(CONFIG_BUILD_KERNEL)uintptr_tuintptr_tunsigned int
113pipe2unistd.hdefined(CONFIG_PIPES) && CONFIG_DEV_PIPE_SIZE > 0intint [2]|FAR int *int
114pollpoll.hintFAR struct pollfd *nfds_tint
115posix_spawnspawn.h!defined(CONFIG_BINFMT_DISABLE) && defined(CONFIG_LIBC_EXECFUNCS)intFAR pid_t *FAR const char *FAR const posix_spawn_file_actions_t *FAR const posix_spawnattr_t *FAR char * const []|FAR char * const *FAR char * const []|FAR char * const *
116ppollpoll.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR struct pollfd *nfds_tFAR const struct timespec *FAR const sigset_t *
117prctlsys/prctl.hintint...uintptr_tuintptr_t
118preadunistd.hssize_tintFAR void *size_toff_t
119pselectsys/select.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intintFAR fd_set *FAR fd_set *FAR fd_set *FAR const struct timespec *FAR const sigset_t *
120pthread_cancelpthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_t
121pthread_detachpthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_t
122pthread_getaffinity_nppthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_SMP)intpthread_tsize_tFAR cpu_set_t*
123pthread_getschedparampthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_tFAR int *FAR struct sched_param *
124pthread_joinpthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_tFAR pthread_addr_t *
125pthread_setaffinity_nppthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_SMP)intpthread_tsize_tFAR const cpu_set_t *
126pthread_setschedparampthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_tintFAR const struct sched_param *
127pthread_setschedpriopthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_tint
128pthread_sigmaskpthread.h!defined(CONFIG_DISABLE_PTHREAD)intintFAR const sigset_t *FAR sigset_t *
129putenvstdlib.h!defined(CONFIG_DISABLE_ENVIRON)intFAR const char *
130pwriteunistd.hssize_tintFAR const void *size_toff_t
131readunistd.hssize_tintFAR void *size_t
132readvsys/uio.hssize_tintFAR const struct iovec *int
133readlinkunistd.hdefined(CONFIG_PSEUDOFS_SOFTLINKS)ssize_tFAR const char *FAR char *size_t
134recvsys/socket.hdefined(CONFIG_NET)ssize_tintFAR void *size_tint
135recvfromsys/socket.hdefined(CONFIG_NET)ssize_tintFAR void*size_tintFAR struct sockaddr*FAR socklen_t*
136recvmsgsys/socket.hdefined(CONFIG_NET)ssize_tintFAR struct msghdr *int
137renamestdio.hintFAR const char *FAR const char *
138rmdirunistd.h!defined(CONFIG_DISABLE_MOUNTPOINT)intFAR const char*
139rmmodnuttx/module.hdefined(CONFIG_MODULE)intFAR void *
140sched_backtracesched.hdefined(CONFIG_SCHED_BACKTRACE)intpid_tFAR void **intint
141sched_getaffinitysched.hdefined(CONFIG_SMP)intpid_tsize_tFAR cpu_set_t *
142sched_getcpusched.hint
143sched_getparamsched.hintpid_tFAR struct sched_param *
144sched_getschedulersched.hintpid_t
145sched_locksched.hvoid
146sched_lockcountsched.hint
147sched_note_event_ipnuttx/sched_note.hdefined(CONFIG_SCHED_INSTRUMENTATION_DUMP)voiduint32_tuintptr_tuint8_tFAR const void *size_t
148sched_note_vprintf_ipnuttx/sched_note.hdefined(CONFIG_SCHED_INSTRUMENTATION_DUMP)voiduint32_tuintptr_tFAR const IPTR char *uint32_tFAR va_list *
149sched_rr_get_intervalsched.hintpid_tstruct timespec *
150sched_setaffinitysched.hdefined(CONFIG_SMP)intpid_tsize_tFAR const cpu_set_t*
151sched_setparamsched.hintpid_tconst struct sched_param *
152sched_setschedulersched.hintpid_tintconst struct sched_param *
153sched_unlocksched.hvoid
154sched_yieldsched.hint
155selectsys/select.hintintFAR fd_set *FAR fd_set *FAR fd_set *FAR struct timeval *
156sendsys/socket.hdefined(CONFIG_NET)ssize_tintFAR const void *size_tint
157sendfilesys/sendfile.hssize_tintintFAR off_t *size_t
158sendmsgsys/socket.hdefined(CONFIG_NET)ssize_tintFAR const struct msghdr *int
159sendtosys/socket.hdefined(CONFIG_NET)ssize_tintFAR const void *size_tintFAR const struct sockaddr *socklen_t
160setegidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intgid_t
161setregidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intgid_tgid_t
162setreuidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intuid_tuid_t
163setenvstdlib.h!defined(CONFIG_DISABLE_ENVIRON)intFAR const char *FAR const char *int
164seteuidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intuid_t
165setgidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intgid_t
166sethostnameunistd.hintFAR const char *size_t
167setitimersys/time.h!defined(CONFIG_DISABLE_POSIX_TIMERS)intintFAR const struct itimerval *FAR struct itimerval *
168setsockoptsys/socket.hdefined(CONFIG_NET) && defined(CONFIG_NET_SOCKOPTS)intintintintFAR const void *socklen_t
169settimeofdaysys/time.hintFAR const struct timeval *FAR const struct timezone *
170setuidunistd.hdefined(CONFIG_SCHED_USER_IDENTITY)intuid_t
171shm_opensys/mman.hdefined(CONFIG_FS_SHMFS)intFAR const char *intmode_t
172shm_unlinksys/mman.hdefined(CONFIG_FS_SHMFS)intFAR const char *
173shmatsys/shm.hdefined(CONFIG_MM_SHM)FAR void *intFAR const void *int
174shmctlsys/shm.hdefined(CONFIG_MM_SHM)intintintFAR struct shmid_ds *
175shmdtsys/shm.hdefined(CONFIG_MM_SHM)intFAR const void *
176shmgetsys/shm.hdefined(CONFIG_MM_SHM)intkey_tsize_tint
177shutdownsys/socket.hdefined(CONFIG_NET)intintint
178sigactionsignal.hdefined(CONFIG_ENABLE_ALL_SIGNALS)intintFAR const struct sigaction *FAR struct sigaction *
179signalsignal.hdefined(CONFIG_ENABLE_ALL_SIGNALS)_sa_handler_tint_sa_handler_t
180signalfdsys/signalfd.hdefined(CONFIG_SIGNAL_FD)intintFAR const sigset_t *int
181sigpendingsignal.hdefined(CONFIG_ENABLE_ALL_SIGNALS)intFAR sigset_t *
182sigprocmasksignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intintFAR const sigset_t *FAR sigset_t *
183sigqueuesignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intintintunion sigval|FAR void *|sival_ptr
184sigsuspendsignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR const sigset_t *
185sigtimedwaitsignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR const sigset_t *FAR struct siginfo *FAR const struct timespec *
186sigwaitinfosignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR const sigset_t *FAR struct siginfo *
187socketsys/socket.hdefined(CONFIG_NET)intintintint
188socketpairsys/socket.hdefined(CONFIG_NET)intintintintint [2]|FAR int *
189statsys/stat.hintFAR const char *FAR struct stat *
190statfssys/statfs.hintFAR const char *FAR struct statfs *
191symlinkunistd.hdefined(CONFIG_PSEUDOFS_SOFTLINKS)intFAR const char *FAR const char *
192syncunistd.hvoid
193sysinfosys/sysinfo.hintFAR struct sysinfo *
194task_createsched.h!defined(CONFIG_BUILD_KERNEL)intFAR const char *intintmain_tFAR char * const []|FAR char * const *
195task_deletesched.h!defined(CONFIG_BUILD_KERNEL)intpid_t
196task_restartsched.h!defined(CONFIG_BUILD_KERNEL)intpid_t
197task_spawnnuttx/spawn.h!defined(CONFIG_BUILD_KERNEL)intFAR const char *main_tFAR const posix_spawn_file_actions_t *FAR const posix_spawnattr_t *FAR char * const []|FAR char * const *FAR char * const []|FAR char * const *
198tgkillsignal.hintpid_tpid_tint
199timetime.htime_tFAR time_t *
200timer_createtime.h!defined(CONFIG_DISABLE_POSIX_TIMERS)intclockid_tFAR struct sigevent *FAR timer_t *
201timer_deletetime.h!defined(CONFIG_DISABLE_POSIX_TIMERS)inttimer_t
202timer_getoverruntime.h!defined(CONFIG_DISABLE_POSIX_TIMERS)inttimer_t
203timer_gettimetime.h!defined(CONFIG_DISABLE_POSIX_TIMERS)inttimer_tFAR struct itimerspec *
204timer_settimetime.h!defined(CONFIG_DISABLE_POSIX_TIMERS)inttimer_tintFAR const struct itimerspec *FAR struct itimerspec *
205timerfd_createsys/timerfd.hdefined(CONFIG_TIMER_FD)intintint
206timerfd_gettimesys/timerfd.hdefined(CONFIG_TIMER_FD)intintFAR struct itimerspec *
207timerfd_settimesys/timerfd.hdefined(CONFIG_TIMER_FD)intintintFAR const struct itimerspec *FAR struct itimerspec *
208umount2sys/mount.h!defined(CONFIG_DISABLE_MOUNTPOINT)intFAR const char *unsigned int
209unlinkunistd.h!defined(CONFIG_DISABLE_MOUNTPOINT)intFAR const char *
210unsetenvstdlib.h!defined(CONFIG_DISABLE_ENVIRON)intFAR const char *
211up_forknuttx/arch.hdefined(CONFIG_ARCH_HAVE_VFORK) || defined(CONFIG_ARCH_HAVE_FORK)pid_tbool
212utimenssys/stat.hintFAR const char *const struct timespec [2]|FAR const struct timespec *
213waitsys/wait.hdefined(CONFIG_SCHED_WAITPID) && defined(CONFIG_SCHED_HAVE_PARENT)pid_tFAR int *
214waitidsys/wait.hdefined(CONFIG_SCHED_WAITPID) && defined(CONFIG_SCHED_HAVE_PARENT)intidtype_tid_t FAR siginfo_t *int
215waitpidsys/wait.hdefined(CONFIG_SCHED_WAITPID)pid_tpid_tFAR int *int
216writeunistd.hssize_tintFAR const void *size_t
217writevsys/uio.hssize_tintFAR const struct iovec *int