diff --git a/libc/src/__support/OSUtil/CMakeLists.txt b/libc/src/__support/OSUtil/CMakeLists.txt index ca3b3bf1263e0..94d1042ccbb4a 100644 --- a/libc/src/__support/OSUtil/CMakeLists.txt +++ b/libc/src/__support/OSUtil/CMakeLists.txt @@ -8,23 +8,10 @@ if(NOT TARGET ${target_os_util}) return() endif() -# The OSUtil is an object library in GPU mode. -if(NOT LIBC_TARGET_OS_IS_GPU) - add_header_library( - osutil - HDRS - io.h - quick_exit.h - syscall.h - DEPENDS - ${target_os_util} - ) -else() - add_object_library( - osutil - ALIAS - ${target_os_util} - DEPENDS - ${target_os_util} - ) -endif() +add_object_library( + osutil + ALIAS + ${target_os_util} + DEPENDS + ${target_os_util} +) diff --git a/libc/src/__support/OSUtil/baremetal/CMakeLists.txt b/libc/src/__support/OSUtil/baremetal/CMakeLists.txt index 280ff87cf1470..23da40326bbb7 100644 --- a/libc/src/__support/OSUtil/baremetal/CMakeLists.txt +++ b/libc/src/__support/OSUtil/baremetal/CMakeLists.txt @@ -1,8 +1,9 @@ -add_header_library( +add_object_library( baremetal_util + SRCS + quick_exit.cpp HDRS io.h - quick_exit.h DEPENDS libc.src.__support.common libc.src.__support.CPP.string_view diff --git a/libc/src/__support/OSUtil/baremetal/quick_exit.h b/libc/src/__support/OSUtil/baremetal/quick_exit.cpp similarity index 61% rename from libc/src/__support/OSUtil/baremetal/quick_exit.h rename to libc/src/__support/OSUtil/baremetal/quick_exit.cpp index 74f9142e21b81..f0971d4db352e 100644 --- a/libc/src/__support/OSUtil/baremetal/quick_exit.h +++ b/libc/src/__support/OSUtil/baremetal/quick_exit.cpp @@ -6,16 +6,13 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_BAREMETAL_QUICK_EXIT_H -#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_BAREMETAL_QUICK_EXIT_H - -namespace LIBC_NAMESPACE { +#include "src/__support/OSUtil/quick_exit.h" // This is intended to be provided by the vendor. -extern "C" void __llvm_libc_quick_exit(int status); +[[noreturn]] extern "C" void __llvm_libc_quick_exit(int status); -void quick_exit(int status) { __llvm_libc_quick_exit(status); } +namespace LIBC_NAMESPACE { -} // namespace LIBC_NAMESPACE +[[noreturn]] void quick_exit(int status) { __llvm_libc_quick_exit(status); } -#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_BAREMETAL_QUICK_EXIT_H +} // namespace LIBC_NAMESPACE diff --git a/libc/src/__support/OSUtil/darwin/CMakeLists.txt b/libc/src/__support/OSUtil/darwin/CMakeLists.txt index a3e6b93c8e992..4241bb37684f7 100644 --- a/libc/src/__support/OSUtil/darwin/CMakeLists.txt +++ b/libc/src/__support/OSUtil/darwin/CMakeLists.txt @@ -8,7 +8,6 @@ add_header_library( darwin_util HDRS io.h - quick_exit.h syscall.h DEPENDS .${LIBC_TARGET_ARCHITECTURE}.darwin_util diff --git a/libc/src/__support/OSUtil/darwin/quick_exit.h b/libc/src/__support/OSUtil/darwin/quick_exit.h deleted file mode 100644 index 71647f50def5e..0000000000000 --- a/libc/src/__support/OSUtil/darwin/quick_exit.h +++ /dev/null @@ -1,26 +0,0 @@ -//===--------- Darwin implementation of a quick exit function ---*- 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_OSUTIL_DARWIN_QUICK_EXIT_H -#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_DARWIN_QUICK_EXIT_H - -#include "syscall.h" // For internal syscall function. - -#include "src/__support/common.h" - -namespace LIBC_NAMESPACE { - -LIBC_INLINE void quick_exit(int status) { - for (;;) { - LIBC_NAMESPACE::syscall_impl(1 /* SYS_exit */, status); - } -} - -} // namespace LIBC_NAMESPACE - -#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_DARWIN_QUICK_EXIT_H diff --git a/libc/src/__support/OSUtil/gpu/CMakeLists.txt b/libc/src/__support/OSUtil/gpu/CMakeLists.txt index 8e892a7000c9b..0c89f9223678b 100644 --- a/libc/src/__support/OSUtil/gpu/CMakeLists.txt +++ b/libc/src/__support/OSUtil/gpu/CMakeLists.txt @@ -4,7 +4,6 @@ add_object_library( quick_exit.cpp io.cpp HDRS - quick_exit.h io.h DEPENDS libc.src.__support.common diff --git a/libc/src/__support/OSUtil/gpu/quick_exit.cpp b/libc/src/__support/OSUtil/gpu/quick_exit.cpp index 1a03be0ace672..af4795905e786 100644 --- a/libc/src/__support/OSUtil/gpu/quick_exit.cpp +++ b/libc/src/__support/OSUtil/gpu/quick_exit.cpp @@ -6,17 +6,14 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_GPU_QUICK_EXIT_H -#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_GPU_QUICK_EXIT_H - -#include "quick_exit.h" +#include "src/__support/OSUtil/quick_exit.h" #include "src/__support/RPC/rpc_client.h" #include "src/__support/macros/properties/architectures.h" namespace LIBC_NAMESPACE { -void quick_exit(int status) { +[[noreturn]] void quick_exit(int status) { // We want to first make sure the server is listening before we exit. rpc::Client::Port port = rpc::client.open(); port.send_and_recv([](rpc::Buffer *) {}, [](rpc::Buffer *) {}); @@ -29,5 +26,3 @@ void quick_exit(int status) { } } // namespace LIBC_NAMESPACE - -#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_GPU_QUICK_EXIT_H diff --git a/libc/src/__support/OSUtil/gpu/quick_exit.h b/libc/src/__support/OSUtil/gpu/quick_exit.h deleted file mode 100644 index b51385defbc0d..0000000000000 --- a/libc/src/__support/OSUtil/gpu/quick_exit.h +++ /dev/null @@ -1,18 +0,0 @@ -//===---------- GPU implementation of a quick exit function -----*- 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_OSUTIL_GPU_QUICK_EXIT_H -#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_GPU_QUICK_EXIT_H - -namespace LIBC_NAMESPACE { - -void quick_exit(int status); - -} // namespace LIBC_NAMESPACE - -#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_GPU_QUICK_EXIT_H diff --git a/libc/src/__support/OSUtil/linux/CMakeLists.txt b/libc/src/__support/OSUtil/linux/CMakeLists.txt index c27f9be746489..239d115704927 100644 --- a/libc/src/__support/OSUtil/linux/CMakeLists.txt +++ b/libc/src/__support/OSUtil/linux/CMakeLists.txt @@ -4,11 +4,12 @@ endif() add_subdirectory(${LIBC_TARGET_ARCHITECTURE}) -add_header_library( +add_object_library( linux_util + SRCS + quick_exit.cpp HDRS io.h - quick_exit.h syscall.h DEPENDS .${LIBC_TARGET_ARCHITECTURE}.linux_${LIBC_TARGET_ARCHITECTURE}_util diff --git a/libc/src/__support/OSUtil/linux/quick_exit.h b/libc/src/__support/OSUtil/linux/quick_exit.cpp similarity index 78% rename from libc/src/__support/OSUtil/linux/quick_exit.h rename to libc/src/__support/OSUtil/linux/quick_exit.cpp index 432395584d846..51b3231d389f2 100644 --- a/libc/src/__support/OSUtil/linux/quick_exit.h +++ b/libc/src/__support/OSUtil/linux/quick_exit.cpp @@ -6,13 +6,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_LINUX_QUICK_EXIT_H -#define LLVM_LIBC_SRC___SUPPORT_OSUTIL_LINUX_QUICK_EXIT_H - -#include "syscall.h" // For internal syscall function. - #include "src/__support/common.h" - +#include "syscall.h" // For internal syscall function. #include // For syscall numbers. namespace LIBC_NAMESPACE { @@ -22,7 +17,7 @@ namespace LIBC_NAMESPACE { #ifdef LIBC_TARGET_ARCH_IS_X86 __attribute__((no_stack_protector)) #endif -LIBC_INLINE void +__attribute__((noreturn)) void quick_exit(int status) { for (;;) { LIBC_NAMESPACE::syscall_impl(SYS_exit_group, status); @@ -31,5 +26,3 @@ quick_exit(int status) { } } // namespace LIBC_NAMESPACE - -#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_LINUX_QUICK_EXIT_H diff --git a/libc/src/__support/OSUtil/quick_exit.h b/libc/src/__support/OSUtil/quick_exit.h index 6c59c1afcda25..e445917059c3e 100644 --- a/libc/src/__support/OSUtil/quick_exit.h +++ b/libc/src/__support/OSUtil/quick_exit.h @@ -9,17 +9,10 @@ #ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_QUICK_EXIT_H #define LLVM_LIBC_SRC___SUPPORT_OSUTIL_QUICK_EXIT_H -#include "src/__support/macros/properties/architectures.h" +namespace LIBC_NAMESPACE { -#if defined(LIBC_TARGET_ARCH_IS_GPU) -#include "gpu/quick_exit.h" -#elif defined(__APPLE__) -#include "darwin/quick_exit.h" -#elif defined(__linux__) -#include "linux/quick_exit.h" -#elif defined(__ELF__) -// TODO: Ideally we would have LIBC_TARGET_OS_IS_BAREMETAL. -#include "baremetal/quick_exit.h" -#endif +[[noreturn]] void quick_exit(int status); + +} #endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_QUICK_EXIT_H diff --git a/libc/src/stdlib/CMakeLists.txt b/libc/src/stdlib/CMakeLists.txt index 22f7f990fb08a..76de9eb5579b8 100644 --- a/libc/src/stdlib/CMakeLists.txt +++ b/libc/src/stdlib/CMakeLists.txt @@ -394,10 +394,11 @@ add_entrypoint_object( CXX_STANDARD 20 # For constinit of the atexit callback list. DEPENDS - libc.src.__support.fixedvector + libc.src.__support.CPP.new + libc.src.__support.OSUtil.osutil libc.src.__support.blockstore + libc.src.__support.fixedvector libc.src.__support.threads.mutex - libc.src.__support.CPP.new ) add_entrypoint_object( diff --git a/libc/src/stdlib/_Exit.cpp b/libc/src/stdlib/_Exit.cpp index 85684d1e90879..233af20973924 100644 --- a/libc/src/stdlib/_Exit.cpp +++ b/libc/src/stdlib/_Exit.cpp @@ -13,9 +13,8 @@ namespace LIBC_NAMESPACE { -LLVM_LIBC_FUNCTION(void, _Exit, (int status)) { +[[noreturn]] LLVM_LIBC_FUNCTION(void, _Exit, (int status)) { quick_exit(status); - __builtin_unreachable(); } } // namespace LIBC_NAMESPACE diff --git a/libc/src/stdlib/exit.cpp b/libc/src/stdlib/exit.cpp index e754b34e46985..ba87bffaeb541 100644 --- a/libc/src/stdlib/exit.cpp +++ b/libc/src/stdlib/exit.cpp @@ -14,10 +14,9 @@ extern "C" void __cxa_finalize(void *); namespace LIBC_NAMESPACE { -LLVM_LIBC_FUNCTION(void, exit, (int status)) { +[[noreturn]] LLVM_LIBC_FUNCTION(void, exit, (int status)) { __cxa_finalize(nullptr); quick_exit(status); - __builtin_unreachable(); } } // namespace LIBC_NAMESPACE diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel index 0d531a3dc12a7..d47a992957415 100644 --- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel @@ -999,10 +999,7 @@ libc_support_library( libc_support_library( name = "__support_osutil_quick_exit", hdrs = ["src/__support/OSUtil/quick_exit.h"], - textual_hdrs = [ - "src/__support/OSUtil/linux/quick_exit.h", - #TODO: add support for GPU quick_exit (isn't just in a header.) - ], + srcs = ["src/__support/OSUtil/linux/quick_exit.cpp"], deps = [ ":__support_osutil_syscall", ],