[llvm-branch-commits] [libc] [libc][stdlib][annex_k] Add set_constraint_handler_s. (PR #164093)
Muhammad Bassiouni via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Oct 22 11:32:35 PDT 2025
https://github.com/bassiounix updated https://github.com/llvm/llvm-project/pull/164093
>From 92635e84d976362e05a2c986645d2bad9f38ff9b Mon Sep 17 00:00:00 2001
From: bassiounix <muhammad.m.bassiouni at gmail.com>
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 97393d0c4ef3b..99ef345fd6eb7 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -1084,6 +1084,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 0efde7add2101..09a234d0cd6f1 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -1212,6 +1212,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 f4658ff5f9ad8..910bfbbfb9c22 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -1251,6 +1251,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/include/stdlib.yaml b/libc/include/stdlib.yaml
index 7c3b113a62415..49d45f105fe7a 100644
--- a/libc/include/stdlib.yaml
+++ b/libc/include/stdlib.yaml
@@ -202,6 +202,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 5efd7f13ff3ee..c380657300cfe 100644
--- a/libc/src/stdlib/CMakeLists.txt
+++ b/libc/src/stdlib/CMakeLists.txt
@@ -664,6 +664,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
More information about the llvm-branch-commits
mailing list