diff options
Diffstat (limited to 'cpukit/sapi')
-rw-r--r-- | cpukit/sapi/Makefile.am | 2 | ||||
-rw-r--r-- | cpukit/sapi/include/confdefs.h | 77 | ||||
-rw-r--r-- | cpukit/sapi/src/exinit.c | 25 | ||||
-rw-r--r-- | cpukit/sapi/src/exshutdown.c | 51 |
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(); + } +} |