blob: 13ec85de78de1798a9dae48bcfbad12598388fbc [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
Martin Stjernholm2842ac12020-04-16 23:49:39 +010020// TODO(b/142944043): Symbol changes here currently need to be reflected in
21// version scripts in frameworks/base/cmds/app_process. The plan is to convert
22// libsigchain to a shared lib to get rid of them.
23
Dave Allisonf4b80bc2014-05-14 15:41:25 -070024#include <signal.h>
Josh Gao6b2018f2017-05-04 13:55:28 -070025#include <stdint.h>
Ian Rogers22d5e732014-07-15 22:23:51 -070026
Mathieu Chartierd0004802014-10-15 16:59:47 -070027namespace art {
28
Josh Gao6b2018f2017-05-04 13:55:28 -070029// Handlers that exit without returning to their caller (e.g. via siglongjmp) must pass this flag.
30static constexpr uint64_t SIGCHAIN_ALLOW_NORETURN = 0x1UL;
31
32struct SigchainAction {
33 bool (*sc_sigaction)(int, siginfo_t*, void*);
34 sigset_t sc_mask;
35 uint64_t sc_flags;
36};
37
38extern "C" void AddSpecialSignalHandlerFn(int signal, SigchainAction* sa);
39extern "C" void RemoveSpecialSignalHandlerFn(int signal, bool (*fn)(int, siginfo_t*, void*));
Jin Qian33dca562017-03-18 02:51:37 +000040
Josh Gao85a78cf2017-03-20 16:26:42 -070041extern "C" void EnsureFrontOfChain(int signal);
randy.jeongac2260a2019-05-27 10:29:09 +090042extern "C" void SkipAddSignalHandler(bool value);
Mathieu Chartierd0004802014-10-15 16:59:47 -070043
44} // namespace art
45
Dave Allisonf4b80bc2014-05-14 15:41:25 -070046#endif // ART_SIGCHAINLIB_SIGCHAIN_H_