diff --git a/arch/arm/include/arm/irq.h b/arch/arm/include/arm/irq.h index 59acf1aba7e..61b68a1cae2 100644 --- a/arch/arm/include/arm/irq.h +++ b/arch/arm/include/arm/irq.h @@ -129,11 +129,13 @@ #ifndef __ASSEMBLY__ struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved copies of the context used during * signal processing. */ uint32_t *saved_regs; +#endif /* Register save area with XCPTCONTEXT_SIZE, only valid when: * 1.The task isn't running or diff --git a/arch/arm/include/armv6-m/irq.h b/arch/arm/include/armv6-m/irq.h index 6d75ccf4666..7a83579d1b5 100644 --- a/arch/arm/include/armv6-m/irq.h +++ b/arch/arm/include/armv6-m/irq.h @@ -158,6 +158,7 @@ struct xcpt_syscall_s struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved copies of the context used during * signal processing. */ @@ -171,6 +172,7 @@ struct xcptcontext uint32_t sigreturn; #endif +#endif /* CONFIG_ENABLE_ALL_SIGNALS */ #ifdef CONFIG_LIB_SYSCALL /* The following array holds the return address and the exc_return value diff --git a/arch/arm/include/armv7-a/irq.h b/arch/arm/include/armv7-a/irq.h index e1fb1ff6f90..b7b298c22c0 100644 --- a/arch/arm/include/armv7-a/irq.h +++ b/arch/arm/include/armv7-a/irq.h @@ -259,6 +259,7 @@ struct xcpt_syscall_s struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved copies of the context used during * signal processing. */ @@ -273,6 +274,7 @@ struct xcptcontext uint32_t sigreturn; #endif +#endif /* CONFIG_ENABLE_ALL_SIGNALS */ /* Register save area with XCPTCONTEXT_SIZE, only valid when: * 1.The task isn't running or diff --git a/arch/arm/include/armv7-m/irq.h b/arch/arm/include/armv7-m/irq.h index 8c1cf80368c..1f37bb6fbb5 100644 --- a/arch/arm/include/armv7-m/irq.h +++ b/arch/arm/include/armv7-m/irq.h @@ -214,6 +214,7 @@ struct xcpt_syscall_s struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved copies of the context used during * signal processing. */ @@ -228,6 +229,7 @@ struct xcptcontext uint32_t sigreturn; #endif +#endif /* CONFIG_ENABLE_ALL_SIGNALS */ #ifdef CONFIG_LIB_SYSCALL /* The following array holds the return address and the exc_return value diff --git a/arch/arm/include/armv7-r/irq.h b/arch/arm/include/armv7-r/irq.h index d25064c9ed8..6686cbc6a26 100644 --- a/arch/arm/include/armv7-r/irq.h +++ b/arch/arm/include/armv7-r/irq.h @@ -259,6 +259,7 @@ struct xcpt_syscall_s struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved copies of the context used during * signal processing. */ @@ -272,6 +273,7 @@ struct xcptcontext uint32_t sigreturn; #endif +#endif /* CONFIG_ENABLE_ALL_SIGNALS */ /* Register save area with XCPTCONTEXT_SIZE, only valid when: * 1.The task isn't running or diff --git a/arch/arm/include/armv8-m/irq.h b/arch/arm/include/armv8-m/irq.h index a9fb63b9c86..3d4290eeb7f 100644 --- a/arch/arm/include/armv8-m/irq.h +++ b/arch/arm/include/armv8-m/irq.h @@ -225,6 +225,7 @@ struct xcpt_syscall_s struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved copies of the context used during * signal processing. */ @@ -239,6 +240,7 @@ struct xcptcontext uint32_t sigreturn; #endif +#endif /* CONFIG_ENABLE_ALL_SIGNALS */ #ifdef CONFIG_LIB_SYSCALL /* The following array holds the return address and the exc_return value diff --git a/arch/arm/include/armv8-r/irq.h b/arch/arm/include/armv8-r/irq.h index e08636f1e71..8d44efb6442 100644 --- a/arch/arm/include/armv8-r/irq.h +++ b/arch/arm/include/armv8-r/irq.h @@ -259,6 +259,7 @@ struct xcpt_syscall_s struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved copies of the context used during * signal processing. */ @@ -272,6 +273,7 @@ struct xcptcontext uint32_t sigreturn; #endif +#endif /* CONFIG_ENABLE_ALL_SIGNALS */ /* Register save area with XCPTCONTEXT_SIZE, only valid when: * 1.The task isn't running or diff --git a/arch/arm/include/tlsr82/irq.h b/arch/arm/include/tlsr82/irq.h index 7a89ac77a7e..a8a551cbe3e 100644 --- a/arch/arm/include/tlsr82/irq.h +++ b/arch/arm/include/tlsr82/irq.h @@ -160,12 +160,13 @@ #ifndef __ASSEMBLY__ struct xcptcontext { +#ifdef CONFIG_ENABLE_ALL_SIGNALS /* These are saved register array pointer used during * signal processing. */ uint32_t *saved_regs; - +#endif /* CONFIG_ENABLE_ALL_SIGNALS */ /* Register save area */ uint32_t *regs; diff --git a/arch/arm/src/arm/CMakeLists.txt b/arch/arm/src/arm/CMakeLists.txt index 7441d85d927..b0a8f770d3e 100644 --- a/arch/arm/src/arm/CMakeLists.txt +++ b/arch/arm/src/arm/CMakeLists.txt @@ -29,8 +29,6 @@ list( arm_doirq.c arm_initialstate.c arm_prefetchabort.c - arm_schedulesigaction.c - arm_sigdeliver.c arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c @@ -39,6 +37,10 @@ list( arm_vectortab.S arm_saveusercontext.S) +if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_schedulesigaction.c arm_sigdeliver.c) +endif() + if(CONFIG_PAGING) list(APPEND SRCS arm_pginitialize.c arm_checkmapping.c arm_allocpage.c arm_va2pte.c) diff --git a/arch/arm/src/arm/Make.defs b/arch/arm/src/arm/Make.defs index faff6009b70..43afb28c920 100644 --- a/arch/arm/src/arm/Make.defs +++ b/arch/arm/src/arm/Make.defs @@ -27,13 +27,17 @@ include common/Make.defs HEAD_ASRC = arm_head.S CMN_CSRCS += arm_dataabort.c arm_doirq.c arm_initialstate.c -CMN_CSRCS += arm_prefetchabort.c arm_schedulesigaction.c -CMN_CSRCS += arm_sigdeliver.c arm_syscall.c arm_tcbinfo.c +CMN_CSRCS += arm_prefetchabort.c +CMN_CSRCS += arm_syscall.c arm_tcbinfo.c CMN_CSRCS += arm_undefinedinsn.c CMN_ASRCS += arm_cache.S arm_vectors.S arm_vectortab.S CMN_ASRCS += arm_saveusercontext.S +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) +CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c +endif + ifeq ($(CONFIG_LEGACY_PAGING),y) CMN_CSRCS += arm_pginitialize.c arm_checkmapping.c arm_allocpage.c arm_va2pte.c endif diff --git a/arch/arm/src/arm/arm_vectors.S b/arch/arm/src/arm/arm_vectors.S index 0b1887cb4cb..add095fe3d0 100644 --- a/arch/arm/src/arm/arm_vectors.S +++ b/arch/arm/src/arm/arm_vectors.S @@ -182,7 +182,7 @@ arm_vectorirq: /* Call arm_decodeirq() on the interrupt stack */ ldr sp, .Lirqstacktop /* SP = interrupt stack top */ -#else +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* Call arm_decodeirq() on the user stack */ /* If the interrupt stack is disabled, reserve xcpcontext to ensure diff --git a/arch/arm/src/armv6-m/CMakeLists.txt b/arch/arm/src/armv6-m/CMakeLists.txt index 07d997dceb8..d5d289a6369 100644 --- a/arch/arm/src/armv6-m/CMakeLists.txt +++ b/arch/arm/src/armv6-m/CMakeLists.txt @@ -27,13 +27,15 @@ set(SRCS arm_doirq.c arm_hardfault.c arm_initialstate.c - arm_schedulesigaction.c - arm_sigdeliver.c arm_svcall.c arm_systemreset.c arm_tcbinfo.c arm_trigger_irq.c) +if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_schedulesigaction.c arm_sigdeliver.c) +endif() + if(NOT CONFIG_ARCH_HAVE_CUSTOM_VECTORS) list(APPEND SRCS arm_vectors.c) endif() diff --git a/arch/arm/src/armv6-m/Make.defs b/arch/arm/src/armv6-m/Make.defs index c97fa4ceacd..666f2f5f307 100644 --- a/arch/arm/src/armv6-m/Make.defs +++ b/arch/arm/src/armv6-m/Make.defs @@ -27,10 +27,14 @@ include common/Make.defs CMN_ASRCS += arm_exception.S arm_saveusercontext.S CMN_CSRCS += arm_cpuinfo.c arm_doirq.c arm_hardfault.c arm_initialstate.c -CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c arm_svcall.c +CMN_CSRCS += arm_svcall.c CMN_CSRCS += arm_systemreset.c arm_tcbinfo.c CMN_CSRCS += arm_trigger_irq.c +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) +CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c +endif + ifneq ($(CONFIG_ARCH_HAVE_CUSTOM_VECTORS),y) CMN_CSRCS += arm_vectors.c endif diff --git a/arch/arm/src/armv6-m/arm_doirq.c b/arch/arm/src/armv6-m/arm_doirq.c index 24ef364482f..4ee54a70bcf 100644 --- a/arch/arm/src/armv6-m/arm_doirq.c +++ b/arch/arm/src/armv6-m/arm_doirq.c @@ -86,6 +86,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) irq_dispatch(irq, regs); #endif +#ifdef CONFIG_ENABLE_ALL_SIGNALS if (tcb->sigdeliver) { /* Pendsv able to access running tcb with no critical section */ @@ -93,6 +94,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) up_schedule_sigaction(tcb); } +#endif up_irq_save(); } else diff --git a/arch/arm/src/armv6-m/arm_exception.S b/arch/arm/src/armv6-m/arm_exception.S index 350415ce552..6577467d187 100644 --- a/arch/arm/src/armv6-m/arm_exception.S +++ b/arch/arm/src/armv6-m/arm_exception.S @@ -158,7 +158,9 @@ exception_common: lsls r2, #(31 - EXC_RETURN_THREAD_BITNO) /* Move to bit 31 */ bpl 3f /* Test bit 31 */ mov r2, r1 /* Reserve signal context */ +#ifdef CONFIG_ENABLE_ALL_SIGNALS subs r2, r2, #XCPTCONTEXT_SIZE +#endif msr msp, r2 /* We are using the main stack pointer */ isb sy 3: diff --git a/arch/arm/src/armv7-a/CMakeLists.txt b/arch/arm/src/armv7-a/CMakeLists.txt index dcb6cdad907..27cfd8bbb82 100644 --- a/arch/arm/src/armv7-a/CMakeLists.txt +++ b/arch/arm/src/armv7-a/CMakeLists.txt @@ -43,14 +43,16 @@ list( arm_initialstate.c arm_mmu.c arm_prefetchabort.c - arm_schedulesigaction.c - arm_sigdeliver.c arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c arm_perf.c cp15_cacheops.c) +if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_schedulesigaction.c arm_sigdeliver.c) +endif() + if(CONFIG_ARMV7A_GICv2M) list(APPEND SRCS arm_gicv2m.c) endif() diff --git a/arch/arm/src/armv7-a/Make.defs b/arch/arm/src/armv7-a/Make.defs index 690226f943f..07154bda712 100644 --- a/arch/arm/src/armv7-a/Make.defs +++ b/arch/arm/src/armv7-a/Make.defs @@ -38,10 +38,13 @@ CMN_ASRCS += arm_cpuhead.S arm_vectors.S arm_saveusercontext.S CMN_CSRCS += arm_cache.c arm_cpuinfo.c arm_dataabort.c CMN_CSRCS += arm_doirq.c arm_gicv2.c arm_gicv2_dump.c CMN_CSRCS += arm_initialstate.c arm_mmu.c arm_prefetchabort.c -CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c CMN_CSRCS += arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c CMN_CSRCS += arm_perf.c cp15_cacheops.c +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) +CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c +endif + ifeq ($(CONFIG_ARMV7A_GICv2M),y) CMN_CSRCS += arm_gicv2m.c endif diff --git a/arch/arm/src/armv7-a/arm_syscall.c b/arch/arm/src/armv7-a/arm_syscall.c index a2ddda360b0..68520ef7ae3 100644 --- a/arch/arm/src/armv7-a/arm_syscall.c +++ b/arch/arm/src/armv7-a/arm_syscall.c @@ -364,7 +364,7 @@ uint32_t *arm_syscall(uint32_t *regs) break; #endif -#ifdef CONFIG_BUILD_KERNEL +#if defined(CONFIG_BUILD_KERNEL) && defined(CONFIG_ENABLE_ALL_SIGNALS) /* R0=SYS_signal_handler: This a user signal handler callback * * void signal_handler(_sa_sigaction_t sighand, int signo, @@ -444,9 +444,7 @@ uint32_t *arm_syscall(uint32_t *regs) #endif } break; -#endif -#ifdef CONFIG_BUILD_KERNEL /* R0=SYS_signal_handler_return: This a user signal handler callback * * void signal_handler_return(void); @@ -485,7 +483,7 @@ uint32_t *arm_syscall(uint32_t *regs) #endif } break; -#endif +#endif /* CONFIG_BUILD_KERNEL && CONFIG_ENABLE_ALL_SIGNALS */ /* This is not an architecture-specific system call. If NuttX is built * as a standalone kernel with a system call interface, then all of the diff --git a/arch/arm/src/armv7-a/arm_vectors.S b/arch/arm/src/armv7-a/arm_vectors.S index e4768144be0..605c8aa97ec 100644 --- a/arch/arm/src/armv7-a/arm_vectors.S +++ b/arch/arm/src/armv7-a/arm_vectors.S @@ -219,7 +219,7 @@ arm_vectorirq: /* Call arm_decodeirq() on the interrupt stack */ setirqstack r1, r3 /* SP = interrupt stack top */ -#else +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* Call arm_decodeirq() on the user stack */ /* If the interrupt stack is disabled, reserve xcpcontext to ensure @@ -337,7 +337,8 @@ arm_vectorsvc: /* Call arm_syscall() on the interrupt stack */ setirqstack r1, r3 /* SP = interrupt stack top */ -#else + +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* Call arm_syscall() on the user stack */ /* If the interrupt stack is disabled, reserve xcpcontext to ensure diff --git a/arch/arm/src/armv7-m/CMakeLists.txt b/arch/arm/src/armv7-m/CMakeLists.txt index e5b3e89561d..c00fb760c2d 100644 --- a/arch/arm/src/armv7-m/CMakeLists.txt +++ b/arch/arm/src/armv7-m/CMakeLists.txt @@ -34,8 +34,6 @@ set(SRCS arm_itm.c arm_memfault.c arm_perf.c - arm_schedulesigaction.c - arm_sigdeliver.c arm_svcall.c arm_systemreset.c arm_tcbinfo.c @@ -43,6 +41,10 @@ set(SRCS arm_usagefault.c arm_dbgmonitor.c) +if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_schedulesigaction.c arm_sigdeliver.c) +endif() + if(NOT CONFIG_ARCH_HAVE_CUSTOM_VECTORS) list(APPEND SRCS arm_vectors.c) endif() diff --git a/arch/arm/src/armv7-m/Make.defs b/arch/arm/src/armv7-m/Make.defs index 2c418829031..21a2067e7ce 100644 --- a/arch/arm/src/armv7-m/Make.defs +++ b/arch/arm/src/armv7-m/Make.defs @@ -29,10 +29,13 @@ CMN_ASRCS += arm_exception.S arm_saveusercontext.S CMN_CSRCS += arm_busfault.c arm_cache.c arm_cpuinfo.c arm_doirq.c CMN_CSRCS += arm_hardfault.c arm_initialstate.c arm_itm.c CMN_CSRCS += arm_memfault.c arm_perf.c -CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c CMN_CSRCS += arm_svcall.c arm_systemreset.c arm_tcbinfo.c CMN_CSRCS += arm_trigger_irq.c arm_usagefault.c arm_dbgmonitor.c +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) +CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c +endif + ifneq ($(CONFIG_ARCH_HAVE_CUSTOM_VECTORS),y) CMN_CSRCS += arm_vectors.c endif diff --git a/arch/arm/src/armv7-m/arm_doirq.c b/arch/arm/src/armv7-m/arm_doirq.c index c3126341e33..9d22058ea0a 100644 --- a/arch/arm/src/armv7-m/arm_doirq.c +++ b/arch/arm/src/armv7-m/arm_doirq.c @@ -86,6 +86,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) irq_dispatch(irq, regs); #endif +#ifdef CONFIG_ENABLE_ALL_SIGNALS if (tcb->sigdeliver) { /* Pendsv able to access running tcb with no critical section */ @@ -93,6 +94,8 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) up_schedule_sigaction(tcb); } +#endif + up_irq_save(); } else diff --git a/arch/arm/src/armv7-r/CMakeLists.txt b/arch/arm/src/armv7-r/CMakeLists.txt index 5006f13659f..f127f628ae4 100644 --- a/arch/arm/src/armv7-r/CMakeLists.txt +++ b/arch/arm/src/armv7-r/CMakeLists.txt @@ -39,14 +39,16 @@ list( arm_doirq.c arm_initialstate.c arm_prefetchabort.c - arm_schedulesigaction.c - arm_sigdeliver.c arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c arm_perf.c cp15_cacheops.c) +if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_schedulesigaction.c arm_sigdeliver.c) +endif() + if(NOT CONFIG_ARCH_CHIP STREQUAL tms570) list(APPEND SRCS arm_gicv2.c arm_gicv2_dump.c) endif() diff --git a/arch/arm/src/armv7-r/Make.defs b/arch/arm/src/armv7-r/Make.defs index a0c29c9d72c..70480712b2b 100644 --- a/arch/arm/src/armv7-r/Make.defs +++ b/arch/arm/src/armv7-r/Make.defs @@ -34,7 +34,6 @@ HEAD_ASRC += arm_vectortab.S CMN_CSRCS += arm_cache.c arm_cpuinfo.c arm_dataabort.c CMN_CSRCS += arm_doirq.c arm_gicv2.c arm_gicv2_dump.c CMN_CSRCS += arm_initialstate.c arm_prefetchabort.c -CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c CMN_CSRCS += arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c CMN_CSRCS += arm_perf.c cp15_cacheops.c @@ -42,6 +41,10 @@ CMN_CSRCS += arm_perf.c cp15_cacheops.c CMN_ASRCS += arm_head.S arm_vectors.S arm_saveusercontext.S +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) +CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c +endif + ifeq ($(CONFIG_ARMV7R_HAVE_PTM), y) CMN_CSRCS += arm_timer.c endif diff --git a/arch/arm/src/armv7-r/arm_syscall.c b/arch/arm/src/armv7-r/arm_syscall.c index 286b8e5a64e..6a47c89727f 100644 --- a/arch/arm/src/armv7-r/arm_syscall.c +++ b/arch/arm/src/armv7-r/arm_syscall.c @@ -353,7 +353,7 @@ uint32_t *arm_syscall(uint32_t *regs) break; #endif -#ifdef CONFIG_BUILD_PROTECTED +#if defined(CONFIG_BUILD_PROTECTED) && defined(CONFIG_ENABLE_ALL_SIGNALS) /* R0=SYS_signal_handler: This a user signal handler callback * * void signal_handler(_sa_sigaction_t sighand, int signo, @@ -433,9 +433,7 @@ uint32_t *arm_syscall(uint32_t *regs) #endif } break; -#endif -#ifdef CONFIG_BUILD_PROTECTED /* R0=SYS_signal_handler_return: This a user signal handler callback * * void signal_handler_return(void); @@ -474,7 +472,7 @@ uint32_t *arm_syscall(uint32_t *regs) #endif } break; -#endif +#endif /* CONFIG_BUILD_PROTECTED && CONFIG_ENABLE_ALL_SIGNALS */ /* This is not an architecture-specific system call. If NuttX is built * as a standalone kernel with a system call interface, then all of the diff --git a/arch/arm/src/armv7-r/arm_vectors.S b/arch/arm/src/armv7-r/arm_vectors.S index d34bd98d3b0..648ea41d0e3 100644 --- a/arch/arm/src/armv7-r/arm_vectors.S +++ b/arch/arm/src/armv7-r/arm_vectors.S @@ -201,7 +201,7 @@ arm_vectorirq: /* Call arm_decodeirq() on the interrupt stack */ setirqstack r1, r3 /* SP = interrupt stack top */ -#else +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* Call arm_decodeirq() on the user stack */ /* If the interrupt stack is disabled, reserve xcpcontext to ensure @@ -313,7 +313,7 @@ arm_vectorsvc: /* Call arm_syscall() on the interrupt stack */ setirqstack r1, r3 /* SP = interrupt stack top */ -#else +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* Call arm_syscall() on the user stack */ /* If the interrupt stack is disabled, reserve xcpcontext to ensure diff --git a/arch/arm/src/armv8-m/CMakeLists.txt b/arch/arm/src/armv8-m/CMakeLists.txt index a954e55c9ed..e87185659a7 100644 --- a/arch/arm/src/armv8-m/CMakeLists.txt +++ b/arch/arm/src/armv8-m/CMakeLists.txt @@ -34,16 +34,18 @@ set(SRCS arm_memfault.c arm_perf.c arm_sau.c - arm_schedulesigaction.c arm_securefault.c arm_secure_irq.c - arm_sigdeliver.c arm_svcall.c arm_systemreset.c arm_tcbinfo.c arm_trigger_irq.c arm_usagefault.c) +if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_schedulesigaction.c arm_sigdeliver.c) +endif() + if(NOT CONFIG_ARCH_HAVE_CUSTOM_VECTORS) list(APPEND SRCS arm_vectors.c) endif() diff --git a/arch/arm/src/armv8-m/Make.defs b/arch/arm/src/armv8-m/Make.defs index 2b70995c63f..326cdff7c08 100644 --- a/arch/arm/src/armv8-m/Make.defs +++ b/arch/arm/src/armv8-m/Make.defs @@ -29,11 +29,15 @@ CMN_ASRCS += arm_exception.S arm_saveusercontext.S CMN_CSRCS += arm_busfault.c arm_cache.c arm_cpuinfo.c arm_doirq.c CMN_CSRCS += arm_hardfault.c arm_initialstate.c arm_itm.c CMN_CSRCS += arm_memfault.c arm_perf.c arm_sau.c -CMN_CSRCS += arm_schedulesigaction.c arm_securefault.c arm_secure_irq.c -CMN_CSRCS += arm_sigdeliver.c arm_svcall.c +CMN_CSRCS += arm_securefault.c arm_secure_irq.c +CMN_CSRCS += arm_svcall.c CMN_CSRCS += arm_systemreset.c arm_tcbinfo.c CMN_CSRCS += arm_trigger_irq.c arm_usagefault.c arm_dbgmonitor.c +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) +CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c +endif + ifneq ($(CONFIG_ARCH_HAVE_CUSTOM_VECTORS),y) CMN_CSRCS += arm_vectors.c endif diff --git a/arch/arm/src/armv8-m/arm_doirq.c b/arch/arm/src/armv8-m/arm_doirq.c index 5f902b1edac..a327eeabd7a 100644 --- a/arch/arm/src/armv8-m/arm_doirq.c +++ b/arch/arm/src/armv8-m/arm_doirq.c @@ -98,6 +98,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) irq_dispatch(irq, regs); #endif +#ifdef CONFIG_ENABLE_ALL_SIGNALS if (tcb->sigdeliver) { /* Pendsv able to access running tcb with no critical section */ @@ -105,6 +106,8 @@ uint32_t *arm_doirq(int irq, uint32_t *regs) up_schedule_sigaction(tcb); } +#endif + up_irq_save(); } else diff --git a/arch/arm/src/armv8-m/arm_exception.S b/arch/arm/src/armv8-m/arm_exception.S index 5c54747c1ff..8c3f27193f6 100644 --- a/arch/arm/src/armv8-m/arm_exception.S +++ b/arch/arm/src/armv8-m/arm_exception.S @@ -205,9 +205,11 @@ exception_common: */ tst r14, #EXC_RETURN_THREAD_MODE /* Nonzero if context on thread mode */ beq 3f /* Branch if context already on the handle mode */ +#ifdef CONFIG_ENABLE_ALL_SIGNALS sub r2, r1, #XCPTCONTEXT_SIZE /* Reserve signal context */ bic r2, r2, #7 /* Get the stack pointer with 8-byte alignment */ mov sp, r2 /* Instantiate the aligned stack */ +#endif 3: #endif mov fp, r1 diff --git a/arch/arm/src/armv8-r/CMakeLists.txt b/arch/arm/src/armv8-r/CMakeLists.txt index 23dcc0fd033..916f49d833a 100644 --- a/arch/arm/src/armv8-r/CMakeLists.txt +++ b/arch/arm/src/armv8-r/CMakeLists.txt @@ -41,14 +41,16 @@ list( arm_gicv3.c arm_initialstate.c arm_prefetchabort.c - arm_schedulesigaction.c - arm_sigdeliver.c arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c arm_perf.c cp15_cacheops.c) +if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_schedulesigaction.c arm_sigdeliver.c) +endif() + if(CONFIG_ARCH_FPU) list(APPEND SRCS arm_fpucmp.c arm_fpuconfig.S) endif() diff --git a/arch/arm/src/armv8-r/Make.defs b/arch/arm/src/armv8-r/Make.defs index 8883d8e55f4..e1086b8e785 100644 --- a/arch/arm/src/armv8-r/Make.defs +++ b/arch/arm/src/armv8-r/Make.defs @@ -34,10 +34,13 @@ HEAD_ASRC += arm_vectortab.S CMN_CSRCS += arm_timer.c arm_cache.c arm_cpuinfo.c arm_dataabort.c CMN_CSRCS += arm_doirq.c arm_gicv3.c CMN_CSRCS += arm_initialstate.c arm_prefetchabort.c -CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c CMN_CSRCS += arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c CMN_CSRCS += arm_perf.c cp15_cacheops.c +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) +CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c +endif + # Common C source files CMN_ASRCS += arm_head.S arm_vectors.S arm_saveusercontext.S diff --git a/arch/arm/src/armv8-r/arm_vectors.S b/arch/arm/src/armv8-r/arm_vectors.S index abe52d606c0..8a0ea9d1f01 100644 --- a/arch/arm/src/armv8-r/arm_vectors.S +++ b/arch/arm/src/armv8-r/arm_vectors.S @@ -262,7 +262,7 @@ arm_vectorirq: /* Call arm_decodeirq() on the interrupt stack */ setirqstack r1, r3 /* SP = interrupt stack top */ -#else +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* Call arm_decodeirq() on the user stack */ /* If the interrupt stack is disabled, reserve xcpcontext to ensure @@ -382,7 +382,7 @@ arm_vectorsvc: /* Call arm_syscall() on the interrupt stack */ setirqstack r1, r3 /* SP = interrupt stack top */ -#else +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* Call arm_syscall() on the user stack */ /* If the interrupt stack is disabled, reserve xcpcontext to ensure diff --git a/arch/arm/src/c5471/c5471_vectors.S b/arch/arm/src/c5471/c5471_vectors.S index 3a71d938580..beb43c51a54 100644 --- a/arch/arm/src/c5471/c5471_vectors.S +++ b/arch/arm/src/c5471/c5471_vectors.S @@ -151,7 +151,7 @@ arm_vectorirq: str r1, [sp, #-4]! /* Save the xcp address at SP-4 then update SP */ bl arm_doirq /* Call the handler */ ldr sp, [sp] /* Restore the user stack pointer */ -#else +#elif defined(CONFIG_ENABLE_ALL_SIGNALS) /* If the interrupt stack is disabled, reserve xcpcontext to ensure * that signal processing can have a separate xcpcontext to handle * signal context (reference: arm_schedulesigaction.c): @@ -163,9 +163,11 @@ arm_vectorirq: */ sub sp, sp, #XCPTCONTEXT_SIZE /* Reserve signal context */ +#endif bl arm_doirq /* Call the handler */ +#ifdef CONFIG_ENABLE_ALL_SIGNALS add sp, sp, #XCPTCONTEXT_SIZE /* Restore signal context */ #endif diff --git a/arch/arm/src/common/CMakeLists.txt b/arch/arm/src/common/CMakeLists.txt index 4f4a3eeb0ff..a47d071a59e 100644 --- a/arch/arm/src/common/CMakeLists.txt +++ b/arch/arm/src/common/CMakeLists.txt @@ -52,11 +52,14 @@ if(NOT CONFIG_ARCH_IDLE_CUSTOM) endif() if(CONFIG_BUILD_PROTECTED OR CONFIG_BUILD_KERNEL) - list(APPEND SRCS arm_task_start.c arm_pthread_start.c arm_signal_dispatch.c) + list(APPEND SRCS arm_task_start.c arm_pthread_start.c) - if(CONFIG_BUILD_PROTECTED) - target_sources(arch_interface - PRIVATE ${ARCH_TOOLCHAIN_PATH}/arm_signal_handler.S) + if(CONFIG_ENABLE_ALL_SIGNALS) + list(APPEND SRCS arm_signal_dispatch.c) + if(CONFIG_BUILD_PROTECTED) + target_sources(arch_interface + PRIVATE ${ARCH_TOOLCHAIN_PATH}/arm_signal_handler.S) + endif() endif() endif() diff --git a/arch/arm/src/common/Make.defs b/arch/arm/src/common/Make.defs index 7616bd472de..bec209f47b6 100644 --- a/arch/arm/src/common/Make.defs +++ b/arch/arm/src/common/Make.defs @@ -40,9 +40,11 @@ endif ifeq ($(CONFIG_BUILD_PROTECTED)$(CONFIG_BUILD_KERNEL),y) CMN_CSRCS += arm_task_start.c arm_pthread_start.c - CMN_CSRCS += arm_signal_dispatch.c - ifeq ($(CONFIG_BUILD_PROTECTED),y) - CMN_UASRCS += arm_signal_handler.S + ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) + CMN_CSRCS += arm_signal_dispatch.c + ifeq ($(CONFIG_BUILD_PROTECTED),y) + CMN_UASRCS += arm_signal_handler.S + endif endif endif diff --git a/arch/arm/src/common/arm_signal_dispatch.c b/arch/arm/src/common/arm_signal_dispatch.c index 79ac0e05f10..97914d9d174 100644 --- a/arch/arm/src/common/arm_signal_dispatch.c +++ b/arch/arm/src/common/arm_signal_dispatch.c @@ -31,7 +31,7 @@ #include "arm_internal.h" -#if !defined(CONFIG_BUILD_FLAT) && defined(__KERNEL__) +#ifdef __KERNEL__ /**************************************************************************** * Public Functions @@ -75,4 +75,4 @@ void up_signal_dispatch(_sa_sigaction_t sighand, int signo, (uintptr_t)info, (uintptr_t)ucontext); } -#endif /* !CONFIG_BUILD_FLAT && __KERNEL__ */ +#endif /* __KERNEL__ */ diff --git a/arch/arm/src/common/gnu/arm_signal_handler.S b/arch/arm/src/common/gnu/arm_signal_handler.S index 0f029cc7306..f4286423ee5 100644 --- a/arch/arm/src/common/gnu/arm_signal_handler.S +++ b/arch/arm/src/common/gnu/arm_signal_handler.S @@ -28,7 +28,7 @@ #include -#if defined(CONFIG_BUILD_PROTECTED) && !defined(__KERNEL__) +#ifndef __KERNEL__ /**************************************************************************** * File info @@ -109,4 +109,4 @@ up_signal_handler: .size up_signal_handler, .-up_signal_handler .end -#endif /* CONFIG_BUILD_PROTECTED && !__KERNEL__ */ +#endif /* !__KERNEL__ */ diff --git a/arch/arm/src/tlsr82/tc32/Make.defs b/arch/arm/src/tlsr82/tc32/Make.defs index 8be5e2e0324..60eeaddd1f1 100644 --- a/arch/arm/src/tlsr82/tc32/Make.defs +++ b/arch/arm/src/tlsr82/tc32/Make.defs @@ -55,9 +55,13 @@ CMN_CSRCS += arm_sigdeliver.c CMN_ASRCS += tc32_fullcontextrestore.S tc32_switchcontext.S CMN_ASRCS += tc32_saveusercontext.S tc32_exception.S -CMN_CSRCS += tc32_doirq.c tc32_initialstate.c tc32_schedulesigaction.c +CMN_CSRCS += tc32_doirq.c tc32_initialstate.c CMN_CSRCS += tc32_syscall.c tc32_udelay.c +ifeq ($(CONFIG_ENABLE_ALL_SIGNALS),y) + CHIP_CSRCS += tc32_schedulesigaction.c +endif + ifeq ($(CONFIG_SCHED_BACKTRACE),y) CMN_CSRCS += tc32_backtrace.c endif