Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions libc/config/linux/aarch64/entrypoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions libc/config/linux/riscv/entrypoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions libc/config/linux/x86_64/entrypoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions libc/include/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 13 additions & 1 deletion libc/include/stdlib.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ standards:
merge_yaml_files:
- stdlib-malloc.yaml
macros:
- macro_name: NULL
- macro_name: 'LIBC_HAS_ANNEX_K'
macro_header: annex-k-macros.h
- macro_name: 'NULL'
macro_header: null-macro.h
types:
- type_name: __atexithandler_t
Expand All @@ -14,6 +16,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
Expand Down Expand Up @@ -181,6 +184,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
Expand Down
1 change: 1 addition & 0 deletions libc/src/__support/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
add_subdirectory(annex_k)
add_subdirectory(CPP)
add_subdirectory(macros)

Expand Down
12 changes: 12 additions & 0 deletions libc/src/__support/annex_k/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
)
43 changes: 43 additions & 0 deletions libc/src/__support/annex_k/abort_handler_s.h
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions libc/src/stdlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions libc/src/stdlib/abort_handler_s.cpp
Original file line number Diff line number Diff line change
@@ -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
22 changes: 22 additions & 0 deletions libc/src/stdlib/abort_handler_s.h
Original file line number Diff line number Diff line change
@@ -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
Loading