1c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* 2c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Copyright (C) 2008 The Android Open Source Project 3c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * All rights reserved. 4c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 5c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Redistribution and use in source and binary forms, with or without 6c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * modification, are permitted provided that the following conditions 7c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * are met: 8c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * * Redistributions of source code must retain the above copyright 9c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * notice, this list of conditions and the following disclaimer. 10c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * * Redistributions in binary form must reproduce the above copyright 11c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * notice, this list of conditions and the following disclaimer in 12c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * the documentation and/or other materials provided with the 13c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * distribution. 14c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 15c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * SUCH DAMAGE. 27c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */ 28c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef _SIGNAL_H_ 29c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define _SIGNAL_H_ 30c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 31c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <sys/cdefs.h> 32c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <limits.h> /* For LONG_BIT */ 33c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <string.h> /* For memset() */ 34c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <sys/types.h> 35c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <asm/signal.h> 36c65cfeb2b288b936960bbef4f10de506c12eab07David 'Digit' Turner#include <asm/sigcontext.h> 37c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 38c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __ARCH_SI_UID_T __kernel_uid32_t 39c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <asm/siginfo.h> 40c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#undef __ARCH_SI_UID_T 41c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 42c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner__BEGIN_DECLS 43c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 44c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnertypedef int sig_atomic_t; 45c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 46fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however 47fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * its definition is part of a #if __KERNEL__ .. #endif block in the original 48fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * kernel headers and is thus not part of our cleaned-up versions. 49fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * 50fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * Looking at the current kernel sources, it is defined as 64 for all 51fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * architectures except for the 'mips' one which set it to 128. 52fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner */ 53c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef _NSIG 54fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner# define _NSIG 64 55c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif 56c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 57c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern const char * const sys_siglist[]; 587012117d4ae7e9ca9e50812f55757411aa8f93a0David 'Digit' Turnerextern const char * const sys_signame[]; 59c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 60c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigismember(sigset_t *set, int signum) 61c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 62c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner unsigned long *local_set = (unsigned long *)set; 63c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner signum--; 64c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return (int)((local_set[signum/LONG_BIT] >> (signum%LONG_BIT)) & 1); 65c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 66c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 67c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 68c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigaddset(sigset_t *set, int signum) 69c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 70c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner unsigned long *local_set = (unsigned long *)set; 71c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner signum--; 72c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner local_set[signum/LONG_BIT] |= 1UL << (signum%LONG_BIT); 73c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 74c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 75c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 76c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 77c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigdelset(sigset_t *set, int signum) 78c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 79c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner unsigned long *local_set = (unsigned long *)set; 80c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner signum--; 81c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner local_set[signum/LONG_BIT] &= ~(1UL << (signum%LONG_BIT)); 82c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 83c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 84c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 85c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 86c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigemptyset(sigset_t *set) 87c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 88c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner memset(set, 0, sizeof *set); 89c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 90c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 91c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 92c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigfillset(sigset_t *set) 93c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 94c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner memset(set, ~0, sizeof *set); 95c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 96c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 97c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 98c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 99c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* compatibility types */ 100c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnertypedef void (*sig_t)(int); 101c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnertypedef sig_t sighandler_t; 102c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 103c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* differentiater between sysv and bsd behaviour 8*/ 104c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern __sighandler_t sysv_signal(int, __sighandler_t); 105c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern __sighandler_t bsd_signal(int, __sighandler_t); 106c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 107c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* the default is bsd */ 108c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ __sighandler_t signal(int s, __sighandler_t f) 109c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 110c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return bsd_signal(s,f); 111c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 112c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 113c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* the syscall itself */ 114c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern __sighandler_t __signal(int, __sighandler_t, int); 115c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 116c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigprocmask(int, const sigset_t *, sigset_t *); 117c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigaction(int, const struct sigaction *, struct sigaction *); 118c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 119c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigpending(sigset_t *); 120c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigsuspend(const sigset_t *); 121c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigwait(const sigset_t *set, int *sig); 122c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int siginterrupt(int sig, int flag); 123c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 124c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int raise(int); 125c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int kill(pid_t, int); 1267012117d4ae7e9ca9e50812f55757411aa8f93a0David 'Digit' Turnerextern int killpg(int pgrp, int sig); 1277c2ba504e9c10e67f27e7b0aff90981c469d2701David 'Digit' Turnerextern int sigaltstack(const stack_t *ss, stack_t *oss); 128c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 129c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 130c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner__END_DECLS 131c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 132c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* _SIGNAL_H_ */ 133