diff mbox

vfork test case.

Message ID AANLkTinFBc9524WWuwrRvuBQGY0OCqjPIZ_t9A7esb-B@mail.gmail.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Carlos O'Donell June 22, 2010, 3:39 p.m. UTC
None
diff mbox

Patch

diff --git a/sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S
b/sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S
index 83a70b7..3c685cb 100644
--- a/sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S
+++ b/sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S
@@ -50,10 +50,9 @@ 

        /* r26, r25, r24, r23 are free since vfork has no arguments */
 ENTRY(__vfork)
-       /* Prologue */
-       stwm    %r3, 64(%sp)
-       stw     %sp, -4(%sp)
-       stw     %r19, -32(%sp)
+       /* We must not create a frame, otherwise when the child unwinds
+          to call exec it will clobber the same frame that the parent
+          needs to unwind.  */

        /* Save the PIC register. */
 #ifdef PIC
@@ -76,11 +75,16 @@  ENTRY(__vfork)
        b,n     .Lerror

        /* Return, no need to restore the PIC register. */
-       ldw     -84(%sp), %rp
-       bv      %r0(%rp)
-       ldwm    -64(%sp), %r3
+       ldw     -20(%sp), %rp
+       bv,n    %r0(%rp)

 .Lerror:
+       /* Now we need a stack to record the error. We are assured
+          that there is no child now, so it's safe to create
+          a frame.  */
+       stwm    %r3, 64(%sp)
+       stw     %sp, -4(%sp)
+
        sub     %r0,%ret0,%r3
        SYSCALL_ERROR_HANDLER
        /* Restore the PIC register (in delay slot) on error */