166d00febSPaula Toth //===-- Linux implementation of signal ------------------------------------===// 25d2baa95SAlex Brachet // 35d2baa95SAlex Brachet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45d2baa95SAlex Brachet // See https://llvm.org/LICENSE.txt for license information. 55d2baa95SAlex Brachet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65d2baa95SAlex Brachet // 75d2baa95SAlex Brachet //===----------------------------------------------------------------------===// 85d2baa95SAlex Brachet 95d2baa95SAlex Brachet #include "src/signal/raise.h" 105d2baa95SAlex Brachet 11f626a350SNick Desaulniers #include "hdr/types/sigset_t.h" 125d2baa95SAlex Brachet #include "src/__support/common.h" 13*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 14f626a350SNick Desaulniers #include "src/signal/linux/signal_utils.h" 155d2baa95SAlex Brachet 16*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 175d2baa95SAlex Brachet 18a0b65a7bSMichael Jones LLVM_LIBC_FUNCTION(int, raise, (int sig)) { 19f626a350SNick Desaulniers sigset_t sigset; 20215c9fa4SSiva Chandra Reddy block_all_signals(sigset); 21b6bc9d72SGuillaume Chatelet long pid = LIBC_NAMESPACE::syscall_impl<long>(SYS_getpid); 22b6bc9d72SGuillaume Chatelet long tid = LIBC_NAMESPACE::syscall_impl<long>(SYS_gettid); 23b6bc9d72SGuillaume Chatelet int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_tgkill, pid, tid, sig); 24215c9fa4SSiva Chandra Reddy restore_signals(sigset); 255d2baa95SAlex Brachet return ret; 265d2baa95SAlex Brachet } 275d2baa95SAlex Brachet 28*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 29