diff options
Diffstat (limited to 'nuttx/arch/arm/src/common/up_vfork.c')
-rw-r--r-- | nuttx/arch/arm/src/common/up_vfork.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/common/up_vfork.c b/nuttx/arch/arm/src/common/up_vfork.c index b578bd027..a11c3b94f 100644 --- a/nuttx/arch/arm/src/common/up_vfork.c +++ b/nuttx/arch/arm/src/common/up_vfork.c @@ -227,6 +227,26 @@ pid_t up_vfork(const struct vfork_s *context) child->cmn.xcp.regs[REG_FP] = newfp; /* Frame pointer */ child->cmn.xcp.regs[REG_SP] = newsp; /* Stack pointer */ +#ifdef CONFIG_LIB_SYSCALL + /* If we got here via a syscall, then we are going to have to setup some + * syscall return information as well. + */ + + if (parent->xcp.nsyscalls > 0) + { + int index; + for (index = 0; index < parent->xcp.nsyscalls; index++) + { + child->cmn.xcp.syscall[index].sysreturn = + parent->xcp.syscall[index].sysreturn; + child->cmn.xcp.syscall[index].excreturn = + parent->xcp.syscall[index].excreturn; + } + + child->cmn.xcp.nsyscalls = parent->xcp.nsyscalls; + } +#endif + /* And, finally, start the child task. On a failure, task_vforkstart() * will discard the TCB by calling task_vforkabort(). */ |