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 #include "src/signal/linux/signal.h" 115d2baa95SAlex Brachet 125d2baa95SAlex Brachet #include "src/__support/common.h" 135d2baa95SAlex Brachet 145d2baa95SAlex Brachet namespace __llvm_libc { 155d2baa95SAlex Brachet 16*a0b65a7bSMichael Jones LLVM_LIBC_FUNCTION(int, raise, (int sig)) { 175d2baa95SAlex Brachet __llvm_libc::Sigset sigset; 181b1a97e9SAlex Brachet __llvm_libc::block_all_signals(sigset); 195d2baa95SAlex Brachet long pid = __llvm_libc::syscall(SYS_getpid); 205d2baa95SAlex Brachet long tid = __llvm_libc::syscall(SYS_gettid); 215d2baa95SAlex Brachet int ret = __llvm_libc::syscall(SYS_tgkill, pid, tid, sig); 225d2baa95SAlex Brachet __llvm_libc::restore_signals(sigset); 235d2baa95SAlex Brachet return ret; 245d2baa95SAlex Brachet } 255d2baa95SAlex Brachet 265d2baa95SAlex Brachet } // namespace __llvm_libc 27