-
Notifications
You must be signed in to change notification settings - Fork 14.8k
[libc][stdlib][annex_k] Add abort_handler_s. #163309
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: users/bassiounix/spr/10-13-_libc_annex_k_add_constraint_handler_t
Are you sure you want to change the base?
[libc][stdlib][annex_k] Add abort_handler_s. #163309
Conversation
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
@llvm/pr-subscribers-backend-risc-v @llvm/pr-subscribers-libc Author: Muhammad Bassiouni (bassiounix) ChangesRFC https://discourse.llvm.org/t/rfc-bounds-checking-interfaces-for-llvm-libc/87685 Add Full diff: https://github.com/llvm/llvm-project/pull/163309.diff 11 Files Affected:
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 4824684103983..d7bdfe117d286 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -1075,6 +1075,7 @@ if(LLVM_LIBC_FULL_BUILD)
# stdlib.h entrypoints
libc.src.stdlib._Exit
libc.src.stdlib.abort
+ libc.src.stdlib.abort_handler_s
libc.src.stdlib.at_quick_exit
libc.src.stdlib.atexit
libc.src.stdlib.exit
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 5f407e842121e..9064e7df400de 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -1202,6 +1202,7 @@ if(LLVM_LIBC_FULL_BUILD)
# stdlib.h entrypoints
libc.src.stdlib._Exit
libc.src.stdlib.abort
+ libc.src.stdlib.abort_handler_s
libc.src.stdlib.at_quick_exit
libc.src.stdlib.atexit
libc.src.stdlib.exit
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 87b78a337b875..0c825bdb19f35 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -1241,6 +1241,7 @@ if(LLVM_LIBC_FULL_BUILD)
# stdlib.h entrypoints
libc.src.stdlib._Exit
libc.src.stdlib.abort
+ libc.src.stdlib.abort_handler_s
libc.src.stdlib.at_quick_exit
libc.src.stdlib.atexit
libc.src.stdlib.exit
diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt
index b6d8b888fdffc..88ebd527a0a69 100644
--- a/libc/include/CMakeLists.txt
+++ b/libc/include/CMakeLists.txt
@@ -368,6 +368,7 @@ add_header_macro(
.llvm-libc-types.__search_compare_t
.llvm-libc-types.constraint_handler_t
.llvm-libc-types.div_t
+ .llvm-libc-types.errno_t
.llvm-libc-types.ldiv_t
.llvm-libc-types.lldiv_t
.llvm-libc-types.locale_t
diff --git a/libc/include/stdlib.yaml b/libc/include/stdlib.yaml
index 29fd6bc3a1e75..cf436c5a5ae61 100644
--- a/libc/include/stdlib.yaml
+++ b/libc/include/stdlib.yaml
@@ -14,6 +14,7 @@ types:
- type_name: __search_compare_t
- type_name: constraint_handler_t
- type_name: div_t
+ - type_name: errno_t
- type_name: ldiv_t
- type_name: lldiv_t
- type_name: locale_t
@@ -181,6 +182,15 @@ functions:
return_type: int
arguments:
- type: void
+ - name: abort_handler_s
+ standards:
+ - stdc
+ return_type: void
+ arguments:
+ - type: const char *__restrict
+ - type: void *__restrict
+ - type: errno_t
+ guard: 'LIBC_HAS_ANNEX_K'
- name: srand
standards:
- stdc
diff --git a/libc/src/__support/CMakeLists.txt b/libc/src/__support/CMakeLists.txt
index 0ef09a9b8c9d0..b71a56826156b 100644
--- a/libc/src/__support/CMakeLists.txt
+++ b/libc/src/__support/CMakeLists.txt
@@ -1,3 +1,4 @@
+add_subdirectory(annex_k)
add_subdirectory(CPP)
add_subdirectory(macros)
diff --git a/libc/src/__support/annex_k/CMakeLists.txt b/libc/src/__support/annex_k/CMakeLists.txt
new file mode 100644
index 0000000000000..78f5b3cddebd7
--- /dev/null
+++ b/libc/src/__support/annex_k/CMakeLists.txt
@@ -0,0 +1,12 @@
+add_header_library(
+ abort_handler_s
+ HDRS
+ abort_handler_s.h
+ DEPENDS
+ libc.hdr.stdio_macros
+ libc.hdr.types.errno_t
+ libc.src.__support.macros.config
+ libc.src.__support.macros.attributes
+ libc.src.__support.OSUtil.osutil
+ libc.src.stdlib.abort
+)
diff --git a/libc/src/__support/annex_k/abort_handler_s.h b/libc/src/__support/annex_k/abort_handler_s.h
new file mode 100644
index 0000000000000..dca3dcc2d9825
--- /dev/null
+++ b/libc/src/__support/annex_k/abort_handler_s.h
@@ -0,0 +1,43 @@
+//===-- Implementation for abort_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___SUPPORT_ANNEX_K_ABORT_HANDLER_S_H
+#define LLVM_LIBC_SRC___SUPPORT_ANNEX_K_ABORT_HANDLER_S_H
+
+#include "hdr/stdio_macros.h"
+#include "hdr/types/errno_t.h"
+#include "src/__support/OSUtil/io.h"
+#include "src/__support/common.h"
+#include "src/stdlib/abort.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+namespace annex_k {
+
+LIBC_INLINE static void abort_handler_s(const char *__restrict msg,
+ [[maybe_unused]] void *__restrict ptr,
+ [[maybe_unused]] errno_t error) {
+ write_to_stderr("abort_handler_s was called in response to a "
+ "runtime-constraint violation.\n\n");
+
+ if (msg)
+ write_to_stderr(msg);
+
+ write_to_stderr(
+ "\n\nNote to end users: This program was terminated as a result\
+of a bug present in the software. Please reach out to your\
+software's vendor to get more help.\n");
+
+ abort();
+}
+
+} // namespace annex_k
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC___SUPPORT_ANNEX_K_ABORT_HANDLER_S_H
diff --git a/libc/src/stdlib/CMakeLists.txt b/libc/src/stdlib/CMakeLists.txt
index c464f82dcbda7..8fd149880e2d5 100644
--- a/libc/src/stdlib/CMakeLists.txt
+++ b/libc/src/stdlib/CMakeLists.txt
@@ -647,6 +647,16 @@ add_entrypoint_object(
.${LIBC_TARGET_OS}.abort
)
+add_entrypoint_object(
+ abort_handler_s
+ SRCS
+ abort_handler_s.cpp
+ HDRS
+ abort_handler_s.h
+ DEPENDS
+ libc.src.__support.annex_k.abort_handler_s
+)
+
add_entrypoint_object(
system
ALIAS
diff --git a/libc/src/stdlib/abort_handler_s.cpp b/libc/src/stdlib/abort_handler_s.cpp
new file mode 100644
index 0000000000000..85a4cd4858315
--- /dev/null
+++ b/libc/src/stdlib/abort_handler_s.cpp
@@ -0,0 +1,20 @@
+//===-- Implementation for abort_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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/stdlib/abort_handler_s.h"
+#include "src/__support/annex_k/abort_handler_s.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(void, abort_handler_s,
+ (const char *__restrict msg, void *__restrict ptr,
+ errno_t error)) {
+ return annex_k::abort_handler_s(msg, ptr, error);
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/stdlib/abort_handler_s.h b/libc/src/stdlib/abort_handler_s.h
new file mode 100644
index 0000000000000..b97a081b036d2
--- /dev/null
+++ b/libc/src/stdlib/abort_handler_s.h
@@ -0,0 +1,22 @@
+//===-- Implementation header for abort_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_ABORT_HANDLER_S_H
+#define LLVM_LIBC_SRC_STDLIB_ABORT_HANDLER_S_H
+
+#include "hdr/types/errno_t.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+void abort_handler_s(const char *__restrict msg, void *__restrict ptr,
+ errno_t error);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_STDLIB_ABORT_HANDLER_S_H
|
e9d5c9b
to
8a2fcfe
Compare
8a2fcfe
to
21baacc
Compare
RFC https://discourse.llvm.org/t/rfc-bounds-checking-interfaces-for-llvm-libc/87685
Add
abort_handler_s
required by Annex K interface in LLVM libc.