This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new e3d2ce402fe arm: add arm_a_r dir
e3d2ce402fe is described below
commit e3d2ce402fe71075faa1773c3b7a5c2506c259bb
Author: hujun5 <[email protected]>
AuthorDate: Wed Nov 11 20:24:39 2026 +0800
arm: add arm_a_r dir
Prepare for the subsequent function merge of arm, armv7-a, armv7-r, and
armv8-r
Signed-off-by: hujun5 <[email protected]>
---
arch/arm/src/CMakeLists.txt | 10 +-
arch/arm/src/Makefile | 5 +
arch/arm/src/arm/CMakeLists.txt | 4 -
arch/arm/src/arm/Make.defs | 7 +-
arch/arm/src/arm/arm_schedulesigaction.c | 117 ---------------
arch/arm/src/arm/arm_sigdeliver.c | 104 -------------
arch/arm/src/{arm => arm_a_r}/CMakeLists.txt | 30 +---
arch/arm/src/{arm => arm_a_r}/Make.defs | 24 +--
.../{armv7-a => arm_a_r}/arm_schedulesigaction.c | 2 +-
arch/arm/src/{armv7-a => arm_a_r}/arm_sigdeliver.c | 2 +-
arch/arm/src/armv7-a/CMakeLists.txt | 4 -
arch/arm/src/armv7-a/Make.defs | 7 +-
arch/arm/src/armv7-r/CMakeLists.txt | 4 -
arch/arm/src/armv7-r/Make.defs | 7 +-
arch/arm/src/armv7-r/arm_schedulesigaction.c | 117 ---------------
arch/arm/src/armv7-r/arm_sigdeliver.c | 164 ---------------------
arch/arm/src/armv8-r/CMakeLists.txt | 4 -
arch/arm/src/armv8-r/Make.defs | 7 +-
arch/arm/src/armv8-r/arm_schedulesigaction.c | 117 ---------------
arch/arm/src/armv8-r/arm_sigdeliver.c | 162 --------------------
arch/arm/src/cmake/Toolchain.cmake | 5 +
21 files changed, 37 insertions(+), 866 deletions(-)
diff --git a/arch/arm/src/CMakeLists.txt b/arch/arm/src/CMakeLists.txt
index 03c25bc556b..3ffe34a5a72 100644
--- a/arch/arm/src/CMakeLists.txt
+++ b/arch/arm/src/CMakeLists.txt
@@ -23,13 +23,17 @@
add_subdirectory(${ARCH_SUBDIR})
add_subdirectory(${NUTTX_CHIP_ABS_DIR} exclude_chip EXCLUDE_FROM_ALL)
add_subdirectory(common)
+if(NOT ${ARCH_SUBDIR_ARM})
+ add_subdirectory(${ARCH_SUBDIR_ARM})
+endif()
# Include directories (before system ones) as PUBLIC so that it can be exposed
# to libboard
target_include_directories(arch BEFORE PUBLIC ${NUTTX_CHIP_ABS_DIR} common
- ${ARCH_SUBDIR})
+ ${ARCH_SUBDIR}
${ARCH_SUBDIR_ARM})
if(CONFIG_BUILD_PROTECTED)
- target_include_directories(arch_interface BEFORE PUBLIC ${NUTTX_CHIP_ABS_DIR}
- common
${ARCH_SUBDIR})
+ target_include_directories(
+ arch_interface BEFORE PUBLIC ${NUTTX_CHIP_ABS_DIR} common ${ARCH_SUBDIR}
+ ${ARCH_SUBDIR_ARM})
endif()
diff --git a/arch/arm/src/Makefile b/arch/arm/src/Makefile
index 5bdff52c61c..f5f4597e579 100644
--- a/arch/arm/src/Makefile
+++ b/arch/arm/src/Makefile
@@ -34,10 +34,13 @@ endif
ifeq ($(CONFIG_ARCH_ARMV7A),y) # ARMv7-A
ARCH_SUBDIR = armv7-a
+ARCH_SUBDIR_ARM = arm_a_r
else ifeq ($(CONFIG_ARCH_ARMV7R),y) # ARMv7-R
ARCH_SUBDIR = armv7-r
+ARCH_SUBDIR_ARM = arm_a_r
else ifeq ($(CONFIG_ARCH_ARMV8R),y) # ARMv8-R
ARCH_SUBDIR = armv8-r
+ARCH_SUBDIR_ARM = arm_a_r
else ifeq ($(CONFIG_ARCH_ARMV7M),y) # ARMv7-M
ARCH_SUBDIR = armv7-m
else ifeq ($(CONFIG_ARCH_ARMV8M),y) # ARMv8-M
@@ -46,6 +49,7 @@ else ifeq ($(CONFIG_ARCH_ARMV6M),y) # ARMv6-M
ARCH_SUBDIR = armv6-m
else # ARM9, ARM7TDMI, etc.
ARCH_SUBDIR = arm
+ARCH_SUBDIR_ARM = arm_a_r
endif
ARCH_SRCDIR = $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src
@@ -54,6 +58,7 @@ INCLUDES += ${INCDIR_PREFIX}$(ARCH_SRCDIR)$(DELIM)chip
INCLUDES += ${INCDIR_PREFIX}$(ARCH_SRCDIR)$(DELIM)common
INCLUDES += ${INCDIR_PREFIX}$(ARCH_SRCDIR)$(DELIM)$(ARCH_SUBDIR)
INCLUDES += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)sched
+INCLUDES += ${INCDIR_PREFIX}$(ARCH_SRCDIR)$(DELIM)$(ARCH_SUBDIR_ARM)
CPPFLAGS += $(INCLUDES)
CFLAGS += $(INCLUDES)
diff --git a/arch/arm/src/arm/CMakeLists.txt b/arch/arm/src/arm/CMakeLists.txt
index 9822bef23be..13a91e8f7ef 100644
--- a/arch/arm/src/arm/CMakeLists.txt
+++ b/arch/arm/src/arm/CMakeLists.txt
@@ -37,10 +37,6 @@ 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 43afb28c920..71d716ab379 100644
--- a/arch/arm/src/arm/Make.defs
+++ b/arch/arm/src/arm/Make.defs
@@ -23,6 +23,7 @@
# Common ARM files
include common/Make.defs
+include arm_a_r/Make.defs
HEAD_ASRC = arm_head.S
@@ -34,10 +35,8 @@ 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
+
+VPATH += arm_a_r
diff --git a/arch/arm/src/arm/arm_schedulesigaction.c
b/arch/arm/src/arm/arm_schedulesigaction.c
deleted file mode 100644
index 64948790833..00000000000
--- a/arch/arm/src/arm/arm_schedulesigaction.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
- * arch/arm/src/arm/arm_schedulesigaction.c
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <sched.h>
-
-#include <nuttx/debug.h>
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-
-#include "arm.h"
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_schedule_sigaction
- *
- * Description:
- * This function is called by the OS when one or more
- * signal handling actions have been queued for execution.
- * The architecture specific code must configure things so
- * that the 'sigdeliver' callback is executed on the thread
- * specified by 'tcb' as soon as possible.
- *
- * This function may be called from interrupt handling logic.
- *
- * This operation should not cause the task to be unblocked
- * nor should it cause any immediate execution of sigdeliver.
- * Typically, a few cases need to be considered:
- *
- * (1) This function may be called from an interrupt handler
- * During interrupt processing, all xcptcontext structures
- * should be valid for all tasks. That structure should
- * be modified to invoke sigdeliver() either on return
- * from (this) interrupt or on some subsequent context
- * switch to the recipient task.
- * (2) If not in an interrupt handler and the tcb is NOT
- * the currently executing task, then again just modify
- * the saved xcptcontext structure for the recipient
- * task so it will invoke sigdeliver when that task is
- * later resumed.
- * (3) If not in an interrupt handler and the tcb IS the
- * currently executing task -- just call the signal
- * handler now.
- *
- * Assumptions:
- * Called from critical section
- *
- ****************************************************************************/
-
-void up_schedule_sigaction(struct tcb_s *tcb)
-{
- sinfo("tcb=%p, rtcb=%p current_regs=%p\n", tcb, this_task(),
- this_task()->xcp.regs);
-
- /* Save the return lr and cpsr and one scratch register
- * These will be restored by the signal trampoline after
- * the signals have been delivered.
- */
-
- /* Save the current register context location */
-
- tcb->xcp.saved_regs = tcb->xcp.regs;
-
- /* Duplicate the register context. These will be
- * restored by the signal trampoline after the signal has been
- * delivered.
- */
-
- tcb->xcp.regs = (void *)
- ((uint32_t)tcb->xcp.regs -
- XCPTCONTEXT_SIZE);
- memcpy(tcb->xcp.regs, tcb->xcp.saved_regs, XCPTCONTEXT_SIZE);
-
- tcb->xcp.regs[REG_SP] = (uint32_t)tcb->xcp.regs +
- XCPTCONTEXT_SIZE;
-
- /* Then set up to vector to the trampoline with interrupts
- * disabled
- */
-
- tcb->xcp.regs[REG_LR] = 0; /* Avoid backtracing back. */
- tcb->xcp.regs[REG_PC] = (uint32_t)arm_sigdeliver;
- tcb->xcp.regs[REG_CPSR] = PSR_MODE_SYS | PSR_I_BIT | PSR_F_BIT;
-#ifdef CONFIG_ARM_THUMB
- tcb->xcp.regs[REG_CPSR] |= PSR_T_BIT;
-#endif
-}
diff --git a/arch/arm/src/arm/arm_sigdeliver.c
b/arch/arm/src/arm/arm_sigdeliver.c
deleted file mode 100644
index ff1a9ac685e..00000000000
--- a/arch/arm/src/arm/arm_sigdeliver.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
- * arch/arm/src/arm/arm_sigdeliver.c
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <sched.h>
-#include <assert.h>
-
-#include <nuttx/debug.h>
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <arch/board/board.h>
-
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_sigdeliver
- *
- * Description:
- * This is the a signal handling trampoline. When a signal action was
- * posted. The task context was mucked with and forced to branch to this
- * location with interrupts disabled.
- *
- ****************************************************************************/
-
-void arm_sigdeliver(void)
-{
- struct tcb_s *rtcb = this_task();
-
- board_autoled_on(LED_SIGNAL);
-
- sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
- rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
- DEBUGASSERT(rtcb->sigdeliver != NULL);
-
-#ifndef CONFIG_SUPPRESS_INTERRUPTS
- /* Then make sure that interrupts are enabled. Signal handlers must always
- * run with interrupts enabled.
- */
-
- up_irq_enable();
-#endif
-
- /* Deliver the signal */
-
- (rtcb->sigdeliver)(rtcb);
-
- /* Output any debug messages BEFORE restoring errno (because they may
- * alter errno), then disable interrupts again and restore the original
- * errno that is needed by the user logic (it is probably EINTR).
- */
-
- sinfo("Resuming\n");
- up_irq_save();
-
- /* Modify the saved return state with the actual saved values in the
- * TCB. This depends on the fact that nested signal handling is
- * not supported. Therefore, these values will persist throughout the
- * signal handling action.
- *
- * Keeping this data in the TCB resolves a security problem in protected
- * and kernel mode: The regs[] array is visible on the user stack and
- * could be modified by a hostile program.
- */
-
- rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
-
- /* Then restore the correct state for this thread of execution. */
-
- board_autoled_off(LED_SIGNAL);
-
- rtcb->xcp.regs = rtcb->xcp.saved_regs;
- arm_fullcontextrestore();
-}
diff --git a/arch/arm/src/arm/CMakeLists.txt
b/arch/arm/src/arm_a_r/CMakeLists.txt
similarity index 63%
copy from arch/arm/src/arm/CMakeLists.txt
copy to arch/arm/src/arm_a_r/CMakeLists.txt
index 9822bef23be..83fad73727e 100644
--- a/arch/arm/src/arm/CMakeLists.txt
+++ b/arch/arm/src/arm_a_r/CMakeLists.txt
@@ -1,7 +1,5 @@
#
##############################################################################
-# arch/arm/src/arm/CMakeLists.txt
-#
-# SPDX-License-Identifier: Apache-2.0
+# arch/arm/src/arm_a_r/CMakeLists.txt
#
# Licensed to the Apache Software Foundation (ASF) under one or more
contributor
# license agreements. See the NOTICE file distributed with this work for
@@ -20,30 +18,8 @@
#
#
##############################################################################
-target_sources(nuttx PRIVATE arm_head.S)
-
-list(
- APPEND
- SRCS
- arm_dataabort.c
- arm_doirq.c
- arm_initialstate.c
- arm_prefetchabort.c
- arm_syscall.c
- arm_tcbinfo.c
- arm_undefinedinsn.c
- arm_cache.S
- arm_vectors.S
- 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)
+ set(CSRCS arm_schedulesigaction.c arm_sigdeliver.c)
endif()
-target_sources(arch PRIVATE ${SRCS})
+target_sources(arch PRIVATE ${CSRCS})
diff --git a/arch/arm/src/arm/Make.defs b/arch/arm/src/arm_a_r/Make.defs
similarity index 63%
copy from arch/arm/src/arm/Make.defs
copy to arch/arm/src/arm_a_r/Make.defs
index 43afb28c920..a2ce87f2acf 100644
--- a/arch/arm/src/arm/Make.defs
+++ b/arch/arm/src/arm_a_r/Make.defs
@@ -1,7 +1,5 @@
############################################################################
-# arch/arm/src/arm/Make.defs
-#
-# SPDX-License-Identifier: Apache-2.0
+# arch/arm/src/arm_a_r/Make.defs
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -20,24 +18,8 @@
#
############################################################################
-# Common ARM files
-
-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
-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
+# Common ARM_A_R files
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
+ CMN_CSRCS += arm_schedulesigaction.c arm_sigdeliver.c
endif
diff --git a/arch/arm/src/armv7-a/arm_schedulesigaction.c
b/arch/arm/src/arm_a_r/arm_schedulesigaction.c
similarity index 98%
rename from arch/arm/src/armv7-a/arm_schedulesigaction.c
rename to arch/arm/src/arm_a_r/arm_schedulesigaction.c
index d36ab2f89a9..905bb940c84 100644
--- a/arch/arm/src/armv7-a/arm_schedulesigaction.c
+++ b/arch/arm/src/arm_a_r/arm_schedulesigaction.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/armv7-a/arm_schedulesigaction.c
+ * arch/arm/src/arm_a_r/arm_schedulesigaction.c
*
* SPDX-License-Identifier: Apache-2.0
*
diff --git a/arch/arm/src/armv7-a/arm_sigdeliver.c
b/arch/arm/src/arm_a_r/arm_sigdeliver.c
similarity index 99%
rename from arch/arm/src/armv7-a/arm_sigdeliver.c
rename to arch/arm/src/arm_a_r/arm_sigdeliver.c
index f5dec6ff9fa..da4348cf0e2 100644
--- a/arch/arm/src/armv7-a/arm_sigdeliver.c
+++ b/arch/arm/src/arm_a_r/arm_sigdeliver.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/armv7-a/arm_sigdeliver.c
+ * arch/arm/src/arm_a_r/arm_sigdeliver.c
*
* SPDX-License-Identifier: Apache-2.0
*
diff --git a/arch/arm/src/armv7-a/CMakeLists.txt
b/arch/arm/src/armv7-a/CMakeLists.txt
index b96cd738499..d9d9ffccd7c 100644
--- a/arch/arm/src/armv7-a/CMakeLists.txt
+++ b/arch/arm/src/armv7-a/CMakeLists.txt
@@ -50,10 +50,6 @@ list(
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 4bcc3938d43..8509c9d56a6 100644
--- a/arch/arm/src/armv7-a/Make.defs
+++ b/arch/arm/src/armv7-a/Make.defs
@@ -23,6 +23,7 @@
# Common ARM files
include common/Make.defs
+include arm_a_r/Make.defs
# The vector table is the "head" object, i.e., the one that must forced into
# the link in order to draw in all of the other components
@@ -41,10 +42,6 @@ CMN_CSRCS += arm_initialstate.c arm_mmu.c arm_prefetchabort.c
CMN_CSRCS += arm_syscall.c arm_tcbinfo.c arm_undefinedinsn.c
CMN_CSRCS += arm_perf.c arm_userfault.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
@@ -108,3 +105,5 @@ endif
ifeq ($(CONFIG_ARCH_HIPRI_INTERRUPT),y)
CMN_CSRCS += arm_dofiq.c
endif
+
+VPATH += arm_a_r
diff --git a/arch/arm/src/armv7-r/CMakeLists.txt
b/arch/arm/src/armv7-r/CMakeLists.txt
index a156a9847c3..2d836f219ae 100644
--- a/arch/arm/src/armv7-r/CMakeLists.txt
+++ b/arch/arm/src/armv7-r/CMakeLists.txt
@@ -45,10 +45,6 @@ list(
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 cd367e83100..e936237cb36 100644
--- a/arch/arm/src/armv7-r/Make.defs
+++ b/arch/arm/src/armv7-r/Make.defs
@@ -23,6 +23,7 @@
# Common ARM files
include common/Make.defs
+include arm_a_r/Make.defs
# The vector table is the "head" object, i.e., the one that must forced into
# the link in order to draw in all of the other components
@@ -41,10 +42,6 @@ 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
@@ -73,3 +70,5 @@ ifeq ($(CONFIG_ARCH_HAVE_PERF_EVENTS_USER_ACCESS),y)
CMN_UCSRCS += arm_perf.c
endif
endif
+
+VPATH += arm_a_r
\ No newline at end of file
diff --git a/arch/arm/src/armv7-r/arm_schedulesigaction.c
b/arch/arm/src/armv7-r/arm_schedulesigaction.c
deleted file mode 100644
index 304a5030b54..00000000000
--- a/arch/arm/src/armv7-r/arm_schedulesigaction.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv7-r/arm_schedulesigaction.c
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <sched.h>
-
-#include <nuttx/debug.h>
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-
-#include "arm.h"
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_schedule_sigaction
- *
- * Description:
- * This function is called by the OS when one or more
- * signal handling actions have been queued for execution.
- * The architecture specific code must configure things so
- * that the 'sigdeliver' callback is executed on the thread
- * specified by 'tcb' as soon as possible.
- *
- * This function may be called from interrupt handling logic.
- *
- * This operation should not cause the task to be unblocked
- * nor should it cause any immediate execution of sigdeliver.
- * Typically, a few cases need to be considered:
- *
- * (1) This function may be called from an interrupt handler
- * During interrupt processing, all xcptcontext structures
- * should be valid for all tasks. That structure should
- * be modified to invoke sigdeliver() either on return
- * from (this) interrupt or on some subsequent context
- * switch to the recipient task.
- * (2) If not in an interrupt handler and the tcb is NOT
- * the currently executing task, then again just modify
- * the saved xcptcontext structure for the recipient
- * task so it will invoke sigdeliver when that task is
- * later resumed.
- * (3) If not in an interrupt handler and the tcb IS the
- * currently executing task -- just call the signal
- * handler now.
- *
- * Assumptions:
- * Called from critical section
- *
- ****************************************************************************/
-
-void up_schedule_sigaction(struct tcb_s *tcb)
-{
- sinfo("tcb=%p, rtcb=%p current_regs=%p\n", tcb, this_task(),
- this_task()->xcp.regs);
-
- /* Save the return lr and cpsr and one scratch register. These
- * will be restored by the signal trampoline after the signals
- * have been delivered.
- */
-
- /* Save the current register context location */
-
- tcb->xcp.saved_regs = tcb->xcp.regs;
-
- /* Duplicate the register context. These will be
- * restored by the signal trampoline after the signal has been
- * delivered.
- */
-
- tcb->xcp.regs = (void *)
- ((uint32_t)tcb->xcp.regs -
- XCPTCONTEXT_SIZE);
- memcpy(tcb->xcp.regs, tcb->xcp.saved_regs, XCPTCONTEXT_SIZE);
-
- tcb->xcp.regs[REG_SP] = (uint32_t)tcb->xcp.regs +
- XCPTCONTEXT_SIZE;
-
- /* Then set up to vector to the trampoline with interrupts
- * disabled
- */
-
- tcb->xcp.regs[REG_LR] = 0; /* Avoid backtracing back. */
- tcb->xcp.regs[REG_PC] = (uint32_t)arm_sigdeliver;
- tcb->xcp.regs[REG_CPSR] = (PSR_MODE_SYS | PSR_I_BIT | PSR_F_BIT);
-#ifdef CONFIG_ARM_THUMB
- tcb->xcp.regs[REG_CPSR] |= PSR_T_BIT;
-#endif
-}
diff --git a/arch/arm/src/armv7-r/arm_sigdeliver.c
b/arch/arm/src/armv7-r/arm_sigdeliver.c
deleted file mode 100644
index b799dac8f11..00000000000
--- a/arch/arm/src/armv7-r/arm_sigdeliver.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv7-r/arm_sigdeliver.c
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <sched.h>
-#include <assert.h>
-
-#include <nuttx/debug.h>
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <arch/board/board.h>
-
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_sigdeliver
- *
- * Description:
- * This is the a signal handling trampoline. When a signal action was
- * posted. The task context was mucked with and forced to branch to this
- * location with interrupts disabled.
- *
- ****************************************************************************/
-
-void arm_sigdeliver(void)
-{
- struct tcb_s *rtcb = this_task();
- uint32_t *regs = rtcb->xcp.saved_regs;
-
-#ifdef CONFIG_SMP
- /* In the SMP case, we must terminate the critical section while the signal
- * handler executes, but we also need to restore the irqcount when the
- * we resume the main thread of the task.
- */
-
- int16_t saved_irqcount;
-#endif
-
- board_autoled_on(LED_SIGNAL);
-
- sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
- rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
- DEBUGASSERT(rtcb->sigdeliver != NULL);
-
-retry:
-#ifdef CONFIG_SMP
- /* In the SMP case, up_schedule_sigaction(0) will have incremented
- * 'irqcount' in order to force us into a critical section. Save the
- * pre-incremented irqcount.
- */
-
- saved_irqcount = rtcb->irqcount;
- DEBUGASSERT(saved_irqcount >= 0);
-
- /* Now we need call leave_critical_section() repeatedly to get the irqcount
- * to zero, freeing all global spinlocks that enforce the critical section.
- */
-
- while (rtcb->irqcount > 0)
- {
- leave_critical_section(regs[REG_CPSR]);
- }
-#endif /* CONFIG_SMP */
-
-#ifndef CONFIG_SUPPRESS_INTERRUPTS
- /* Then make sure that interrupts are enabled. Signal handlers must always
- * run with interrupts enabled.
- */
-
- up_irq_enable();
-#endif
-
- /* Deliver the signal */
-
- (rtcb->sigdeliver)(rtcb);
-
- /* Output any debug messages BEFORE restoring errno (because they may
- * alter errno), then disable interrupts again and restore the original
- * errno that is needed by the user logic (it is probably EINTR).
- */
-
- sinfo("Resuming\n");
-
-#ifdef CONFIG_SMP
- /* Restore the saved 'irqcount' and recover the critical section
- * spinlocks.
- */
-
- DEBUGASSERT(rtcb->irqcount == 0);
- while (rtcb->irqcount < saved_irqcount + 1)
- {
- enter_critical_section();
- }
-#endif
-
-#ifndef CONFIG_SUPPRESS_INTERRUPTS
- up_irq_save();
-#endif
-
- if (!sq_empty(&rtcb->sigpendactionq) &&
- (rtcb->flags & TCB_FLAG_SIGNAL_ACTION) == 0)
- {
-#ifdef CONFIG_SMP
- leave_critical_section(regs[REG_CPSR]);
-#endif
- goto retry;
- }
-
- /* Modify the saved return state with the actual saved values in the
- * TCB. This depends on the fact that nested signal handling is
- * not supported. Therefore, these values will persist throughout the
- * signal handling action.
- *
- * Keeping this data in the TCB resolves a security problem in protected
- * and kernel mode: The regs[] array is visible on the user stack and
- * could be modified by a hostile program.
- */
-
- rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
-
- /* Then restore the correct state for this thread of execution. */
-
- board_autoled_off(LED_SIGNAL);
-#ifdef CONFIG_SMP
- /* We need to keep the IRQ lock until task switching */
-
- leave_critical_section(up_irq_save());
-#endif
-
- rtcb->xcp.regs = rtcb->xcp.saved_regs;
- arm_fullcontextrestore();
- UNUSED(regs);
-}
diff --git a/arch/arm/src/armv8-r/CMakeLists.txt
b/arch/arm/src/armv8-r/CMakeLists.txt
index 0e3fca45c0b..b6108a7e45d 100644
--- a/arch/arm/src/armv8-r/CMakeLists.txt
+++ b/arch/arm/src/armv8-r/CMakeLists.txt
@@ -47,10 +47,6 @@ list(
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 e1086b8e785..4bd86a80be4 100644
--- a/arch/arm/src/armv8-r/Make.defs
+++ b/arch/arm/src/armv8-r/Make.defs
@@ -23,6 +23,7 @@
# Common ARM files
include common/Make.defs
+include arm_a_r/Make.defs
# The vector table is the "head" object, i.e., the one that must forced into
# the link in order to draw in all of the other components
@@ -37,10 +38,6 @@ CMN_CSRCS += arm_initialstate.c arm_prefetchabort.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
@@ -61,3 +58,5 @@ endif
ifeq ($(CONFIG_ARCH_HIPRI_INTERRUPT),y)
CMN_CSRCS += arm_dofiq.c
endif
+
+VPATH += arm_a_r
\ No newline at end of file
diff --git a/arch/arm/src/armv8-r/arm_schedulesigaction.c
b/arch/arm/src/armv8-r/arm_schedulesigaction.c
deleted file mode 100644
index 830a969b962..00000000000
--- a/arch/arm/src/armv8-r/arm_schedulesigaction.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv8-r/arm_schedulesigaction.c
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <sched.h>
-
-#include <nuttx/debug.h>
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-
-#include "arm.h"
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_schedule_sigaction
- *
- * Description:
- * This function is called by the OS when one or more
- * signal handling actions have been queued for execution.
- * The architecture specific code must configure things so
- * that the 'sigdeliver' callback is executed on the thread
- * specified by 'tcb' as soon as possible.
- *
- * This function may be called from interrupt handling logic.
- *
- * This operation should not cause the task to be unblocked
- * nor should it cause any immediate execution of sigdeliver.
- * Typically, a few cases need to be considered:
- *
- * (1) This function may be called from an interrupt handler
- * During interrupt processing, all xcptcontext structures
- * should be valid for all tasks. That structure should
- * be modified to invoke sigdeliver() either on return
- * from (this) interrupt or on some subsequent context
- * switch to the recipient task.
- * (2) If not in an interrupt handler and the tcb is NOT
- * the currently executing task, then again just modify
- * the saved xcptcontext structure for the recipient
- * task so it will invoke sigdeliver when that task is
- * later resumed.
- * (3) If not in an interrupt handler and the tcb IS the
- * currently executing task -- just call the signal
- * handler now.
- *
- * Assumptions:
- * Called from critical section
- *
- ****************************************************************************/
-
-void up_schedule_sigaction(struct tcb_s *tcb)
-{
- sinfo("tcb=%p, rtcb=%p current_regs=%p\n", tcb, this_task(),
- this_task()->xcp.regs);
-
- /* Save the return lr and cpsr and one scratch register. These
- * will be restored by the signal trampoline after the signals
- * have been delivered.
- */
-
- /* Save the current register context location */
-
- tcb->xcp.saved_regs = tcb->xcp.regs;
-
- /* Duplicate the register context. These will be
- * restored by the signal trampoline after the signal has been
- * delivered.
- */
-
- tcb->xcp.regs = (void *)
- ((uint32_t)tcb->xcp.regs -
- XCPTCONTEXT_SIZE);
- memcpy(tcb->xcp.regs, tcb->xcp.saved_regs, XCPTCONTEXT_SIZE);
-
- tcb->xcp.regs[REG_SP] = (uint32_t)tcb->xcp.regs +
- XCPTCONTEXT_SIZE;
-
- /* Then set up to vector to the trampoline with interrupts
- * disabled
- */
-
- tcb->xcp.regs[REG_LR] = 0; /* Avoid backtracing back. */
- tcb->xcp.regs[REG_PC] = (uint32_t)arm_sigdeliver;
- tcb->xcp.regs[REG_CPSR] = (PSR_MODE_SYS | PSR_I_BIT | PSR_F_BIT);
-#ifdef CONFIG_ARM_THUMB
- tcb->xcp.regs[REG_CPSR] |= PSR_T_BIT;
-#endif
-}
diff --git a/arch/arm/src/armv8-r/arm_sigdeliver.c
b/arch/arm/src/armv8-r/arm_sigdeliver.c
deleted file mode 100644
index 2037aad8833..00000000000
--- a/arch/arm/src/armv8-r/arm_sigdeliver.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv8-r/arm_sigdeliver.c
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <sched.h>
-#include <assert.h>
-
-#include <nuttx/debug.h>
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <arch/board/board.h>
-
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_sigdeliver
- *
- * Description:
- * This is the a signal handling trampoline. When a signal action was
- * posted. The task context was mucked with and forced to branch to this
- * location with interrupts disabled.
- *
- ****************************************************************************/
-
-void arm_sigdeliver(void)
-{
- struct tcb_s *rtcb = this_task();
- uint32_t *regs = rtcb->xcp.saved_regs;
-
-#ifdef CONFIG_SMP
- /* In the SMP case, we must terminate the critical section while the signal
- * handler executes, but we also need to restore the irqcount when the
- * we resume the main thread of the task.
- */
-
- int16_t saved_irqcount;
-#endif
-
- board_autoled_on(LED_SIGNAL);
-
- sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
- rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
- DEBUGASSERT(rtcb->sigdeliver != NULL);
-
-retry:
-#ifdef CONFIG_SMP
- /* In the SMP case, up_schedule_sigaction(0) will have incremented
- * 'irqcount' in order to force us into a critical section. Save the
- * pre-incremented irqcount.
- */
-
- saved_irqcount = rtcb->irqcount;
- DEBUGASSERT(saved_irqcount >= 0);
-
- /* Now we need call leave_critical_section() repeatedly to get the irqcount
- * to zero, freeing all global spinlocks that enforce the critical section.
- */
-
- while (rtcb->irqcount > 0)
- {
- leave_critical_section(regs[REG_CPSR]);
- }
-#endif /* CONFIG_SMP */
-
-#ifndef CONFIG_SUPPRESS_INTERRUPTS
- /* Then make sure that interrupts are enabled. Signal handlers must always
- * run with interrupts enabled.
- */
-
- up_irq_enable();
-#endif
-
- /* Deliver the signal */
-
- (rtcb->sigdeliver)(rtcb);
-
- /* Output any debug messages BEFORE restoring errno (because they may
- * alter errno), then disable interrupts again and restore the original
- * errno that is needed by the user logic (it is probably EINTR).
- */
-
- sinfo("Resuming\n");
-
-#ifdef CONFIG_SMP
- /* Restore the saved 'irqcount' and recover the critical section
- * spinlocks.
- */
-
- DEBUGASSERT(rtcb->irqcount == 0);
- while (rtcb->irqcount < saved_irqcount + 1)
- {
- enter_critical_section();
- }
-#endif
-
-#ifndef CONFIG_SUPPRESS_INTERRUPTS
- up_irq_save();
-#endif
-
- if (!sq_empty(&rtcb->sigpendactionq) &&
- (rtcb->flags & TCB_FLAG_SIGNAL_ACTION) == 0)
- {
-#ifdef CONFIG_SMP
- leave_critical_section(regs[REG_CPSR]);
-#endif
- goto retry;
- }
-
- /* Modify the saved return state with the actual saved values in the
- * TCB. This depends on the fact that nested signal handling is
- * not supported. Therefore, these values will persist throughout the
- * signal handling action.
- *
- * Keeping this data in the TCB resolves a security problem in protected
- * and kernel mode: The regs[] array is visible on the user stack and
- * could be modified by a hostile program.
- */
-
- rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
-
- /* Then restore the correct state for this thread of execution. */
-
- board_autoled_off(LED_SIGNAL);
-#ifdef CONFIG_SMP
- leave_critical_section(up_irq_save());
-#endif
-
- rtcb->xcp.regs = rtcb->xcp.saved_regs;
- arm_fullcontextrestore();
- UNUSED(regs);
-}
diff --git a/arch/arm/src/cmake/Toolchain.cmake
b/arch/arm/src/cmake/Toolchain.cmake
index f7c41692b48..82e85542bb3 100644
--- a/arch/arm/src/cmake/Toolchain.cmake
+++ b/arch/arm/src/cmake/Toolchain.cmake
@@ -26,13 +26,17 @@ set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
set(ARCH_SUBDIR)
+set(ARCH_SUBDIR_ARM)
if(CONFIG_ARCH_ARMV7A) # ARMv7-A
set(ARCH_SUBDIR armv7-a)
+ set(ARCH_SUBDIR_ARM arm_a_r)
elseif(CONFIG_ARCH_ARMV7R) # ARMv7-R
set(ARCH_SUBDIR armv7-r)
+ set(ARCH_SUBDIR_ARM arm_a_r)
elseif(CONFIG_ARCH_ARMV8R) # ARMv8-R
set(ARCH_SUBDIR armv8-r)
+ set(ARCH_SUBDIR_ARM arm_a_r)
elseif(CONFIG_ARCH_ARMV7M) # ARMv7-M
set(ARCH_SUBDIR armv7-m)
elseif(CONFIG_ARCH_ARMV8M) # ARMv8-M
@@ -41,6 +45,7 @@ elseif(CONFIG_ARCH_ARMV6M) # ARMv6-M
set(ARCH_SUBDIR armv6-m)
else() # ARM9, ARM7TDMI, etc.
set(ARCH_SUBDIR arm)
+ set(ARCH_SUBDIR_ARM arm_a_r)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/${ARCH_SUBDIR}.cmake)