signal.h revision d8482b6c7eae54c37bc769030d60c2a5af187f89
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. */ 47d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes# define __ARCH_SI_UID_T __kernel_uid32_t /* TODO: 64-bit: remove this when we've switch 32-bit to uapi too. */ 4861fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# include <linux/signal.h> 4961fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# undef __ARCH_SI_UID_T 50c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#endif 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 54c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turnertypedef int sig_atomic_t; 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 56d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes/* TODO: 64-bit: we should probably #undef the uapi NSIG and add a unit test that NSIG == _NSIG && NSIG >= 64. */ 57c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#ifndef _NSIG 58d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes# define _NSIG 64 59d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes#endif 60d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes#ifndef NSIG 61d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes# define NSIG _NSIG 62c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#endif 631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 64da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughesextern const char* const sys_siglist[]; 65da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughesextern const char* const sys_signame[]; 66da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughes 67c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughestypedef __sighandler_t sig_t; /* BSD compatibility. */ 68c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughestypedef __sighandler_t sighandler_t; /* glibc compatibility. */ 69c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 70d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes#if defined(__LP64__) 71c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 72c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesstruct sigaction { 73c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes unsigned int sa_flags; 74c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes union { 75c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes sighandler_t sa_handler; 76c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes void (*sa_sigaction)(int, struct siginfo*, void*); 77c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes }; 78c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes sigset_t sa_mask; 79c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes void (*sa_restorer)(void); 80c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes}; 81c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 82d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes#elif defined(__mips__) 83d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes 84d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughesstruct sigaction { 85d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes unsigned int sa_flags; 86d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes union { 87d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes sighandler_t sa_handler; 88d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes void (*sa_sigaction) (int, struct siginfo*, void*); 89d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes }; 90d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes sigset_t sa_mask; 91d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes}; 92d8482b6c7eae54c37bc769030d60c2a5af187f89Elliott Hughes 93c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#endif 941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 9540d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigaction(int, const struct sigaction*, struct sigaction*); 96c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 97c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t signal(int, sighandler_t); 98c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t bsd_signal(int, sighandler_t); 99c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t sysv_signal(int, sighandler_t); 100c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 10140d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int siginterrupt(int, int); 102c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 103c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigaddset(sigset_t*, int); 104c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigdelset(sigset_t*, int); 105c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigemptyset(sigset_t*); 106c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigfillset(sigset_t*); 107c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigismember(const sigset_t*, int); 108c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 10940d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigpending(sigset_t*) __nonnull((1)); 11040d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigprocmask(int, const sigset_t*, sigset_t*); 11140d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigsuspend(const sigset_t*) __nonnull((1)); 11240d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigwait(const sigset_t*, int*) __nonnull((1, 2)); 1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int raise(int); 1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int kill(pid_t, int); 11640d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int killpg(int, int); 117c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 11840d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigaltstack(const stack_t*, stack_t*); 1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 12040d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern void psiginfo(const siginfo_t*, const char*); 12140d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern void psignal(int, const char*); 1221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _SIGNAL_H_ */ 126