I’m reporting the problem and (hopefully) the solution, but I think we’d better double-check this. The problem: Running the test below in a loop sometimes gets a SIGSEGV in the child process (on x86_64, libc 2.22.) --8<---------------cut here---------------start------------->8--- (use-modules (guix build syscalls) (ice-9 match)) (match (clone (logior CLONE_NEWUSER CLONE_CHILD_SETTID CLONE_CHILD_CLEARTID SIGCHLD)) (0 (throw 'x)) ;XXX: sometimes segfaults (pid (match (waitpid pid) ((_ . status) (pk 'status status) (exit (not (status:term-sig status))))))) --8<---------------cut here---------------end--------------->8--- Looking at (guix build syscalls) though, I see an ABI mismatch between our definition and the actual ‘syscall’ C function, and between our ‘clone’ definition and the actual C function. This leads to the attached patch, which also fixes the above problem for me.