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