diff options
Diffstat (limited to 'nuttx/arch/arm/src/common/up_vfork.c')
-rw-r--r-- | nuttx/arch/arm/src/common/up_vfork.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/common/up_vfork.c b/nuttx/arch/arm/src/common/up_vfork.c index a11c3b94f..801ac1f67 100644 --- a/nuttx/arch/arm/src/common/up_vfork.c +++ b/nuttx/arch/arm/src/common/up_vfork.c @@ -239,8 +239,23 @@ pid_t up_vfork(const struct vfork_s *context) { child->cmn.xcp.syscall[index].sysreturn = parent->xcp.syscall[index].sysreturn; + + /* REVISIT: This logic is *not* common. */ + +#if (defined(CONFIG_ARCH_CORTEXA5) || defined(CONFIG_ARCH_CORTEXA8)) && \ + defined(CONFIG_BUILD_KERNEL) + + child->cmn.xcp.syscall[index].cpsr = + parent->xcp.syscall[index].cpsr; + +#elif defined(CONFIG_ARCH_CORTEXM3) || defined(CONFIG_ARCH_CORTEXM4) || \ + defined(CONFIG_ARCH_CORTEXM0) + child->cmn.xcp.syscall[index].excreturn = parent->xcp.syscall[index].excreturn; +#else +# error Missing logic +#endif } child->cmn.xcp.nsyscalls = parent->xcp.nsyscalls; |