diff --git a/components/lwp/arch/arm/cortex-a/lwp_gcc.S b/components/lwp/arch/arm/cortex-a/lwp_gcc.S index ee91466ef9a493f2284fcb265a2bf43904aed796..452adb7c9482c79ca84c808c7c6e27d223b4e1fb 100644 --- a/components/lwp/arch/arm/cortex-a/lwp_gcc.S +++ b/components/lwp/arch/arm/cortex-a/lwp_gcc.S @@ -94,8 +94,10 @@ lwp_get_user_sp: mov pc, lr .global sys_fork +.global sys_vfork .global sys_fork_exit sys_fork: +sys_vfork: push {r4 - r12, lr} bl _sys_fork sys_fork_exit: diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index 85665d38a7d7defa7972d04129aa9d7dcb7a4318..e8791e77bc9ea581ae58fff9864a9eddcd772193 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -1436,6 +1436,7 @@ static int lwp_copy_files(struct rt_lwp *dst, struct rt_lwp *src) } int sys_fork(void); +int sys_vfork(void); void sys_fork_exit(void); int _sys_fork(void) { @@ -3203,6 +3204,7 @@ const static void* func_table[] = (void *)sys_rename, /* 135 */ (void *)sys_fork, (void *)sys_execve, + (void *)sys_vfork, }; const void *lwp_get_sys_api(rt_uint32_t number)