Add _REENT_CLEANUP(ptr)
authorMatt Joyce <matthew.joyce@embedded-brains.de>
Thu, 3 Feb 2022 09:18:53 +0000 (10:18 +0100)
committerSebastian Huber <sebastian.huber@embedded-brains.de>
Wed, 13 Jul 2022 04:55:46 +0000 (06:55 +0200)
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.

newlib/libc/include/sys/reent.h
newlib/libc/machine/spu/c99ppe.h
newlib/libc/machine/spu/stdio.c
newlib/libc/reent/reent.c
newlib/libc/stdio/findfp.c
newlib/libc/stdio/local.h
newlib/libc/stdio/setvbuf.c
newlib/libc/sys/arm/syscalls.c
winsup/cygwin/cygtls.cc
winsup/cygwin/dcrt0.cc

index 4296188f532702d6b7fdd42c26eaf44d5e65b9d0..3d277638f3b614345f45c97fcd477345fdf65e53 100644 (file)
@@ -718,6 +718,7 @@ struct _reent
 
 #endif /* !_REENT_SMALL */
 
+#define _REENT_CLEANUP(_ptr)   ((_ptr)->__cleanup)
 #define _REENT_EMERGENCY(_ptr) ((_ptr)->_emergency)
 #define _REENT_ERRNO(_ptr)     ((_ptr)->_errno)
 #define _REENT_INC(_ptr)       ((_ptr)->_inc)
index 263cf7fe0fa4ddd507405a76fb9221a3d69fd589..7b3fcb6b7f42d2c93cdc213a01cbf235c15bc9dc 100644 (file)
@@ -104,6 +104,6 @@ FILE  *__sfp (struct _reent *);
 #define __sfp_free(fp) ( (fp)->_fp = 0 )
 
 #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 */
 #endif /* __ASSEMBLER__ */
index 83a60c06bba26421ba86498cddedb3d6d26da3a6..fd45b001434392bed8ee4d7ae2a4b7bb8245e494 100644 (file)
@@ -65,7 +65,7 @@ __cleanup (struct _reent *s)
 void
 __sinit (struct _reent *s)
 {
-  s->__cleanup = __cleanup;
+  _REENT_CLEANUP(s) = __cleanup;
 
   _REENT_STDIN(s) = &s->__sf[0];
   _REENT_STDIN(s)->_fp = SPE_STDIN;
index a9d44b455f194015959ea9965ca6e3cc721c5654..16ac04e22d779af2c8db8b5290f943d963875f96 100644 (file)
@@ -86,11 +86,11 @@ _reclaim_reent (struct _reent *ptr)
          if (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
             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. */
index 3c888d03c6f919a6c500bbac8be1a68ffd9d54ee..fbdb7f2f2e03dd3b5cf9d0c49b983d501dc1a3a2 100644 (file)
@@ -235,14 +235,14 @@ __sinit (struct _reent *s)
 {
   __sfp_lock_acquire ();
 
-  if (s->__cleanup)
+  if (_REENT_CLEANUP(s))
     {
       __sfp_lock_release ();
       return;
     }
 
   /* make sure we clean up on exit */
-  s->__cleanup = cleanup_stdio;        /* conservative */
+  _REENT_CLEANUP(s) = cleanup_stdio;   /* conservative */
 
   global_stdio_init ();
   __sfp_lock_release ();
index 9b355e3aca5ff0767a7c2c2599a1f0beb9080a81..24eaff351e7d3f76acc602e175865ed70ea36505 100644 (file)
@@ -197,7 +197,7 @@ extern _READ_WRITE_RETURN_TYPE __swrite64 (struct _reent *, void *,
   do                                                           \
     {                                                          \
       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);                              \
     }                                                          \
   while (0)
index 46c58a7b8d7913ff86c6ea8021d94eee6bbd97a6..e27ea086c14c31292a8fe403034962bec3f8f3cb 100644 (file)
@@ -174,7 +174,7 @@ nbf:
    * We're committed to buffering from here, so make sure we've
    * registered to flush buffers on exit.
    */
-  if (!reent->__cleanup)
+  if (!_REENT_CLEANUP(reent))
     __sinit(reent);
 
 #ifdef _FSEEK_OPTIMIZATION
index 4b9be701aac95f15bd5c1622ef43ac4a334a1296..325c0117fd6bc8d46580128a428cc1bba013b840 100644 (file)
@@ -60,7 +60,7 @@ extern void   __sinit (struct _reent *);
 #define CHECK_INIT(ptr) \
   do                                           \
     {                                          \
-      if ((ptr) && !(ptr)->__cleanup)          \
+      if ((ptr) && !_REENT_CLEANUP(ptr))       \
        __sinit (ptr);                          \
     }                                          \
   while (0)
index 866342613632c9b93f7f97ac5571e961c2cb1f5a..d0f4426c867b6ed072255b742b87cf8a88c9c832 100644 (file)
@@ -55,7 +55,7 @@ _cygtls::init_thread (void *x, DWORD (*func) (void *, void *))
       _REENT_INIT_PTR (&local_clib);
       stackptr = stack;
       altstack.ss_flags = SS_DISABLE;
-      if (_GLOBAL_REENT->__cleanup)
+      if (_REENT_CLEANUP(_GLOBAL_REENT))
        local_clib.__cleanup = _cygtls::cleanup_early;
     }
 
index 9cbb8908fe7fc26eb3f0b46e5983d97a7b840d7b..897a2fba3752cfab21d01539b9596167982a73ea 100644 (file)
@@ -800,7 +800,7 @@ main_thread_sinit ()
      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. */
-  _REENT->__cleanup = _cygtls::cleanup_early;
+  _REENT_CLEANUP(_REENT) = _cygtls::cleanup_early;
 }
 
 /* Take over from libc's crt0.o and start the application. Note the
This page took 0.133738 seconds and 5 git commands to generate.