| /* |
| * arch/arm64/vfork.S |
| * |
| * vfork - a system call which must not use the stack. |
| */ |
| |
| #include <klibc/asmmacros.h> |
| #include <asm/unistd.h> |
| |
| .type vfork,#function |
| .globl vfork |
| .balign 8 |
| |
| vfork: |
| /* Prepare for the system call */ |
| /* 1. Push the function pointer and argument location |
| on to the child process stack */ |
| /* 2. Gather the Flags */ |
| /* New sp is already in x1. */ |
| mov x0, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ |
| mov x1, sp |
| mov w8,__NR_clone |
| svc 0 |
| cmp x0, #0x0 |
| b.ge 2f |
| neg x0, x0 |
| ldr x8, 1f |
| str x0, [x8] |
| mov x0, #-1 |
| 2: |
| ret |
| 1: |
| .dword errno |
| .size vfork,.-vfork |