summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/common/up_vfork.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/common/up_vfork.c')
-rw-r--r--nuttx/arch/arm/src/common/up_vfork.c15
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;