summaryrefslogtreecommitdiff
path: root/libc/src/errno/libc_errno.cpp
AgeCommit message (Collapse)Author
2025-08-12[libc] Remove LIBC_ERRNO_MODE_SYSTEM mode. (#153077)Alexey Samsonov
Use LIBC_ERRNO_MODE_SYSTEM_INLINE instead as the default for the "public packaging" (i.e. release mode) of an overlay build. The Bazel build has already switched to use it by default in 5ccc734fa0355f971f8f515457a0bece33ab6642. This should be a safe change, as LIBC_ERRNO_MODE_SYSTEM_INLINE works a drop-in (but simpler) LIBC_ERRNO_MODE_SYSTEM replacement. Remove the associated code paths and config settings. Fixes issue #143454.
2025-06-11[libc] Move libc_errno.h to libc/src/__support and make ↵lntue
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
2024-07-23[libc] Fix missing default value for errno config (#100175)Joseph Huber
Summary: The configs all need default values which targets then override. This one was an empty string which made the logic report an error. The only reason it wasn't a build failure was because of a stray `:`.
2024-07-13[libc] Mark all __llvm_libc_errno definitions as noexcept (#98762)Petr Hosek
The definitions must match the previous declaration in errno.h.
2024-07-13[libc] Remove src/errno/errno.h (#98759)Petr Hosek
This addresses the build error introduced in #98287 where src/errno/errno.h is included instead of the system errno.h. We instead move the declaration to libc_errno.h.
2024-07-13[libc] Support configurable errno modes (#98287)Petr Hosek
Rather than selecting the errno implementation based on the platform which doesn't provide the necessary flexibility, make it configurable. The errno value location is returned by `int *__llvm_libc_errno()` which is a common design used by other C libraries.
2024-07-12[libc] Migrate to using LIBC_NAMESPACE_DECL for namespace declaration (#98597)Petr Hosek
This is a part of #97655.
2024-07-12Revert "[libc] Migrate to using LIBC_NAMESPACE_DECL for namespace ↵Mehdi Amini
declaration" (#98593) Reverts llvm/llvm-project#98075 bots are broken
2024-07-11[libc] Migrate to using LIBC_NAMESPACE_DECL for namespace declaration (#98075)Petr Hosek
This is a part of #97655.
2024-07-01[libc] Partially implement 'errno' on the GPU (#97107)Joseph Huber
Summary: The `errno` variable is expected to be `thread_local` by the standard. However, the GPU targets do not support `thread_local` and implementing that would be a large endeavor. Because of that, we previously didn't provide the `errno` symbol at all. However, to build some programs we at least need to be able to link against `errno`. Many things that would normally set `errno` completely ignore it currently (i.e. stdio) but some programs still need to be able to link against correct C programs. For this purpose this patch exports the `errno` symbol as a simple global. Internally, this will be updated atomically so it's at least not racy. Externally, this will be on the user. I've updated the documentation to state as such. This is required to get `libc++` to build.
2024-05-14[libc][errno] Remove unnecessary include (#92063)Robin Caloudis
Since https://github.com/llvm/llvm-project/pull/91150, a proxy header for the errno macros is available and gets included in `libc_errno.h` since then. As `libc_errno.cpp` includes `libc_errno.h`, which already includes the proxy header `hdr/errno_macros.h`, there's no need to include it in `libc_errno.cpp` if we are in overlay mode, because the proxy header takes care to either include our header from libc/include/ (fullbuild) or the corresponding underlying system header (overlay).
2024-05-13[libc][errno] Use macro instead of system header (#91150)Robin Caloudis
## Why Currently, the system header `errno.h` is included in `libc_errno.h`, which is supposed to be consumed by internal implementations only. As unit and hermetic tests should never use `#include <errno.h>` but instead use `#include "src/errno/libc_errno.h"`, we do not want to implicitly include `errno.h`. In order to have a clear seperation between those two, we want to pull out the definitions of errno numbers from `errno.h`. ## What * Extract the definitions of errno numbers from [include/errno.h.def](https://github.com/llvm/llvm-project/pull/91150/files#diff-ed38ed463ed50571b498a5b69039cab58dc9d145da7f751a24da9d77f07781cd) and place it under [include/llvm-libc-macros/linux/error-number-macros.h](https://github.com/llvm/llvm-project/pull/91150/files#diff-d6192866629690ebb7cefa1f0a90b6675073e9642f3279df08a04dcdb05fd892) * Provide mips-specific errno numbers in [include/llvm-libc-macros/linux/mips/error-number-macros.h](https://github.com/llvm/llvm-project/pull/91150/files#diff-3fd35a4c94e0cc359933e497b10311d857857b2e173e8afebc421b04b7527743) * Find definition of mips errno numbers in glibc [here](https://github.com/bminor/glibc/blob/ea73eb5f581ef5931fd67005aa0c526ba43366c9/sysdeps/unix/sysv/linux/mips/bits/errno.h#L32-L50) (equally defined in the Linux kernel) * Provide sparc-specific errno numbers in [include/llvm-libc-macros/linux/sparc/error-number-macros.h](https://github.com/llvm/llvm-project/pull/91150/files#diff-5f16ffb2a51a6f72ebd4403aca7e1edea48289c99dd5978a1c84385bec4f226b) * Find definition of sparc errno numbers in glibc [here](https://github.com/bminor/glibc/blob/ea73eb5f581ef5931fd67005aa0c526ba43366c9/sysdeps/unix/sysv/linux/sparc/bits/errno.h#L33-L51) (equally defined in the Linux kernel) * Include proxy header `errno_macros.h` instead of the system header `errno.h` in `libc_errno.h`/`libc_errno.cpp` Closes https://github.com/llvm/llvm-project/issues/80172
2024-02-06[libc][NFC] Fix extraneous namespace on Errno (#80894)michaelrj-google
The Errno type doesn't need to be explicitly namespaced now that it's enclosed in a namespace.
2024-02-06[libc] Move libc_errno inside of LIBC_NAMESPACE (#80774)michaelrj-google
Having libc_errno outside of the namespace causes versioning issues when trying to link the tests against LLVM-libc. Most of this patch is just moving libc_errno inside the namespace in tests. This isn't necessary in the function implementations since those are already inside the namespace.
2024-02-01[libc] Update libc_errno to work correctly in both overlay and full build ↵lntue
modes. (#80177)
2023-09-26[libc] Mass replace enclosing namespace (#67032)Guillaume Chatelet
This is step 4 of https://discourse.llvm.org/t/rfc-customizable-namespace-to-allow-testing-the-libc-when-the-system-libc-is-also-llvms-libc/73079
2023-06-02[libc] Implement 'errno' on the GPU as a global integer internallyJoseph Huber
The C standard asserts that the `errno` value is an l-value thread local integer. We cannot provide a generic thread local integer on the GPU currently without some workarounds. Previously, we worked around this by implementing the `errno` value as a special consumer class that made all the writes disappear. However, this is problematic for internal tests. Currently there are build failures because of this handling and it's only likely to cause more problems the more we do this. This patch instead makes the internal target used for testing export the `errno` value as a simple global integer. This allows us to use and test the `errno` interface correctly assuming we run with a single thread. Because this is only used for the non-exported target we still do not provide this feature in the version that users will use so we do not need to worrk about it being incorrect in general. Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D152015
2023-05-25[libc] Add macro LIBC_THREAD_LOCAL.Siva Chandra Reddy
It resolves to thread_local on all platform except for the GPUs on which it resolves to nothing. The use of thread_local in the source code has been replaced with the new macro. Reviewed By: jhuber6 Differential Revision: https://reviews.llvm.org/D151486
2023-04-25[libc] Fix including 'libc_errno.h' incorrectlyJoseph Huber
Summary: This causes problems when included. Fix this to hopefully get the bots working again.
2023-04-25[libc][fix] Add missing 'errno' header for the GPU libcJoseph Huber
Summary: The previous GPU `libc` patch added support for `atoi`. However, it didn't also enable generating the errno header. This caused including it to use the system's header which invariably will cause compiler problems.
2023-04-25[libc] Ignore 'errno' on the GPU and support 'atoi'Joseph Huber
The 'errno' value is most likely not useful on the GPU and it prevents us from providing certain functions on the GPU that depend on it, like `atoi`. This patch makes the necessary changes to support `errno` by simple replacing it with a consumer class. Supporting `errno` on the GPU is possible in some aspects. The first approach would be to use a buffer of shared memory that has enough space for all threads. Another option would be to change code generation to support `thread_local` using `address_space(5)` memory allocated at kernel launch. The former could look like the following, which could be implemented in a later patch: ``` template <typename T> using SharedBuffer = T[gpu::MAX_THREADS] [[clang::address_space(3)]]; template <typename T> struct ErrnoSetter { constexpr ErrnoSetter(SharedBuffer<T> &storage) : storage(storage) {} SharedBuffer<T> &storage; void operator=(const T &val) { storage[gpu::get_thread_id()] = val; } }; static SharedBuffer<int> thread_local_buffer [[clang::loader_uninitialized]]; ErrnoSetter<int> __llvmlibc_internal_errno(thread_local_buffer); ``` Reviewed By: sivachandra Differential Revision: https://reviews.llvm.org/D149107
2023-03-14[libc] Make libc_errno point to internal errno for non-public builds.Siva Chandra Reddy
The macro llvmlibc_errno has also been removed. This change completes the switch to using a hermetic errno for unit tests. Fixes #61037 Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D146005
2023-02-28[libc][NFC] Refactor internal errno.Siva Chandra Reddy
This is in preparation for the transition to a solution to make libc tests hermetic with respect to their use of errno. The implementation of strdup has been switched over to libc_errno as an example of what the code looks like in the new way. See #61037 for more information. Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D144928