summaryrefslogtreecommitdiff
path: root/nuttx/libc/signal
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-17 00:40:49 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-17 00:40:49 +0000
commite6dc1927ce61a16359477bb93a2292caade5df75 (patch)
tree3b7ed6b971413d6423d6012fe593980ee8370429 /nuttx/libc/signal
parentc6e15be439a293e411a5ff571c48e0ca15dfaad5 (diff)
downloadnuttx-e6dc1927ce61a16359477bb93a2292caade5df75.tar.gz
nuttx-e6dc1927ce61a16359477bb93a2292caade5df75.tar.bz2
nuttx-e6dc1927ce61a16359477bb93a2292caade5df75.zip
Add support for calling to and returning from signal handlers in in user-mode threads
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5750 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/libc/signal')
-rw-r--r--nuttx/libc/signal/Make.defs4
-rw-r--r--nuttx/libc/signal/signal_handler.c110
2 files changed, 114 insertions, 0 deletions
diff --git a/nuttx/libc/signal/Make.defs b/nuttx/libc/signal/Make.defs
index fe7eb180e..0264cce25 100644
--- a/nuttx/libc/signal/Make.defs
+++ b/nuttx/libc/signal/Make.defs
@@ -39,6 +39,10 @@ ifneq ($(CONFIG_DISABLE_SIGNALS),y)
CSRCS += sig_emptyset.c sig_fillset.c sig_addset.c sig_delset.c sig_ismember.c
+ifeq ($(CONFIG_NUTTX_KERNEL),y)
+CSRCS += signal_handler.c
+endif
+
# Add the signal directory to the build
DEPPATH += --dep-path signal
diff --git a/nuttx/libc/signal/signal_handler.c b/nuttx/libc/signal/signal_handler.c
new file mode 100644
index 000000000..0a0996bae
--- /dev/null
+++ b/nuttx/libc/signal/signal_handler.c
@@ -0,0 +1,110 @@
+/****************************************************************************
+ * libc/signal/signal_handler.c
+ *
+ * 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 <signal.h>
+#include <assert.h>
+
+#include <arch/syscall.h>
+#include <nuttx/userspace.h>
+
+#if defined(CONFIG_NUTTX_KERNEL) && !defined(__KERNEL__)
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Type Declarations
+ ****************************************************************************/
+
+/****************************************************************************
+ * Global Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: signal_handler
+ *
+ * Description:
+ * This function is the user-space, signal handler trampoline function. It
+ * is called from up_signal_handler() in user-mode.
+ *
+ * Inputs:
+ * sighand - The address user-space signal handling function
+ * 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 signal_handler_return (see include/nuttx/arch.h)
+ *
+ ****************************************************************************/
+
+void signal_handler(_sa_sigaction_t sighand, int signo, FAR siginfo_t *info,
+ FAR void *ucontext)
+{
+ DEBUGASSERT(sighand);
+
+ /* Execute the signal handler. */
+
+ sighand(signo, info, ucontext);
+
+ /* And return from the signal handler */
+
+ signal_handler_return();
+}
+
+#endif /* CONFIG_NUTTX_KERNEL && !__KERNEL__ */