From: Matthew Joyce <matthew.joyce@embedded-brains.de>
To: newlib@sourceware.org
Subject: [PATCH v2 11/11] Remove __sglue member for one configuration
Date: Thu, 12 May 2022 14:11:43 +0200 [thread overview]
Message-ID: <20220512121143.21473-12-matthew.joyce@embedded-brains.de> (raw)
In-Reply-To: <20220512121143.21473-1-matthew.joyce@embedded-brains.de>
From: Matt Joyce <matthew.joyce@embedded-brains.de>
Removed __sglue member of struct reent when
_REENT_GLOBAL_STDIO_STREAMS is defined.
---
newlib/libc/include/sys/reent.h | 8 ++++----
newlib/libc/reent/reent.c | 6 +++++-
newlib/libc/stdio/fcloseall.c | 5 +++++
newlib/libc/stdio/findfp.c | 9 ++++++++-
4 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index 2c0598a5d..5cdc67f68 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -696,19 +696,19 @@ struct _reent
/* These are here last so that __FILE can grow without changing the offsets
of the above members (on the off chance that future binary compatibility
would be broken otherwise). */
- struct _glue __sglue; /* root of glue chain */
# ifndef _REENT_GLOBAL_STDIO_STREAMS
+ struct _glue __sglue; /* root of glue chain */
__FILE __sf[3]; /* first three file descriptors */
# endif
};
#ifdef _REENT_GLOBAL_STDIO_STREAMS
#define _REENT_STDIO_STREAM(var, index) &__sf[index]
-#define _REENT_INIT_SGLUE(_ptr) { _NULL, 0, _NULL }
+#define _REENT_INIT_SGLUE(_ptr) /* nothing to initialize */
#define _REENT_INIT_SGLUE_ZEROED(_ptr) /* nothing to set */
#else
#define _REENT_STDIO_STREAM(var, index) &(var)->__sf[index]
-#define _REENT_INIT_SGLUE(_ptr) { _NULL, 3, &(_ptr)->__sf[0] }
+#define _REENT_INIT_SGLUE(_ptr) , { _NULL, 3, &(_ptr)->__sf[0] }
#define _REENT_INIT_SGLUE_ZEROED(_ptr) \
(_ptr)->__sglue._niobs = 3; \
(_ptr)->__sglue._iobs = &(_ptr)->__sf[0];
@@ -758,7 +758,7 @@ struct _reent
} \
}, \
_REENT_INIT_ATEXIT \
- _NULL, \
+ _NULL \
_REENT_INIT_SGLUE(&(var)) \
}
diff --git a/newlib/libc/reent/reent.c b/newlib/libc/reent/reent.c
index 5a04fcf62..70f1c5f45 100644
--- a/newlib/libc/reent/reent.c
+++ b/newlib/libc/reent/reent.c
@@ -27,9 +27,10 @@ int errno;
#endif
+#ifndef _REENT_GLOBAL_STDIO_STREAMS
/* Interim cleanup code */
-void
+static void
cleanup_glue (struct _reent *ptr,
struct _glue *glue)
{
@@ -39,6 +40,7 @@ cleanup_glue (struct _reent *ptr,
_free_r (ptr, glue);
}
+#endif
void
_reclaim_reent (struct _reent *ptr)
@@ -124,8 +126,10 @@ _reclaim_reent (struct _reent *ptr)
before the program exits, and who wants to wait for that? */
ptr->__cleanup (ptr);
+#ifndef _REENT_GLOBAL_STDIO_STREAMS
if (ptr->__sglue._next)
cleanup_glue (ptr, ptr->__sglue._next);
+#endif
}
/* Malloc memory not reclaimed; no good way to return memory anyway. */
diff --git a/newlib/libc/stdio/fcloseall.c b/newlib/libc/stdio/fcloseall.c
index f14c28d34..642dc7d94 100644
--- a/newlib/libc/stdio/fcloseall.c
+++ b/newlib/libc/stdio/fcloseall.c
@@ -59,7 +59,12 @@ Required OS subroutines: <<close>>, <<fstat>>, <<isatty>>, <<lseek>>,
int
_fcloseall_r (struct _reent *ptr)
{
+#ifdef _REENT_GLOBAL_STDIO_STREAMS
+ /* There are no thread-specific FILE objects */
+ return 0;
+#else
return _fwalk_sglue (ptr, _fclose_r, &ptr->__sglue);
+#endif
}
#ifndef _REENT_ONLY
diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c
index bf471369c..cad50d4e1 100644
--- a/newlib/libc/stdio/findfp.c
+++ b/newlib/libc/stdio/findfp.c
@@ -242,8 +242,9 @@ cleanup_stdio (struct _reent *ptr)
CLEANUP_FILE (ptr, ptr->_stdout);
if (ptr->_stderr != &__sf[2])
CLEANUP_FILE (ptr, ptr->_stderr);
-#endif
+#else
(void) _fwalk_sglue (ptr, CLEANUP_FILE, &ptr->__sglue);
+#endif
}
/*
@@ -326,21 +327,27 @@ __fp_unlock (struct _reent * ptr __unused, FILE * fp)
void
__fp_lock_all (void)
{
+#ifndef _REENT_GLOBAL_STDIO_STREAMS
struct _reent *ptr;
+#endif
__sfp_lock_acquire ();
+#ifndef _REENT_GLOBAL_STDIO_STREAMS
ptr = _REENT;
(void) _fwalk_sglue (ptr, __fp_lock, &ptr->__sglue);
+#endif
}
void
__fp_unlock_all (void)
{
+#ifndef _REENT_GLOBAL_STDIO_STREAMS
struct _reent *ptr;
ptr = _REENT;
(void) _fwalk_sglue (ptr, __fp_unlock, &ptr->__sglue);
+#endif
__sfp_lock_release ();
}
--
2.31.1
next prev parent reply other threads:[~2022-05-12 12:11 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-12 12:11 [PATCH v2 00/11] Decouple global file object list from _GLOBAL_REENT Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 01/11] Remove duplicate stdio initializations Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 02/11] Remove duplicate sglue initializations Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 03/11] Declare global __sf[] only once Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 04/11] Add two __sglue initialization macros Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 05/11] Remove __sinit_locks / __sinit_recursive_mutex Matthew Joyce
2022-05-12 13:25 ` Torbjorn SVENSSON
2022-05-12 13:51 ` Sebastian Huber
2022-05-12 12:11 ` [PATCH v2 06/11] Move __sglue initializations to __sfp() Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 07/11] Add CLEANUP_FILE define Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 08/11] Add stdio_exit_handler() Matthew Joyce
2022-05-12 19:11 ` Corinna Vinschen
2022-05-17 8:36 ` Takashi Yano
2022-05-17 10:13 ` Sebastian Huber
2022-05-12 12:11 ` [PATCH v2 09/11] stdio: Replace _fwalk_reent() with _fwalk_sglue() Matthew Joyce
2022-05-12 12:11 ` [PATCH v2 10/11] Add global __sglue object for all configurations Matthew Joyce
2022-05-12 12:11 ` Matthew Joyce [this message]
2022-05-12 19:09 ` [PATCH v2 11/11] Remove __sglue member for one configuration Corinna Vinschen
2022-05-12 19:14 ` [PATCH v2 00/11] Decouple global file object list from _GLOBAL_REENT Corinna Vinschen
2022-05-12 19:44 ` Corinna Vinschen
2022-05-13 5:44 ` Sebastian Huber
2022-05-13 7:53 ` Corinna Vinschen
2022-05-13 10:54 ` Sebastian Huber
2022-05-13 11:20 ` Corinna Vinschen
2022-05-13 8:03 ` Corinna Vinschen
2022-05-13 11:20 ` Sebastian Huber
2022-05-13 11:30 ` Corinna Vinschen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220512121143.21473-12-matthew.joyce@embedded-brains.de \
--to=matthew.joyce@embedded-brains.de \
--cc=newlib@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).