summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi
diff options
context:
space:
mode:
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();
+ }
+}