blob: dfe0c6f981193b8ccdc9c1699052b1846093f61f [file] [log] [blame]
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -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
Ian Rogerscf7f1912014-10-22 22:06:39 -070017#include <stdio.h>
18#include <stdlib.h>
19
Andreas Gampec60e1b72015-07-30 08:57:50 -070020#ifdef __ANDROID__
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -070021#include <android/log.h>
22#else
23#include <stdarg.h>
24#include <iostream>
25#endif
26
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -070027#include "sigchain.h"
28
Andreas Gampe9d9cfa82014-11-03 20:25:24 -080029#define ATTRIBUTE_UNUSED __attribute__((__unused__))
30
Andreas Gampeba1ff842015-04-06 14:33:54 -070031// We cannot annotate the declarations, as they are not no-return in the non-dummy version.
32#pragma GCC diagnostic push
33#pragma GCC diagnostic ignored "-Wunknown-pragmas"
34#pragma GCC diagnostic ignored "-Wmissing-noreturn"
35
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -070036static void log(const char* format, ...) {
37 char buf[256];
38 va_list ap;
39 va_start(ap, format);
40 vsnprintf(buf, sizeof(buf), format, ap);
Andreas Gampec60e1b72015-07-30 08:57:50 -070041#ifdef __ANDROID__
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -070042 __android_log_write(ANDROID_LOG_ERROR, "libsigchain", buf);
43#else
44 std::cout << buf << "\n";
45#endif
46 va_end(ap);
47}
48
Andreas Gampe277ccbd2014-11-03 21:36:10 -080049namespace art {
50
51
Andreas Gampe9d9cfa82014-11-03 20:25:24 -080052extern "C" void ClaimSignalChain(int signal ATTRIBUTE_UNUSED,
53 struct sigaction* oldaction ATTRIBUTE_UNUSED) {
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -070054 log("ClaimSignalChain is not exported by the main executable.");
55 abort();
56}
57
Andreas Gampe9d9cfa82014-11-03 20:25:24 -080058extern "C" void UnclaimSignalChain(int signal ATTRIBUTE_UNUSED) {
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -070059 log("UnclaimSignalChain is not exported by the main executable.");
60 abort();
61}
62
Andreas Gampe9d9cfa82014-11-03 20:25:24 -080063extern "C" void InvokeUserSignalHandler(int sig ATTRIBUTE_UNUSED,
64 siginfo_t* info ATTRIBUTE_UNUSED,
65 void* context ATTRIBUTE_UNUSED) {
Dmitriy Ivanovf57874d2014-10-07 13:43:23 -070066 log("InvokeUserSignalHandler is not exported by the main executable.");
67 abort();
68}
69
70extern "C" void InitializeSignalChain() {
71 log("InitializeSignalChain is not exported by the main executable.");
72 abort();
73}
Mathieu Chartierd0004802014-10-15 16:59:47 -070074
Andreas Gampe9d9cfa82014-11-03 20:25:24 -080075extern "C" void EnsureFrontOfChain(int signal ATTRIBUTE_UNUSED,
76 struct sigaction* expected_action ATTRIBUTE_UNUSED) {
Mathieu Chartierd0004802014-10-15 16:59:47 -070077 log("EnsureFrontOfChain is not exported by the main executable.");
78 abort();
79}
Andreas Gampe277ccbd2014-11-03 21:36:10 -080080
Andreas Gampe03c2cc82015-05-22 18:31:50 -070081extern "C" void SetSpecialSignalHandlerFn(int signal ATTRIBUTE_UNUSED,
82 SpecialSignalHandlerFn fn ATTRIBUTE_UNUSED) {
83 log("SetSpecialSignalHandlerFn is not exported by the main executable.");
84 abort();
85}
86
Andreas Gampeba1ff842015-04-06 14:33:54 -070087#pragma GCC diagnostic pop
88
Andreas Gampe277ccbd2014-11-03 21:36:10 -080089} // namespace art