diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/libcsupport/src/__usrenv.c | 27 | ||||
-rw-r--r-- | cpukit/libcsupport/src/base_fs.c | 9 | ||||
-rw-r--r-- | cpukit/libcsupport/src/libio_init.c | 3 | ||||
-rw-r--r-- | cpukit/libcsupport/src/newlibc_exit.c | 8 | ||||
-rw-r--r-- | cpukit/libcsupport/src/newlibc_init.c | 20 | ||||
-rw-r--r-- | cpukit/libcsupport/src/newlibc_reent.c (renamed from cpukit/libcsupport/src/newlibc.c) | 35 | ||||
-rw-r--r-- | cpukit/libcsupport/src/sync.c | 8 |
7 files changed, 55 insertions, 55 deletions
diff --git a/cpukit/libcsupport/src/__usrenv.c b/cpukit/libcsupport/src/__usrenv.c new file mode 100644 index 0000000000..0b3469fa1a --- /dev/null +++ b/cpukit/libcsupport/src/__usrenv.c @@ -0,0 +1,27 @@ +/* + * COPYRIGHT (c) 1989-2008. + * 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.h> +#include <rtems/libio.h> +#include <rtems/libio_.h> + +/* + * Global information for POSIX Process Environment Support + */ + +rtems_user_env_t rtems_global_user_env; +rtems_user_env_t * rtems_current_user_env = &rtems_global_user_env; + + diff --git a/cpukit/libcsupport/src/base_fs.c b/cpukit/libcsupport/src/base_fs.c index 4ce53b0e4b..91466a5b07 100644 --- a/cpukit/libcsupport/src/base_fs.c +++ b/cpukit/libcsupport/src/base_fs.c @@ -1,7 +1,7 @@ /* * Base file system initialization * - * COPYRIGHT (c) 1989-1999. + * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -20,13 +20,6 @@ #include <rtems/libio_.h> /* - * Global information for the base file system. - */ - -rtems_user_env_t rtems_global_user_env; -rtems_user_env_t * rtems_current_user_env = &rtems_global_user_env; - -/* * Default mode for created files. */ diff --git a/cpukit/libcsupport/src/libio_init.c b/cpukit/libcsupport/src/libio_init.c index 4968058637..9bb96e40c2 100644 --- a/cpukit/libcsupport/src/libio_init.c +++ b/cpukit/libcsupport/src/libio_init.c @@ -86,5 +86,6 @@ void rtems_libio_init( void ) * Initialize the base file system infrastructure. */ - rtems_filesystem_initialize(); + if (rtems_fs_init_helper) + (* rtems_fs_init_helper)(); } diff --git a/cpukit/libcsupport/src/newlibc_exit.c b/cpukit/libcsupport/src/newlibc_exit.c index 68212b692e..f7f8a6e481 100644 --- a/cpukit/libcsupport/src/newlibc_exit.c +++ b/cpukit/libcsupport/src/newlibc_exit.c @@ -40,7 +40,7 @@ int _fwalk(struct _reent *ptr, int (*function) (FILE *) ); /* do we think we are reentrant? */ extern int libc_reentrant; -extern struct _reent libc_global_reent __ATTRIBUTE_IMPURE_PTR__; +extern struct _reent * const _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__; /* * CYGNUS newlib routine that does atexit() processing and flushes @@ -66,15 +66,15 @@ void libc_wrapup(void) _wrapup_reent(0); */ - if (_REENT != &libc_global_reent) { - _wrapup_reent(&libc_global_reent); + if (_REENT != _global_impure_ptr) { + _wrapup_reent(_global_impure_ptr); #if 0 /* Don't reclaim this one, just in case we do printfs * on the way out to ROM. */ _reclaim_reent(&libc_global_reent); #endif - _REENT = &libc_global_reent; + _REENT = _global_impure_ptr; } /* diff --git a/cpukit/libcsupport/src/newlibc_init.c b/cpukit/libcsupport/src/newlibc_init.c index a37ab29663..dbf9544fd5 100644 --- a/cpukit/libcsupport/src/newlibc_init.c +++ b/cpukit/libcsupport/src/newlibc_init.c @@ -17,22 +17,7 @@ #include "config.h" #endif -#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ -#include <rtems.h> - #if defined(RTEMS_NEWLIB) -#include <rtems/libcsupport.h> - -/* Since we compile with strict ANSI we need to undef it to get - * prototypes for extensions - */ -#undef __STRICT_ANSI__ - -#include <stdlib.h> /* for free() */ -#include <string.h> /* for memset() */ - -#include <sys/reent.h> /* for extern of _REENT (aka _impure_ptr) */ -#include <errno.h> /* * Init libc for CYGNUS newlib @@ -48,14 +33,9 @@ */ -struct _reent libc_global_reent - __ATTRIBUTE_IMPURE_PTR__ = _REENT_INIT(libc_global_reent); void libc_init(void) { - _REENT = &libc_global_reent; - - _Thread_Set_libc_reent (&_REENT); } #endif diff --git a/cpukit/libcsupport/src/newlibc.c b/cpukit/libcsupport/src/newlibc_reent.c index 79c1dc7dd4..ba8078a135 100644 --- a/cpukit/libcsupport/src/newlibc.c +++ b/cpukit/libcsupport/src/newlibc_reent.c @@ -1,10 +1,4 @@ /* - * Implementation of hooks for the CYGNUS newlib libc - * These hooks set things up so that: - * + '_REENT' is switched at task switch time. - * - * COPYRIGHT (c) 1994 by Division Incorporated - * * 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. @@ -50,8 +44,7 @@ int _fwalk(struct _reent *ptr, int (*function) (FILE *) ); -extern struct _reent libc_global_reent __ATTRIBUTE_IMPURE_PTR__; - +extern struct _reent * const _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__; /* * reent struct allocation moved here from libc_start_hook() to avoid * mutual exclusion problems when memory is allocated from the start hook. @@ -59,13 +52,20 @@ extern struct _reent libc_global_reent __ATTRIBUTE_IMPURE_PTR__; * Memory is also now allocated from the workspace rather than the heap. * -- ptorre 9/30/03 */ -bool libc_create_hook( +bool newlib_create_hook( rtems_tcb *current_task, rtems_tcb *creating_task ) { struct _reent *ptr; + if (_Thread_libc_reent == 0) + { + _REENT = _global_impure_ptr; + + _Thread_Set_libc_reent (&_REENT); + } + /* NOTE: The RTEMS malloc is reentrant without a reent ptr since * it is based on the Classic API Region Manager. */ @@ -81,13 +81,12 @@ bool libc_create_hook( #endif if (ptr) { - - _REENT_INIT_PTR((ptr)); /* GCC extension: structure constants */ - creating_task->libc_reent = ptr; - return true; + _REENT_INIT_PTR((ptr)); /* GCC extension: structure constants */ + creating_task->libc_reent = ptr; + return TRUE; } - else - return false; + + return FALSE; } /* @@ -95,7 +94,7 @@ bool libc_create_hook( */ #ifdef NEED_SETVBUF -rtems_extension libc_begin_hook(rtems_tcb *current_task) +rtems_extension newlib_begin_hook(rtems_tcb *current_task) { setvbuf( stdout, NULL, _IOLBF, BUFSIZ ); } @@ -128,7 +127,7 @@ int newlib_free_buffers( return 0; } -rtems_extension libc_delete_hook( +rtems_extension newlib_delete_hook( rtems_tcb *current_task, rtems_tcb *deleted_task ) @@ -145,7 +144,7 @@ rtems_extension libc_delete_hook( ptr = deleted_task->libc_reent; } - if (ptr && ptr != &libc_global_reent) { + if (ptr && ptr != _global_impure_ptr) { /* _wrapup_reent(ptr); _reclaim_reent(ptr); diff --git a/cpukit/libcsupport/src/sync.c b/cpukit/libcsupport/src/sync.c index 14c20cebb3..8db3f62161 100644 --- a/cpukit/libcsupport/src/sync.c +++ b/cpukit/libcsupport/src/sync.c @@ -7,7 +7,7 @@ * fsync() * fdatasync() * - * COPYRIGHT (c) 1989-2003. + * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -71,10 +71,10 @@ static void sync_per_thread(Thread_Control *t) } /* - * libc_global_reent is not prototyped in any .h files. + * _global_impure_ptr is not prototyped in any .h files. * We have to extern it here. */ -extern struct _reent libc_global_reent; +extern struct _reent * const _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__; void sync(void) { @@ -82,7 +82,7 @@ void sync(void) /* * Walk the one used initially by RTEMS. */ - _fwalk(&libc_global_reent, sync_wrapper); + _fwalk(_global_impure_ptr, sync_wrapper); /* * XXX Do we walk the one used globally by newlib? |