summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-07-18 14:53:16 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-07-25 11:41:10 +0200
commitb2e1bded07232290f0edcb19e03b18dc4e8bce67 (patch)
treefa4bd34b86c89323336eae7c249ac58b792f7160 /cpukit
parentbsp/leon2: Add at697f variant (diff)
downloadrtems-b2e1bded07232290f0edcb19e03b18dc4e8bce67.tar.bz2
score: Add optional _CPU_Context_Destroy()
Update #3077.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/score/cpu/no_cpu/rtems/score/cpu.h19
-rw-r--r--cpukit/score/include/rtems/score/context.h7
-rw-r--r--cpukit/score/src/threadrestart.c2
3 files changed, 27 insertions, 1 deletions
diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
index 62e1a91cb9..c16adc7327 100644
--- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
+++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
@@ -816,6 +816,25 @@ uint32_t _CPU_ISR_Get_level( void );
/* Context handler macros */
/**
+ * @ingroup CPUContext
+ *
+ * @brief Destroys the context of the thread.
+ *
+ * It must be implemented as a macro and an implementation is optional. The
+ * default implementation does nothing.
+ *
+ * @param[in] _the_thread The corresponding thread.
+ * @param[in] _the_context The context to destroy.
+ *
+ * Port Specific Information:
+ *
+ * XXX document implementation including references if appropriate
+ */
+#define _CPU_Context_Destroy( _the_thread, _the_context ) \
+ { \
+ }
+
+/**
* @ingroup CPUContext
*
* Initialize the context to a state suitable for starting a
diff --git a/cpukit/score/include/rtems/score/context.h b/cpukit/score/include/rtems/score/context.h
index 46cb4606b1..990a602396 100644
--- a/cpukit/score/include/rtems/score/context.h
+++ b/cpukit/score/include/rtems/score/context.h
@@ -146,6 +146,13 @@ extern "C" {
#define _Context_Save_fp( _fp ) \
_CPU_Context_save_fp( _fp )
+#if defined(_CPU_Context_Destroy)
+ #define _Context_Destroy( _the_thread, _the_context ) \
+ _CPU_Context_Destroy( _the_thread, _the_context )
+#else
+ #define _Context_Destroy( _the_thread, _the_context )
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c
index 5938dcfecf..7ee1f880c4 100644
--- a/cpukit/score/src/threadrestart.c
+++ b/cpukit/score/src/threadrestart.c
@@ -205,7 +205,7 @@ static void _Thread_Free( Thread_Control *the_thread )
#endif
_Thread_queue_Destroy( &the_thread->Join_queue );
-
+ _Context_Destroy( the_thread, &the_thread->Registers );
_Objects_Free( &information->Objects, &the_thread->Object );
}