a1344d8a44
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5778 42af7a65-404d-4744-a932-0658087f49c3
116 lines
4.0 KiB
ArmAsm
116 lines
4.0 KiB
ArmAsm
/****************************************************************************
|
|
* 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__ */
|