From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dedi548.your-server.de (dedi548.your-server.de [85.10.215.148]) by sourceware.org (Postfix) with ESMTPS id 794B73857BBE for ; Tue, 21 Jun 2022 12:49:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 794B73857BBE Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embedded-brains.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embedded-brains.de Received: from sslproxy02.your-server.de ([78.47.166.47]) by dedi548.your-server.de with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1o3dK5-0003ZZ-SK for newlib@sourceware.org; Tue, 21 Jun 2022 14:49:38 +0200 Received: from [82.100.198.138] (helo=mail.embedded-brains.de) by sslproxy02.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o3dK6-000M7f-2K for newlib@sourceware.org; Tue, 21 Jun 2022 14:49:38 +0200 Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id CA7C64800AA for ; Tue, 21 Jun 2022 14:49:37 +0200 (CEST) Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Aq33RtiF3pyc for ; Tue, 21 Jun 2022 14:49:34 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id 26A744801E0 for ; Tue, 21 Jun 2022 14:49:34 +0200 (CEST) X-Virus-Scanned: amavisd-new at zimbra.eb.localhost Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id IdiCsC0ANBnp for ; Tue, 21 Jun 2022 14:49:34 +0200 (CEST) Received: from zimbra.eb.localhost (unknown [192.168.96.242]) by mail.embedded-brains.de (Postfix) with ESMTPSA id F13E14800AD for ; Tue, 21 Jun 2022 14:49:33 +0200 (CEST) From: Sebastian Huber To: newlib@sourceware.org Subject: [PATCH 00/14] Add --enable-newlib-reent-thread-local option Date: Tue, 21 Jun 2022 14:49:17 +0200 Message-Id: <20220621124931.36450-1-sebastian.huber@embedded-brains.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authenticated-Sender: smtp-embedded@poldinet.de X-Virus-Scanned: Clear (ClamAV 0.103.6/26579/Tue Jun 21 10:15:30 2022) X-Spam-Status: No, score=-5.6 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Jun 2022 12:49:41 -0000 By default, Newlib uses a huge object of type struct _reent to store thread-specific data. This object is returned by __getreent() if the __DYNAMIC_REENT__ Newlib configuration option is defined. The reentrancy structure contains for example errno and the standard inpu= t, output, and error file streams. This means that if an application only u= ses errno it has a dependency on the file stream support even if it does not = use it. This is an issue for lower end targets and applications which need t= o qualify the software according to safety standards (for example ECSS-E-ST= -40C, ECSS-Q-ST-80C, IEC 61508, ISO 26262, DO-178, DO-330, DO-333). If the new _REENT_THREAD_LOCAL configuration option is enabled, then stru= ct _reent is replaced by dedicated thread-local objects for each struct _ree= nt member. The thread-local objects are defined in translation units which = use the corresponding object. Patches 1 to 13 contain no functional changes (hopefully). They just int= roduce macros to be able to use struct _reent members or thread-local objects depending on the new _REENT_THREAD_LOCAL option. Patch 14 adds the new configuration option. Matt Joyce (13): Define _REENT_EMERGENCY(ptr) only once Add _REENT_ERRNO(ptr) Add _REENT_STDIN(ptr) Add _REENT_STDOUT(ptr) Add _REENT_STDERR(ptr) Add _REENT_INC(ptr) Add _REENT_LOCALE(ptr) Add _REENT_CLEANUP(ptr) Add _REENT_CVTLEN(ptr) Add _REENT_CVTBUF(ptr) Add _REENT_SIG_FUNC(ptr) Add _REENT_IS_NULL() Add --enable-newlib-reent-thread-local option Sebastian Huber (1): Move content in newlib/README | 8 ++ newlib/configure | 21 ++++ newlib/configure.ac | 15 +++ newlib/libc/ctype/wctrans.c | 2 +- newlib/libc/ctype/wctype.c | 2 +- newlib/libc/errno/errno.c | 8 +- newlib/libc/include/stdio.h | 12 +- newlib/libc/include/sys/config.h | 6 + newlib/libc/include/sys/errno.h | 8 +- newlib/libc/include/sys/reent.h | 132 +++++++++++++++++++--- newlib/libc/include/wchar.h | 8 +- newlib/libc/locale/locale.c | 4 + newlib/libc/locale/setlocale.h | 4 +- newlib/libc/locale/uselocale.c | 4 +- newlib/libc/machine/cris/sys/errno.h | 2 +- newlib/libc/machine/powerpc/strtosfix16.c | 10 +- newlib/libc/machine/powerpc/strtosfix32.c | 10 +- newlib/libc/machine/powerpc/strtosfix64.c | 10 +- newlib/libc/machine/powerpc/strtoufix16.c | 10 +- newlib/libc/machine/powerpc/strtoufix32.c | 10 +- newlib/libc/machine/powerpc/strtoufix64.c | 10 +- newlib/libc/machine/spu/c99ppe.h | 8 +- newlib/libc/machine/spu/stdio.c | 16 +-- newlib/libc/machine/spu/sys/errno.h | 2 +- newlib/libc/reent/closer.c | 2 +- newlib/libc/reent/execr.c | 6 +- newlib/libc/reent/fcntlr.c | 2 +- newlib/libc/reent/fstat64r.c | 2 +- newlib/libc/reent/fstatr.c | 2 +- newlib/libc/reent/gettimeofdayr.c | 2 +- newlib/libc/reent/impure.c | 4 + newlib/libc/reent/isattyr.c | 2 +- newlib/libc/reent/linkr.c | 2 +- newlib/libc/reent/lseek64r.c | 2 +- newlib/libc/reent/lseekr.c | 2 +- newlib/libc/reent/mkdirr.c | 2 +- newlib/libc/reent/open64r.c | 2 +- newlib/libc/reent/openr.c | 2 +- newlib/libc/reent/readr.c | 2 +- newlib/libc/reent/reent.c | 18 +-- newlib/libc/reent/renamer.c | 2 +- newlib/libc/reent/sbrkr.c | 2 +- newlib/libc/reent/signalr.c | 2 +- newlib/libc/reent/stat64r.c | 2 +- newlib/libc/reent/statr.c | 2 +- newlib/libc/reent/unlinkr.c | 2 +- newlib/libc/reent/writer.c | 2 +- newlib/libc/signal/signal.c | 36 +++--- newlib/libc/stdio/asniprintf.c | 4 +- newlib/libc/stdio/asnprintf.c | 4 +- newlib/libc/stdio/fdopen.c | 2 +- newlib/libc/stdio/fflush.c | 18 +-- newlib/libc/stdio/fileno.c | 2 +- newlib/libc/stdio/fileno_u.c | 2 +- newlib/libc/stdio/findfp.c | 25 ++-- newlib/libc/stdio/flags.c | 2 +- newlib/libc/stdio/fmemopen.c | 14 +-- newlib/libc/stdio/fopencookie.c | 14 +-- newlib/libc/stdio/fpurge.c | 2 +- newlib/libc/stdio/freopen.c | 4 +- newlib/libc/stdio/fseeko.c | 4 +- newlib/libc/stdio/ftell.c | 2 +- newlib/libc/stdio/ftello.c | 2 +- newlib/libc/stdio/funopen.c | 16 +-- newlib/libc/stdio/fvwrite.c | 4 +- newlib/libc/stdio/local.h | 3 +- newlib/libc/stdio/mktemp.c | 14 +-- newlib/libc/stdio/nano-vfprintf.c | 10 +- newlib/libc/stdio/open_memstream.c | 14 +-- newlib/libc/stdio/perror.c | 2 +- newlib/libc/stdio/refill.c | 2 +- newlib/libc/stdio/setvbuf.c | 2 +- newlib/libc/stdio/sniprintf.c | 8 +- newlib/libc/stdio/snprintf.c | 8 +- newlib/libc/stdio/swprintf.c | 8 +- newlib/libc/stdio/tmpfile.c | 6 +- newlib/libc/stdio/tmpnam.c | 13 ++- newlib/libc/stdio/vasniprintf.c | 2 +- newlib/libc/stdio/vasnprintf.c | 2 +- newlib/libc/stdio/vfprintf.c | 12 +- newlib/libc/stdio/vfscanf.c | 2 +- newlib/libc/stdio/vfwprintf.c | 4 +- newlib/libc/stdio/vfwscanf.c | 2 +- newlib/libc/stdio/vsniprintf.c | 4 +- newlib/libc/stdio/vsnprintf.c | 4 +- newlib/libc/stdio/vswprintf.c | 4 +- newlib/libc/stdio/wsetup.c | 2 +- newlib/libc/stdio64/fdopen64.c | 2 +- newlib/libc/stdio64/freopen64.c | 4 +- newlib/libc/stdio64/fseeko64.c | 6 +- newlib/libc/stdio64/ftello64.c | 2 +- newlib/libc/stdio64/tmpfile64.c | 6 +- newlib/libc/stdlib/__adjust.c | 4 +- newlib/libc/stdlib/dtoa.c | 5 + newlib/libc/stdlib/ecvtbuf.c | 25 ++-- newlib/libc/stdlib/l64a.c | 4 + newlib/libc/stdlib/lcong48.c | 8 ++ newlib/libc/stdlib/mblen.c | 4 + newlib/libc/stdlib/mbrlen.c | 4 + newlib/libc/stdlib/mbrtowc.c | 8 +- newlib/libc/stdlib/mbsnrtowcs.c | 6 +- newlib/libc/stdlib/mbtowc.c | 4 + newlib/libc/stdlib/mbtowc_r.c | 34 +++--- newlib/libc/stdlib/mprec.c | 5 + newlib/libc/stdlib/rand.c | 4 + newlib/libc/stdlib/strtod.c | 10 +- newlib/libc/stdlib/strtoimax.c | 4 +- newlib/libc/stdlib/strtol.c | 2 +- newlib/libc/stdlib/strtoll.c | 2 +- newlib/libc/stdlib/strtoul.c | 2 +- newlib/libc/stdlib/strtoull.c | 2 +- newlib/libc/stdlib/strtoumax.c | 4 +- newlib/libc/stdlib/wcrtomb.c | 8 +- newlib/libc/stdlib/wcsnrtombs.c | 6 +- newlib/libc/stdlib/wcstod.c | 4 +- newlib/libc/stdlib/wcstoimax.c | 4 +- newlib/libc/stdlib/wcstol.c | 2 +- newlib/libc/stdlib/wcstoll.c | 2 +- newlib/libc/stdlib/wcstoul.c | 2 +- newlib/libc/stdlib/wcstoull.c | 4 +- newlib/libc/stdlib/wcstoumax.c | 4 +- newlib/libc/stdlib/wctomb.c | 4 + newlib/libc/stdlib/wctomb_r.c | 18 +-- newlib/libc/string/strerror.c | 2 +- newlib/libc/string/strsignal.c | 4 + newlib/libc/string/strtok.c | 4 + newlib/libc/sys/arm/syscalls.c | 3 +- newlib/libc/time/asctime.c | 4 + newlib/libc/time/gmtime.c | 4 + newlib/libm/math/w_lgamma.c | 4 + newlib/newlib.hin | 4 + winsup/cygwin/cygerrno.h | 4 +- winsup/cygwin/cygtls.cc | 2 +- winsup/cygwin/dcrt0.cc | 2 +- winsup/cygwin/errno.cc | 4 +- winsup/cygwin/strfuncs.cc | 12 +- winsup/cygwin/syscalls.cc | 4 +- 137 files changed, 619 insertions(+), 332 deletions(-) --=20 2.35.3