https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112836
--- Comment #1 from Bruno Haible <bruno at clisp dot org> --- Created attachment 56779 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56779&action=edit proposed fix Although the error is not easily reproducible, it is easy to analyze and fix: The piece of error message string "failed to get exit status" occurs only in one place: in gcc/gcc.cc line 3462. The only possible cause for the error message "failed to get exit status: Interrupted system call" is therefore that pex_get_status returned 0, with error code EINTR. pex_get_status is defined in libiberty/pex-common.c, line 547. It returns 0 only in line 555. We can infer that the function pex_get_status_and_time had returned 0, with error code EINTR. pex_get_status_and_time is defined in libiberty/pex-common.c, line 518. It returns 0 only when ret gets to 0 in line 537. We can infer that the obj->funcs->wait function must have returned non-zero, with error code EINTR. obj->funcs->wait is the method declared in libiberty/pex-common.h line 128. On this platform, the relevant implementation is in libiberty/pex-unix.c. The initialization happens in libiberty/pex-unix.c line 338: return pex_init_common (flags, pname, tempbase, &funcs); The obj->funcs->wait function function is thus pex_unix_wait. It must have returned non-zero, with error code EINTR. pex_unix_wait is defined in libiberty/pex-unix.c line 938. Looking at its code, the function pex_wait must have returned a negative value, with errno being set to EINTR. pex_wait has 4 possible implementations, in libiberty/pex-unix.c line 128 libiberty/pex-unix.c line 159 libiberty/pex-unix.c line 170 libiberty/pex-unix.c line 219 Since glibc has the 'wait4' function, the implementation that matters is the one from libiberty/pex-unix.c line 128. But the other implementations have the same problem: they don't handle EINTR so far. Find attached a proposed patch.