https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113991
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Maybe it is a bug in the app (or kernel or glibc) though. Under the debugger, I see the value of %r7 is still &new_child at before the call at line 189: 189 new_child = vsf_sysutil_fork_isolate_failok(); 190 } 191 } 192 else 193 { 194 new_child = vsf_sysutil_fork_failok(); 195 } 196 if (new_child != 0) 197 { 198 /* Parent context */ 199 vsf_sysutil_close(new_client_sock); 200 if (new_child > 0) 201 { 202 hash_add_entry(s_p_pid_ip_hash, (void*)&new_child, p_raw_addr); That vsf_sysutil_fork_isolate_failok call calls the glibc clone function with clone(NULL, NULL, CLONE_NEWPID | CLONE_NEWIPC | SIGCHLD, NULL) arguments and the function doesn't directly use %r7 which I think is call-saved register, but when the glibc clone returns in the parent, the %r7 register is already 0.