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.

Reply via email to