Commit Graph

4286 Commits

Author SHA1 Message Date
Uzair Nawaz
8d6e29d0d3 [libc] Reworked CharacterConverter isComplete into isFull and isEmpty (#144799)
isComplete previously meant different things for different conversion
directions.
Refactored bytes_processed to bytes_stored which now consistently
increments on every push and decrements on pop making both directions
more consistent with each other
2025-06-20 16:59:30 +00:00
lntue
d3a2931d8a [libc] Use raise_except_if_required for log2f. (#144961) 2025-06-19 17:51:01 -04:00
lntue
2f3a8fd0b3 [libc] Skip x87 floating point register and only update mxcsr for x86_64 targets when raising exceptions inside math functions. (#144951)
Updating x87 floating point register significantly affect the
performance of the functions.
All the floating point exception reads will merge the results from both
mxcsr and x87 registers anyway.
2025-06-19 17:06:52 -04:00
William Huynh
baf35d7a82 [libc] Fix bug in LIBC_CONF_ERRNO_MODE being undefined (#144896)
A typo, set() instead of list() would cause the build to not define
LIBC_CONF_ERRNO_MODE, which would cause the wrong configuration to be
used.
2025-06-19 14:50:07 -04:00
lntue
b8337349d9 [libc][math] Skip setting errno and floating point exception for math functions when LIBC_MATH flag has LIBC_MATH_NO_ERRNO and LIBC_MATH_NO_EXCEPT. (#144920) 2025-06-19 12:18:39 -04:00
lntue
c1ac87b327 [libc] Fix setjmp build order. (#144917)
Fix build order issue from
https://github.com/llvm/llvm-project/pull/139555.
2025-06-19 12:05:58 -04:00
Aly ElAshram
5645d67109 Implement sigsetjmp and siglongjmp for darwin/aarch64 (#139555) 2025-06-19 09:15:59 -04:00
sribee8
6f4e4ea177 [libc] Internal getrandom implementation (#144427)
Implemented an internal getrandom to avoid calls to the public one in
table.h

---------

Co-authored-by: Sriya Pratipati <sriyap@google.com>
2025-06-18 17:56:57 +00:00
Simon Tatham
49df87e71b [libc][printf] Fix out-of-range shift in float320 printf (#144542)
If you enable `LIBC_CONF_PRINTF_FLOAT_TO_STR_USE_FLOAT320` and use a
`%f` style printf format directive to print a nonzero number too small
to show up in the output digits, e.g. `printf("%.2f", 0.001)`, then the
output would be intermittently incorrect, because
`DyadicFloat::as_mantissa_type_rounded` would try to shift the 320-bit
mantissa right by more than 320 bits, invoking the 'undefined behavior'
clause commented in the `shift()` function in `big_int.h`.

There were already tests in the libc test suite exercising this case,
e.g. the subnormal tests in `LlvmLibcSPrintfTest.FloatDecimalConv` use
`%f` at the default precision of 6 decimal places on tiny numbers such
as 2^-1027. But because the behavior is undefined, they don't visibly
fail all the time, and in all previous test runs we'd tried with
USE_FLOAT320, they had got lucky.

The fix is simply to detect an out-of-range right shift before doing it,
and instead just set the output value to zero.
2025-06-18 08:57:51 +01:00
sribee8
844e41c2ac [libc] Moved shared constexpr to the top (#144569)
Some conversions shared constexpr so moved to the top.

---------

Co-authored-by: Sriya Pratipati <sriyap@google.com>
2025-06-17 21:12:35 +00:00
Alexey Samsonov
7ea710fafa Fix/reapply "[libc] Migrate stdio tests to ErrnoCheckingTest. (#144134)
This reverts commit 92a116c4ef with a fix
for fgets test - convert nullptr to fgets return type (char*), since the
matcher is pedantic.
2025-06-17 10:44:21 -07:00
sribee8
e6a41399cb Reland "[libc] utf8 to 32 CharacterConverter" (#144450)
Reverts llvm/llvm-project#144446
Figured out the issue, so creating a new pull request.

---------

Co-authored-by: Sriya Pratipati <sriyap@google.com>
2025-06-17 16:24:01 +00:00
sribee8
6e12442354 Revert "[libc] utf8 to 32 CharacterConverter" (#144446)
Reverts llvm/llvm-project#143973
This merge broke the build and I'm currently looking into the issue to
fix it.
2025-06-16 22:33:32 +00:00
sribee8
98eee4b554 [libc] utf8 to 32 CharacterConverter (#143973)
Implemented push and pop for utf8 to 32 conversion and tests.

---------

Co-authored-by: Sriya Pratipati <sriyap@google.com>
2025-06-16 22:20:08 +00:00
Uzair Nawaz
38daa6d4ef [libc] build fix: always use our char8_t headers even in overlay mode (#144433)
Build fix caused by certain platforms not providing char8_t when
expected
Temporary fix to just always use our own definition, even in overlay
mode.
2025-06-16 21:28:51 +00:00
Uzair Nawaz
8adccaee2a [libc] Implemented CharacterConverter push/pop for utf32->utf8 conversions (#143971)
Implemented CharacterConverter methods for conversion between utf32 ->
utf8
Added tests

---------

Co-authored-by: Michael Jones <michaelrj@google.com>
2025-06-16 20:06:46 +00:00
William Huynh
402c376daa [libc] Change default behaviour of baremetal/printf to use stdout (#143703)
In #94078, `write_to_stdout` had not been fully implemented. However,
now that it has been implemented, to conform with the C standard
(7.23.6.3. The printf function, specifically point 2), we use `stdout`.
This issue is tracked in #94685.

- Also prefer `static constexpr`
- Made it explicit that we are writing to `stdout`
2025-06-16 12:22:58 -07:00
sribee8
4cd3e41bce [libc] Removed public function calls in table.h (#144168)
Removed strcmp, strlen, and memset calls from table.h and replaced them
with internal functions.

---------

Co-authored-by: Sriya Pratipati <sriyap@google.com>
2025-06-16 18:03:21 +00:00
Amy Huang
ca38027c03 Revert "Turn LIBC_COPT_STRING_UNSAFE_WIDE_READ on by default" (#144167)
Reverts llvm/llvm-project#144163 because for some reason I didn't
realize there are ASan tests.
2025-06-13 15:30:28 -07:00
Amy Huang
a591bd222b Turn LIBC_COPT_STRING_UNSAFE_WIDE_READ on by default (#144163)
Configure strlen to use unsafe implementation because it is faster.

Because this is undefined behavior it could cause sanitizers to fail.
2025-06-13 15:09:57 -07:00
William Huynh
473dea9b0b [libc] Output all headers with LIBC_CONF_OUTPUT_ALL_HEADERS (#144114)
Following discussion from
https://discourse.llvm.org/t/missing-declarations-in-header-files/86678,
we decided to add a flag to output all headers. Requires #144049.

- Allows outputting all headers
- Minor whitespace change for alignment

---------

Co-authored-by: Michael Jones <michaelrj@google.com>
2025-06-13 14:37:25 -07:00
Amy Huang
c42912b8c9 Fix string_length function so that it always returns. (#144148)
Previously setting LIBC_COPT_STRING_UNSAFE_WIDE_READ would cause a build
error because there is a path in the ifdef that doesn't return anything.
2025-06-13 13:07:39 -07:00
Michael Jones
452276ecc0 [libc] Fix missing errno include in fuzzer (#144132)
The printf parser uses errno for setting up the %m conversion. It was
presumably getting this include indirectly until a recent change. This
patch adds a direct dependency to fix it.
2025-06-13 11:00:08 -07:00
Alexey Samsonov
92a116c4ef Revert "Fix/reapply "[libc] Migrate stdio tests to ErrnoCheckingTest."" (#144129)
Reverts llvm/llvm-project#143972 - matcher seems to be pedantic for
fgets tests, reverting to verify and fix.
2025-06-13 10:48:34 -07:00
Michael Jones
51689c9df2 [libc][NFC] clean internal fd handling (#143991)
The previous internal fcntl implementation modified errno directly, this
patch fixes that. This patch also moves open and close into OSUtil since
they are used in multiple places. There are more places that need
similar cleanup but only got comments in this patch to keep it
relatively reviewable.

Related to: https://github.com/llvm/llvm-project/issues/143937
2025-06-13 10:31:47 -07:00
William Huynh
fd432151a6 [libc] Fix bugs found when testing with all headers (#144049)
Fixes a couple of bugs found when building. The PR to enable the headers
can be found here: #144114.

- math.yaml: float128 guard
- wchar.yaml: __restrict keyword order
2025-06-13 10:26:40 -07:00
Alexey Samsonov
c609112a53 Fix/reapply "[libc] Migrate stdio tests to ErrnoCheckingTest." (#143972)
This reverts commit a93e55e57e and fixes
build and test failures:

* Proper include added to setvbuf_test.cpp
* fgetc/fgetc_unlocked/fgets tests are ported to ErrnoSetterMatcher and
are made more precise. This fixes inconsistencies between expectations
in regular and GPU builds - ErrnoSetterMatcher is configured to omit
errno matching on GPUs, as fgetc implementation on GPU doesn't set
errno, in contrast to Linux.
2025-06-13 10:25:26 -07:00
Uzair Nawaz
b184672ec7 [libc] Implemented wmemmove (#142245)
Implemented wmemmove and added tests
2025-06-13 16:48:24 +00:00
Michael Jones
70f44ec6fe [libc][NFC] Accept doc fix (#143996)
Docgen updates the docs when the config options are changed. This update
has been waiting since https://github.com/llvm/llvm-project/pull/143187.
2025-06-12 16:49:25 -07:00
Michael Jones
28c14d475f [libc] Independent strcat/strncat/stpcpy (#142643)
The previous implementations called other entrypoints. This patch fixes
strcat, strncat, and stpcpy to be properly independent.
2025-06-12 15:57:58 -07:00
Uzair Nawaz
2ee8fdbfdd [libc] Prevent building wchar on MacOS (#143978)
Prevent building wchar on macos as it depends on uchar.h which isn't
available
2025-06-12 22:14:28 +00:00
sribee8
f94950db89 [libc] Changed mbstate struct (#143942)
Changed the mbstate variable from bits processed to bytes processed and
implemented isComplete().

Co-authored-by: Sriya Pratipati <sriyap@google.com>
2025-06-12 18:04:26 +00:00
Michael Jones
5a6a4b6ba6 [libc] Implement perror (#143624)
The perror function writes an error message directly to stderr. This
patch adds an implementation, tests, and header generation details.
2025-06-12 10:45:47 -07:00
Uzair Nawaz
6311f039b2 [libc] Build fixes for widechar characterconverter (#143805)
Build fixes for wchar CharacterConverter class
2025-06-12 17:34:45 +00:00
lntue
d1ca8d891f [libc][math] Refactor expf implementation to header-only in src/__support/math folder. (#143790)
This is a step in preparation for:
https://discourse.llvm.org/t/rfc-make-clang-builtin-math-functions-constexpr-with-llvm-libc-to-support-c-23-constexpr-math-functions/86450
2025-06-12 13:18:30 -04:00
lntue
82f19674bf [libc] Update size_t and ssize_t definitions to use __SIZE_TYPE__ and __PTRDIFF_TYPE__ respectively. (#143921)
The current definition of `ssize_t` does not have the same bit width as
`size_t` on 32-bit platforms.
2025-06-12 13:11:42 -04:00
Michael Jones
ae7ea6e3a2 [libc] Fix ioctl errno inclusion (#143928)
Since errno was moved in
https://github.com/llvm/llvm-project/pull/143187 the code including it
in https://github.com/llvm/llvm-project/pull/141393 was rendered
incorrect. This patch fixes the include and the cmake depends.
2025-06-12 09:38:43 -07:00
W. Turner Abney
4039fdb7ba [libc] add ioctl (#141393)
Closes #85275
Closes #90317
Updates #97191

---------

Co-authored-by: Joseph Huber <huberjn@outlook.com>
Co-authored-by: Michael Jones <michaelrj@google.com>
2025-06-12 09:20:32 -07:00
Alexey Samsonov
a93e55e57e Revert "[libc] Migrate stdio tests to ErrnoCheckingTest." (#143829)
Reverts llvm/llvm-project#143802. Follow-up fix
3c7af175e5 wasn't robust enough and itself
got reverted.
2025-06-11 21:33:46 -07:00
Kewen12
a71210e5ab Revert "[libc] Fix stdio tests after #143802" (#143824)
Reverts llvm/llvm-project#143810 

This PR breaks our buildbot:
https://lab.llvm.org/buildbot/#/builders/10/builds/7159 revert to
unblock downstream merge.
2025-06-11 23:24:56 -04:00
Michael Jones
3c7af175e5 [libc] Fix stdio tests after #143802 (#143810)
In #143802 the stdio test cleanup missed a few places where errno was
being set to a failing value, and one where the framework needed to
included.
2025-06-11 16:52:21 -07:00
Alexey Samsonov
1ecd108cb7 [libc] Migrate stdio tests to ErrnoCheckingTest. (#143802)
Reduce the direct use of libc_errno in stdio unit tests by adopting
ErrnoCheckingTest where appropriate.

Also removes the libc_errno.h inclusions from stdlib.h tests that were
accidentally added in d87eea35fa
2025-06-11 16:22:17 -07:00
Joseph Huber
dc4335a2bf [libc] Perform bitfield zero initialization wave-parallel (#143607)
Summary:
We need to set the bitfield memory to zero because the system does not
guarantee zeroed out memory. Even if fresh pages are zero, the system
allows re-use so we would need a `kfd` level API to skip this step.

Because we can't this patch updates the logic to perform the zero
initialization wave-parallel. This reduces the amount of time it takes
to allocate a fresh by up to a tenth.

This has the unfortunate side effect that the control flow is more
convoluted and we waste some extra registers, but it's worth it to
reduce the slab allocation latency.
2025-06-11 18:22:05 -05:00
sribee8
79108da325 [libc][obvious] Changed incorrect type (#143780)
After changing mbstate_t to mbstate we forgot to change the
character_converter files to reflect it.

Co-authored-by: Sriya Pratipati <sriyap@google.com>
2025-06-11 13:28:55 -07:00
lntue
d87eea35fa [libc] Move libc_errno.h to libc/src/__support and make LIBC_ERRNO_MODE_SYSTEM to be header-only. (#143187)
This is the first step in preparation for:
https://discourse.llvm.org/t/rfc-make-clang-builtin-math-functions-constexpr-with-llvm-libc-to-support-c-23-constexpr-math-functions/86450
2025-06-11 16:25:27 -04:00
Uzair Nawaz
e389a0e7bb [libc] Switched calls to inline_memcpy to __builtin_memcpy for wide char utilities (#143011)
Switched calls to inline_memcpy to __builtin_memcpy for wide char
utilities
Removed unnecessary wctype_utils dependencies from the cmake file
2025-06-11 13:17:35 -07:00
Uzair Nawaz
52583b3ed7 [libc] Character converter skeleton class (#143619)
Made CharacterConverter class skeleton
2025-06-11 13:11:31 -07:00
Alexey Samsonov
5dafe9dca8 [libc] Reduce direct use of errno in src/stdlib and src/__support tests. (#143767)
* Get rid of libc_errno assignments in str_to_* __support tests, since
those API have been migrated to return error in a struct instead.
* Migrate tests for atof and to strto* functions from <stdlib.h> and for
strdup from <string.h> to use ErrnoCheckingTest harness.
2025-06-11 12:23:17 -07:00
William
117e78fe50 [libc] Add NULL macro definitions to header files (#142764)
By the C standard, <locale.h>, <stddef.h> <stdio.h>, <stdlib.h>,
<string.h>, <time.h>, and <wchar.h> require NULL to be defined.
2025-06-11 09:51:34 -07:00
Joseph Huber
f1575de4c5 [libc][NFC] Remove template from GPU allocator reference counter
Summary:
We don't need this to be generic, precommit for
https://github.com/llvm/llvm-project/pull/143607
2025-06-11 11:37:51 -05:00