summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-22 14:51:25 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-22 16:35:07 +0100
commit3be0c9afa328510da0c4c0dc6de82fb8359307f8 (patch)
treea958dfda3bce2d4867aa7139644498ef1a882f23
parentscore: Avoid superfluous loads (diff)
downloadrtems-3be0c9afa328510da0c4c0dc6de82fb8359307f8.tar.bz2
score: Add and use <rtems/score/userextimpl.h>
This file contains the parts of <rtems/score/userext.h> that are only necessary for the RTEMS implementation.
-rw-r--r--cpukit/posix/src/pthread.c2
-rw-r--r--cpukit/posix/src/pthreadinitthreads.c1
-rw-r--r--cpukit/rtems/src/taskcreate.c1
-rw-r--r--cpukit/rtems/src/taskdelete.c1
-rw-r--r--cpukit/rtems/src/taskgetnote.c1
-rw-r--r--cpukit/rtems/src/taskident.c1
-rw-r--r--cpukit/rtems/src/taskinitusers.c1
-rw-r--r--cpukit/rtems/src/taskissuspended.c1
-rw-r--r--cpukit/rtems/src/taskmode.c1
-rw-r--r--cpukit/rtems/src/taskrestart.c1
-rw-r--r--cpukit/rtems/src/taskresume.c1
-rw-r--r--cpukit/rtems/src/tasks.c2
-rw-r--r--cpukit/rtems/src/tasksetnote.c1
-rw-r--r--cpukit/rtems/src/tasksetpriority.c1
-rw-r--r--cpukit/rtems/src/taskstart.c1
-rw-r--r--cpukit/rtems/src/tasksuspend.c1
-rw-r--r--cpukit/rtems/src/taskwakeafter.c1
-rw-r--r--cpukit/rtems/src/taskwakewhen.c1
-rw-r--r--cpukit/sapi/src/exinit.c2
-rw-r--r--cpukit/sapi/src/extensioncreate.c1
-rw-r--r--cpukit/score/Makefile.am1
-rw-r--r--cpukit/score/include/rtems/score/userext.h195
-rw-r--r--cpukit/score/include/rtems/score/userextimpl.h235
-rw-r--r--cpukit/score/preinstall.am4
-rw-r--r--cpukit/score/src/interr.c3
-rw-r--r--cpukit/score/src/thread.c1
-rw-r--r--cpukit/score/src/threadclearstate.c1
-rw-r--r--cpukit/score/src/threadclose.c2
-rw-r--r--cpukit/score/src/threadcreateidle.c1
-rw-r--r--cpukit/score/src/threaddelayended.c1
-rw-r--r--cpukit/score/src/threaddispatch.c2
-rw-r--r--cpukit/score/src/threadhandler.c2
-rw-r--r--cpukit/score/src/threadinitialize.c2
-rw-r--r--cpukit/score/src/threadloadenv.c1
-rw-r--r--cpukit/score/src/threadready.c1
-rw-r--r--cpukit/score/src/threadreset.c1
-rw-r--r--cpukit/score/src/threadrestart.c2
-rw-r--r--cpukit/score/src/threadsetstate.c1
-rw-r--r--cpukit/score/src/threadsettransient.c1
-rw-r--r--cpukit/score/src/threadstackallocate.c1
-rw-r--r--cpukit/score/src/threadstackfree.c1
-rw-r--r--cpukit/score/src/threadstart.c2
-rw-r--r--cpukit/score/src/threadstartmultitasking.c1
-rw-r--r--cpukit/score/src/userext.c2
-rw-r--r--cpukit/score/src/userextaddset.c3
-rw-r--r--cpukit/score/src/userextiterate.c2
-rw-r--r--cpukit/score/src/userextremoveset.c3
-rw-r--r--cpukit/score/src/userextthreadswitch.c3
-rw-r--r--testsuites/sptests/spsize/size.c2
49 files changed, 257 insertions, 243 deletions
diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c
index 4c41c237aa..cd2cffec9e 100644
--- a/cpukit/posix/src/pthread.c
+++ b/cpukit/posix/src/pthread.c
@@ -20,7 +20,7 @@
#include <rtems/score/apiext.h>
#include <rtems/score/stack.h>
#include <rtems/score/thread.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#include <rtems/posix/cancel.h>
#include <rtems/posix/pthread.h>
diff --git a/cpukit/posix/src/pthreadinitthreads.c b/cpukit/posix/src/pthreadinitthreads.c
index dc464e3868..06b859b4fc 100644
--- a/cpukit/posix/src/pthreadinitthreads.c
+++ b/cpukit/posix/src/pthreadinitthreads.c
@@ -20,7 +20,6 @@
#include <rtems/score/apiext.h>
#include <rtems/score/stack.h>
#include <rtems/score/thread.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/posix/cancel.h>
#include <rtems/posix/pthread.h>
diff --git a/cpukit/rtems/src/taskcreate.c b/cpukit/rtems/src/taskcreate.c
index 924048ac03..9cd6b7bb09 100644
--- a/cpukit/rtems/src/taskcreate.c
+++ b/cpukit/rtems/src/taskcreate.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskdelete.c b/cpukit/rtems/src/taskdelete.c
index 00a63ac165..52045698f8 100644
--- a/cpukit/rtems/src/taskdelete.c
+++ b/cpukit/rtems/src/taskdelete.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskgetnote.c b/cpukit/rtems/src/taskgetnote.c
index 5773298eba..3696f9117d 100644
--- a/cpukit/rtems/src/taskgetnote.c
+++ b/cpukit/rtems/src/taskgetnote.c
@@ -26,7 +26,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskident.c b/cpukit/rtems/src/taskident.c
index 469c112e14..570aa3594a 100644
--- a/cpukit/rtems/src/taskident.c
+++ b/cpukit/rtems/src/taskident.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskinitusers.c b/cpukit/rtems/src/taskinitusers.c
index 1d47a2b46b..2f4f0f9345 100644
--- a/cpukit/rtems/src/taskinitusers.c
+++ b/cpukit/rtems/src/taskinitusers.c
@@ -27,7 +27,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskissuspended.c b/cpukit/rtems/src/taskissuspended.c
index 8a8dff3753..179c41e366 100644
--- a/cpukit/rtems/src/taskissuspended.c
+++ b/cpukit/rtems/src/taskissuspended.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskmode.c b/cpukit/rtems/src/taskmode.c
index 17958dc14c..9fab2265e0 100644
--- a/cpukit/rtems/src/taskmode.c
+++ b/cpukit/rtems/src/taskmode.c
@@ -24,7 +24,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskrestart.c b/cpukit/rtems/src/taskrestart.c
index c74fe98930..3a560a9eb5 100644
--- a/cpukit/rtems/src/taskrestart.c
+++ b/cpukit/rtems/src/taskrestart.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskresume.c b/cpukit/rtems/src/taskresume.c
index ec7d109caa..e53b5426ac 100644
--- a/cpukit/rtems/src/taskresume.c
+++ b/cpukit/rtems/src/taskresume.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/tasks.c b/cpukit/rtems/src/tasks.c
index c679f1e6f2..4164afe3c6 100644
--- a/cpukit/rtems/src/tasks.c
+++ b/cpukit/rtems/src/tasks.c
@@ -25,7 +25,7 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/tasksetnote.c b/cpukit/rtems/src/tasksetnote.c
index 9bbe721c1e..453a2a2f72 100644
--- a/cpukit/rtems/src/tasksetnote.c
+++ b/cpukit/rtems/src/tasksetnote.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/tasksetpriority.c b/cpukit/rtems/src/tasksetpriority.c
index c8e3bf84ae..f51c565893 100644
--- a/cpukit/rtems/src/tasksetpriority.c
+++ b/cpukit/rtems/src/tasksetpriority.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskstart.c b/cpukit/rtems/src/taskstart.c
index 9c6cc5bd0d..c6f1078902 100644
--- a/cpukit/rtems/src/taskstart.c
+++ b/cpukit/rtems/src/taskstart.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/tasksuspend.c b/cpukit/rtems/src/tasksuspend.c
index 23d9eccc6a..e1e82ddd30 100644
--- a/cpukit/rtems/src/tasksuspend.c
+++ b/cpukit/rtems/src/tasksuspend.c
@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskwakeafter.c b/cpukit/rtems/src/taskwakeafter.c
index 190d11e3e9..bf28e0b902 100644
--- a/cpukit/rtems/src/taskwakeafter.c
+++ b/cpukit/rtems/src/taskwakeafter.c
@@ -26,7 +26,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/rtems/src/taskwakewhen.c b/cpukit/rtems/src/taskwakewhen.c
index d181848c91..0a420b20b6 100644
--- a/cpukit/rtems/src/taskwakewhen.c
+++ b/cpukit/rtems/src/taskwakewhen.c
@@ -26,7 +26,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>
diff --git a/cpukit/sapi/src/exinit.c b/cpukit/sapi/src/exinit.c
index 7335128b58..2c68434899 100644
--- a/cpukit/sapi/src/exinit.c
+++ b/cpukit/sapi/src/exinit.c
@@ -43,7 +43,7 @@
#include <rtems/score/scheduler.h>
#include <rtems/score/thread.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/watchdog.h>
#include <rtems/score/wkspace.h>
diff --git a/cpukit/sapi/src/extensioncreate.c b/cpukit/sapi/src/extensioncreate.c
index d852c83621..f963e0a421 100644
--- a/cpukit/sapi/src/extensioncreate.c
+++ b/cpukit/sapi/src/extensioncreate.c
@@ -23,6 +23,7 @@
#include <rtems/rtems/support.h>
#include <rtems/score/object.h>
#include <rtems/score/thread.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/extension.h>
rtems_status_code rtems_extension_create(
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index 656c198a9b..79d95eabe3 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -52,6 +52,7 @@ include_rtems_score_HEADERS += include/rtems/score/timestamp64.h
include_rtems_score_HEADERS += include/rtems/score/tod.h
include_rtems_score_HEADERS += include/rtems/score/tqdata.h
include_rtems_score_HEADERS += include/rtems/score/userext.h
+include_rtems_score_HEADERS += include/rtems/score/userextimpl.h
include_rtems_score_HEADERS += include/rtems/score/watchdog.h
include_rtems_score_HEADERS += include/rtems/score/wkspace.h
include_rtems_score_HEADERS += include/rtems/score/cpuopts.h
diff --git a/cpukit/score/include/rtems/score/userext.h b/cpukit/score/include/rtems/score/userext.h
index b182e86172..6071d7ab3b 100644
--- a/cpukit/score/include/rtems/score/userext.h
+++ b/cpukit/score/include/rtems/score/userext.h
@@ -231,201 +231,6 @@ typedef struct {
User_extensions_Table Callouts;
} User_extensions_Control;
-/**
- * @brief List of active extensions.
- */
-extern Chain_Control _User_extensions_List;
-
-/**
- * @brief List of active task switch extensions.
- */
-extern Chain_Control _User_extensions_Switches_list;
-
-/**
- * @name Extension Maintainance
- *
- * @{
- */
-
-void _User_extensions_Handler_initialization( void );
-
-void _User_extensions_Add_set(
- User_extensions_Control *extension
-);
-
-RTEMS_INLINE_ROUTINE void _User_extensions_Add_API_set(
- User_extensions_Control *extension
-)
-{
- _User_extensions_Add_set( extension );
-}
-
-RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
- User_extensions_Control *extension,
- const User_extensions_Table *extension_table
-)
-{
- extension->Callouts = *extension_table;
-
- _User_extensions_Add_set( extension );
-}
-
-void _User_extensions_Remove_set(
- User_extensions_Control *extension
-);
-
-/**
- * @brief User extension visitor.
- *
- * @param[in, out] executing The currently executing thread.
- * @param[in, out] arg The argument passed to _User_extensions_Iterate().
- * @param[in] callouts The current callouts.
- */
-typedef void (*User_extensions_Visitor)(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-typedef struct {
- Thread_Control *created;
- bool ok;
-} User_extensions_Thread_create_context;
-
-void _User_extensions_Thread_create_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_delete_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_start_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_restart_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_begin_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_exitted_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-typedef struct {
- Internal_errors_Source source;
- bool is_internal;
- Internal_errors_t error;
-} User_extensions_Fatal_context;
-
-void _User_extensions_Fatal_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-/**
- * @brief Iterates through all user extensions and calls the visitor for each.
- *
- * @param[in, out] arg The argument passed to the visitor.
- * @param[in] visitor The visitor for each extension.
- */
-void _User_extensions_Iterate(
- void *arg,
- User_extensions_Visitor visitor
-);
-
-/** @} */
-
-/**
- * @name Extension Callout Dispatcher
- *
- * @{
- */
-
-static inline bool _User_extensions_Thread_create( Thread_Control *created )
-{
- User_extensions_Thread_create_context ctx = { created, true };
-
- _User_extensions_Iterate( &ctx, _User_extensions_Thread_create_visitor );
-
- return ctx.ok;
-}
-
-static inline void _User_extensions_Thread_delete( Thread_Control *deleted )
-{
- _User_extensions_Iterate(
- deleted,
- _User_extensions_Thread_delete_visitor
- );
-}
-
-static inline void _User_extensions_Thread_start( Thread_Control *started )
-{
- _User_extensions_Iterate(
- started,
- _User_extensions_Thread_start_visitor
- );
-}
-
-static inline void _User_extensions_Thread_restart( Thread_Control *restarted )
-{
- _User_extensions_Iterate(
- restarted,
- _User_extensions_Thread_restart_visitor
- );
-}
-
-static inline void _User_extensions_Thread_begin( Thread_Control *executing )
-{
- _User_extensions_Iterate(
- executing,
- _User_extensions_Thread_begin_visitor
- );
-}
-
-void _User_extensions_Thread_switch(
- Thread_Control *executing,
- Thread_Control *heir
-);
-
-static inline void _User_extensions_Thread_exitted( Thread_Control *executing )
-{
- _User_extensions_Iterate(
- executing,
- _User_extensions_Thread_exitted_visitor
- );
-}
-
-static inline void _User_extensions_Fatal(
- Internal_errors_Source source,
- bool is_internal,
- Internal_errors_t error
-)
-{
- User_extensions_Fatal_context ctx = { source, is_internal, error };
-
- _User_extensions_Iterate( &ctx, _User_extensions_Fatal_visitor );
-}
-
-/** @} */
-
/** @} */
#ifdef __cplusplus
diff --git a/cpukit/score/include/rtems/score/userextimpl.h b/cpukit/score/include/rtems/score/userextimpl.h
new file mode 100644
index 0000000000..665278e24e
--- /dev/null
+++ b/cpukit/score/include/rtems/score/userextimpl.h
@@ -0,0 +1,235 @@
+/**
+ * @file
+ *
+ * @ingroup ScoreUserExt
+ *
+ * @brief User Extension Handler API.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2009.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifndef _RTEMS_SCORE_USEREXTIMPL_H
+#define _RTEMS_SCORE_USEREXTIMPL_H
+
+#include <rtems/score/userext.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup ScoreUserExt
+ *
+ * @{
+ */
+
+/**
+ * @brief List of active extensions.
+ */
+extern Chain_Control _User_extensions_List;
+
+/**
+ * @brief List of active task switch extensions.
+ */
+extern Chain_Control _User_extensions_Switches_list;
+
+/**
+ * @name Extension Maintainance
+ *
+ * @{
+ */
+
+void _User_extensions_Handler_initialization( void );
+
+void _User_extensions_Add_set(
+ User_extensions_Control *extension
+);
+
+RTEMS_INLINE_ROUTINE void _User_extensions_Add_API_set(
+ User_extensions_Control *extension
+)
+{
+ _User_extensions_Add_set( extension );
+}
+
+RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
+ User_extensions_Control *extension,
+ const User_extensions_Table *extension_table
+)
+{
+ extension->Callouts = *extension_table;
+
+ _User_extensions_Add_set( extension );
+}
+
+void _User_extensions_Remove_set(
+ User_extensions_Control *extension
+);
+
+/**
+ * @brief User extension visitor.
+ *
+ * @param[in, out] executing The currently executing thread.
+ * @param[in, out] arg The argument passed to _User_extensions_Iterate().
+ * @param[in] callouts The current callouts.
+ */
+typedef void (*User_extensions_Visitor)(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+typedef struct {
+ Thread_Control *created;
+ bool ok;
+} User_extensions_Thread_create_context;
+
+void _User_extensions_Thread_create_visitor(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+void _User_extensions_Thread_delete_visitor(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+void _User_extensions_Thread_start_visitor(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+void _User_extensions_Thread_restart_visitor(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+void _User_extensions_Thread_begin_visitor(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+void _User_extensions_Thread_exitted_visitor(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+typedef struct {
+ Internal_errors_Source source;
+ bool is_internal;
+ Internal_errors_t error;
+} User_extensions_Fatal_context;
+
+void _User_extensions_Fatal_visitor(
+ Thread_Control *executing,
+ void *arg,
+ const User_extensions_Table *callouts
+);
+
+/**
+ * @brief Iterates through all user extensions and calls the visitor for each.
+ *
+ * @param[in, out] arg The argument passed to the visitor.
+ * @param[in] visitor The visitor for each extension.
+ */
+void _User_extensions_Iterate(
+ void *arg,
+ User_extensions_Visitor visitor
+);
+
+/** @} */
+
+/**
+ * @name Extension Callout Dispatcher
+ *
+ * @{
+ */
+
+static inline bool _User_extensions_Thread_create( Thread_Control *created )
+{
+ User_extensions_Thread_create_context ctx = { created, true };
+
+ _User_extensions_Iterate( &ctx, _User_extensions_Thread_create_visitor );
+
+ return ctx.ok;
+}
+
+static inline void _User_extensions_Thread_delete( Thread_Control *deleted )
+{
+ _User_extensions_Iterate(
+ deleted,
+ _User_extensions_Thread_delete_visitor
+ );
+}
+
+static inline void _User_extensions_Thread_start( Thread_Control *started )
+{
+ _User_extensions_Iterate(
+ started,
+ _User_extensions_Thread_start_visitor
+ );
+}
+
+static inline void _User_extensions_Thread_restart( Thread_Control *restarted )
+{
+ _User_extensions_Iterate(
+ restarted,
+ _User_extensions_Thread_restart_visitor
+ );
+}
+
+static inline void _User_extensions_Thread_begin( Thread_Control *executing )
+{
+ _User_extensions_Iterate(
+ executing,
+ _User_extensions_Thread_begin_visitor
+ );
+}
+
+void _User_extensions_Thread_switch(
+ Thread_Control *executing,
+ Thread_Control *heir
+);
+
+static inline void _User_extensions_Thread_exitted( Thread_Control *executing )
+{
+ _User_extensions_Iterate(
+ executing,
+ _User_extensions_Thread_exitted_visitor
+ );
+}
+
+static inline void _User_extensions_Fatal(
+ Internal_errors_Source source,
+ bool is_internal,
+ Internal_errors_t error
+)
+{
+ User_extensions_Fatal_context ctx = { source, is_internal, error };
+
+ _User_extensions_Iterate( &ctx, _User_extensions_Fatal_visitor );
+}
+
+/** @} */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am
index 09c6fa93ac..e887758e17 100644
--- a/cpukit/score/preinstall.am
+++ b/cpukit/score/preinstall.am
@@ -191,6 +191,10 @@ $(PROJECT_INCLUDE)/rtems/score/userext.h: include/rtems/score/userext.h $(PROJEC
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/userext.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/userext.h
+$(PROJECT_INCLUDE)/rtems/score/userextimpl.h: include/rtems/score/userextimpl.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/userextimpl.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/userextimpl.h
+
$(PROJECT_INCLUDE)/rtems/score/watchdog.h: include/rtems/score/watchdog.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/watchdog.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/watchdog.h
diff --git a/cpukit/score/src/interr.c b/cpukit/score/src/interr.c
index 50b3ffdde6..3e5eb79d6c 100644
--- a/cpukit/score/src/interr.c
+++ b/cpukit/score/src/interr.c
@@ -13,10 +13,9 @@
#include "config.h"
#endif
-#include <rtems/system.h>
#include <rtems/score/interr.h>
#include <rtems/score/sysstate.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
System_state_Codes _System_state_Current;
diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c
index af5c67fc47..b598627740 100644
--- a/cpukit/score/src/thread.c
+++ b/cpukit/score/src/thread.c
@@ -27,7 +27,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
diff --git a/cpukit/score/src/threadclearstate.c b/cpukit/score/src/threadclearstate.c
index 00e53977a7..492f5336fc 100644
--- a/cpukit/score/src/threadclearstate.c
+++ b/cpukit/score/src/threadclearstate.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadclose.c b/cpukit/score/src/threadclose.c
index 48e6e6a36a..6fc72b5cb0 100644
--- a/cpukit/score/src/threadclose.c
+++ b/cpukit/score/src/threadclose.c
@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
void _Thread_Close(
diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c
index 86209ca6ed..1f10065e5b 100644
--- a/cpukit/score/src/threadcreateidle.c
+++ b/cpukit/score/src/threadcreateidle.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
#if defined(RTEMS_SMP)
diff --git a/cpukit/score/src/threaddelayended.c b/cpukit/score/src/threaddelayended.c
index ecd5050dfa..307064a631 100644
--- a/cpukit/score/src/threaddelayended.c
+++ b/cpukit/score/src/threaddelayended.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c
index 8a77d1b4fe..db1f1043f2 100644
--- a/cpukit/score/src/threaddispatch.c
+++ b/cpukit/score/src/threaddispatch.c
@@ -24,7 +24,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
diff --git a/cpukit/score/src/threadhandler.c b/cpukit/score/src/threadhandler.c
index ba53fc3bc7..78671422f6 100644
--- a/cpukit/score/src/threadhandler.c
+++ b/cpukit/score/src/threadhandler.c
@@ -28,7 +28,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#if defined(RTEMS_SMP)
#include <rtems/score/smp.h>
diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c
index 54116ad5e9..7fb650768b 100644
--- a/cpukit/score/src/threadinitialize.c
+++ b/cpukit/score/src/threadinitialize.c
@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/watchdog.h>
#include <rtems/score/wkspace.h>
diff --git a/cpukit/score/src/threadloadenv.c b/cpukit/score/src/threadloadenv.c
index 9088a57c6e..d2dd049016 100644
--- a/cpukit/score/src/threadloadenv.c
+++ b/cpukit/score/src/threadloadenv.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadready.c b/cpukit/score/src/threadready.c
index 8037f1750a..0eb00e6c05 100644
--- a/cpukit/score/src/threadready.c
+++ b/cpukit/score/src/threadready.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadreset.c b/cpukit/score/src/threadreset.c
index c71f0af18d..18dcce81fc 100644
--- a/cpukit/score/src/threadreset.c
+++ b/cpukit/score/src/threadreset.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c
index 657b62ac6e..f78c028b66 100644
--- a/cpukit/score/src/threadrestart.c
+++ b/cpukit/score/src/threadrestart.c
@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadsetstate.c b/cpukit/score/src/threadsetstate.c
index 94798f3a53..1372b5d919 100644
--- a/cpukit/score/src/threadsetstate.c
+++ b/cpukit/score/src/threadsetstate.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadsettransient.c b/cpukit/score/src/threadsettransient.c
index dd3c780937..1624e676bb 100644
--- a/cpukit/score/src/threadsettransient.c
+++ b/cpukit/score/src/threadsettransient.c
@@ -26,7 +26,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadstackallocate.c b/cpukit/score/src/threadstackallocate.c
index d844564cb1..d0a2b65a03 100644
--- a/cpukit/score/src/threadstackallocate.c
+++ b/cpukit/score/src/threadstackallocate.c
@@ -24,7 +24,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
diff --git a/cpukit/score/src/threadstackfree.c b/cpukit/score/src/threadstackfree.c
index 410ebb0b3f..1c20bad349 100644
--- a/cpukit/score/src/threadstackfree.c
+++ b/cpukit/score/src/threadstackfree.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
diff --git a/cpukit/score/src/threadstart.c b/cpukit/score/src/threadstart.c
index 8e89f691ef..550404a2e4 100644
--- a/cpukit/score/src/threadstart.c
+++ b/cpukit/score/src/threadstart.c
@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/threadstartmultitasking.c b/cpukit/score/src/threadstartmultitasking.c
index 62f7b41a22..acc5b26f75 100644
--- a/cpukit/score/src/threadstartmultitasking.c
+++ b/cpukit/score/src/threadstartmultitasking.c
@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
-#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*
diff --git a/cpukit/score/src/userext.c b/cpukit/score/src/userext.c
index 78162f6cdd..8159629423 100644
--- a/cpukit/score/src/userext.c
+++ b/cpukit/score/src/userext.c
@@ -20,7 +20,7 @@
#endif
#include <rtems/config.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
CHAIN_DEFINE_EMPTY( _User_extensions_Switches_list );
diff --git a/cpukit/score/src/userextaddset.c b/cpukit/score/src/userextaddset.c
index 09509f6da8..d24dc4a8e9 100644
--- a/cpukit/score/src/userextaddset.c
+++ b/cpukit/score/src/userextaddset.c
@@ -19,8 +19,7 @@
#include "config.h"
#endif
-#include <rtems/system.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
void _User_extensions_Add_set(
User_extensions_Control *the_extension
diff --git a/cpukit/score/src/userextiterate.c b/cpukit/score/src/userextiterate.c
index bab63ef99b..7dd2ab3a11 100644
--- a/cpukit/score/src/userextiterate.c
+++ b/cpukit/score/src/userextiterate.c
@@ -17,7 +17,7 @@
#endif
#include <rtems/config.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
CHAIN_DEFINE_EMPTY( _User_extensions_List );
diff --git a/cpukit/score/src/userextremoveset.c b/cpukit/score/src/userextremoveset.c
index 1b950ed6be..e90ff77e72 100644
--- a/cpukit/score/src/userextremoveset.c
+++ b/cpukit/score/src/userextremoveset.c
@@ -19,8 +19,7 @@
#include "config.h"
#endif
-#include <rtems/system.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
void _User_extensions_Remove_set (
User_extensions_Control *the_extension
diff --git a/cpukit/score/src/userextthreadswitch.c b/cpukit/score/src/userextthreadswitch.c
index e80b4c362b..43d3afe0bd 100644
--- a/cpukit/score/src/userextthreadswitch.c
+++ b/cpukit/score/src/userextthreadswitch.c
@@ -19,8 +19,7 @@
#include "config.h"
#endif
-#include <rtems/system.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
void _User_extensions_Thread_switch (
Thread_Control *executing,
diff --git a/testsuites/sptests/spsize/size.c b/testsuites/sptests/spsize/size.c
index 529cdd3049..09a881a80c 100644
--- a/testsuites/sptests/spsize/size.c
+++ b/testsuites/sptests/spsize/size.c
@@ -44,7 +44,7 @@
#include <rtems/score/thread.h>
#include <rtems/rtems/timer.h>
#include <rtems/score/tod.h>
-#include <rtems/score/userext.h>
+#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#if defined(RTEMS_SMP)
#include <rtems/score/smp.h>