signal.h revision a0cd9bc3392f56ca488bea61269d7468ae6c5dce
11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the documentation and/or other materials provided with the 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * distribution. 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 28c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SIGNAL_H_ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SIGNAL_H_ 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 32da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughes#include <errno.h> 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 34c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#include <limits.h> /* For LONG_BIT */ 35c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#include <string.h> /* For memset() */ 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h> 37c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 38d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes#if defined(__LP64__) || defined(__mips__) 39d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes/* For 64-bit (and mips), the kernel's struct sigaction doesn't match the POSIX one, 40c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes * so we need to expose our own and translate behind the scenes. */ 41c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes# define sigaction __kernel_sigaction 4261fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# include <linux/signal.h> 43c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes# undef sigaction 44c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#else 45c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes/* For 32-bit, we're stuck with the definitions we already shipped, 46c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes * even though they contain a sigset_t that's too small. */ 4761fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# include <linux/signal.h> 48c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#endif 491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 52c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turnertypedef int sig_atomic_t; 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 54199346a2abd8b6ba282e1fe291cc3766fa921f40Elliott Hughes/* The arm and x86 kernel header files don't define _NSIG. */ 55199346a2abd8b6ba282e1fe291cc3766fa921f40Elliott Hughes#ifndef _KERNEL__NSIG 56199346a2abd8b6ba282e1fe291cc3766fa921f40Elliott Hughes#define _KERNEL__NSIG 64 57c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#endif 581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 59199346a2abd8b6ba282e1fe291cc3766fa921f40Elliott Hughes/* Userspace's NSIG is the kernel's _NSIG + 1. */ 60199346a2abd8b6ba282e1fe291cc3766fa921f40Elliott Hughes#define _NSIG (_KERNEL__NSIG + 1) 61199346a2abd8b6ba282e1fe291cc3766fa921f40Elliott Hughes#define NSIG _NSIG 62199346a2abd8b6ba282e1fe291cc3766fa921f40Elliott Hughes 63da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughesextern const char* const sys_siglist[]; 64671e236d5fd2cae169c2a31d0a35e66c4fcc5556Elliott Hughesextern const char* const sys_signame[]; /* BSD compatibility. */ 65da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughes 66c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughestypedef __sighandler_t sig_t; /* BSD compatibility. */ 67c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughestypedef __sighandler_t sighandler_t; /* glibc compatibility. */ 68c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 69a0cd9bc3392f56ca488bea61269d7468ae6c5dceElliott Hughes#define si_timerid si_tid /* glibc compatibility. */ 70a0cd9bc3392f56ca488bea61269d7468ae6c5dceElliott Hughes 71d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes#if defined(__LP64__) 72c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 73c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesstruct sigaction { 74c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes unsigned int sa_flags; 75c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes union { 76c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes sighandler_t sa_handler; 77c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes void (*sa_sigaction)(int, struct siginfo*, void*); 78c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes }; 79c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes sigset_t sa_mask; 80c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes void (*sa_restorer)(void); 81c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes}; 82c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 83d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes#elif defined(__mips__) 84d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes 85d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughesstruct sigaction { 86d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes unsigned int sa_flags; 87d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes union { 88d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes sighandler_t sa_handler; 89d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes void (*sa_sigaction) (int, struct siginfo*, void*); 90d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes }; 91d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes sigset_t sa_mask; 92d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes}; 93d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes 94c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#endif 951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 9640d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigaction(int, const struct sigaction*, struct sigaction*); 97c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 98c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t signal(int, sighandler_t); 99c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t bsd_signal(int, sighandler_t); 100c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t sysv_signal(int, sighandler_t); 101c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 10240d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int siginterrupt(int, int); 103c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 104c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigaddset(sigset_t*, int); 105c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigdelset(sigset_t*, int); 106c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigemptyset(sigset_t*); 107c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigfillset(sigset_t*); 108c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigismember(const sigset_t*, int); 109c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 11040d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigpending(sigset_t*) __nonnull((1)); 11140d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigprocmask(int, const sigset_t*, sigset_t*); 11240d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigsuspend(const sigset_t*) __nonnull((1)); 11340d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigwait(const sigset_t*, int*) __nonnull((1, 2)); 1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int raise(int); 1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int kill(pid_t, int); 11740d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int killpg(int, int); 118c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 11940d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigaltstack(const stack_t*, stack_t*); 1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 12140d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern void psiginfo(const siginfo_t*, const char*); 12240d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern void psignal(int, const char*); 1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _SIGNAL_H_ */ 127