The return value munging isn't necessary anymore.  See for example
lib/libc/arch/arm/sys/OVfork.S:

  revision 1.4
  date: 2015/03/31 04:32:01;  author: guenther;  state: Exp;  lines: +1 -10;  
commitid: 4lHzpIZZxMqyyel4;
  Simplify fork/vfork logic: the kernel has handled returning zero in the child
  for a long time, so there's no need to test the second return register here
  in the asm stub.

  ok and testing of many archs by krw@ miod@

ok?


Index: lib/libc/arch/aarch64/sys/Ovfork.S
===================================================================
RCS file: /cvs/src/lib/libc/arch/aarch64/sys/Ovfork.S,v
retrieving revision 1.1
diff -u -p -r1.1 Ovfork.S
--- lib/libc/arch/aarch64/sys/Ovfork.S  11 Jan 2017 18:09:24 -0000      1.1
+++ lib/libc/arch/aarch64/sys/Ovfork.S  18 Mar 2017 15:53:57 -0000
@@ -34,13 +34,6 @@
 
 #include "SYS.h"
 
-/*
- * pid = vfork();
- *
- * On return from the SWI:
- * r1 == 0 in parent process, r1 == 1 in child process.
- * r0 == pid of child in parent, r0 == pid of parent in child.
- */
        .text
        .align  0
 
@@ -48,8 +41,6 @@ SYSENTRY_HIDDEN(vfork)
        mov     x2, x30
        SYSTRAP(vfork)
        bcs     CERROR
-       sub     x1, x1, #1      /* r1 == 0xffffffff if parent, 0 if child */
-       and     x0, x0, x1      /* r0 == 0 if child, else unchanged */
        mov     x30, x2
        ret
 SYSCALL_END_HIDDEN(vfork)

Reply via email to