aboutsummaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-15 15:40:18 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-15 15:40:18 +0000
commit90a72e97d3f18a5e230578c63113da119622a73a (patch)
treeac5859a191e82fae017790748289f326790342b7 /nuttx/arch/arm/src
parentf55cabeb593496691293a330daa7c6a3d99eae2e (diff)
downloadpx4-firmware-90a72e97d3f18a5e230578c63113da119622a73a.tar.gz
px4-firmware-90a72e97d3f18a5e230578c63113da119622a73a.tar.bz2
px4-firmware-90a72e97d3f18a5e230578c63113da119622a73a.zip
Implement vfork() for the MIPS32 architecture
git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5520 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/src')
-rw-r--r--nuttx/arch/arm/src/arm/vfork.S3
-rw-r--r--nuttx/arch/arm/src/armv7-m/vfork.S3
-rw-r--r--nuttx/arch/arm/src/common/up_vfork.c2
-rw-r--r--nuttx/arch/arm/src/common/up_vfork.h8
4 files changed, 14 insertions, 2 deletions
diff --git a/nuttx/arch/arm/src/arm/vfork.S b/nuttx/arch/arm/src/arm/vfork.S
index 226d9f7de..7c3c8b727 100644
--- a/nuttx/arch/arm/src/arm/vfork.S
+++ b/nuttx/arch/arm/src/arm/vfork.S
@@ -105,6 +105,7 @@ vfork:
mov r0, sp /* Save the value of the stack on entry */
sub sp, sp, #VFORK_SIZEOF /* Allocate the structure on the stack */
+ /* CPU registers */
/* Save the volatile registers */
str r4, [sp, #VFORK_R4_OFFSET]
@@ -121,6 +122,8 @@ vfork:
str r0, [sp, #VFORK_SP_OFFSET]
str lr, [sp, #VFORK_LR_OFFSET]
+ /* Floating point registers (not yet) */
+
/* Then, call up_vfork(), passing it a pointer to the stack structure */
mov r0, sp
diff --git a/nuttx/arch/arm/src/armv7-m/vfork.S b/nuttx/arch/arm/src/armv7-m/vfork.S
index 386fca33c..f36ff23aa 100644
--- a/nuttx/arch/arm/src/armv7-m/vfork.S
+++ b/nuttx/arch/arm/src/armv7-m/vfork.S
@@ -108,6 +108,7 @@ vfork:
mov r0, sp /* Save the value of the stack on entry */
sub sp, sp, #VFORK_SIZEOF /* Allocate the structure on the stack */
+ /* CPU registers */
/* Save the volatile registers */
str r4, [sp, #VFORK_R4_OFFSET]
@@ -124,6 +125,8 @@ vfork:
str r0, [sp, #VFORK_SP_OFFSET]
str lr, [sp, #VFORK_LR_OFFSET]
+ /* Floating point registers (not yet) */
+
/* Then, call up_vfork(), passing it a pointer to the stack structure */
mov r0, sp
diff --git a/nuttx/arch/arm/src/common/up_vfork.c b/nuttx/arch/arm/src/common/up_vfork.c
index 5349378bc..3b653e317 100644
--- a/nuttx/arch/arm/src/common/up_vfork.c
+++ b/nuttx/arch/arm/src/common/up_vfork.c
@@ -208,7 +208,7 @@ pid_t up_vfork(const struct vfork_s *context)
svdbg("New stack base:%08x SP:%08x FP:%08x\n",
child->adj_stack_ptr, newsp, newfp);
- /* Update the stack pointer, frame pointer, and voltile registers. When
+ /* Update the stack pointer, frame pointer, and volatile registers. When
* the child TCB was initialized, all of the values were set to zero.
* up_initial_state() altered a few values, but the return value in R0
* should be cleared to zero, providing the indication to the newly started
diff --git a/nuttx/arch/arm/src/common/up_vfork.h b/nuttx/arch/arm/src/common/up_vfork.h
index a4505474a..97edf9aaa 100644
--- a/nuttx/arch/arm/src/common/up_vfork.h
+++ b/nuttx/arch/arm/src/common/up_vfork.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/common/arm-vfork.h
+ * arch/arm/src/common/up_vfork.h
*
* Copyright (C) 2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
@@ -53,6 +53,7 @@
#define VFORK_R8_OFFSET (4*4) /* Volatile register r8 */
#define VFORK_R9_OFFSET (5*4) /* Volatile register r9 */
#define VFORK_R10_OFFSET (6*4) /* Volatile register r10 */
+
#define VFORK_FP_OFFSET (7*4) /* Frame pointer */
#define VFORK_SP_OFFSET (8*4) /* Stack pointer*/
#define VFORK_LR_OFFSET (9*4) /* Return address*/
@@ -66,6 +67,8 @@
#ifndef __ASSEMBLY__
struct vfork_s
{
+ /* CPU registers */
+
uint32_t r4; /* Volatile register r4 */
uint32_t r5; /* Volatile register r5 */
uint32_t r6; /* Volatile register r6 */
@@ -73,9 +76,12 @@ struct vfork_s
uint32_t r8; /* Volatile register r8 */
uint32_t r9; /* Volatile register r9 */
uint32_t r10; /* Volatile register r10 */
+
uint32_t fp; /* Frame pointer */
uint32_t sp; /* Stack pointer*/
uint32_t lr; /* Return address*/
+
+ /* Floating point registers (not yet) */
};
#endif