summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h63
-rw-r--r--spec/build/cpukit/cpuopts.yml2
-rw-r--r--spec/build/cpukit/optexceptionextensions.yml18
3 files changed, 83 insertions, 0 deletions
diff --git a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
index e224a5e56e..f2b2a75a39 100644
--- a/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/no_cpu/include/rtems/score/cpu.h
@@ -1142,6 +1142,69 @@ typedef struct {
*/
void _CPU_Exception_frame_print( const CPU_Exception_frame *frame );
+#ifdef RTEMS_EXCEPTION_EXTENSIONS
+ /**
+ * @brief Resumes normal execution using the provided exception frame.
+ *
+ * This routine helps to avoid dead code in the exception handler epilogue and
+ * does not return. This routine may assume that the provided pointer is valid
+ * for resetting the exception stack.
+ *
+ * @param frame The CPU_Exception_frame describing the machine exception.
+ */
+ RTEMS_NO_RETURN void _CPU_Exception_resume( CPU_Exception_frame *frame );
+
+ /**
+ * @brief Performs thread dispatch and resumes normal execution.
+ *
+ * This routine helps to avoid dead code in the exception handler epilogue and
+ * does not return. This routine may assume that the provided pointer is valid
+ * for resetting the exception stack. This function is expected to decrement
+ * the ISR nest level and thread dispatch disable level in the Per_CPU_Control
+ * structure.
+ *
+ * @param frame The CPU_Exception_frame describing the machine
+ * exception.
+ */
+ RTEMS_NO_RETURN void _CPU_Exception_dispatch_and_resume(
+ CPU_Exception_frame *frame
+ );
+
+ /**
+ * @brief Disables thread dispatch.
+ *
+ * This must be called before calling _CPU_Exception_dispatch_and_resume
+ * since that function is expected to reduce the levels incremented below.
+ */
+ void _CPU_Exception_disable_thread_dispatch( void );
+
+ /**
+ * @brief Retrieves the generic exception class of the machine exception.
+ *
+ * @param frame The CPU_Exception_frame describing the machine
+ * exception.
+ * @return The signal associated with the CPU_Exception_frame.
+ */
+ int _CPU_Exception_frame_get_signal( CPU_Exception_frame *frame );
+
+ /**
+ * @brief Sets the execution address of the exception frame.
+ *
+ * @param frame The CPU_Exception_frame describing the machine exception.
+ * @param address The address at which execution should resume.
+ */
+ void _CPU_Exception_frame_set_resume( CPU_Exception_frame *frame, void *address );
+
+ /**
+ * @brief Sets the execution address of the exception frame to the next
+ * instruction.
+ *
+ * @param frame The CPU_Exception_frame describing the machine
+ * exception.
+ */
+ void _CPU_Exception_frame_make_resume_next_instruction( CPU_Exception_frame *frame );
+#endif
+
/**
* @defgroup RTEMSScoreCPUExampleCPUEndian CPUEndian
*
diff --git a/spec/build/cpukit/cpuopts.yml b/spec/build/cpukit/cpuopts.yml
index 908c65d3b9..301d49ccea 100644
--- a/spec/build/cpukit/cpuopts.yml
+++ b/spec/build/cpukit/cpuopts.yml
@@ -40,6 +40,8 @@ links:
- role: build-dependency
uid: optdrvmgr
- role: build-dependency
+ uid: optexceptionextensions
+- role: build-dependency
uid: optmpci
- role: build-dependency
uid: optnewlib
diff --git a/spec/build/cpukit/optexceptionextensions.yml b/spec/build/cpukit/optexceptionextensions.yml
new file mode 100644
index 0000000000..1bc6d8686f
--- /dev/null
+++ b/spec/build/cpukit/optexceptionextensions.yml
@@ -0,0 +1,18 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+actions:
+- get-boolean: null
+- env-enable: null
+- define-condition: null
+build-type: option
+copyrights:
+- Copyright (C) 2021 On-Line Applications Research (OAR)
+default: true
+default-by-family: []
+default-by-variant: []
+description: |
+ Enable the RTEMS Exception Extensions for manipulating and acting on exception
+ frames.
+enabled-by:
+links: []
+name: RTEMS_EXCEPTION_EXTENSIONS
+type: build