mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 08:33:12 -05:00
On Linux a guest stderr redirect also moves the host's: guest descriptors are host descriptors, and the guest stderr stream wraps the host stderr FILE. After dup2(fd, 2), or freopen(path, mode, stderr) with full buffering, the libc terminate report, the host fprintf(stderr) diagnostics and libstdc++'s terminate message go into the title's pipe or file, and abort() discards what is still buffered. RetroArch (PPSA99169) reopens stderr onto app0/trace.txt with full buffering, so its stop on main left no message anywhere. Before the first guest redirect of descriptor 2 (libkernel dup2, libc freopen of a stream on descriptor 2), keep a close-on-exec duplicate of the host descriptor 2 and point the host stderr at an unbuffered stream on it. The guest stream keeps its own FILE and follows the redirect. The libc terminate report writes to the kept descriptor with write() instead of the stderr stream, and libkernel's sceKernelDebugOutText uses the same kept descriptor.