Elliott Hughes | 21b56eb | 2017-10-20 17:57:17 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2017 The Android Open Source Project |
| 3 | * All rights reserved. |
| 4 | * |
| 5 | * Redistribution and use in source and binary forms, with or without |
| 6 | * modification, are permitted provided that the following conditions |
| 7 | * are met: |
| 8 | * * Redistributions of source code must retain the above copyright |
| 9 | * notice, this list of conditions and the following disclaimer. |
| 10 | * * Redistributions in binary form must reproduce the above copyright |
| 11 | * notice, this list of conditions and the following disclaimer in |
| 12 | * the documentation and/or other materials provided with the |
| 13 | * distribution. |
| 14 | * |
| 15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 16 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 17 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 18 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
| 19 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
| 20 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| 21 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
| 22 | * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
| 23 | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| 24 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
| 25 | * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 26 | * SUCH DAMAGE. |
| 27 | */ |
| 28 | |
| 29 | #include <signal.h> |
| 30 | |
| 31 | #include "header_checks.h" |
| 32 | |
| 33 | static void signal_h() { |
| 34 | void (*h)(int); |
| 35 | h = SIG_DFL; |
| 36 | h = SIG_ERR; |
| 37 | h = SIG_HOLD; |
| 38 | h = SIG_IGN; |
| 39 | |
| 40 | TYPE(pthread_t); |
| 41 | TYPE(size_t); |
| 42 | TYPE(uid_t); |
| 43 | |
| 44 | TYPE(struct timespec); |
| 45 | |
| 46 | TYPE(sig_atomic_t); |
| 47 | TYPE(pid_t); |
| 48 | |
| 49 | TYPE(pthread_attr_t); |
| 50 | |
| 51 | TYPE(struct sigevent); |
| 52 | STRUCT_MEMBER(struct sigevent, int, sigev_notify); |
| 53 | STRUCT_MEMBER(struct sigevent, int, sigev_signo); |
| 54 | STRUCT_MEMBER(struct sigevent, union sigval, sigev_value); |
| 55 | STRUCT_MEMBER_FUNCTION_POINTER(struct sigevent, void (*f)(union sigval), sigev_notify_function); |
George Burgess IV | 08fd072 | 2019-01-15 19:00:11 -0800 | [diff] [blame] | 56 | #if defined(__BIONIC__) |
Elliott Hughes | 21b56eb | 2017-10-20 17:57:17 -0700 | [diff] [blame] | 57 | STRUCT_MEMBER(struct sigevent, void*, sigev_notify_attributes); |
| 58 | #else |
| 59 | STRUCT_MEMBER(struct sigevent, pthread_attr_t*, sigev_notify_attributes); |
| 60 | #endif |
| 61 | |
| 62 | MACRO(SIGEV_NONE); |
| 63 | MACRO(SIGEV_SIGNAL); |
| 64 | MACRO(SIGEV_THREAD); |
| 65 | |
| 66 | TYPE(union sigval); |
| 67 | STRUCT_MEMBER(union sigval, int, sival_int); |
| 68 | STRUCT_MEMBER(union sigval, void*, sival_ptr); |
| 69 | |
| 70 | int i; |
| 71 | i = SIGRTMIN; |
| 72 | i = SIGRTMAX; |
| 73 | |
| 74 | MACRO(SIGABRT); |
| 75 | MACRO(SIGALRM); |
| 76 | MACRO(SIGBUS); |
| 77 | MACRO(SIGCHLD); |
| 78 | MACRO(SIGCONT); |
| 79 | MACRO(SIGFPE); |
| 80 | MACRO(SIGHUP); |
| 81 | MACRO(SIGILL); |
| 82 | MACRO(SIGINT); |
| 83 | MACRO(SIGKILL); |
| 84 | MACRO(SIGPIPE); |
| 85 | MACRO(SIGQUIT); |
| 86 | MACRO(SIGSEGV); |
| 87 | MACRO(SIGSTOP); |
| 88 | MACRO(SIGTERM); |
| 89 | MACRO(SIGTSTP); |
| 90 | MACRO(SIGTTIN); |
| 91 | MACRO(SIGTTOU); |
| 92 | MACRO(SIGUSR1); |
| 93 | MACRO(SIGUSR2); |
| 94 | MACRO(SIGPOLL); |
| 95 | MACRO(SIGPROF); |
| 96 | MACRO(SIGSYS); |
| 97 | MACRO(SIGTRAP); |
| 98 | MACRO(SIGURG); |
| 99 | MACRO(SIGVTALRM); |
| 100 | MACRO(SIGXCPU); |
| 101 | MACRO(SIGXFSZ); |
| 102 | |
| 103 | TYPE(struct sigaction); |
| 104 | STRUCT_MEMBER_FUNCTION_POINTER(struct sigaction, void (*f)(int), sa_handler); |
| 105 | STRUCT_MEMBER(struct sigaction, sigset_t, sa_mask); |
Elliott Hughes | 21b56eb | 2017-10-20 17:57:17 -0700 | [diff] [blame] | 106 | STRUCT_MEMBER(struct sigaction, int, sa_flags); |
Elliott Hughes | 21b56eb | 2017-10-20 17:57:17 -0700 | [diff] [blame] | 107 | STRUCT_MEMBER_FUNCTION_POINTER(struct sigaction, void (*f)(int, siginfo_t*, void*), sa_sigaction); |
| 108 | |
| 109 | i = SIG_BLOCK; |
| 110 | i = SIG_UNBLOCK; |
| 111 | i = SIG_SETMASK; |
| 112 | |
| 113 | MACRO(SA_NOCLDSTOP); |
| 114 | MACRO(SA_ONSTACK); |
| 115 | MACRO(SA_RESETHAND); |
| 116 | MACRO(SA_RESTART); |
| 117 | MACRO(SA_SIGINFO); |
| 118 | MACRO(SA_NOCLDWAIT); |
| 119 | MACRO(SA_NODEFER); |
| 120 | |
| 121 | MACRO(SS_ONSTACK); |
| 122 | MACRO(SS_DISABLE); |
| 123 | |
| 124 | MACRO(MINSIGSTKSZ); |
| 125 | MACRO(SIGSTKSZ); |
| 126 | |
| 127 | TYPE(mcontext_t); |
| 128 | |
| 129 | TYPE(ucontext_t); |
| 130 | STRUCT_MEMBER(ucontext_t, ucontext_t*, uc_link); |
| 131 | STRUCT_MEMBER(ucontext_t, sigset_t, uc_sigmask); |
| 132 | STRUCT_MEMBER(ucontext_t, stack_t, uc_stack); |
| 133 | STRUCT_MEMBER(ucontext_t, mcontext_t, uc_mcontext); |
| 134 | |
| 135 | TYPE(stack_t); |
| 136 | STRUCT_MEMBER(stack_t, void*, ss_sp); |
| 137 | STRUCT_MEMBER(stack_t, size_t, ss_size); |
| 138 | STRUCT_MEMBER(stack_t, int, ss_flags); |
| 139 | |
| 140 | TYPE(siginfo_t); |
| 141 | STRUCT_MEMBER(siginfo_t, int, si_signo); |
| 142 | STRUCT_MEMBER(siginfo_t, int, si_code); |
| 143 | STRUCT_MEMBER(siginfo_t, int, si_errno); |
| 144 | STRUCT_MEMBER(siginfo_t, pid_t, si_pid); |
| 145 | STRUCT_MEMBER(siginfo_t, uid_t, si_uid); |
| 146 | STRUCT_MEMBER(siginfo_t, void*, si_addr); |
| 147 | STRUCT_MEMBER(siginfo_t, int, si_status); |
| 148 | STRUCT_MEMBER(siginfo_t, long, si_band); |
| 149 | STRUCT_MEMBER(siginfo_t, union sigval, si_value); |
| 150 | |
| 151 | i = ILL_ILLOPC; |
| 152 | i = ILL_ILLOPN; |
| 153 | i = ILL_ILLADR; |
| 154 | i = ILL_ILLTRP; |
| 155 | i = ILL_PRVOPC; |
| 156 | i = ILL_PRVREG; |
| 157 | i = ILL_COPROC; |
| 158 | i = ILL_BADSTK; |
| 159 | |
| 160 | i = FPE_INTDIV; |
| 161 | i = FPE_INTOVF; |
| 162 | i = FPE_FLTDIV; |
| 163 | i = FPE_FLTOVF; |
| 164 | i = FPE_FLTUND; |
| 165 | i = FPE_FLTRES; |
| 166 | i = FPE_FLTINV; |
| 167 | i = FPE_FLTSUB; |
| 168 | |
| 169 | i = SEGV_MAPERR; |
| 170 | i = SEGV_ACCERR; |
| 171 | |
| 172 | i = BUS_ADRALN; |
| 173 | i = BUS_ADRERR; |
| 174 | i = BUS_OBJERR; |
| 175 | |
| 176 | i = TRAP_BRKPT; |
| 177 | i = TRAP_TRACE; |
| 178 | |
| 179 | i = CLD_EXITED; |
| 180 | i = CLD_KILLED; |
| 181 | i = CLD_DUMPED; |
| 182 | i = CLD_TRAPPED; |
| 183 | i = CLD_STOPPED; |
| 184 | i = CLD_CONTINUED; |
| 185 | |
| 186 | i = POLL_IN; |
| 187 | i = POLL_OUT; |
| 188 | i = POLL_MSG; |
| 189 | i = POLL_ERR; |
| 190 | i = POLL_PRI; |
| 191 | i = POLL_HUP; |
| 192 | |
| 193 | i = SI_USER; |
| 194 | i = SI_QUEUE; |
| 195 | i = SI_TIMER; |
| 196 | i = SI_ASYNCIO; |
| 197 | i = SI_MESGQ; |
| 198 | |
| 199 | typedef void (*signal_handler_type)(int); |
| 200 | |
| 201 | FUNCTION(kill, int (*f)(pid_t, int)); |
| 202 | FUNCTION(killpg, int (*f)(pid_t, int)); |
| 203 | FUNCTION(psiginfo, void (*f)(const siginfo_t*, const char*)); |
| 204 | FUNCTION(psignal, void (*f)(int, const char*)); |
| 205 | FUNCTION(pthread_kill, int (*f)(pthread_t, int)); |
| 206 | FUNCTION(pthread_sigmask, int (*f)(int, const sigset_t*, sigset_t*)); |
| 207 | FUNCTION(raise, int (*f)(int)); |
| 208 | FUNCTION(sigaction, int (*f)(int, const struct sigaction*, struct sigaction*)); |
| 209 | FUNCTION(sigaddset, int (*f)(sigset_t*, int)); |
| 210 | FUNCTION(sigaltstack, int (*f)(const stack_t*, stack_t*)); |
| 211 | FUNCTION(sigdelset, int (*f)(sigset_t*, int)); |
| 212 | FUNCTION(sigemptyset, int (*f)(sigset_t*)); |
| 213 | FUNCTION(sigfillset, int (*f)(sigset_t*)); |
| 214 | FUNCTION(sighold, int (*f)(int)); |
| 215 | FUNCTION(sigignore, int (*f)(int)); |
| 216 | FUNCTION(siginterrupt, int (*f)(int, int)); |
| 217 | FUNCTION(sigismember, int (*f)(const sigset_t*, int)); |
| 218 | FUNCTION(signal, signal_handler_type (*f)(int, signal_handler_type)); |
| 219 | FUNCTION(sigpause, int (*f)(int)); |
| 220 | FUNCTION(sigpending, int (*f)(sigset_t*)); |
| 221 | FUNCTION(sigprocmask, int (*f)(int, const sigset_t*, sigset_t*)); |
| 222 | FUNCTION(sigqueue, int (*f)(pid_t, int, union sigval)); |
| 223 | FUNCTION(sigrelse, int (*f)(int)); |
| 224 | FUNCTION(sigset, signal_handler_type (*f)(int, signal_handler_type)); |
| 225 | FUNCTION(sigsuspend, int (*f)(const sigset_t*)); |
| 226 | FUNCTION(sigtimedwait, int (*f)(const sigset_t*, siginfo_t*, const struct timespec*)); |
| 227 | FUNCTION(sigwait, int (*f)(const sigset_t*, int*)); |
| 228 | FUNCTION(sigwaitinfo, int (*f)(const sigset_t*, siginfo_t*)); |
| 229 | } |