summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/armv6-m
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-23 14:46:02 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-23 14:46:02 +0000
commita8cb02138ce460fbd66d242d34dda71082062538 (patch)
tree85f69dab32369af97249168fb8eb32b976ceeb40 /nuttx/arch/arm/src/armv6-m
parentf4a74d79f3111b79f408eb4070e125cad78e9082 (diff)
downloadpx4-nuttx-a8cb02138ce460fbd66d242d34dda71082062538.tar.gz
px4-nuttx-a8cb02138ce460fbd66d242d34dda71082062538.tar.bz2
px4-nuttx-a8cb02138ce460fbd66d242d34dda71082062538.zip
Rework of kernel build signal dispatch to user-space handlers
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5778 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/src/armv6-m')
-rw-r--r--nuttx/arch/arm/src/armv6-m/up_signal_handler.S115
1 files changed, 115 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/armv6-m/up_signal_handler.S b/nuttx/arch/arm/src/armv6-m/up_signal_handler.S
new file mode 100644
index 000000000..559b8c6d7
--- /dev/null
+++ b/nuttx/arch/arm/src/armv6-m/up_signal_handler.S
@@ -0,0 +1,115 @@
+/****************************************************************************
+ * arch/arm/srcm/armv6-m/up_signal_handler.S
+ *
+ * Copyright (C) 2013 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <arch/syscall.h>
+
+#if defined(CONFIG_NUTTX_KERNEL) && !defined(__KERNEL__)
+
+/****************************************************************************
+ * File info
+ ****************************************************************************/
+
+ .cpu cortex-m0
+ .file "up_signal_handler.S"
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: up_signal_handler
+ *
+ * Description:
+ * This function is the user-space, signal handler trampoline function. It
+ * is called from up_signal_dispatch() in user-mode.
+ *
+ * Inputs:
+ * R0 = sighand
+ * The address user-space signal handling function
+ * R1-R3 = signo, info, and ucontext
+ * Standard arguments to be passed to the signal handling function.
+ *
+ * Return:
+ * None. This function does not return in the normal sense. It returns
+ * via the SYS_signal_handler_return (see svcall.h)
+ *
+ ****************************************************************************/
+
+ .text
+ .align 2
+ .code 16
+ .thumb_func
+ .globl up_signal_handler
+ .type up_signal_handler, function
+up_signal_handler:
+
+ /* Save some register */
+
+ push {r4, r5 /* Save R4 and R5 on the stack */
+ mov r5, lr /* Save LR in R5 */
+
+ /* Call the signal handler */
+
+ mov r4, r0 /* R4=sighand */
+ mov r0, r1 /* R0=signo */
+ mov r1, r2 /* R1=info */
+ mov r2, r3 /* R2=ucontext */
+ blx r4 /* Call the signal handler */
+
+ /* Restore the registers */
+
+ mov lr, r5 /* Restore LR */
+ pop {r4, r5} /* Restore R4 and R5 */
+
+ /* Execute the SYS_signal_handler_return SVCall (will not return) */
+
+ mov r0, #SYS_signal_handler_return
+ svc 0
+ nop
+
+ .size up_signal_handler, .-up_signal_handler
+ .end
+
+#endif /* CONFIG_NUTTX_KERNEL && !__KERNEL__ */