xref: /llvm-project/libc/src/signal/linux/raise.cpp (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
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