Under proot, ptrace serialisation causes the parent process to complete
close(pipe_read_end) before the child writer runs. For process
substitution like `echo <(echo a)`, this leaves zero readers when the
subshell writes "a\n" → EPIPE → "bash: echo: write error: Broken pipe".
Fix: at PR_close sysenter, if the closing fd is a pipe read end, proot
opens its own shadow reference via /proc/<tracee_pid>/fd/<fd>. This
keeps the read-end reference count > 0, so the child's write succeeds.
The shadow is never read (data stays in the pipe buffer for legitimate
readers like diff or cat). shadow_pipes_close_eof() polls POLLHUP each
event-loop iteration and closes the shadow once all write ends are gone.
New test (test-b3e7f2d8.sh) checks that echo <(echo a) produces no
"Broken pipe" stderr output under -b /proc/self/fd:/dev/fd.