4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-03-03 21:45:51 +08:00

Add _REENT_CLEANUP(ptr)

Add a _REENT_CLEANUP() macro to encapsulate access to the
__cleanup member of struct reent. This will help to replace the
struct member with a thread-local storage object in a follow up
patch.
This commit is contained in:
Matt Joyce 2022-02-03 10:18:53 +01:00 committed by Sebastian Huber
parent 50f078b48c
commit f89ce35d83
10 changed files with 12 additions and 11 deletions

View File

@ -718,6 +718,7 @@ struct _reent
#endif /* !_REENT_SMALL */ #endif /* !_REENT_SMALL */
#define _REENT_CLEANUP(_ptr) ((_ptr)->__cleanup)
#define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency) #define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency)
#define _REENT_ERRNO(_ptr) ((_ptr)->_errno) #define _REENT_ERRNO(_ptr) ((_ptr)->_errno)
#define _REENT_INC(_ptr) ((_ptr)->_inc) #define _REENT_INC(_ptr) ((_ptr)->_inc)

View File

@ -104,6 +104,6 @@ FILE *__sfp (struct _reent *);
#define __sfp_free(fp) ( (fp)->_fp = 0 ) #define __sfp_free(fp) ( (fp)->_fp = 0 )
#define CHECK_INIT(ptr) \ #define CHECK_INIT(ptr) \
do { if ((ptr) && !(ptr)->__cleanup) __sinit (ptr); } while (0) do { if ((ptr) && !_REENT_CLEANUP(ptr)) __sinit (ptr); } while (0)
#define CHECK_STR_INIT(ptr) /* currently, do nothing */ #define CHECK_STR_INIT(ptr) /* currently, do nothing */
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */

View File

@ -65,7 +65,7 @@ __cleanup (struct _reent *s)
void void
__sinit (struct _reent *s) __sinit (struct _reent *s)
{ {
s->__cleanup = __cleanup; _REENT_CLEANUP(s) = __cleanup;
_REENT_STDIN(s) = &s->__sf[0]; _REENT_STDIN(s) = &s->__sf[0];
_REENT_STDIN(s)->_fp = SPE_STDIN; _REENT_STDIN(s)->_fp = SPE_STDIN;

View File

@ -86,11 +86,11 @@ _reclaim_reent (struct _reent *ptr)
if (ptr->_sig_func) if (ptr->_sig_func)
_free_r (ptr, ptr->_sig_func);*/ _free_r (ptr, ptr->_sig_func);*/
if (ptr->__cleanup) if (_REENT_CLEANUP(ptr))
{ {
/* cleanup won't reclaim memory 'coz usually it's run /* cleanup won't reclaim memory 'coz usually it's run
before the program exits, and who wants to wait for that? */ before the program exits, and who wants to wait for that? */
ptr->__cleanup (ptr); _REENT_CLEANUP(ptr) (ptr);
} }
/* Malloc memory not reclaimed; no good way to return memory anyway. */ /* Malloc memory not reclaimed; no good way to return memory anyway. */

View File

@ -235,14 +235,14 @@ __sinit (struct _reent *s)
{ {
__sfp_lock_acquire (); __sfp_lock_acquire ();
if (s->__cleanup) if (_REENT_CLEANUP(s))
{ {
__sfp_lock_release (); __sfp_lock_release ();
return; return;
} }
/* make sure we clean up on exit */ /* make sure we clean up on exit */
s->__cleanup = cleanup_stdio; /* conservative */ _REENT_CLEANUP(s) = cleanup_stdio; /* conservative */
global_stdio_init (); global_stdio_init ();
__sfp_lock_release (); __sfp_lock_release ();

View File

@ -197,7 +197,7 @@ extern _READ_WRITE_RETURN_TYPE __swrite64 (struct _reent *, void *,
do \ do \
{ \ { \
struct _reent *_check_init_ptr = (ptr); \ struct _reent *_check_init_ptr = (ptr); \
if ((_check_init_ptr) && !(_check_init_ptr)->__cleanup) \ if ((_check_init_ptr) && !_REENT_CLEANUP(_check_init_ptr))\
__sinit (_check_init_ptr); \ __sinit (_check_init_ptr); \
} \ } \
while (0) while (0)

View File

@ -174,7 +174,7 @@ nbf:
* We're committed to buffering from here, so make sure we've * We're committed to buffering from here, so make sure we've
* registered to flush buffers on exit. * registered to flush buffers on exit.
*/ */
if (!reent->__cleanup) if (!_REENT_CLEANUP(reent))
__sinit(reent); __sinit(reent);
#ifdef _FSEEK_OPTIMIZATION #ifdef _FSEEK_OPTIMIZATION

View File

@ -60,7 +60,7 @@ extern void __sinit (struct _reent *);
#define CHECK_INIT(ptr) \ #define CHECK_INIT(ptr) \
do \ do \
{ \ { \
if ((ptr) && !(ptr)->__cleanup) \ if ((ptr) && !_REENT_CLEANUP(ptr)) \
__sinit (ptr); \ __sinit (ptr); \
} \ } \
while (0) while (0)

View File

@ -55,7 +55,7 @@ _cygtls::init_thread (void *x, DWORD (*func) (void *, void *))
_REENT_INIT_PTR (&local_clib); _REENT_INIT_PTR (&local_clib);
stackptr = stack; stackptr = stack;
altstack.ss_flags = SS_DISABLE; altstack.ss_flags = SS_DISABLE;
if (_GLOBAL_REENT->__cleanup) if (_REENT_CLEANUP(_GLOBAL_REENT))
local_clib.__cleanup = _cygtls::cleanup_early; local_clib.__cleanup = _cygtls::cleanup_early;
} }

View File

@ -800,7 +800,7 @@ main_thread_sinit ()
read or written in the first stdio function call in the main thread. read or written in the first stdio function call in the main thread.
To fix this issue we set __cleanup to _cygtls::cleanup_early here. */ To fix this issue we set __cleanup to _cygtls::cleanup_early here. */
_REENT->__cleanup = _cygtls::cleanup_early; _REENT_CLEANUP(_REENT) = _cygtls::cleanup_early;
} }
/* Take over from libc's crt0.o and start the application. Note the /* Take over from libc's crt0.o and start the application. Note the