1 ;;; Compact subhost repear program to merely wait for children to
2 ;;; "reap" them, i.e. let them exit.
4 format elf64 executable
8 segment readable writable
10 ;; sigset_t set -- bit mask for sigprocmask
11 set: dq -1 ; all bits set
13 ;;; siginfo_t status -- all ignored
14 status: rept 16 { dq 0 }
19 segment readable executable
23 ;; if (getpid() != 1) exit 1;
32 syscall ; exit program
34 ;; Continue here for pid 1 only
37 ;; sigprocmask(SIG_BLOCK, &set, 0);
38 xor rdi, rdi ; SIG_BLOCK = 0
42 mov rax, qword 14 ; sys_rt_sigprocmask
45 ;; loop waiting for children, and reading their exit status
47 ;; first clear status area again
56 ;; waitid( idtype, id, *status, options )
57 xor rdi, rdi ; idtype_t idtype = P_ALL = 0
58 xor rsi, rsi ; int id = 0
59 lea rdx, [status] ; siginfo_t* = &status
60 mov r10, 4 ; int options = WEXITED = 4
64 cmp rax,-10 ; -10 = ECHILD (no child processes)
69 syscall ; exit program