[PATCH 01/38] Statically initialize _Objects_Information_table
Sebastian Huber
sebastian.huber at embedded-brains.de
Tue Jan 26 15:37:27 UTC 2016
---
cpukit/sapi/src/exinit.c | 19 +++++++++++++------
cpukit/sapi/src/posixapi.c | 8 --------
cpukit/sapi/src/rtemsapi.c | 8 --------
cpukit/score/include/rtems/score/objectimpl.h | 2 +-
4 files changed, 14 insertions(+), 23 deletions(-)
diff --git a/cpukit/sapi/src/exinit.c b/cpukit/sapi/src/exinit.c
index 1eaf24f..7c1ffd6 100644
--- a/cpukit/sapi/src/exinit.c
+++ b/cpukit/sapi/src/exinit.c
@@ -61,7 +61,19 @@
#include <drvmgr/drvmgr.h>
#endif
-Objects_Information *_Internal_Objects[ OBJECTS_INTERNAL_CLASSES_LAST + 1 ];
+static Objects_Information *
+_Internal_Objects[ OBJECTS_INTERNAL_CLASSES_LAST + 1 ];
+
+static Objects_Information *_RTEMS_Objects[ OBJECTS_RTEMS_CLASSES_LAST + 1 ];
+
+static Objects_Information *_POSIX_Objects[ OBJECTS_POSIX_CLASSES_LAST + 1 ];
+
+Objects_Information **_Objects_Information_table[ OBJECTS_APIS_LAST + 1 ] = {
+ NULL,
+ &_Internal_Objects[ 0 ],
+ &_RTEMS_Objects[ 0 ],
+ &_POSIX_Objects[ 0 ]
+};
static void rtems_initialize_data_structures(void)
{
@@ -104,11 +116,6 @@ static void rtems_initialize_data_structures(void)
_User_extensions_Handler_initialization();
_ISR_Handler_initialization();
- /*
- * Initialize the internal support API and allocator Mutex
- */
- _Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects;
-
_API_Mutex_Initialization( 2 );
_API_Mutex_Allocate( &_RTEMS_Allocator_Mutex );
_API_Mutex_Allocate( &_Once_Mutex );
diff --git a/cpukit/sapi/src/posixapi.c b/cpukit/sapi/src/posixapi.c
index 4bdb694..60fa17e 100644
--- a/cpukit/sapi/src/posixapi.c
+++ b/cpukit/sapi/src/posixapi.c
@@ -52,8 +52,6 @@ void _POSIX_Fatal_error( POSIX_Fatal_domain domain, int eno )
_Terminate( INTERNAL_ERROR_POSIX_API, false, code );
}
-Objects_Information *_POSIX_Objects[ OBJECTS_POSIX_CLASSES_LAST + 1 ];
-
void _POSIX_API_Initialize(void)
{
/*
@@ -63,12 +61,6 @@ void _POSIX_API_Initialize(void)
* Currently, there are no none type size assumptions.
*/
- /*
- * Install our API Object Management Table and initialize the
- * various managers.
- */
- _Objects_Information_table[OBJECTS_POSIX_API] = _POSIX_Objects;
-
_POSIX_Key_Manager_initialization();
#ifdef RTEMS_POSIX_API
diff --git a/cpukit/sapi/src/rtemsapi.c b/cpukit/sapi/src/rtemsapi.c
index 98fe277..93b9847 100644
--- a/cpukit/sapi/src/rtemsapi.c
+++ b/cpukit/sapi/src/rtemsapi.c
@@ -39,16 +39,8 @@
#include <rtems/rtems/signalimpl.h>
#include <rtems/rtems/timerimpl.h>
-Objects_Information *_RTEMS_Objects[ OBJECTS_RTEMS_CLASSES_LAST + 1 ];
-
void _RTEMS_API_Initialize(void)
{
- /*
- * Install our API Object Management Table and initialize the
- * various managers.
- */
- _Objects_Information_table[OBJECTS_CLASSIC_API] = _RTEMS_Objects;
-
_RTEMS_tasks_Manager_initialization();
_Timer_Manager_initialization();
_Signal_Manager_initialization();
diff --git a/cpukit/score/include/rtems/score/objectimpl.h b/cpukit/score/include/rtems/score/objectimpl.h
index 80c50a5..4f49ef5 100644
--- a/cpukit/score/include/rtems/score/objectimpl.h
+++ b/cpukit/score/include/rtems/score/objectimpl.h
@@ -197,7 +197,7 @@ SCORE_EXTERN uint16_t _Objects_Maximum_nodes;
* class. From the ID, we can go to one of these information blocks,
* and obtain a pointer to the appropriate object control block.
*/
-SCORE_EXTERN Objects_Information
+extern Objects_Information
**_Objects_Information_table[OBJECTS_APIS_LAST + 1];
/**
--
1.8.4.5
More information about the devel
mailing list