https://github.com/bassiounix updated https://github.com/llvm/llvm-project/pull/164093
>From 1b15d0f4f8042092a731ad82bf578b626fbfb342 Mon Sep 17 00:00:00 2001 From: bassiounix <[email protected]> Date: Tue, 14 Oct 2025 07:06:06 +0300 Subject: [PATCH] [libc][stdlib][annex_k] Add set_constraint_handler_s. --- libc/config/linux/aarch64/entrypoints.txt | 1 + libc/config/linux/riscv/entrypoints.txt | 1 + libc/config/linux/x86_64/entrypoints.txt | 1 + libc/include/stdlib.yaml | 7 +++++ libc/src/stdlib/CMakeLists.txt | 11 ++++++++ libc/src/stdlib/set_constraint_handler_s.cpp | 28 ++++++++++++++++++++ libc/src/stdlib/set_constraint_handler_s.h | 21 +++++++++++++++ 7 files changed, 70 insertions(+) create mode 100644 libc/src/stdlib/set_constraint_handler_s.cpp create mode 100644 libc/src/stdlib/set_constraint_handler_s.h diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 9eb9bffb9c67e..68d1b51ef9aa9 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -1108,6 +1108,7 @@ if(LLVM_LIBC_FULL_BUILD) libc.src.stdlib.getenv libc.src.stdlib.ignore_handler_s libc.src.stdlib.quick_exit + libc.src.stdlib.set_constraint_handler_s # signal.h entrypoints libc.src.signal.kill diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index da01eb668f6d0..82a405ee411da 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -1237,6 +1237,7 @@ if(LLVM_LIBC_FULL_BUILD) libc.src.stdlib.getenv libc.src.stdlib.ignore_handler_s libc.src.stdlib.quick_exit + libc.src.stdlib.set_constraint_handler_s # signal.h entrypoints libc.src.signal.kill diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index 043d4340c95ca..e50a6cac0bbd5 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -1292,6 +1292,7 @@ if(LLVM_LIBC_FULL_BUILD) libc.src.stdlib.mbstowcs libc.src.stdlib.mbtowc libc.src.stdlib.quick_exit + libc.src.stdlib.set_constraint_handler_s libc.src.stdlib.wcstombs libc.src.stdlib.wctomb diff --git a/libc/include/stdlib.yaml b/libc/include/stdlib.yaml index 90d29faf4f97c..1d4a77b131728 100644 --- a/libc/include/stdlib.yaml +++ b/libc/include/stdlib.yaml @@ -219,6 +219,13 @@ functions: - type: void *__restrict - type: errno_t guard: 'LIBC_HAS_ANNEX_K' + - name: set_constraint_handler_s + standards: + - stdc + return_type: constraint_handler_t + arguments: + - type: constraint_handler_t + guard: 'LIBC_HAS_ANNEX_K' - name: srand standards: - stdc diff --git a/libc/src/stdlib/CMakeLists.txt b/libc/src/stdlib/CMakeLists.txt index e29c05319a9bd..dbe7dd02e81ad 100644 --- a/libc/src/stdlib/CMakeLists.txt +++ b/libc/src/stdlib/CMakeLists.txt @@ -737,6 +737,17 @@ add_entrypoint_object( .${LIBC_TARGET_OS}.system ) +add_entrypoint_object( + set_constraint_handler_s + SRCS + set_constraint_handler_s.cpp + HDRS + set_constraint_handler_s.h + DEPENDS + libc.src.__support.annex_k.abort_handler_s + libc.src.__support.annex_k.libc_constraint_handler +) + add_entrypoint_object( ignore_handler_s HDRS diff --git a/libc/src/stdlib/set_constraint_handler_s.cpp b/libc/src/stdlib/set_constraint_handler_s.cpp new file mode 100644 index 0000000000000..d3a16d77e3b0a --- /dev/null +++ b/libc/src/stdlib/set_constraint_handler_s.cpp @@ -0,0 +1,28 @@ +//===-- Implementation of set_constraint_handler_s ------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "set_constraint_handler_s.h" +#include "src/__support/annex_k/abort_handler_s.h" +#include "src/__support/annex_k/libc_constraint_handler.h" + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(constraint_handler_t, set_constraint_handler_s, + (constraint_handler_t handler)) { + auto previous_handler = annex_k::libc_constraint_handler; + + if (!handler) { + annex_k::libc_constraint_handler = &annex_k::abort_handler_s; + } else { + annex_k::libc_constraint_handler = handler; + } + + return previous_handler; +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/set_constraint_handler_s.h b/libc/src/stdlib/set_constraint_handler_s.h new file mode 100644 index 0000000000000..f5c6e01712ef0 --- /dev/null +++ b/libc/src/stdlib/set_constraint_handler_s.h @@ -0,0 +1,21 @@ +//===-- Implementation header for set_constraint_handler_s ------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_SRC_STDLIB_SET_CONSTRAINT_HANDLER_S_H +#define LLVM_LIBC_SRC_STDLIB_SET_CONSTRAINT_HANDLER_S_H + +#include "hdr/types/constraint_handler_t.h" +#include "src/__support/macros/config.h" + +namespace LIBC_NAMESPACE_DECL { + +constraint_handler_t set_constraint_handler_s(constraint_handler_t handler); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_STDLIB_SET_CONSTRAINT_HANDLER_S_H _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
