What the corpus needs

Generated by scripts/dev/corpus-report.py from the syscalls each corpus workload made on Linux (tests/corpus/needs/, measured by scripts/dev/corpus-measure.sh under strace) and the state of each syscall in syscalls.md. Phase A0 of phases.md. The workloads are listed in tests/corpus/workloads.txt.

A workload is ready when nothing it asks for is missing or deferred here - the two answers the boot gate fails on. A refused call is an answer by decision. A partial syscall does not count against it - it is served, with a named gap that may or may not be the case this workload reaches. Ready is necessary, not sufficient: running the workload on VibeOS, and LTP, are what say it works. The musl test programs the boot gate already runs are the check on this report: they must come out ready.

Workloads25, of which ready: 25
Distinct syscalls asked for85
... done78
... partial7: clone, futex, ioctl, mmap, prlimit64, rseq, uname
... missing or deferred0
... refused (answered by decision)0

Without a full answer, by phase - the order to write them in

PhaseSyscallStateAsked for by
L1 - files and pathsioctlpartial20: bb-disk, bb-find-grep, bb-grep-r, bb-identity, bb-ls, bb-metadata, bb-pipeline, bb-ps, bb-sh-script, bb-tar, bb-time, lua-script, musl-dynamic, musl-hello, musl-pie, musl-signal, musl-tfork, musl-threads, sqlite-file, sqlite-memory
L2 - processes, credentials, timeprlimit64partial16: bb-cp-mv-rm, bb-dd, bb-disk, bb-find-grep, bb-grep-r, bb-identity, bb-ls, bb-metadata, bb-mkdir-rm, bb-pipeline, bb-ps, bb-sed-inplace, bb-sh-script, bb-tar, bb-text, bb-time
L3 - memorymmappartial8: bb-dd, lua-script, musl-dynamic, musl-hello, musl-tfork, musl-threads, sqlite-file, sqlite-memory
L6 - threads and schedulingclonepartial13: bb-cp-mv-rm, bb-disk, bb-find-grep, bb-identity, bb-metadata, bb-mkdir-rm, bb-pipeline, bb-sh-script, bb-tar, bb-text, bb-time, musl-tfork, musl-threads
L6 - threads and schedulingfutexpartial2: musl-tfork, musl-threads
L8 - system administrationunamepartial11: bb-cp-mv-rm, bb-disk, bb-find-grep, bb-identity, bb-metadata, bb-mkdir-rm, bb-pipeline, bb-sh-script, bb-tar, bb-text, bb-time
R - refused by decisionrseqpartial16: bb-cp-mv-rm, bb-dd, bb-disk, bb-find-grep, bb-grep-r, bb-identity, bb-ls, bb-metadata, bb-mkdir-rm, bb-pipeline, bb-ps, bb-sed-inplace, bb-sh-script, bb-tar, bb-text, bb-time

Per workload

WorkloadAsks forDonePartialMissing
bb-cp-mv-rm4036clone prlimit64 rseq uname-
bb-dd2421mmap prlimit64 rseq-
bb-disk3227clone ioctl prlimit64 rseq uname-
bb-find-grep3429clone ioctl prlimit64 rseq uname-
bb-grep-r2421ioctl prlimit64 rseq-
bb-identity3328clone ioctl prlimit64 rseq uname-
bb-ls2623ioctl prlimit64 rseq-
bb-metadata3530clone ioctl prlimit64 rseq uname-
bb-mkdir-rm3228clone prlimit64 rseq uname-
bb-pipeline3227clone ioctl prlimit64 rseq uname-
bb-ps2421ioctl prlimit64 rseq-
bb-sed-inplace2624prlimit64 rseq-
bb-sh-script3429clone ioctl prlimit64 rseq uname-
bb-tar4136clone ioctl prlimit64 rseq uname-
bb-text3228clone prlimit64 rseq uname-
bb-time3732clone ioctl prlimit64 rseq uname-
lua-script1614ioctl mmap-
musl-dynamic97ioctl mmap-
musl-hello97ioctl mmap-
musl-pie65ioctl-
musl-signal76ioctl-
musl-tfork1612clone futex ioctl mmap-
musl-threads3329clone futex ioctl mmap-
sqlite-file2725ioctl mmap-
sqlite-memory1816ioctl mmap-

The LTP oracle

The Linux Test Project's syscall tests that build against musl (scripts/dev/corpus-build.sh; the list is tests/corpus/ltp-built.txt): 1331 tests covering 320 syscalls. Each is matched to the syscall its name starts with, longest name first. What they are for is the phase column: a syscall with tests here has a conformance oracle waiting for it; one without has to be proved by the corpus programs alone. Another 199 built tests have a name that starts with no syscall's (for example abort01, cacheflush01, confstr01, endian_switch01, epoll-ltp) and are not counted.

PhaseSyscalls in the phasewith LTP teststests
done236219898
L1 - files and paths8871
L2 - processes, credentials, time10941
L3 - memory5547
L4 - event loops000
L5 - sockets4418
L6 - threads and scheduling4416
L7 - IPC000
L8 - system administration121236
L9 - security637
D - deferred5039144
R - refused by decision381753

System files the corpus opens

Not syscalls, and just as necessary: ps needs nothing VibeOS lacks at the syscall level and still fails without /proc. Process ids are folded to <pid>. These are the requirements of L2's minimal /proc, and of the /etc files the credential model will need.

PathOpened by
/dev/sdcbb-disk
/dev/urandomsqlite-file
/dev/zerobb-dd
/etc/busybox.confbb-cp-mv-rm, bb-dd, bb-disk, bb-find-grep, bb-grep-r, bb-identity, bb-ls, bb-metadata, bb-mkdir-rm, bb-pipeline, bb-ps, bb-sed-inplace, bb-sh-script, bb-tar, bb-text, bb-time
/etc/groupbb-identity, bb-ls, bb-metadata, bb-tar
/etc/localtimebb-ls, bb-metadata, bb-time
/etc/passwdbb-identity, bb-ls, bb-metadata, bb-ps, bb-tar, sqlite-file, sqlite-memory
/proc/<pid>/bb-ps
/proc/<pid>/cmdlinebb-ps
/proc/<pid>/statbb-ps
/proc/mountsbb-disk
/proc/self/exebb-cp-mv-rm, bb-dd, bb-disk, bb-find-grep, bb-grep-r, bb-identity, bb-ls, bb-metadata, bb-mkdir-rm, bb-pipeline, bb-ps, bb-sed-inplace, bb-sh-script, bb-tar, bb-text, bb-time