aboutsummaryrefslogtreecommitdiff
path: root/newlib/libc
AgeCommit message (Collapse)AuthorFilesLines
2024-01-31Cygwin: implement setproctitlegithub/topic/3.6topic/3.6Corinna Vinschen1-0/+8
Make sure to create commandline according to setting of setproctitle. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-31sys/stat.h: drop __INSIDE_CYGWIN__ guardsCorinna Vinschen1-2/+2
These were only necessary until we dropped 32 bit Cygwin. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-31Cygwin: posix_getdents: implement per SUS Base Specifications Issue 8 draftCorinna Vinschen1-0/+3
- Basically maintain a hidden DIR* inside fhandlers. - lseek has to be tweaked to allow basic seeking on the directory descriptor. - the current implementation does not keep the dir positions between duplicated descriptor in sync. In fact, every descriptor keeps its own copy of the DIR* and after dup/fork/exec, the directory position is reset to 0, i. e., to the start of the directory, as if rewinddir() has been called on the new descriptors. While this behaviour isn't yet covered by the Issue 8 draft, a bug report along these lines exists and will probably be picked up for TC1. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-31getlocalename_l: implement per SUS Base Specifications Issue 8 draftCorinna Vinschen4-0/+95
#include <locale.h> const char *getlocalename_l(int category, locale_t locobj); Most notably, we need a per-thread space to store the string returned if locobj is LC_GLOBAL_LOCALE. No errors are defined for getlocalename_l. So we can't use buffer allocation which might lead to an ENOMEM error. We have to use a "static" buffer in the per-thread state. Note that the feature test macro in locale.h is not quite correct. This needs to be fixed as soon as the Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-31Hide itoa, utoa, __itoa and __utoa in stdlib.h on Cygwin onlycygwin-3.5.0Christian Franke1-1/+3
These functions are non-standard and not exported by Cygwin. Signed-off-by: Christian Franke <christian.franke@t-online.de>
2024-01-29ssp: add support for _FORTIFY_SOURCE=3Christian Franke4-8/+23
If specified, use __builtin_dynamic_object_size() instead of __builtin_object_size() if supported (GCC 12.0 or later). This enables buffer overflow checks if the buffer size is non-const but known during runtime. Use new macro __ssp_bos_known() instead of the (bos(p) != (size_t)-1) checks. The latter is no longer a compile time constant in all cases. This avoids the generation of unused code. Signed-off-by: Christian Franke <christian.franke@t-online.de>
2024-01-22newlib: docs: add "Function " to every function nodeMike Frysinger15-306/+306
When creating a split manual with one-node-per-page, the main index.html ends up getting clobbered by the page for the index() function because it uses "@node index" which, for html, also creates an index.html page. To remedy this, add "Function " to every function node so now we output "Function-index.html" and avoid clobbering. It also namespaces every other function and helps make sure we don't clobber anything else. Otherwise, there isn't really much rendering difference as @node text is mostly internal. Node title text comes from @section instead.
2024-01-22newlib: docs: print the function indexMike Frysinger1-0/+5
The generated function documentation makes sure to include entries for every function in the function index via @findex, but then the manuals forget to actually print the index.
2024-01-19fputwc: call __fputwc directlyCorinna Vinschen2-2/+7
Avoid another hop in the call stack. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-19memccpy: fix pointer assignmentCorinna Vinschen1-2/+2
The local vars dst and src are unsigned pointers, but two assignments cast their value to signed explicitely. This results in the warning "pointer targets in assignment from ‘char *’ to ‘unsigned char *’ differ in signedness [-Wpointer-sign]" in case of -Wall. Fix the cast. Fixes: d254189b38bb ("2002-07-23 Jeff Johnston <jjohnstn@redhat.com>") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-19ORIENT: avoid "expression has no effect" warningCorinna Vinschen3-3/+3
The warning "right-hand operand of comma expression has no effect [-Wunused-value]" crops up with -Wall in cases where ORIENT is called without checking or assigning its value. Explicitely void the expression in these cases to avoid the warning. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-19_fputwc_r: actually return result of __fputwcCorinna Vinschen1-1/+1
Compiling with -Wall uncovered a bug in _fputwc_r introduced in commit 09119463a1445 ("stdio: split byte- and wide-char-oriented low-level output functions"). The underlying function __fputwc has been accidentally called without fetching its return value. So the return value of _fputwc_r (and thus fputwc) was undefined. Fixes: 09119463a1445 ("stdio: split byte- and wide-char-oriented low-level output functions" Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2024-01-15Cygwin: introduce close_range(2)Christian Franke1-0/+6
This function closes or sets the close-on-exec flag for a specified range of file descriptors. It is available on FreeBSD and Linux. Signed-off-by: Christian Franke <christian.franke@t-online.de>
2024-01-08fix strverscmp comparison of digit sequence with non-digitsBrian Inglis1-3/+3
From: Rich Felker <dalias@aerifal.cx> Date: Mon, 7 Nov 2022 22:17:55 -0500 the rule that longest digit sequence not beginning with a zero is greater only applies when both sequences being compared are non-degenerate. this is spelled out explicitly in the man page, which may be deemed authoritative for this nonstandard function: "If one or both of these is empty, then return what strcmp(3) would have returned..." we were wrongly treating any sequence of digits not beginning with a zero as greater than a non-digit in the other string. Signed-off-by: Brian Inglis <Brian.Inglis@SystematicSW.ab.ca>
2024-01-02newlib: libc: Improved the readability of strspn with minor optimizationXiao Zeng1-1/+2
Signed-off-by: Xiao Zeng <zengxiao@eswincomputing.com>
2023-12-31Changes for newlib 4.4.0 snapshotnewlib-4.4.0Jeff Johnston1-2/+2
- bump up version to 4.4.0
2023-12-31Minor improvement to H8 startup codeJeff Law1-18/+12
Basically the startup code needs to clear memory from _edata to _end. In the past it's been done with a fairly naive copy loop. This changes the code to just call memset and let memset figure out a sensible way to handle the operation given the size and alignment requirements. I don't have performance data on this. I cobbled it together some time ago in response to seeing some of the GCC tests with larger .bss sections taking an insane amount of time to just get from _start to main. With the fixes to the H8 decoder in the simulator it may not matter nearly as much anymore. This has been in my tester for months. Naturally it does not cause any regressions in the H8 port.
2023-12-29newlib MMIX: Fix compilation warnings that recent gcc treats as errorsHans-Peter Nilsson10-21/+30
Without this, when building with recent gcc, we'll see errors when compiling for --target mmix the first being: CC libc/sys/mmixware/libc_a-chmod.o In file included from /x/newlib/libc/sys/mmixware/chmod.c:17: /x/newlib/libc/sys/mmixware/chmod.c: In function 'chmod': /x/newlib/libc/sys/mmixware/sys/syscall.h:139:6: error: implicit declaration \ of function 'sprintf' [-Wimplicit-function-declaration] 139 | sprintf (buf, "UNIMPLEMENTED %s in %s\n", __FUNCTION__, __FILE__); \ Other warnings also quelled. * libc/sys/mmixware/sys/syscall.h: Include stdio.h, string.h and unistd.h. * libc/sys/mmixware/_exit.c: Call __unreachable after simulator exit. * libc/sys/mmixware/chown.c (chown): Match declaration in unistd.h. * libc/sys/mmixware/getpid.c (_getpid): Ditto. * libc/sys/mmixware/kill.c (_kill): Ditto. * libc/sys/mmixware/link.c (_link): Ditto. * libc/sys/mmixware/read.c (_read): Ditto. * libc/sys/mmixware/sbrk.c (_sbrk): Ditto. * libc/sys/mmixware/unlink.c (_unlink): Ditto. * libc/sys/mmixware/write.c (_write): Ditto.
2023-12-23GCN: Implement '_exit' instead of 'exit'Thomas Schwinge3-5/+4
... so that all of 'exit', '_exit', '_Exit' work. 'exit' thus becomes the standard 'newlib/libc/stdlib/exit.c'. (Getting 'atexit' functional needs further work elsewhere.) See also commit 5841b2f6a4208682264d03e3edfa0a09881932a6 "nvptx: Implement '_exit' instead of 'exit'".
2023-12-22Fix newlib H8/300 bits for C99/gcc-14Jeff Law1-0/+2
Similar to other patches. This adds a missing prototype and #include to some H8/300 specific code in newlib. Pushed to the trunk given Jeff J's pre-approval for these kinds of changes.
2023-12-21Optimize strpbrk.cJeff Johnston1-9/+2
2023-12-19newlib: libc: Improved the readability of strcspn with minor optimizationXiao Zeng1-4/+2
Signed-off-by: Xiao Zeng <zengxiao@eswincomputing.com>
2023-12-19Fix various v850 problemsJeff Law6-7/+10
These fixes fall into a few different buckets. First c99 doesn't allow a parameter without a type. So in cases where the type had previously been an implicit int, make it an explicit int. Second, for return values, don't allow them to be implicit ints either, make them explicit. In a few cases change c89 function definitions to c99 function definitions. Lastly include <stdlib.h> in sbrk.c to get the prototype for abort () which we call when we detect a heap/stack collision.
2023-12-19Remove curly braces in `@author` tag in .texi filesFreddie Chopin1-4/+4
Curly braces cause documentation build failure with texinfo 7.1 (works fine up to 7.0.3):
2023-12-06newlib cris: Fix compilation warnings that recent gcc treats as errorsHans-Peter Nilsson1-6/+37
For the newlib part, warnings are all from lack of sync between libc/machine/cris/sys/signal.h and libc/include/sys/signal.h. This commit gets them sufficiently in sync again, functionality-wise and declaration-wise. Still, nothing is declared that isn't supported at the system level (i.e. in libgloss system calls and handled by the CRIS simulator in the gdb project).
2023-12-04RISC-V: Support long double mathKito Cheng2-1/+66
Long double for RISC-V is using 128 bit IEEE 754 format like Aarch64, so we reference AArch64 to support that.
2023-12-02newlib: libc: Fix indentationKuan-Wei Chiu1-12/+12
Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
2023-12-01newlib: libc: Fix memory leak in computematchjumps()Kuan-Wei Chiu1-2/+4
In cases where malloc fails for the 'g->matchjump' allocation, the code path does not handle the failure gracefully, potentially leading to a memory leak. This fix ensures proper cleanup by freeing the allocated memory for 'pmatches' before returning. Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
2023-11-24newlib: nl_langinfo: Fix a bug of time stuff.Takashi Yano1-4/+4
Previously, e.g. nl_langinfo(_NL_TIME_WMONTH_1) returns "February" due to the bug. Similarly, nl_langinfo(_NL_TIME_WWDAY_1) returns "Mon". This occurs because wide char month and weekday arrays are pointed off-by-one (e.g. the array wmon[12] is reffered as wmon[1-12] rather than wmon[0-11]). This patch fixes that. Fixes: d47d5b850bed ("Extend locale support to maintain wide char values of native strings") Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2023-11-21aarch64: Remove duplicated optimized memmove()Sebastian Huber3-158/+2
The optimized aarch64/memcpy.S already provides a memmove() implementation.
2023-11-20stdio: drop unnecessary calls to ORIENTCorinna Vinschen7-20/+0
Now that the low-level functions set and test stream orientation, a few calls in API functions are redundant. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-11-20stdio: set and test stream orientation in low-level input function __srget_rCorinna Vinschen1-0/+5
This allows to set and test orientation correctly if input is only using macros from stdio.h. Wide-char-oriented functions must call __srefill_r directly. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-11-20stdio: split byte- and wide-char-oriented low-level output functionsCorinna Vinschen7-20/+140
Introduce function __swbufw_r and macros/inline-functions called __swputc_r. Call these functions/macros exclusively from wide-char functions. This allows to set and test the stream orientation correctly even if output is only performed using byte-oriented macros from stdio.h. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-11-20stdio: Fix bugs in commit 3d94e07c49b5Takashi Yano27-12/+43
The commit 3d94e07c49b5 has a few bugs which cause testsuite failure in libstdc++. This is due to excess orientation check in __srefill_r() and _ungetc_r(). Further, sscanf() family also calls ssvfscanf() family with fp->_file == -1. This causes undesired orientation set/check for sscanf() family. This patch fixes these problems. Also, as in GLibC, do not set orientation in ungetc, and only set, but do not check orientation in ungetwc. Fixes: 3d94e07c49b5 ("newlib: libc: Fix crash on fprintf to a wide-oriented stream.") Reported-by: Christophe Lyon <christophe.lyon@linaro.org> Reported-by: Joel Sherrill <joel@rtems.org> Co-developed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp> Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-11-20Reclaim _REENT_MP_P5S in _reclaim_reentChris Johns1-0/+11
The _REENT_MP_P5S blocks are allocated using Balloc via i2b and linked in the pow5mult call. As a result these blocks are not on the freelist managed by the Bfree call. This change fixes a memory leak in threads that clean up using _reclaim_reent. RTEMS: Closes #4967
2023-11-17__sfvwrite_r: call __sputc_r rather than putc in __SCLE caseCorinna Vinschen1-1/+4
__sfvwrite_r is called under lock. There's no reason to call putc, locking the file recursively. Add a comment that locking is required when calling __sfvwrite_r. Fixes: 49d64538cd20 ("* libc/include/stdio.h (FILE): define __SCLE for "convert line endings" for Cygwin.") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-11-17v{fs}printf/v{fs}wprintf: create external output helpersCorinna Vinschen11-263/+312
So far, the printf family of functions has two output helper functions called __sprint_r and __sfputs_r. Both are called from all variants of vfprintf as well as vfwprintf. There are also analogue helper functions for the string-creating functions vsprintf/vswprintf called __ssprint_r and __ssputs_r. However, the helpers are built once when building vfprintf/vsprintf with the INTEGER_ONLY flag, and then they are part of the vfiprintf.c and vsiprintf.c files. The problem is this: Even if a process only calls vfwprintf or the non-INTEGER_ONLY vfprintf it will always have to include the INTEGER_ONLY vfiprintf. Otherwise the helper functions are undefined. Analogue for the string-creating functions. That's a useless waste of space by including one (or two) big, unused function, if newlib is linked in statically. Create new files to define the printf output helpers separately and split them into byte-oriented and wide-char-oriented functions. This allows to link only the required functions. Also, simplify the string output helpers and fix a potential (but unlikely) buffer overflow in __ssprint_r. Fixes: 8a0efa53e449 ("import newlib-2000-02-17 snapshot") Fixes: 6121968b198d ("* libc/include/stdio.h (__VALIST): Guard against multiple definition.") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-11-10newlib: libc: Fix crash on fprintf to a wide-oriented stream.Takashi Yano19-40/+92
Previously, fprintf() on a wide-oriented stream crashes or outputs garbage. This is because a narrow char string which can be odd bytes in length is cast into a wide char string which should be even bytes in length in __sprint_r/__sfputs_r based on the __SWID flag. As a result, if the length is odd bytes, the reading buffer runs over the buffer length, which causes a crash. If the length is even bytes, garbage is printed. With this patch, any output to the stream which is set to different orientation fails with error just like glibc. Note that it behaves differently from other libc implementations such as BSD, musl and Solaris. Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2023-10-31amdgcn: remove unnecessary scalar cache flushAndrew Stubbs1-1/+0
The exit code isn't actually written via the scalar cache so the cache flush is not actually needed.
2023-10-12sparc: Improve setjmp()Sebastian Huber1-0/+2
Flush the windows in setjmp(). This helps if the stack is changed after the setjmp() and we want to jump back to the original stack using longjmp().
2023-10-12riscv: Fix fenv.h supportSebastian Huber1-1/+1
Use the same C preprocessor expressions to define FE_RMODE_MASK and __RISCV_HARD_FLOAT. The problem was noticed on GCC 10 which does not define __riscv_f.
2023-10-05aarch64: Import memrchr.SSebastian Huber3-0/+128
Import memrchr.S for AArch64 from: https://github.com/ARM-software/optimized-routines commit 0cf84f26b6b8dcad8287fe30a4dcc1fdabd06560 Author: Sebastian Huber <sebastian.huber@embedded-brains.de> Date: Thu Jul 27 17:14:57 2023 +0200 string: Fix corrupt GNU_PROPERTY_TYPE (5) size For ELF32 the notes alignment is 4 and not 8.
2023-10-05aarch64: Sync with ARM-software/optimized-routinesSebastian Huber14-1666/+1226
Update AArch64 assembly string routines from: https://github.com/ARM-software/optimized-routines commit 0cf84f26b6b8dcad8287fe30a4dcc1fdabd06560 Author: Sebastian Huber <sebastian.huber@embedded-brains.de> Date: Thu Jul 27 17:14:57 2023 +0200 string: Fix corrupt GNU_PROPERTY_TYPE (5) size For ELF32 the notes alignment is 4 and not 8. Add license and copyright information to COPYING.NEWLIB as entry (56).
2023-09-25newlib: Add missing prototype for _getentropyTorbjörn SVENSSON1-0/+1
2023-09-11Reentrancy, attempt to always provide _Thread_local in <sys/reent.h>Pekka Seppänen1-0/+1
Attempt to always provide _Thread_local in <sys/reent.h> by including <sys/cdefs.h>. The C specific keyword _Thread_local is not available unless targetting a suitable C version.
2023-09-11Reentrancy, conditionally provide default __getreent() implementationPekka Seppänen1-0/+4
Conditionally provide default __getreent() implementation only if _REENT_THREAD_LOCAL is not defined. If struct _reent is replaced by dedicated thread-local objects neither the structure nor _impure_ptr is available.
2023-09-11Reentrancy, use _REENT_ERRNO()Pekka Seppänen4-14/+14
Use _REENT_ERRNO() macro to access errno. This encapsulation is required, as errno might be either _errno member of struct _reent, _tls_errno or any such implementation detail.
2023-08-29libc/stdlib/nano-mallocr.c, typo in variable namePekka Seppänen1-1/+1
Nano malloc uses `size' in assertation whereas the correct variable would be `s'. Given this has existed ever since nano malloc support was added, based on the context ("returned payload area of desired size does not exceed the actual allocated chunk") I presume that indeed `s' (user input) and not `r->size' (computed) shall be used.
2023-08-17newlib: add Xtensa portAlexey Lapshin25-1/+2334
2023-08-15struct _reent: add state for unicode functionsCorinna Vinschen1-0/+16
C23 requires that the unicode functions c16rtomb, c8rtomb, mbrtoc16, mbrtoc32 and mbrtoc8 use their own internal state object. c32rtomb only needs an internal state if the lib supports encoding with shift states, but that's the case for newlib and Cygwin. Only Cygwin implements these functions so add the states objects only for Cygwin for now. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>