blob: 23fba030d23ce957c88a548ff10841b1613448d0 [file] [log] [blame]
Dave Allisonf4b80bc2014-05-14 15:41:25 -07001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ART_SIGCHAINLIB_SIGCHAIN_H_
18#define ART_SIGCHAINLIB_SIGCHAIN_H_
19
20#include <signal.h>
Josh Gao6b2018f2017-05-04 13:55:28 -070021#include <stdint.h>
Ian Rogers22d5e732014-07-15 22:23:51 -070022
Mathieu Chartierd0004802014-10-15 16:59:47 -070023namespace art {
24
Josh Gao6b2018f2017-05-04 13:55:28 -070025// Handlers that exit without returning to their caller (e.g. via siglongjmp) must pass this flag.
26static constexpr uint64_t SIGCHAIN_ALLOW_NORETURN = 0x1UL;
27
28struct SigchainAction {
29 bool (*sc_sigaction)(int, siginfo_t*, void*);
30 sigset_t sc_mask;
31 uint64_t sc_flags;
32};
33
34extern "C" void AddSpecialSignalHandlerFn(int signal, SigchainAction* sa);
35extern "C" void RemoveSpecialSignalHandlerFn(int signal, bool (*fn)(int, siginfo_t*, void*));
Jin Qian33dca562017-03-18 02:51:37 +000036
Josh Gao85a78cf2017-03-20 16:26:42 -070037extern "C" void EnsureFrontOfChain(int signal);
Mathieu Chartierd0004802014-10-15 16:59:47 -070038
39} // namespace art
40
Dave Allisonf4b80bc2014-05-14 15:41:25 -070041#endif // ART_SIGCHAINLIB_SIGCHAIN_H_