:> :the assembly wouldn't be needed. Hmm... actually... if one were to mmap() a
:> :stack and as soon as the rfork() returned movl newstack,%esp and whatnot,
:> :wouldn't this be a pretty simple solution? 
:> 
:>     No, because one of the processes may overrun the stack before the other
:>     one managed to return from rfork().  The child process cannot use the
:>     old stack at all.
:
:Why would a simple movl be using the stack?

    If you are making a subroutine *call* to the rfork() routine, where
    do you think the return PC address is stored?  On the stack.  The
    rfork() routine is going to 'ret' *after* doing the rfork syscall.
    'ret' pops the stack.   While this in itself is not modifying the stack,
    you can still wind up with the situation where process A returns from
    the rfork and then does something else which overwrites the stack before
    process B has a chance to return from the rfork().

    This is why, in my assembly example, I was forced to make the syscall
    manually rather then call the rfork() library function.

:> 
: Brian Feldman                                   _ __  ___ ___ ___  

                                        -Matt

                                        Matthew Dillon 
                                        <dil...@backplane.com>


To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-current" in the body of the message

Reply via email to