Hi Sebastian, On Jun 29 08:18, Sebastian Huber wrote: > In Newlib, the stdio streams are defined to thread-specific pointers > _reent::_stdin, _reent::_stdout and _reent::_stderr. In case > _REENT_SMALL is not defined, then these pointers are initialized via > _REENT_INIT_PTR() or _REENT_INIT_PTR_ZEROED() to thread-specific FILE > objects provided via _reent::__sf[3]. There are two problems with this > (at least in case of RTEMS). > > (1) The thread-specific FILE objects are closed by _reclaim_reent(). > This leads to problems with language run-time libraries that provide > wrappers to the C/POSIX stdio streams (e.g. C++ and Ada), since they > use the thread-specific FILE objects of the initialization thread. In > case the initialization thread is deleted, then they use freed memory. > > (2) Since thread-specific FILE objects are used with a common output > device via file descriptors 0, 1 and 2, the locking at FILE object level > cannot ensure atomicity of the output, e.g. a call to printf(). > > Introduce a new Newlib configuration option _REENT_GLOBAL_STDIO_STREAMS > to enable the use of global stdio FILE objects. > > As a side-effect this reduces the size of struct _reent by more than > 50%. This doesn't build for me with all patches applied: winsup/cygwin/cygtls.cc:55:7: error: request for member ‘__sf’ in ‘&((_cygtls*)this)->_cygtls::._cygtls::::local_clib’, which is of pointer type ‘_reent*’ (maybe you meant to use ‘->’ ?) _REENT_INIT_PTR (&local_clib); Corinna -- Corinna Vinschen Cygwin Maintainer Red Hat