Files
nuttx/libs/libc/libc.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

30 KiB

1__assertassert.hvoidFAR const char *intFAR const char *
2__cxa_atexitstdlib.hintFAR CODE void (*)(FAR void *)|FAR void *FAR void *FAR void *
3__errnoerrno.hdefined(CONFIG_BUILD_FLAT)FAR int *
4__stack_chk_failssp/ssp.hdefined(CONFIG_STACK_CANARIES)voidvoid
5_alertdebug.h!defined(CONFIG_CPP_HAVE_VARARGS) && defined(CONFIG_DEBUG_ERROR)voidFAR const char *...
6_errdebug.h!defined(CONFIG_CPP_HAVE_VARARGS) && defined(CONFIG_DEBUG_ERROR)voidFAR const char *...
7_exitunistd.hvoidint
8_infodebug.h!defined(CONFIG_CPP_HAVE_VARARGS) && defined(CONFIG_DEBUG_INFO)voidFAR const char *...
9_warndebug.h!defined(CONFIG_CPP_HAVE_VARARGS) && defined(CONFIG_DEBUG_WARN)voidFAR const char *...
10abortstdlib.hvoid
11absstdlib.hintint
12aio_erroraio.hdefined(CONFIG_FS_AIO)intFAR struct aiocb *
13aio_returnaio.hdefined(CONFIG_FS_AIO)ssize_tFAR struct aiocb *
14aio_suspendaio.hdefined(CONFIG_FS_AIO)intFAR const struct aiocb * const []|FAR const struct aiocb * const *intFAR const struct timespec *
15alarmunistd.h!defined(CONFIG_DISABLE_POSIX_TIMERS)unsigned intunsigned int
16alphasortdirent.hintFAR const struct dirent **FAR const struct dirent **
17arc4randomstdlib.huint32_t
18arc4random_bufstdlib.hvoidFAR void *size_t
19asprintfstdio.hintFAR char **FAR const IPTR char *...
20atofstdlib.hdefined(CONFIG_HAVE_DOUBLE)doubleFAR const char *
21atoistdlib.hintFAR const char *
22atolstdlib.hlongFAR const char *
23atollstdlib.hlong longFAR const char *
24b16cosfixedmath.hb16_tb16_t
25b16sinfixedmath.hb16_tb16_t
26basenamelibgen.hFAR char *FAR char *
27bind_textdomain_codesetlibintl.hdefined(CONFIG_LIBC_LOCALE_GETTEXT)FAR char *FAR const char *FAR const char *
28bindtextdomainlibintl.hdefined(CONFIG_LIBC_LOCALE_GETTEXT)FAR char *FAR const char *FAR const char *
29bsearchstdlib.hFAR void *FAR const void *FAR const void *size_tsize_tFAR void *
30btowcwchar.hwint_tint
31callocstdlib.hFAR void *size_tsize_t
32cfgetspeedtermios.hspeed_tFAR const struct termios *
33cfsetspeedtermios.hintFAR struct termios *speed_t
34chdirunistd.h!defined(CONFIG_DISABLE_ENVIRON)intFAR const char *
35clock_getcpuclockidtime.hintpid_tFAR clockid_t *
36clock_getrestime.hintclockid_tFAR struct timespec *
37closedirdirent.hintDIR *
38crc32nuttx/crc32.huint32_tFAR const uint8_t *size_t
39crc32partnuttx/crc32.huint32_tFAR const uint8_t *size_tuint32_t
40ctimetime.hchar *const time_t *
41cryptunistd.hdefined(CONFIG_CRYPTO)FAR const char *FAR const char *
42crypt_runistd.hdefined(CONFIG_CRYPTO)FAR const char *FAR const char *FAR char *
43daemonunistd.hintintint
44dgettextlibintl.hdefined(CONFIG_LIBC_LOCALE_GETTEXT)FAR char *FAR const char *FAR const char *
45dirnamelibgen.hFAR char *FAR char *
46dlclosedlfcn.hdefined(CONFIG_LIBC_DLFCN)intFAR void *
47dlerrordlfcn.hdefined(CONFIG_LIBC_DLFCN)FAR char *
48dlopendlfcn.hdefined(CONFIG_LIBC_DLFCN)FAR void *FAR const char *int
49dlsymdlfcn.hdefined(CONFIG_LIBC_DLFCN)FAR void *FAR void *FAR const char *
50dlsymtabdlfcn.hdefined(CONFIG_LIBC_DLFCN)intFAR const struct symtab_s *int
51dq_addafternuttx/queue.hvoidFAR dq_entry_t *FAR dq_entry_t *FAR dq_queue_t *
52dq_remfirstnuttx/queue.hFAR dq_entry_t *FAR dq_queue_t *
53dq_remlastnuttx/queue.hFAR dq_entry_t *FAR dq_queue_t *
54ether_ntoanetinet/ether.hFAR char *FAR const struct ether_addr *
55execvunistd.hdefined(CONFIG_LIBC_EXECFUNCS)intFAR const char *FAR char *const[]|FAR char *const *
56exitstdlib.hnoreturnint
57fchdirunistd.h!defined(CONFIG_DISABLE_ENVIRON)intint
58fclosestdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *
59fdopenstdio.hdefined(CONFIG_FILE_STREAM)FAR FILE *intFAR const char *
60feofstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *
61ferrorstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *
62fflushstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *
63ffsstrings.hintint
64fgetcstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *
65fgetposstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *FAR fpos_t *
66fgetsstdio.hdefined(CONFIG_FILE_STREAM)FAR char *FAR char *intFAR FILE *
67fgetwcwchar.hdefined(CONFIG_FILE_STREAM)wint_tFAR FILE *
68fgetwc_unlockedwchar.hdefined(CONFIG_FILE_STREAM)wint_tFAR FILE *
69filenostdio.hintFAR FILE *
70flockfilestdio.h!defined(CONFIG_FILE_STREAM)voidFAR FILE *
71fnmatchfnmatch.hintFAR const char *FAR const char *int
72fopenstdio.hdefined(CONFIG_FILE_STREAM)FAR FILE *FAR const char *FAR const char *
73forkunistd.h!defined(CONFIG_BUILD_KERNEL) && defined(CONFIG_ARCH_HAVE_FORK)pid_t
74fprintfstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *FAR const IPTR char *...
75fputcstdio.hdefined(CONFIG_FILE_STREAM)intintFAR FILE *
76fputsstdio.hdefined(CONFIG_FILE_STREAM)intFAR const IPTR char *FAR FILE *
77fputwcwchar.hdefined(CONFIG_FILE_STREAM)wint_twchar_tFAR FILE *
78fputwc_unlockedwchar.hdefined(CONFIG_FILE_STREAM)wint_twchar_tFAR FILE *
79fputwswchar.hdefined(CONFIG_FILE_STREAM)intFAR const wchar_t *FAR FILE *
80fputws_unlockedwchar.hdefined(CONFIG_FILE_STREAM)intFAR const wchar_t *FAR FILE *
81freadstdio.hdefined(CONFIG_FILE_STREAM)size_tFAR void *size_tsize_tFAR FILE *
82freestdlib.hvoidFAR void *
83freeaddrinfonetdb.hdefined(CONFIG_LIBC_NETDB)voidFAR struct addrinfo *
84fscanfstdio.hintFAR FILE *FAR const char *...
85fseekstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *long intint
86fsetposstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *FAR fpos_t *
87fstatvfssys/statvfs.hintintFAR struct statvfs *
88ftellstdio.hdefined(CONFIG_FILE_STREAM)longFAR FILE *
89ftrylockfilestdio.h!defined(CONFIG_FILE_STREAM)intFAR FILE *
90funlockfilestdio.h!defined(CONFIG_FILE_STREAM)voidFAR FILE *
91fwritestdio.hdefined(CONFIG_FILE_STREAM)size_tFAR const void *size_tsize_tFAR FILE *
92gai_strerrornetdb.hdefined(CONFIG_LIBC_NETDB)FAR const char *int
93getaddrinfonetdb.hdefined(CONFIG_LIBC_NETDB)intFAR const char *FAR const char *FAR const struct addrinfo *FAR struct addrinfo **
94getcstdio.hintFAR FILE *
95getcwdunistd.h!defined(CONFIG_DISABLE_ENVIRON)FAR char *FAR char *size_t
96get_current_dir_nameunistd.h!defined(CONFIG_DISABLE_ENVIRON)FAR char *void
97getegidunistd.hgid_t
98geteuidunistd.huid_t
99gethostbynamenetdb.hdefined(CONFIG_LIBC_NETDB)FAR struct hostent *FAR const char *
100gethostbyname2netdb.hdefined(CONFIG_LIBC_NETDB)FAR struct hostent *FAR const char *int
101gethostnameunistd.hintFAR char *size_t
102getnameinfonetdb.hdefined(CONFIG_LIBC_NETDB)intFAR const struct sockaddr *socklen_tFAR char *socklen_tFAR char *socklen_tint
103getoptunistd.hintintFAR char * const []|FAR char * const *FAR const char *
104getoptargpunistd.hFAR char **
105getopterrpunistd.hFAR int *
106getoptindpunistd.hFAR int *
107getoptoptpunistd.hFAR int *
108getprioritysys/resource.hintintid_t
109getpassunistd.hFAR const char *FAR char *
110getpwnam_rpwd.hintFAR const char *FAR struct passwd *FAR char *size_tFAR struct passwd **
111getpwuid_rpwd.hintuid_tFAR struct passwd *FAR char *size_tFAR struct passwd **
112getrandomsys/random.h!defined(CONFIG_BUILD_KERNEL)ssize_tFAR void *size_tunsigned int
113getsstdio.hdefined(CONFIG_FILE_STREAM)FAR char *FAR char *
114gettextlibintl.hdefined(CONFIG_LIBC_LOCALE_GETTEXT)FAR char *FAR const char *
115gettimeofdaysys/time.hintFAR struct timeval *FAR struct timezone *
116getwcwchar.hdefined(CONFIG_FILE_STREAM)wint_tFAR FILE *
117gmtimetime.hFAR struct tm *FAR const time_t *
118gmtime_rtime.hFAR struct tm *FAR const time_t *FAR struct tm *
119htonlarpa/inet.huint32_tuint32_t
120htonqarpa/inet.huint64_tuint64_t
121htonsarpa/inet.huint16_tuint16_t
122iconviconv.hdefined(CONFIG_LIBC_LOCALE)size_ticonv_tFAR char **FAR size_t *FAR char **FAR size_t *
123iconv_closeiconv.hdefined(CONFIG_LIBC_LOCALE)inticonv_t
124iconv_openiconv.hdefined(CONFIG_LIBC_LOCALE)iconv_tFAR const char *FAR const char *
125imaxabsinttypes.hintmax_tintmax_t
126inet_addrarpa/inet.hin_addr_tFAR const char *
127inet_ntoaarpa/inet.hdefined(CONFIG_NET_IPv4)FAR char *struct in_addr
128inet_ntoparpa/inet.hFAR const charintFAR const void *FAR char *socklen_t
129inet_ptonarpa/inet.hintintFAR const char *FAR void *
130isalnumctype.hintint
131isalphactype.hintint
132isasciictype.hintint
133isattyunistd.hintint
134isblankctype.hintint
135iscntrlctype.hintint
136isdigitctype.hintint
137isgraphctype.hintint
138islowerctype.hintint
139isprintctype.hintint
140ispunctctype.hintint
141isspacectype.hintint
142isupperctype.hintint
143iswalnumwctype.hintwint_t
144iswalphawctype.hintwint_t
145iswblankwctype.hintwint_t
146iswcntrlwctype.hintwint_t
147iswctypewctype.hintwint_twctype_t
148iswdigitwctype.hintwint_t
149iswgraphwctype.hintwint_t
150iswlowerwctype.hintwint_t
151iswprintwctype.hintwint_t
152iswpunctwctype.hintwint_t
153iswspacewctype.hintwint_t
154iswupperwctype.hintwint_t
155iswxdigitwctype.hintwint_t
156isxdigitctype.hintint
157labsstdlib.hlong intlong int
158lib_dumpbufferdebug.hvoidFAR const char *FAR const uint8_t *unsigned int
159lib_get_streamnuttx/tls.hFAR struct file_struct *int
160lio_listioaio.hdefined(CONFIG_FS_AIO)intintFAR struct aiocb * const []|FAR struct aiocb * const *intFAR struct sigevent *
161llabsstdlib.hlong long intlong long int
162localtimetime.hstruct tm *const time_t *
163localtime_rtime.hFAR struct tm *FAR const time_t *FAR struct tm *
164mallinfomalloc.hstruct mallinfovoid
165mallocstdlib.hFAR void *size_t
166malloc_sizemalloc.hsize_tFAR void *
167mblenstdlib.hintFAR const char *size_t
168mbrlenwchar.hsize_tFAR const char *size_tFAR mbstate_t *
169mbrtowcwchar.hsize_tFAR wchar_t *FAR const char *size_tFAR mbstate_t *
170mbsnrtowcswchar.hsize_tFAR wchar_t *FAR const char **size_tsize_tFAR mbstate_t *
171mbsrtowcswchar.hsize_tFAR wchar_t *FAR const char **size_tFAR mbstate_t *
172mbstowcsstdlib.hsize_tFAR wchar_t *FAR const char *size_t
173mbtowcstdlib.hintFAR wchar_t *FAR const char *size_t
174memccpystring.hFAR void *FAR void *FAR const void *intsize_t
175memchrstring.hFAR void *FAR const void *intsize_t
176memcmpstring.hintFAR const void *FAR const void *size_t
177memcpystring.hFAR void *FAR void *FAR const void *size_t
178memmovestring.hFAR void *FAR void *FAR const void *size_t
179memsetstring.hFAR void *FAR void *intsize_t
180mkdtempstdlib.hFAR char *FAR char *
181mkfifosys/stat.hdefined(CONFIG_PIPES) && CONFIG_DEV_FIFO_SIZE > 0intFAR const char *mode_t
182mkstempstdlib.hintFAR char *
183mktempstdlib.hFAR char *FAR char *
184mktimetime.htime_tFAR struct tm *
185niceunistd.hintint
186ntohlarpa/inet.huint32_tuint32_t
187ntohqarpa/inet.huint64_tuint64_t
188ntohsarpa/inet.huint16_tuint16_t
189opendirdirent.hFAR DIR *FAR const char *
190perrorstdio.hdefined(CONFIG_FILE_STREAM)voidFAR const char *
191pipeunistd.hdefined(CONFIG_PIPES) && CONFIG_DEV_PIPE_SIZE > 0intint [2]|FAR int *
192posix_fallocatefcntl.hintintoff_toff_t
193posix_memalignstdlib.hintFAR void **size_tsize_t
194preadvsys/uio.hssize_tintFAR const struct iovec *intoff_t
195printfstdio.hintFAR const IPTR char *...
196pthread_attr_destroypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_attr_t *
197pthread_attr_getinheritschedpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR const pthread_attr_t *FAR int *
198pthread_attr_getschedparampthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR const pthread_attr_t *FAR struct sched_param *
199pthread_attr_getschedpolicypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR const pthread_attr_t *FAR int *
200pthread_attr_getstacksizepthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR const pthread_attr_t *FAR size_t *
201pthread_attr_initpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_attr_t *
202pthread_attr_setinheritschedpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_attr_t *int
203pthread_attr_setschedparampthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_attr_t *FAR const struct sched_param *
204pthread_attr_setschedpolicypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_attr_t *int
205pthread_attr_setstacksizepthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_attr_t *size_t
206pthread_barrier_destroypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_barrier_t *
207pthread_barrier_initpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_barrier_t *FAR const pthread_barrierattr_t *unsigned int
208pthread_barrier_waitpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_barrier_t *
209pthread_barrierattr_destroypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_barrierattr_t *
210pthread_barrierattr_getpsharedpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR const pthread_barrierattr_t *FAR int *
211pthread_barrierattr_initpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_barrierattr_t *
212pthread_barrierattr_setpsharedpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_barrierattr_t *int
213pthread_cond_destroypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_cond_t *
214pthread_cond_initpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_cond_t *FAR const pthread_condattr_t *
215pthread_cond_timedwaitpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_cond_t *FAR pthread_mutex_t *FAR const struct timespec *
216pthread_condattr_destroypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_condattr_t *
217pthread_condattr_initpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_condattr_t *
218pthread_condattr_setclockpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_condattr_t *clockid_t
219pthread_createpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_t *FAR const pthread_attr_t *pthread_startroutine_tpthread_addr_t
220pthread_getname_nppthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_tchar *size_t
221pthread_getspecificpthread.h!defined(CONFIG_DISABLE_PTHREAD) && CONFIG_TLS_NELEM > 0FAR void *pthread_key_t
222pthread_gettid_nppthread.h!defined(CONFIG_DISABLE_PTHREAD)pid_tpthread_t
223pthread_key_createpthread.h!defined(CONFIG_DISABLE_PTHREAD) && CONFIG_TLS_NELEM > 0intFAR pthread_key_t *FAR void (*) (void *)|FAR void *
224pthread_key_deletepthread.h!defined(CONFIG_DISABLE_PTHREAD) && CONFIG_TLS_NELEM > 0intpthread_key_t
225pthread_mutex_getprioceilingpthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_PRIORITY_PROTECT)intFAR const pthread_mutex_t *FAR int *
226pthread_mutex_lockpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_mutex_t *
227pthread_mutex_setprioceilingpthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_PRIORITY_PROTECT)intFAR pthread_mutex_t *intFAR int *
228pthread_mutexattr_destroypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_mutexattr_t *
229pthread_mutexattr_getprioceilingpthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_PRIORITY_PROTECT)intFAR pthread_mutexattr_t *FAR int *
230pthread_mutexattr_getpsharedpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_mutexattr_t *FAR int *
231pthread_mutexattr_gettypepthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_PTHREAD_MUTEX_TYPES)intFAR const pthread_mutexattr_t *FAR int *
232pthread_mutexattr_initpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_mutexattr_t *
233pthread_mutexattr_setprioceilingpthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_PRIORITY_PROTECT)intFAR pthread_mutexattr_t *int
234pthread_mutexattr_setpsharedpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_mutexattr_t *int
235pthread_mutexattr_settypepthread.h!defined(CONFIG_DISABLE_PTHREAD) && defined(CONFIG_PTHREAD_MUTEX_TYPES)intFAR pthread_mutexattr_t *int
236pthread_oncepthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_once_t*CODE void (*)(void)
237pthread_rwlock_destroypthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_rwlock_t *
238pthread_rwlock_initpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_rwlock_t *restrictFAR const pthread_rwlockattr_t *
239pthread_rwlock_rdlockpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_rwlock_t *
240pthread_rwlock_unlockpthread.h!defined(CONFIG_DISABLE_PTHREAD)intFAR pthread_rwlock_t *
241pthread_selfpthread.h!defined(CONFIG_DISABLE_PTHREAD)pthread_tvoid
242pthread_setname_nppthread.h!defined(CONFIG_DISABLE_PTHREAD)intpthread_tconst char *
243pthread_setspecificpthread.h!defined(CONFIG_DISABLE_PTHREAD) && CONFIG_TLS_NELEM > 0intpthread_key_tFAR const void *
244pthread_yieldpthread.h!defined(CONFIG_DISABLE_PTHREAD)void
245putsstdio.hdefined(CONFIG_FILE_STREAM)intFAR const IPTR char *
246putwcwchar.hdefined(CONFIG_FILE_STREAM)wint_twchar_tFAR FILE *
247putwc_unlockedwchar.hdefined(CONFIG_FILE_STREAM)wint_twchar_tFAR FILE *
248putwcharwchar.hwint_twchar_t
249pwritevsys/uio.hssize_tintFAR const struct iovec *intoff_t
250qsortstdlib.hvoidFAR void *size_tsize_tint(*)(FAR const void *,FAR const void *)
251raisesignal.hintint
252randstdlib.hint
253readdirdirent.hFAR struct dirent *FAR DIR *
254readdir_rdirent.hintFAR DIR *FAR struct dirent *FAR struct dirent **
255readvsys/uio.hssize_tintFAR const struct iovec *int
256reallocstdlib.hFAR void *FAR void *size_t
257removestdio.hintconst char *
258rewindstdio.hdefined(CONFIG_FILE_STREAM)voidFAR FILE *
259scandirdirent.hintFAR const char *FAR struct dirent ***FAR int (*)(const struct dirent *)|FAR void *FAR void *
260sched_get_priority_maxsched.hintint
261sched_get_priority_minsched.hintint
262sem_getvaluesemaphore.hintFAR sem_t *FAR int *
263sem_initsemaphore.hintFAR sem_t *intunsigned int
264setlocalelocale.hdefined(CONFIG_LIBC_LOCALE)FAR char *intFAR const char *
265setlogmasksyslog.hintint
266setprioritysys/resource.hintintid_tint
267shutdownsys/socket.hdefined(CONFIG_NET)intintint
268sigaddsetsignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR sigset_t *int
269sigdelsetsignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR sigset_t *int
270sigemptysetsignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR sigset_t *
271sigfillsetsignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR sigset_t *
272sigismembersignal.h!defined(CONFIG_DISABLE_ALL_SIGNALS)intFAR const sigset_t *int
273signalsignal.hdefined(CONFIG_ENABLE_ALL_SIGNALS)_sa_handler_tint_sa_handler_t
274sleepunistd.hunsigned intunsigned int
275snprintfstdio.hintFAR char *size_tFAR const IPTR char *...
276sprintfstdio.hintFAR char *FAR const IPTR char *...
277sprintfstdio.hintFAR char *FAR const IPTR char *...
278sq_addafternuttx/queue.hvoidFAR sq_entry_t *FAR sq_entry_t *FAR sq_queue_t *
279sq_remafternuttx/queue.hFAR sq_entry_tFAR sq_entry_t *FAR sq_queue_t *
280sq_remfirstnuttx/queue.hFAR sq_entry_t *FAR sq_queue_t *
281sq_remlastnuttx/queue.hFAR sq_entry_t *FAR sq_queue_t *
282srandstdlib.hvoidunsigned int
283sscanfstdio.hintFAR const IPTR char *FAR const char *...
284sscanfstdio.hintFAR const char *FAR const char *...
285statvfssys/statvfs.hintFAR const char *FAR struct statvfs *
286stpcpystring.hFAR char *FAR char *FAR const char *
287strcasecmpstrings.hintFAR const char *FAR const char *
288strcasestrstring.hFAR char *FAR const char *FAR const char *
289strcatstring.hFAR char *FAR char *FAR const char *
290strchrstring.hFAR char *FAR const char *int
291strchrnulstring.hFAR char *FAR const char *int
292strcmpstring.hintFAR const char *FAR const char *
293strcollstring.hdefined(CONFIG_LIBC_LOCALE)intFAR const char *FAR const char *
294strcpystring.hFAR char *FAR char *FAR const char *
295strcspnstring.hsize_tFAR const char *FAR const char *
296strdupstring.hFAR char *FAR const char *
297strerrorstring.hFAR char *int
298strerror_rstring.hintintFAR char *size_t
299strftimetime.hsize_tFAR char *size_tFAR const char *FAR const struct tm *
300strlcpystring.hsize_tFAR char *FAR const char *size_t
301strlenstring.hsize_tFAR const char *
302strncasecmpstrings.hintFAR const char *FAR const char *size_t
303strncatstring.hFAR char *FAR char *FAR const char *size_t
304strncmpstring.hintFAR const char *FAR const char *size_t
305strncpystring.hFAR char *FAR char *FAR const char *size_t
306strndupstring.hFAR char *FAR const char *size_t
307strnlenstring.hsize_tFAR const char *size_t
308strpbrkstring.hFAR char *FAR const char *FAR const char *
309strrchrstring.hFAR char *FAR const char *int
310strsepstring.hFAR char *FAR char **FAR const char *
311strspnstring.hsize_tFAR const char *FAR const char *
312strstrstring.hFAR char *FAR const char *FAR const char *
313strtodstdlib.hdoubleFAR const char *FAR char **
314strtodstdlib.hdefined(CONFIG_HAVE_DOUBLE)doubleFAR const char *FAR char **
315strtoimaxinttypes.hintmax_tFAR const char *FAR char **int
316strtokstring.hFAR char *FAR char *FAR const char *
317strtok_rstring.hFAR char *FAR char *FAR const char *FAR char **
318strtolstdlib.hlongFAR const char *FAR char **int
319strtollstdlib.hlong longFAR const char *FAR char **int
320strtoulstdlib.hunsigned longFAR const char *FAR char **int
321strtoullstdlib.hunsigned long long intFAR const char *FAR char **int
322strtoullstdlib.hunsigned long longFAR const char *FAR char **int
323strtoumaxinttypes.huintmax_tFAR const char *FAR char **int
324strxfrmstring.hdefined(CONFIG_LIBC_LOCALE)size_tFAR char *FAR const char *size_t
325swabunistd.hvoidFAR const void *FAR void *ssize_t
326swprintfwchar.hintFAR wchar_t *size_tFAR const wchar_t *...
327sysconfunistd.hlongint
328syslogsyslog.hvoidintFAR const IPTR char *...
329task_testcancelsched.hdefined(CONFIG_CANCELLATION_POINTS)void
330task_tls_allocnuttx/tls.h!defined(CONFIG_BUILD_KERNEL) && CONFIG_TLS_TASK_NELEM > 0inttls_dtor_t
331task_tls_get_valuenuttx/tls.hCONFIG_TLS_TASK_NELEM > 0uintptr_tint
332task_tls_set_valuenuttx/tls.hCONFIG_TLS_TASK_NELEM > 0intintuintptr_t
333tcflushtermios.hintintint
334tcgetattrtermios.hintintFAR struct termios *
335tcsetattrtermios.hintintintFAR const struct termios *
336telldirdirent.hoff_tFAR DIR *
337textdomainlibintl.hdefined(CONFIG_LIBC_LOCALE_GETTEXT)FAR char *FAR const char *
338timetime.htime_tFAR time_t *
339tolowerctype.hintint
340toupperctype.hintint
341towlowerwchar.hwint_twint_t
342towupperwchar.hwint_twint_t
343truncateunistd.h!defined(CONFIG_DISABLE_MOUNTPOINT)intFAR const char *off_t
344unamesys/utsname.hintFAR struct utsname *
345ungetcstdio.hdefined(CONFIG_FILE_STREAM)intintFAR FILE *
346ungetwcwchar.hdefined(CONFIG_FILE_STREAM)wint_twint_tFAR FILE *
347ungetwc_unlockedwchar.hdefined(CONFIG_FILE_STREAM)wint_twint_tFAR FILE *
348usleepunistd.hintuseconds_t
349vasprintfstdio.hintFAR char **FAR const IPTR char *va_list
350versionsortdirent.hintFAR const struct dirent **FAR const struct dirent **
351vforkunistd.h!defined(CONFIG_BUILD_KERNEL) && defined(CONFIG_ARCH_HAVE_VFORK)pid_t
352vfprintfstdio.hdefined(CONFIG_FILE_STREAM)intFAR FILE *FAR const IPTR char *va_list
353vprintfstdio.hintFAR const IPTR char *va_list
354vscanfstdio.hdefined(CONFIG_FILE_STREAM)intFAR const IPTR char *va_list
355vsnprintfstdio.hintFAR char *size_tFAR const IPTR char *va_list
356vsprintfstdio.hintFAR char *FAR const IPTR char *va_list
357vsscanfstdio.hintFAR const char *FAR const IPTR char *va_list
358vsyslogsyslog.hvoidintFAR const IPTR char *va_list
359wcrtombwchar.hsize_tFAR char *wchar_tFAR mbstate_t *
360wcscatwchar.hFAR wchar_t *FAR wchar_t *FAR const wchar_t *
361wcschrwchar.hFAR wchar_t *FAR const wchar_t *wchar_t
362wcscmpwchar.hintFAR const wchar_t *FAR const wchar_t *
363wcscollwchar.hintFAR const wchar_t *FAR const wchar_t *
364wcscpywchar.hFAR wchar_t *FAR wchar_t *FAR const wchar_t *
365wcscspnwchar.hsize_tFAR const wchar_t *FAR const wchar_t *
366wcsftimewchar.hsize_tFAR wchar_t *size_tFAR const wchar_t *FAR const struct tm *
367wcslcatwchar.hsize_tFAR wchar_t *FAR const wchar_t *size_t
368wcsncatwchar.hFAR wchar_t *FAR wchar_t *FAR const wchar_t *size_t
369wcsncmpwchar.hintFAR const wchar_t *FAR const wchar_t *size_t
370wcsncpywchar.hFAR wchar_t *FAR wchar_t *FAR const wchar_t *size_t
371wcslcpywchar.hsize_tFAR wchar_t *FAR const wchar_t *size_t
372wcslenwchar.hsize_tFAR const wchar_t *
373wcsnrtombswchar.hsize_tFAR char *FAR const wchar_t **size_tsize_tFAR mbstate_t *
374wcspbrkwchar.hFAR wchar_t *FAR const wchar_t *FAR const wchar_t *
375wcsrchrwchar.hFAR wchar_t *FAR const wchar_t *wchar_t
376wcsspnwchar.hsize_tFAR const wchar_t *FAR const wchar_t *
377wcsstrwchar.hFAR wchar_t *FAR const wchar_t *FAR const wchar_t *
378wcsrtombswchar.hsize_tFAR char *FAR const wchar_t **size_tFAR mbstate_t *
379wcstodwchar.hdoubleFAR const wchar_t *FAR wchar_t **
380wcstofwchar.hfloatFAR const wchar_t *FAR wchar_t **
381wcstokwchar.hFAR wchar_t *FAR wchar_t *FAR const wchar_t *FAR wchar_t **
382wcstolwchar.hlong intFAR const wchar_t *FAR wchar_t **int
383wcstoldwchar.hlong doubleFAR const wchar_t *FAR wchar_t **
384wcstollwchar.hlong long intFAR const wchar_t *FAR wchar_t **int
385wcstombsstdlib.hsize_tFAR char *FAR const wchar_t *size_t
386wcstoulwchar.hunsigned long intFAR const wchar_t *FAR wchar_t **int
387wcswcswchar.hFAR wchar_t *FAR const wchar_t *FAR const wchar_t *
388wcswidthwchar.hintFAR const wchar_t *size_t
389wcsxfrmwchar.hsize_tFAR wchar_t *FAR const wchar_t *size_t
390wctobwchar.hintwint_t
391wctombstdlib.hintFAR char *wchar_t
392wctypewctype.hwctype_tFAR const char *
393wcwidthwchar.hintwchar_t
394wmemchrwchar.hFAR wchar_t *FAR const wchar_t *wchar_tsize_t
395wmemcmpwchar.hintFAR const wchar_t *FAR const wchar_t *size_t
396wmemcpywchar.hFAR wchat_t *FAR wchar_t *FAR const wchar_t *size_t
397wmemmovewchar.hFAR wchat_t *FAR wchar_t *FAR const wchar_t *size_t
398wmemsetwchar.hFAR wchat_t *FAR wchar_t *wchar_tsize_t
399writevsys/uio.hssize_tintFAR const struct iovec *int