summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-05-09 18:27:26 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-05-09 18:27:26 +0000
commitc3db01d0f37921ba809825e9c6b7fbe86b8fae5d (patch)
tree0f7adb0ea85567c63adf99d5cf0e67b7598aa61b /cpukit/sapi
parent2007-05-09 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-c3db01d0f37921ba809825e9c6b7fbe86b8fae5d.tar.bz2
2007-05-09 Joel Sherrill <joel.sherrill@OARcorp.com>
* libcsupport/include/rtems/libcsupport.h, libcsupport/src/newlibc.c, sapi/Makefile.am, sapi/include/confdefs.h, sapi/src/exinit.c, score/Makefile.am, score/preinstall.am, score/include/rtems/score/userext.h, score/src/chain.c, score/src/userext.c: Switch to newlib reentrancy extension being installed in the initial set instead of using rtems_extension_create. While implementing this, noticed that user extensions and chain code had multiple functions in a single file which is not desirable in the SuperCore and API portions of RTEMS, so split these into multiple files with one function per file. Also noticed that some of user extension code was inlined for no particular reason so moved that to C bodies. Split executive shutdown from initialization since not every application shuts down. Moved __fini call to executive shutdown to be more symmetrical with where it is called at startup. * sapi/src/exshutdown.c, score/src/chainappend.c, score/src/chainextract.c, score/src/chainget.c, score/src/chaininsert.c, score/src/userextaddapiset.c, score/src/userextaddset.c, score/src/userextremoveset.c, score/src/userextthreadbegin.c, score/src/userextthreadcreate.c, score/src/userextthreaddelete.c, score/src/userextthreadrestart.c, score/src/userextthreadstart.c, score/src/userextthreadswitch.c: New files. * score/inline/rtems/score/userext.inl: Removed.
Diffstat (limited to 'cpukit/sapi')
-rw-r--r--cpukit/sapi/Makefile.am2
-rw-r--r--cpukit/sapi/include/confdefs.h77
-rw-r--r--cpukit/sapi/src/exinit.c25
-rw-r--r--cpukit/sapi/src/exshutdown.c51
4 files changed, 94 insertions, 61 deletions
diff --git a/cpukit/sapi/Makefile.am b/cpukit/sapi/Makefile.am
index 4dfcf72cf4..edb845aca2 100644
--- a/cpukit/sapi/Makefile.am
+++ b/cpukit/sapi/Makefile.am
@@ -22,7 +22,7 @@ AM_CPPFLAGS += -D__RTEMS_INSIDE__
noinst_LIBRARIES = libsapi.a
libsapi_a_SOURCES = src/debug.c src/extension.c src/extensioncreate.c \
src/extensiondelete.c src/extensionident.c src/fatal.c src/exinit.c \
- src/io.c src/itronapi.c src/posixapi.c src/rtemsapi.c
+ src/exshutdown.c src/io.c src/itronapi.c src/posixapi.c src/rtemsapi.c
libsapi_a_CPPFLAGS = $(AM_CPPFLAGS)
include $(srcdir)/preinstall.am
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index 5eb86065e7..b32d9a84ac 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -64,10 +64,10 @@ extern itron_api_configuration_table Configuration_ITRON_API;
* RTEMS C Library and Newlib support
*/
-#ifdef RTEMS_NEWLIB
-#define CONFIGURE_NEWLIB_EXTENSION 1
+#if (defined(RTEMS_NEWLIB) && defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
+ #define CONFIGURE_NEWLIB_EXTENSION 1
#else
-#define CONFIGURE_NEWLIB_EXTENSION 0
+ #define CONFIGURE_NEWLIB_EXTENSION 0
#endif
/*
@@ -130,26 +130,24 @@ extern int rtems_telnetd_maximum_ptys;
#endif /* CONFIGURE_INIT */
#ifdef CONFIGURE_INIT
-#ifndef CONFIGURE_HAS_OWN_MOUNT_TABLE
-rtems_filesystem_mount_table_t configuration_mount_table = {
-#ifdef CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
- &IMFS_ops,
-#else /* using miniIMFS as base filesystem */
- &miniIMFS_ops,
-#endif
- RTEMS_FILESYSTEM_READ_WRITE,
- NULL,
- NULL
-};
-
-rtems_filesystem_mount_table_t
- *rtems_filesystem_mount_table = &configuration_mount_table;
-int rtems_filesystem_mount_table_size = 1;
-#endif
-
+ #ifndef CONFIGURE_HAS_OWN_MOUNT_TABLE
+ rtems_filesystem_mount_table_t configuration_mount_table = {
+ #ifdef CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
+ &IMFS_ops,
+ #else /* using miniIMFS as base filesystem */
+ &miniIMFS_ops,
+ #endif
+ RTEMS_FILESYSTEM_READ_WRITE,
+ NULL,
+ NULL
+ };
+
+ rtems_filesystem_mount_table_t
+ *rtems_filesystem_mount_table = &configuration_mount_table;
+ int rtems_filesystem_mount_table_size = 1;
+ #endif
#endif
-
/*
* Stack Checker Requirements
*
@@ -510,25 +508,30 @@ rtems_multiprocessing_table Multiprocessing_configuration = {
#ifdef STACK_CHECKER_ON
#include <rtems/stackchk.h>
#endif
+#include <rtems/libcsupport.h>
#if defined(CONFIGURE_INITIAL_EXTENSIONS) || \
- defined(STACK_CHECKER_ON)
-rtems_extensions_table Configuration_Initial_Extensions[] = {
-#ifdef CONFIGURE_INITIAL_EXTENSIONS
- CONFIGURE_INITIAL_EXTENSIONS,
-#endif
-#ifdef STACK_CHECKER_ON
- RTEMS_STACK_CHECKER_EXTENSION,
-#endif
-};
-
-#define CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
-#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
- ((sizeof(Configuration_Initial_Extensions) / \
- sizeof(rtems_extensions_table)))
+ defined(STACK_CHECKER_ON) || \
+ (defined(RTEMS_NEWLIB) && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
+ rtems_extensions_table Configuration_Initial_Extensions[] = {
+ #if !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY)
+ RTEMS_NEWLIB_EXTENSION,
+ #endif
+ #if defined(STACK_CHECKER_ON)
+ RTEMS_STACK_CHECKER_EXTENSION,
+ #endif
+ #if defined(CONFIGURE_INITIAL_EXTENSIONS)
+ CONFIGURE_INITIAL_EXTENSIONS,
+ #endif
+ };
+
+ #define CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
+ #define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
+ ((sizeof(Configuration_Initial_Extensions) / \
+ sizeof(rtems_extensions_table)))
#else
-#define CONFIGURE_INITIAL_EXTENSION_TABLE NULL
-#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
+ #define CONFIGURE_INITIAL_EXTENSION_TABLE NULL
+ #define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
#endif
diff --git a/cpukit/sapi/src/exinit.c b/cpukit/sapi/src/exinit.c
index 04dc3c33de..109826a132 100644
--- a/cpukit/sapi/src/exinit.c
+++ b/cpukit/sapi/src/exinit.c
@@ -105,7 +105,9 @@ rtems_interrupt_level rtems_initialize_executive_early(
*/
_Configuration_Table = configuration_table;
+#if defined(RTEMS_MULTIPROCESSING)
_Configuration_MP_table = multiprocessing_table;
+#endif
/*
* Internally we view single processor systems as a very restricted
@@ -277,26 +279,3 @@ void rtems_initialize_executive_late(
_ISR_Enable( bsp_level );
}
-
-/*PAGE
- *
- * rtems_shutdown_executive
- *
- * This kernel routine shutdowns the executive. It halts multitasking
- * and returns control to the application execution "thread" which
- * initialially invoked the rtems_initialize_executive directive.
- *
- * Input parameters: NONE
- *
- * Output parameters: NONE
- */
-
-void rtems_shutdown_executive(
- uint32_t result
-)
-{
- if ( _System_state_Current != SYSTEM_STATE_SHUTDOWN ) {
- _System_state_Set( SYSTEM_STATE_SHUTDOWN );
- _Thread_Stop_multitasking();
- }
-}
diff --git a/cpukit/sapi/src/exshutdown.c b/cpukit/sapi/src/exshutdown.c
new file mode 100644
index 0000000000..5db40afa97
--- /dev/null
+++ b/cpukit/sapi/src/exshutdown.c
@@ -0,0 +1,51 @@
+/*
+ * Initialization Manager
+ *
+ * COPYRIGHT (c) 1989-1999.
+ * 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.
+ *
+ * $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/system.h>
+#include <rtems/score/sysstate.h>
+#include <rtems/score/thread.h>
+
+#if defined(__USE_INIT_FINI__)
+#include <stdlib.h> /* for atexit() */
+#endif
+
+/*
+ * rtems_shutdown_executive
+ *
+ * This kernel routine shutdowns the executive. It halts multitasking
+ * and returns control to the application execution "thread" which
+ * initialially invoked the rtems_initialize_executive directive.
+ *
+ * Input parameters: NONE
+ *
+ * Output parameters: NONE
+ */
+
+void rtems_shutdown_executive(
+ uint32_t result
+)
+{
+ if ( _System_state_Current != SYSTEM_STATE_SHUTDOWN ) {
+
+ #if defined(__USE_INIT_FINI__)
+ extern void _fini( void );
+ atexit( _fini );
+ #endif
+ _System_state_Set( SYSTEM_STATE_SHUTDOWN );
+ _Thread_Stop_multitasking();
+ }
+}