Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-12-30newlib: Regenerate autotools filesJon Turney
2021-12-30newlib: Remove automake option 'cygnus'Jon Turney
The 'cygnus' option was removed from automake 1.13 in 2012, so the presence of this option prevents that or a later version of automake being used. A check-list of the effects of '--cygnus' from the automake 1.12 documentation, and steps taken (where possible) to preserve those effects (See also this thread [1] for discussion on that): [1] https://lists.gnu.org/archive/html/bug-automake/2012-03/msg00048.html 1. The foreign strictness is implied. Already present in AM_INIT_AUTOMAKE in newlib/acinclude.m4 2. The options no-installinfo, no-dependencies and no-dist are implied. Already present in AM_INIT_AUTOMAKE in newlib/acinclude.m4 Future work: Remove no-dependencies and any explicit header dependencies, and use automatic dependency tracking instead. Are there explicit rules which are now redundant to removing no-installinfo and no-dist? 3. The macro AM_MAINTAINER_MODE is required. Already present in newlib/acinclude.m4 Note that maintainer-mode is still disabled by default. 4. Info files are always created in the build directory, and not in the source directory. This appears to be an error in the automake documentation describing '--cygnus' [2]. newlib's info files are generated in the source directory, and no special steps are needed to keep doing that. [2] https://lists.gnu.org/archive/html/bug-automake/2012-04/msg00028.html 5. texinfo.tex is not required if a Texinfo source file is specified. (The assumption is that the file will be supplied, but in a place that automake cannot find.) This effect is overriden by an explicit setting of the TEXINFO_TEX variable (the directory part of which is fed into texi2X via the TEXINPUTS environment variable). 6. Certain tools will be searched for in the build tree as well as in the user's PATH. These tools are runtest, expect, makeinfo and texi2dvi. For obscure automake reasons, this effect of '--cygnus' is not active for makeinfo in newlib's configury. However, there appears to be top-level configury which selects in-tree runtest, expect and makeinfo, if present. So, if that works as it appears, this effect is preserved. If not, this may cause problem if anyone is building those tools in-tree. This effect is not preserved for texi2dvi. This may cause problems if anyone is building texinfo in-tree. If needed, explicit checks for those tools looking in places relative to $(top_srcdir)/../ as well as in PATH could be added. 7. The check target doesn't depend on all. This effect is not preseved. The check target now depends on the all target. This concern seems somewhat academic given the current state of the testsuite. Also note that this doesn't touch libgloss.
2021-12-30newlib: Regenerate autotools filesJon Turney
2021-12-30newlib: Make effects of 'cygnus' explicitJon Turney
Add all the effects of 'cygnus' for which there exists an explicit way to request that behaviour: * Implied foreign strictness and options no-installinfo, no-dependencies and no-dist are added to AM_INIT_AUTOMAKE in newlib/acinclude.m4. * macro AM_MAINTAINER_MODE is added to newlib/acinclude.m4. * For the implied TEXINFO_TEX of '$(top_srcdir)/../texinfo/texinfo.tex', an explicit TEXINFO_TEX is always relative to $(srcdir), so write the same pathname in that form. This is to prepare for the removal of the automake option '--cygnus'.
2021-12-10newlib: Regenerate all autotools filesJon Turney
Regenerate all aclocal.m4, configure and Makefile.in files.
2021-12-03ldtoa: Import gdtoa from OpenBSD.Takashi Yano
- This patch uses gdtoa imported from OpenBSD if newlib configure option "--enable-newlib-use-gdtoa=no" is NOT specified. gdtoa provides more accurate output and faster conversion than legacy ldtoa, while it requires more heap memory.
2021-12-03Revert "ctype: use less short names in public header"Corinna Vinschen
This patch fixed a problem which isn't in newlib, but in projects incorrectly using symbols from the reserved namespace. This reverts commit 3ba1bd0d9dbc015c14a0aaafcef042f706d1249a.
2021-11-29stdio: Fix issue of printing "%La" format with large exp part.Takashi Yano
- Currently, printf("%La\n", 1e1000L) crashes with segv due to lack of frexpl() function. With this patch, frexpl() function has been implemented in libm to solve this issue. Addresses: https://sourceware.org/pipermail/newlib/2021/018718.html
2021-11-26ldtoa: Fix insufficient valid output digits for "%f" format.Takashi Yano
- If the number has large integer part and small fraction part is specified in output format, e.g. printf("%.3f", sqrt(2)*1e60);, valid output digits were insufficient. This patch fixes the issue.
2021-11-22ldtoa: don't restrict outbuf size to ndigitsCorinna Vinschen
https://cygwin.com/pipermail/cygwin/2021-November/249930.html reported a regression introduce by using a dynamically sized local char array in favor of a statically sized array. Fix this by reverting to a statically sized array, using a small buffer on the stack for a reasonable number of requested digits, a big mallocated buffer otherwise. This should work for small targets as well, given that malloc is used in printf anyway right now. This is *still* hopefully just a temporary measure, unless somebody actually provides a new ldtoa. Fixes: 4d90e53359145 ("ldtoa: fix dropping too many digits from output") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-11-16cleanup Unicode data files after generating updated tablesThomas Wolff
2021-11-16update to Unicode 14.0Thomas Wolff
2021-11-16change _COMPILING_NEWLIB to _LIBCMike Frysinger
Use the same name as glibc & gnulib to indicate "newlib itself is being compiled". This also harmonizes the codebase a bit in that _LIBC was already used in places instead of _COMPILING_NEWLIB. Building for bfin-elf, mips-elf, and x86_64-pc-cygwin produces the same object code.
2021-11-13newlib: ignore _FORTIFY_SOURCE when building newlibMike Frysinger
Some distros enable _FORTIFY_SOURCE by default which upsets building newlib which itself implements the logic for this define. For example, building gets.c fails because the includes set up a gets() macro which expands in the definition. Since newlib isn't prepared to build itself with _FORTIFY_SOURCE, and it's not clear if it's even useful, ignore it when building the code. This also matches what glibc is doing.
2021-11-12define _COMPILING_NEWLIB for all targets when compilingMike Frysinger
The _COMPILING_NEWLIB symbol is for declaring "the code is being compiled for newlib itself" so headers can change behavior vs the header being used by users (who should get the normal clean API). Unfortunately, this symbol is defined inconsistently leading to it only being useful for a few subsections of the tree. Pull it out so that it's defined all the time for all targets.
2021-11-12ctype: use less short names in public headerMike Frysinger
We're seeing a build failure in GNU sim code which is using _P locally but the ctype.h define clashes with it. Rename these to use the same symbols that glibc does. They're a bit more verbose, but seems likely that we'll have fewer conflicts if glibc isn't seeing them. However, these shortnames are still used internally by ctype modules to produce pretty concise source code, so move the short names to the internal ctype_.h where short name conflicts shouldn't show up.
2021-11-10newlib: mips: delete glibc-specific logicMike Frysinger
This code looks like it's written to be copied & pasted between diff C libraries and relies on _LIBC only being used with glibc. This will break when newlib changes from _COMPILING_NEWLIB to _LIBC, so delete the glibc-specific logic ahead of time.
2021-11-06libgloss/newlib: update configure.ac in Makefile.in filesMike Frysinger
The maintainer rules refer to configure.in directly, so update that after renaming all the configure.ac files.
2021-11-04ldtoa: fix dropping too many digits from outputCorinna Vinschen
ldtoa cuts the number of digits it returns based on a computation of number of supported bits (144) divide by log10(2). Not only is the integer approximation of log10(2) ~= 8/27 missing a digit here, it also fails to take really small double and long double values into account. Allow for the full potential precision of long double values. At the same time, change the local string array allocation to request only as much bytes as necessary to support the caller-requested number of digits, to keep the stack size low on small targets. In the long run a better fix would be to switch to gdtoa, as the BSD variants, as well as Mingw64 do. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-10-27Unconditionally declare strsignalcygwin-3_3_0-releaseChristian Biesinger via Newlib
Currently, newlib does not declare strsignal if DEFS_H is defined, ostensibly to work around a gdb bug. However, gdb itself compiles even with this ifndef removed, and this makes sim (another part of gdb) fail to compile. Since it is not clear exactly what issue this was working around, this patch just replaces that ifdef with the correct check, i.e. __POSIX_VISIBLE >= 200809.
2021-10-13string: Fix buffer overrun in picolibc/newlib/libc/string/strrchr.c (#184)Keith Packard
Reported by prodisDown: In picolibc/newlib/libc/string/strrchr.c if (i) { while ((s=strchr(s, i))) { last = s; s++; } } else { last = strchr(s, i); } Value (for example 0xFFFFFF00) in if (i) can pass test and then be typecasted to char inside strchr(). Then s++ and then buffer overrun. It can be fixed by preventive typecast i = (int) (char) i; or typecasting inside expression if ((char) i). Fixed by casting to char. Signed-off-by: Keith Packard <keithp@keithp.com>
2021-10-07sys/tree.h: Red child with black sibling rotationsSebastian Huber
Add specialized rotations RB_RED_ROTATE_LEFT() and RB_RED_ROTATE_RIGHT() which may be used if we rotate a red child which has a black sibling. Such a red node must have at least two child nodes so that the following red-black tree invariant is fulfilled: Every path from a given node to any of its descendant NULL nodes goes through the same number of black nodes. PARENT / \ BLACK RED / \ BLACK BLACK
2021-10-05sys/tree.h: Add parent rotationsSebastian Huber
Add specialized rotations RB_PARENT_ROTATE_LEFT() and RB_PARENT_ROTATE_RIGHT() which may be used if the parent node exists and the direction of the child is known. The specialized rotations are derived from RB_ROTATE_LEFT() and RB_ROTATE_RIGHT() where the RB_SWAP_CHILD() was replaced by a simple assignment.
2021-10-05sys/tree.h: Simplify chain of conditionsSebastian Huber
In RB_GENERATE_REMOVE_COLOR() simplify a chain of conditions of the following pattern if (x) { ... } else if (!x) { ... } to if (x) { ... } else { ... }
2021-10-05sys/tree.h: Simplify loop conditionSebastian Huber
We have #define RB_ISRED(elm, field) \ ((elm) != NULL && RB_COLOR(elm, field) == RB_RED) So, the RB_ISRED() contains an implicit check for NULL. In RB_GENERATE_REMOVE_COLOR() the "elm" pointer cannot be NULL in the while condition. Use RB_COLOR(elm) == RB_BLACK instead.
2021-09-15newlib: sig2str: use __restrictMike Frysinger
This matches the header prototype style and most of newlib, and fixes building with older versions of gcc which only accept the __ form.
2021-09-13libgloss/newlib: rename configure.in to configure.acMike Frysinger
The .in name has been deprecated for a long time in favor of .ac.
2021-09-06nano-malloc: Fix redefined compilation warningTorbjorn SVENSSON via Newlib
When newlib is configured with --enable-newlib-reent-check-verify, the assert macro is already defined in the nano-mallocr.c compile unit. Contributed by STMicroelectronics Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@st.com>
2021-09-03strstr: avoid warningsCorinna Vinschen
unused function warning for two_way_short_needle, different char type warnings for standard string functions Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-09-03nftw: fix thread cancellation supportCorinna Vinschen
_STDIO_WITH_THREAD_CANCELLATION_SUPPORT was never defined. Include ../stdio/local.h to get the right definition per target. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-08-27libc/include/sys/signal.h: Change __STDINT_EXP() to __SIZEOF_INT__Joel Sherrill
__STDINT_EXP() is provided by newlib but not by stdint-gcc.h. stdint-gcc.h is used when the GCC argument -ffreestanding is used and this results in this file not compiling.
2021-08-25nvptx: Emulate clock and other machine stubs.Roger Sayle
This patch to the libc/machine/nvptx port of newlib implements an approximation of "clock" and provides some additional stub routines. These changes not only reduce the number of (link) failures in the GCC testsuite when targeting nvptx-none, but also allow the NIST scimark4 benchmark to compile and run without modification. newlib already contains support for backends to provide their own clock implementations via -DCLOCK_PROVIDED. That functionality is used here to return an approximate elapsed time based on the NVidia GPU's clock64 cycle counter. Although not great, this is better than the current behaviour of link error from the unresolved symbol _times_r. The other part of the patch is to add a small number of stub functions to nvptx's misc.c. Adding isatty, for example, resolves linking problems in libc from the dependency in __smakebuf_r, and the sync stub, for example, fixes the failure with GCC's testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 [which simply tests that gfortran can call a/any C function]. newlib/ configure.host: Add -DCLOCK_PROVIDED to newlib_cflags on nvptx*. newlib/libc/machine/nvptx Makefile.am: Add clock.c to lib_a_SOURCES. clock.c: New source file to implement/approximate clock(). misc.c: Add stubs for fstat, isatty, open, sync and unlink.
2021-08-23stdlib: conditionalize locale usageCorinna Vinschen
_strtod_l as well as the gethex function both fetch the decimal point from the current LC_NUMERIC locale info. This pulls in _C_numeric_locale unconditionally even on targets not supporting locales at all. Another problem is that strtod.c and gdtoa-gethex.c are ELIX 1, while locale information in general isn't. This leads to potential build breakage on bare metal targets. Fix this by setting the decimal point to "." on all targets not defining __HAVE_LOCALE_INFO__. While at it, const'ify the entire local decimal point info in the affected functions. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2021-08-18svfwscanf: Simplify _sungetwc_r to eliminate apparent buffer overflowKeith Packard
svfwscanf replaces getwc and ungetwc_r. The comments in the code talk about avoiding file operations, but they also need to bypass the mbtowc calls as svfwscanf operates on wchar_t, not multibyte data, which is a more important reason here; they would not work correctly otherwise. The ungetwc replacement has code which uses the 3 byte FILE _ubuf field, but if wchar_t is 32-bits, this field is not large enough to hold even one wchar_t value. Building in this mode generates warnings about array overflow: In file included from ../../newlib/libc/stdio/svfiwscanf.c:35: ../../newlib/libc/stdio/vfwscanf.c: In function '_sungetwc_r.isra': ../../newlib/libc/stdio/vfwscanf.c:316:12: warning: array subscript 4294967295 is above array bounds of 'unsigned char[3]' [-Warray-bounds] 316 | fp->_p = &fp->_ubuf[sizeof (fp->_ubuf) - sizeof (wchar_t)]; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../newlib/libc/stdio/stdio.h:46, from ../../newlib/libc/stdio/vfwscanf.c:82, from ../../newlib/libc/stdio/svfiwscanf.c:35: ../../newlib/libc/include/sys/reent.h:216:17: note: while referencing '_ubuf' 216 | unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ | ^~~~~ However, the vfwscanf code *never* ungets data before the start of the scanning operation, and *always* ungets data which matches the input at that point, so the code always hits the block which backs up over the input data and never hits the block which uses the _ubuf field. In addition, the svfwscanf code will always start with the unget buffer empty, so the ungetwc replacement never needs to support an unget buffer at all. Simplify the code by removing support for everything other than backing up over the input data, leaving the check to make sure it doesn't get underflowed in case the vfscanf code has a bug in it. Signed-off-by: Keith Packard <keithp@keithp.com>
2021-08-09libc: Added prototypes for new POSIX APIsMatt Joyce
Added function prototypes to newlib/libc/include/pthread.h for the following Issue 8 Standard APIs: pthread_cond_clockwait() pthread_mutex_clocklock() pthread_rwlock_clockrdlock() pthread_rwlock_clockwrlock()
2021-08-02libc: Fix compilation for new sig2str/str2sig implementationChristoph Muellner
A recent patch introduced new code for sig2str/str2sig. This code does not properly exclude code that requires SIGRTMIN/SIGRTMAX to be defined and triggers the following compile error: newlib/libc/signal/sig2str.c:199:8: error: 'SIGRTMIN' undeclared newlib/libc/signal/sig2str.c:200:29: error: 'SIGRTMAX' undeclared Let's add the missing guards. Fixes: 2b50ec0cd205 ("libc: Fix compilation for new sig2str/str2sig implementation") Signed-off-by: Christoph Muellner <cmuellner@gcc.gnu.org>
2021-08-02libc: Added implementation for sig2str/str2sig.Matt Joyce
Added implementations for sig2str() and str2sig() in libc/signal in order to improve POSIX compliance. Added fucntion prototypes in libc/include/sys/signal.h.
2021-07-28Remove unneccesary parenthesis around declaratorMaxim Blinov
riscv64-unknown-elf-g++-11.1.0 regression suite reports the following failures for $ make check-gcc-c++ RUNTESTFLAGS='dg.exp=Wstringop-overflow-6.C' ``` FAIL: g++.dg/warn/Wstringop-overflow-6.C -std=gnu++14 (test for excess errors) FAIL: g++.dg/warn/Wstringop-overflow-6.C -std=gnu++17 (test for excess errors) FAIL: g++.dg/warn/Wstringop-overflow-6.C -std=gnu++2a (test for excess errors) UNSUPPORTED: g++.dg/warn/Wstringop-overflow-6.C -std=gnu++98 ``` The "excess errors" being ``` output is In file included from /home/maxim/prj/riscv-upstream/install/riscv64-unknown-elf/include/wchar.h:6, from /home/maxim/prj/riscv-upstream/build/gcc-stage2/riscv64-unknown-elf/libstdc++-v3/include/cwchar:44, from /home/maxim/prj/riscv-upstream/build/gcc-stage2/riscv64-unknown-elf/libstdc++-v3/include/bits/postypes.h:40, from /home/maxim/prj/riscv-upstream/build/gcc-stage2/riscv64-unknown-elf/libstdc++-v3/include/iosfwd:40, from /home/maxim/prj/riscv-upstream/build/gcc-stage2/riscv64-unknown-elf/libstdc++-v3/include/ios:38, from /home/maxim/prj/riscv-upstream/build/gcc-stage2/riscv64-unknown-elf/libstdc++-v3/include/ostream:38, from /home/maxim/prj/riscv-upstream/build/gcc-stage2/riscv64-unknown-elf/libstdc++-v3/include/iostream:39, from /home/maxim/prj/riscv-upstream/gcc-11.1.0/gcc/testsuite/g++.dg/warn/Wstringop-overflow-6.C:6: /home/maxim/prj/riscv-upstream/install/riscv64-unknown-elf/include/sys/reent.h:685:11: warning: unnecessary parentheses in declaration of '_sig_func' [-Wparentheses] ```
2021-07-22libc/include/sys/config.h: Undef _REENT_SMALL for RTEMS on MicroBlazeAlex White
RTEMS does not expect _REENT_SMALL.
2021-07-12Minimal support for ISO/IEC TS 18661-3.Kito Cheng
- GCC will set __FLT_EVAL_METHOD__ to 16 if __fp16 supported, e.g. cortex-a55/aarch64. - $ aarch64-unknown-elf-gcc -v 2>&1 |grep version gcc version 9.2.0 (GCC) - $ aarch64-unknown-elf-gcc -E -dM -mcpu=cortex-a55 - < /dev/null |grep FLT_EVAL_METHOD #define __FLT_EVAL_METHOD__ 16 #define __FLT_EVAL_METHOD_TS_18661_3__ 16 #define __FLT_EVAL_METHOD_C99__ 16 - The behavior of __FLT_EVAL_METHOD__ == 16 is same as __FLT_EVAL_METHOD__ == 0 except for float16_t, but newlib didn't support float16_t. ISO/IEC TS 18661-3: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2405.pdf V2 Changes: - List Howland, Craig D as co-author since he provide the draft of comment in math.h. Co-authored-by: "Howland, Craig D" <howland@LGSInnovations.com>
2021-07-07stdlib: Make strtod/strtof set ERANGE consistently for underflow.Keith Packard
The C standard says that errno may acquire the value ERANGE if the result from strtod underflows. According to IEEE 754, underflow occurs whenever the value cannot be represented in normalized form. Newlib is inconsistent in this, setting errno to ERANGE only if the value underflows to zero, but not for denorm values, and never for hex format floats. This patch attempts to consistently set errno to ERANGE for all 'underflow' conditions, which is to say all values which are not exactly zero and which cannot be represented in normalized form. This matches glibc behavior, as well as the Linux, Mac OS X, OpenBSD, FreeBSD and SunOS strtod man pages. Signed-off-by: Keith Packard <keithp@keithp.com>
2021-07-06fix and amend scripts and makefile rules to generate Unicode dataThomas Wolff
2021-07-06update to Unicode 13.0Thomas Wolff
2021-06-25inttypes.h: Use reserved names for function parametersJonathan Wakely
2021-06-19stdio: Parse 0x0p+00 correctly in scanfKeith Packard
The scanf code was skipping the '0' after the 'x' causing the resulting buffer to contain an invalid number when passed to strtod. Signed-off-by: Keith Packard <keithp@keithp.com>
2021-06-17libc/sys/rtems/crt0.c: Fix two warnings.Joel Sherrill
__assert_func() is marked as noreturn and stub should not. __tls_get_addr() needed to return a value..
2021-05-26aarch64: support binary mode for opening filesRichard Earnshaw
Newlib for aarch64 uses libgloss for the backend. One common libgloss implementation is the 'rdimon' implementation, which uses the Arm Semihosting protocol. In order to support a remote host that runs on Windows we need to know whether a file is to be opened in binary or text mode. That means that we need to preserve this information via O_BINARY until we know what the libgloss binding will be. This patch simply copies the arm implementation from sys/arm/sys and puts it in machine/aarch64/sys, because we don't have a 'sys' subtree on aarch64.
2021-05-20sys/stat.h: Enable UTIME_NOW and UTIME_OMIT for RTEMSJoel Sherrill
2021-05-03Nano-malloc: Fix for unwanted external heap fragmentationOla Olsson
The only reason why it is tough for us to use nano malloc is because of the small shortcoming where nano_malloc() splits a bigger chunk from the free list into two pieces while handing back the second one (the tail) to the user. This is error prone and especially bad for smaller heaps, where nano malloc is supposed to be superior. The normal malloc doesn't have this issue and we need to use it even though it costs us ~2k bytes compared to nano-malloc. The problem arise especially after giving back _every_ malloced memory to the heap and then starting to exercise the heap again by allocating something small. This small item might split the whole heap in two equally big parts depending on how the heap has been exercised before. I have uploaded the smallest possible application (only tested on ST and Nordic devices) to show the issue while the real customer applications are far more complicated: https://drive.google.com/file/d/1kfSC2KOm3Os3mI7EBd-U0j63qVs8xMbt/view?usp=sharing The application works like the following pseudo code, where we assume a heap of 100 bytes (I haven't taken padding and other nitty and gritty details into account. Everything to simplify understanding): void *ptr = malloc(52); // We get 52 bytes and we have // 48 bytes to use. free(ptr); // Hand back the 52 bytes to nano_malloc // This is the magic line that shows the issue of // nano_malloc ptr = malloc(1); // Nano malloc will split the 52 bytes // in the free list and hand you a pointer // somewhere in the // middle of the heap. ptr2 = malloc(52); // Out of memory... I have done a fix which hands back the first part of the splitted chunk. Once this is fixed we obviously have the 1 byte placed in position 0 of the heap instead of somewhere in the middle. However, this won't let us malloc 52 new bytes even though we potentially have 99 bytes left to use in the heap. The reason is that when we try to do the allocation, nano-malloc looks into the free list and sees a 51 byte chunk to be used. This is not big enough so nano-malloc decides to call sbrk for _another_ 52 bytes which is not possible since there is only 48 bytes left to ask for. The solution for this problem is to check if the last item in the free list is adjacent to sbrk(0). If it is, as it is in this case, we can just ask sbrk for the remainder of what is needed. In this case 1 byte. NB! I have only tested the solution on our ST device.
2021-04-19scanf: allow hex float input per POSIXCorinna Vinschen
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>