Commit Graph

14 Commits

Author SHA1 Message Date
Matt Joyce ea99f21ce6 Add --enable-newlib-reent-thread-local option
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 input,
output, and error file streams.  This means that if an application only uses
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 to
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 struct
_reent is replaced by dedicated thread-local objects for each struct _reent
member.  The thread-local objects are defined in translation units which use
the corresponding object.
2022-07-13 06:55:46 +02:00
Yaakov Selkowitz 9087163804 ansification: remove _DEFUN
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2018-01-17 11:47:26 -06:00
Yaakov Selkowitz 6783860a2e ansification: remove _AND
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2018-01-17 11:47:05 -06:00
Yaakov Selkowitz 352c8f2f0d string: remove TRAD_SYNOPSIS
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2017-12-01 03:41:52 -06:00
Pat Pannuto e02866a1b4 Add missing headers to fix implicit function defns
A few files were missing headers for memset/malloc, likely missed
because the files don't directly call the functions, rather they
come in via macros in libc/include/sys/reent.h:

    #define _REENT_CHECK(var, what, type, size, init) do { \
      struct _reent *_r = (var); \
      if (_r->what == NULL) { \
        _r->what = (type)malloc(size); \

    #define _REENT_CHECK_ASCTIME_BUF(var) \
      _REENT_CHECK(var, _asctime_buf, char *, _REENT_ASCTIME_SIZE, \
        memset((var)->_asctime_buf, 0, _REENT_ASCTIME_SIZE))

Without these fixes, implicit function signatures are provided,
which gcc warns could cause aliasing issues down the line:

    ../../../../../../../newlib-2.5.0/newlib/libc/time/asctime.c:62:3: warning: type of 'memset' does not match original declaration [-Wlto-type-mismatch]
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/string.h:29:7: note: return value type mismatch
     _PTR  _EXFUN(memset,(_PTR, int, size_t));
           ^
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/string.h:29:7: note: 'memset' was previously declared here
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/string.h:29:7: note: code may be misoptimized unless -fno-strict-aliasing is used
    ../../../../../../../newlib-2.5.0/newlib/libc/time/asctime.c:62:3: warning: type of 'malloc' does not match original declaration [-Wlto-type-mismatch]
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: return value type mismatch
     extern _PTR malloc _PARAMS ((size_t));
                 ^
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: 'malloc' was previously declared here
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: code may be misoptimized unless -fno-strict-aliasing is used

    ../../../../../../../newlib-2.5.0/newlib/libc/time/lcltime.c:58:3: warning: type of 'malloc' does not match original declaration [-Wlto-type-mismatch]
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: return value type mismatch
     extern _PTR malloc _PARAMS ((size_t));
                 ^
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: 'malloc' was previously declared here
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: code may be misoptimized unless -fno-strict-aliasing is used

    ../../../../../../../newlib-2.5.0/newlib/libc/string/strsignal.c:70:3: warning: type of 'malloc' does not match original declaration [-Wlto-type-mismatch]
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: return value type mismatch
     extern _PTR malloc _PARAMS ((size_t));
                 ^
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: 'malloc' was previously declared here
    /Volumes/code/external/newlib-cygwin/newlib/libc/include/malloc.h:37:13: note: code may be misoptimized unless -fno-strict-aliasing is used

Including the proper headers elminates the implicit function
signatures and these warnings.
2017-01-16 10:14:28 +01:00
Jeff Johnston 72e18faf62 Add missing semicolons to prototypes.
* libc/stdio/fseek.c: Add missing semicolons to prototypes in
        SYNOPSIS.
        * libc/stdio/fwide.c: Ditto.
        * libc/stdio64/fseeko64.c: Ditto.
        * libc/string/strtok.c: Ditto.
        * libc/string/wcstok.c: Ditto.
        * libm/math/w_cosh.c: Ditto.
        * libm/math/w_fmod.c:  Ditto.
        * libm/mathfp/s_cosh.c: Ditto.
        * libm/mathfp/s_fmod.c: Ditto.
2015-11-02 16:34:49 -05:00
Corinna Vinschen b143d094ee * libc/sys/linux/include/netdb.h, libc/sys/linux/net/getaddrinfo.c,
libc/sys/linux/net/getnameinfo.c: Add restrict keyword to getnameinfo()
	and getaddrinfo() to increase standards compliance and match glibc.

	* libc/include/string.h, libc/string/memccpy.c, libc/string/memcpy.c,
	libc/string/stpcpy.c, libc/string/stpncpy.c, libc/string/strcat.c,
	libc/string/strncat.c, libc/string/strncpy.c, libc/string/strtok.c,
	libc/string/strtok_r.c, libc/string/strxfrm.c
	libc/machine/microblaze/strcpy.c, libc/machine/xscale/memcpy.c,
	libc/machine/cris/memcpy.c: Add __restrict to prototype to
	increase standards compliance.
2013-07-23 07:05:31 +00:00
Jeff Johnston b334e6660a 2013-04-29 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libc/stdio/local.h (CHECK_INIT): Evaluate argument only once.
	(CHECK_STD_INIT): Likewise.
	* libc/stdio/fgetc.c (fgetc): Use local variable for _REENT.
	* libc/stdio/fgetwc.c (fwgetc): Likewise.
	* libc/stdio/fgetws.c (fgetws): Likewise.
	* libc/stdio/fputc.c (fputc): Likewise.
	* libc/stdio/fputwc.c (fputwc): Likewise.
	* libc/stdio/fputws.c (fputws): Likewise.
	* libc/stdio/getc.c (getc): Likewise.
	* libc/stdio/getchar.c (_getchar_r): Likewise.
	* libc/stdio/putc.c (putc): Likewise.
	* libc/stdio/putchar.c (putchar): Likewise.
	* libc/stdio/scanf.c (scanf): Likewise.
	* libc/stdio/setvbuf.c (setvbuf): Likewise.
	* libc/stdio/ungetwc.c (ungetwc): Likewise.
	* libc/stdio/vfscanf.c (VFSCANF): Likewise.
	* libc/stdio/vfwscanf.c (VFWSCANF): Likewise.
	* libc/stdio/viprintf.c (viprintf): Likewise.
	* libc/stdio/viscanf.c (viscanf): Likewise.
	* libc/stdio/vprintf.c (vprintf): Likewise.
	* libc/stdio/vscanf.c (vscanf): Likewise.
	* libc/stdio/vwprintf.c (vwprintf): Likewise.
	* libc/stdio/vwscanf.c (vwscanf): Likewise.
	* libc/stdio/wscanf.c (wscanf): Likewise.
	* libc/stdlib/ecvtbuf.c (fcvtbuf): Likewise.
	(fcvtbuf): Likewise.
	(ecvtbuf): Likewise.
	(ecvtbuf): Likewise.
	* libc/stdlib/mblen.c (mblen): Likewise.
	* libc/stdlib/mbrlen.c (mbrlen): Likewise.
	* libc/stdlib/mbrtowc.c (mbrtowc): Likewise.
	* libc/stdlib/mbtowc.c (mbtowc): Likewise.
	* libc/stdlib/rand.c (srand): Likewise.
	(rand): Likewise.
	* libc/stdlib/wcrtomb.c (wcrtomb): Likewise.
	* libc/stdlib/wctob.c (wctob): Likewise.
	* libc/stdlib/wctomb.c (wctomb): Likewise.
	* libc/string/strtok.c (strtok): Likewise.
	* libc/time/asctime.c (asctime): Likewise.
	* libc/time/gmtime.c (gmtime): Likewise.
	* libc/time/lcltime.c (lcltime): Likewise.
2013-04-29 21:06:23 +00:00
Jeff Johnston 239c2bf93e 2005-10-28 Bob Wilson <bob.wilson@acm.org>
* libc/misc/unctrl.c: Replace FUNCTION description.
        * libc/signal/signal.c: Remove documentation for raise and  _raise_r.
        * libc/stdio/getdelim.c: Fix spelling errors.
        * libc/stdio/getw.c: Put RETURNS on a separate line.  Fix  punctuation.
        * libc/stdio/putw.c: Likewise.
        * libc/stdlib/a64l.c: Fix formatting, spelling and  punctuation in
        documentation.
        * libc/stdlib/assert.c: Do not capitalize FUNCTION description.
        * libc/stdlib/efgcvt.c: Add spaces to FUNCTION description.
        * libc/stdlib/envlock.c: Use em-dash in FUNCTION description.
        * libc/stdlib/mlock.c: Likewise.
        * libc/stdlib/mstats.c: Likewise.
        * libc/time/tzlock.c: Likewise.
        * libc/stdlib/rand.c: Use "multi-threaded" and "thread-safe"  in NOTES.
        * libc/stdlib/rand48.c: Remove extra space in FUNCTION  description
        and hyphenate "pseudo-random".
        * libc/string/bcmp.c: Remove extra blank lines in  documentation.
        * libc/string/strncat.c: Likewise.
        * libc/string/memchr.c: Remove extra ">" character in  documentation.
        * libc/string/strcspn.c: Use "characters" instead of "chars".
        * libc/string/strpbrk.c: Likewise.
        * libc/string/strerror_r.c: Capitalize "GNU".
        * libc/string/strnlen.c: Likewise.
        * libc/string/strtok.c: Fix formatting, spelling and  punctuation in
        documentation.  Use "multi-threaded" and "thread-safe" in  NOTES.
        * libc/string/wcscat.c: Split PORTABILITY into two paragraphs.
        * libc/string/wcschr.c: Likewise.
        * libc/string/wcscmp.c: Likewise.
        * libc/string/wcscpy.c: Likewise.
        * libc/string/wcscspn.c: Likewise.
        * libc/string/wcslen.c: Likewise.
        * libc/string/wcsncat.c: Likewise.
        * libc/string/wcsncmp.c: Likewise.
        * libc/string/wcsncpy.c: Likewise.
        * libc/string/wcsnlen.c: Likewise.
        * libc/string/wcspbrk.c: Likewise.
        * libc/string/wcsrchr.c: Likewise.
        * libc/string/wcsspn.c: Likewise.
        * libc/string/wmemchr.c: Likewise.
        * libc/string/wmemcmp.c: Likewise.
        * libc/string/wmemcpy.c: Likewise.
        * libc/string/wmemset.c: Likewise.
        * libc/string/wmemmove.c: Likewise.  Also fix FUNCTION  description.
        * libc/string/wcswidth.c: Formatting and punctuation in  documentation.
        * libc/string/wcwidth.c: Likewise.
        * libm/common/s_modf.c: Remove extra period from documentation.
        * libm/math/s_isnan.c: Fix formatting, grammar and  punctuation in
        documentation.
        * libm/mathfp/s_isnan.c: Likewise.
        * libm/math/s_ldexp.c: Fix punctuation.
        * libm/mathfp/s_ldexp.c: Likewise.
        * libm/math/w_log.c: Likewise.
        * libm/mathfp/s_logarithm.c: Likewise.
        * libm/math/w_j0.c: Add spaces to FUNCTION description.
        * libm/mathfp/w_jn.c: Likewise.
2005-10-28 21:21:08 +00:00
Jeff Johnston 7a364eb364 2002-05-23 Jeff Johnston <jjohnstn@redhat.com>
* libc/string/Makefile.am: Add support for strsep.c.
        * libc/string/Makefile.in: Regenerated.
        * libc/string/strsep.c: New file.
        * libc/string/strtok.c: Change to call __strtok_r service routine.
        * libc/string/strtok_r.c: Add __strtok_r routine which takes
        additional flag parameter regarding whether to skip leading delimeters.
        Change strtok_r to call __strtok_r.
2002-05-24 00:13:57 +00:00
Jeff Johnston d4dca0e42e 2002-04-01 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/sys/reent.h (_REENT_INIT_PTR): New macro for
        initializing a struct _reent that has been dynamically allocated.
        (_REENT_CHECK_MISC): New macro that checks _misc struct for
        _REENT_SMALL and does nothing otherwise.
        (_REENT_STRTOK_LAST): New macro for reentrant strtok.
        (_REENT_MBLEN_STATE): New macro for reentrant mblen.
        (_REENT_MBTOWC_STATE): New macro for reentrant mbtowc.
        (_REENT_WCTOMB_STATE): New macro for reentrant wctomb.
        [_REENT_SMALL](struct _misc_reent): New structure containing
        miscellaneous reentrant areas needed by newlib.
        [_REENT_SMALL](struct _reent): Add _misc pointer.
        [_REENT_SMALL](_REENT_INIT_MISC): New macro.
        * libc/string/strtok (strtok): Change to use _REENT_CHECK_MISC
        and _REENT_STRTOK_LAST macros.
        * libc/stdlib/mblen (mblen): Change to use _REENT_CHECK_MISC
        and _REENT_MBLEN_STATE macros.
        * libc/stdlib/mbtowc (mbtowc): Change to use _REENT_CHECK_MISC
        and _REENT_MBTOWC_STATE macros.
        * libc/stdlib/wctomb (wctomb): Change to use _REENT_CHECK_MISC
        and _REENT_WCTOMB_STATE macros.
2002-04-01 23:06:21 +00:00
Matthew Green 8195aff714 * implement a new `struct _reent' that is significantly smaller. use this
if _REENT_SMALL is defined in config.h.  define this for xstormy16.
2002-02-03 09:24:18 +00:00
Jeff Johnston 19ca46d5fb 2001-03-02 Jeff Johnston <jjohnstn@redhat.com>
* libc/string/strtok.c: Add #undef of __STRICT_ANSI__ so prototype
        of strtok_r is always defined.
2001-03-02 23:16:33 +00:00
Christopher Faylor 8a0efa53e4 import newlib-2000-02-17 snapshot 2000-02-17 19:39:52 +00:00