[rtems commit] score: Add and use <rtems/score/userextimpl.h>

Sebastian Huber sebh at rtems.org
Thu Nov 22 15:31:31 UTC 2012


Module:    rtems
Branch:    master
Commit:    3be0c9afa328510da0c4c0dc6de82fb8359307f8
Changeset: http://git.rtems.org/rtems/commit/?id=3be0c9afa328510da0c4c0dc6de82fb8359307f8

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Nov 22 14:51:25 2012 +0100

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.

---

 cpukit/posix/src/pthread.c                     |    2 +-
 cpukit/posix/src/pthreadinitthreads.c          |    1 -
 cpukit/rtems/src/taskcreate.c                  |    1 -
 cpukit/rtems/src/taskdelete.c                  |    1 -
 cpukit/rtems/src/taskgetnote.c                 |    1 -
 cpukit/rtems/src/taskident.c                   |    1 -
 cpukit/rtems/src/taskinitusers.c               |    1 -
 cpukit/rtems/src/taskissuspended.c             |    1 -
 cpukit/rtems/src/taskmode.c                    |    1 -
 cpukit/rtems/src/taskrestart.c                 |    1 -
 cpukit/rtems/src/taskresume.c                  |    1 -
 cpukit/rtems/src/tasks.c                       |    2 +-
 cpukit/rtems/src/tasksetnote.c                 |    1 -
 cpukit/rtems/src/tasksetpriority.c             |    1 -
 cpukit/rtems/src/taskstart.c                   |    1 -
 cpukit/rtems/src/tasksuspend.c                 |    1 -
 cpukit/rtems/src/taskwakeafter.c               |    1 -
 cpukit/rtems/src/taskwakewhen.c                |    1 -
 cpukit/sapi/src/exinit.c                       |    2 +-
 cpukit/sapi/src/extensioncreate.c              |    1 +
 cpukit/score/Makefile.am                       |    1 +
 cpukit/score/include/rtems/score/userext.h     |  195 --------------------
 cpukit/score/include/rtems/score/userextimpl.h |  235 ++++++++++++++++++++++++
 cpukit/score/preinstall.am                     |    4 +
 cpukit/score/src/interr.c                      |    3 +-
 cpukit/score/src/thread.c                      |    1 -
 cpukit/score/src/threadclearstate.c            |    1 -
 cpukit/score/src/threadclose.c                 |    2 +-
 cpukit/score/src/threadcreateidle.c            |    1 -
 cpukit/score/src/threaddelayended.c            |    1 -
 cpukit/score/src/threaddispatch.c              |    2 +-
 cpukit/score/src/threadhandler.c               |    2 +-
 cpukit/score/src/threadinitialize.c            |    2 +-
 cpukit/score/src/threadloadenv.c               |    1 -
 cpukit/score/src/threadready.c                 |    1 -
 cpukit/score/src/threadreset.c                 |    1 -
 cpukit/score/src/threadrestart.c               |    2 +-
 cpukit/score/src/threadsetstate.c              |    1 -
 cpukit/score/src/threadsettransient.c          |    1 -
 cpukit/score/src/threadstackallocate.c         |    1 -
 cpukit/score/src/threadstackfree.c             |    1 -
 cpukit/score/src/threadstart.c                 |    2 +-
 cpukit/score/src/threadstartmultitasking.c     |    1 -
 cpukit/score/src/userext.c                     |    2 +-
 cpukit/score/src/userextaddset.c               |    3 +-
 cpukit/score/src/userextiterate.c              |    2 +-
 cpukit/score/src/userextremoveset.c            |    3 +-
 cpukit/score/src/userextthreadswitch.c         |    3 +-
 testsuites/sptests/spsize/size.c               |    2 +-
 49 files changed, 257 insertions(+), 243 deletions(-)

diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c
index 4c41c23..cd2cffe 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 dc464e3..06b859b 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 924048a..9cd6b7b 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 00a63ac..5204569 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 5773298..3696f91 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 469c112..570aa35 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 1d47a2b..2f4f0f9 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 8a8dff3..179c41e 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 17958dc..9fab226 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 c74fe98..3a560a9 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 ec7d109..e53b542 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 c679f1e..4164afe 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 9bbe721..453a2a2 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 c8e3bf8..f51c565 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 9c6cc5b..c6f1078 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 23d9ecc..e1e82dd 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 190d11e..bf28e0b 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 d181848..0a420b2 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 7335128..2c68434 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 d852c83..f963e0a 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 656c198..79d95ea 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 b182e86..6071d7a 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 0000000..665278e
--- /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 09c6fa9..e887758 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 50b3ffd..3e5eb79 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 af5c67f..b598627 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 00e5397..492f533 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 48e6e6a..6fc72b5 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 86209ca..1f10065 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 ecd5050..307064a 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 8a77d1b..db1f104 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 ba53fc3..7867142 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 54116ad..7fb6507 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 9088a57..d2dd049 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 8037f17..0eb00e6 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 c71f0af..18dcce8 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 657b62a..f78c028 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 94798f3..1372b5d 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 dd3c780..1624e67 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 d844564..d0a2b65 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 410ebb0..1c20bad 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 8e89f69..550404a 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 62f7b41..acc5b26 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 78162f6..8159629 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 09509f6..d24dc4a 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 bab63ef..7dd2ab3 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 1b950ed..e90ff77 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 e80b4c3..43d3afe 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 529cdd3..09a881a 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>




More information about the vc mailing list