signal.h revision 1.8
11.8Suwe/* $NetBSD: signal.h,v 1.8 2003/11/23 23:13:11 uwe Exp $ */ 21.1Sitojun 31.1Sitojun/* 41.1Sitojun * Copyright (c) 1982, 1986, 1989, 1991 Regents of the University of California. 51.1Sitojun * All rights reserved. 61.1Sitojun * 71.1Sitojun * Redistribution and use in source and binary forms, with or without 81.1Sitojun * modification, are permitted provided that the following conditions 91.1Sitojun * are met: 101.1Sitojun * 1. Redistributions of source code must retain the above copyright 111.1Sitojun * notice, this list of conditions and the following disclaimer. 121.1Sitojun * 2. Redistributions in binary form must reproduce the above copyright 131.1Sitojun * notice, this list of conditions and the following disclaimer in the 141.1Sitojun * documentation and/or other materials provided with the distribution. 151.7Sagc * 3. Neither the name of the University nor the names of its contributors 161.1Sitojun * may be used to endorse or promote products derived from this software 171.1Sitojun * without specific prior written permission. 181.1Sitojun * 191.1Sitojun * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 201.1Sitojun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 211.1Sitojun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 221.1Sitojun * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 231.1Sitojun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 241.1Sitojun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 251.1Sitojun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 261.1Sitojun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 271.1Sitojun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 281.1Sitojun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 291.1Sitojun * SUCH DAMAGE. 301.1Sitojun * 311.1Sitojun * @(#)signal.h 7.16 (Berkeley) 3/17/91 321.1Sitojun */ 331.1Sitojun 341.1Sitojun#ifndef _SH3_SIGNAL_H_ 351.2Such#define _SH3_SIGNAL_H_ 361.1Sitojun 371.6Sbjh21#include <sys/featuretest.h> 381.6Sbjh21 391.1Sitojuntypedef int sig_atomic_t; 401.8Suwe 411.8Suwe#define __HAVE_SIGINFO 421.8Suwe#ifdef COMPAT_16 431.8Suwe#define SIGTRAMP_VALID(vers) ((unsigned)(vers) <= 2) 441.8Suwe#else 451.8Suwe#define SIGTRAMP_VALID(vers) ((vers) == 2) 461.8Suwe#endif 471.1Sitojun 481.6Sbjh21#if defined(_NETBSD_SOURCE) 491.1Sitojun 501.1Sitojun/* 511.1Sitojun * Information pushed on stack when a signal is delivered. 521.1Sitojun * This is used by the kernel to restore state following 531.1Sitojun * execution of the signal handler. It is also made available 541.1Sitojun * to the handler to allow it to restore state properly if 551.1Sitojun * a non-standard exit is performed. 561.1Sitojun */ 571.1Sitojun#if defined(__LIBC12_SOURCE__) || defined(_KERNEL) 581.1Sitojunstruct sigcontext13 { 591.1Sitojun int sc_spc; 601.1Sitojun int sc_ssr; 611.1Sitojun int sc_pr; 621.1Sitojun int sc_r14; 631.1Sitojun int sc_r13; 641.1Sitojun int sc_r12; 651.1Sitojun int sc_r11; 661.1Sitojun int sc_r10; 671.1Sitojun int sc_r9; 681.1Sitojun int sc_r8; 691.1Sitojun int sc_r7; 701.1Sitojun int sc_r6; 711.1Sitojun int sc_r5; 721.1Sitojun int sc_r4; 731.1Sitojun int sc_r3; 741.1Sitojun int sc_r2; 751.1Sitojun int sc_r1; 761.1Sitojun int sc_r0; 771.1Sitojun int sc_r15; 781.1Sitojun 791.1Sitojun int sc_onstack; /* sigstack state to restore */ 801.1Sitojun int sc_mask; /* signal mask to restore (old style) */ 811.1Sitojun 821.3Such int sc_expevt; /* XXX should be above */ 831.1Sitojun int sc_err; 841.1Sitojun}; 851.1Sitojun#endif 861.1Sitojun 871.1Sitojunstruct sigcontext { 881.1Sitojun int sc_spc; 891.1Sitojun int sc_ssr; 901.1Sitojun int sc_pr; 911.1Sitojun int sc_r14; 921.1Sitojun int sc_r13; 931.1Sitojun int sc_r12; 941.1Sitojun int sc_r11; 951.1Sitojun int sc_r10; 961.1Sitojun int sc_r9; 971.1Sitojun int sc_r8; 981.1Sitojun int sc_r7; 991.1Sitojun int sc_r6; 1001.1Sitojun int sc_r5; 1011.1Sitojun int sc_r4; 1021.1Sitojun int sc_r3; 1031.1Sitojun int sc_r2; 1041.1Sitojun int sc_r1; 1051.1Sitojun int sc_r0; 1061.1Sitojun int sc_r15; 1071.1Sitojun 1081.1Sitojun int sc_onstack; /* sigstack state to restore */ 1091.1Sitojun 1101.3Such int sc_expevt; /* XXX should be above */ 1111.1Sitojun int sc_err; 1121.1Sitojun 1131.1Sitojun sigset_t sc_mask; /* signal mask to restore (new style) */ 1141.1Sitojun}; 1151.5Sthorpej 1161.5Sthorpej/* 1171.5Sthorpej * The following macros are used to convert from a ucontext to sigcontext, 1181.5Sthorpej * and vice-versa. This is for building a sigcontext to deliver to old-style 1191.5Sthorpej * signal handlers, and converting back (in the event the handler modifies 1201.5Sthorpej * the context). 1211.5Sthorpej */ 1221.5Sthorpej#define _MCONTEXT_TO_SIGCONTEXT(uc, sc) \ 1231.5Sthorpejdo { \ 1241.5Sthorpej memcpy(&(sc)->sc_pr, &(uc)->uc_mcontext.__gregs[_REG_PR], \ 1251.5Sthorpej 17 * sizeof(unsigned int)); \ 1261.5Sthorpej (sc)->sc_spc = (uc)->uc_mcontext.__gregs[_REG_PC]; \ 1271.5Sthorpej (sc)->sc_ssr = (uc)->uc_mcontext.__gregs[_REG_SR]; \ 1281.5Sthorpej (sc)->sc_expevt = (uc)->uc_mcontext.__gregs[_REG_EXPEVT]; \ 1291.5Sthorpej (sc)->sc_err = 0; /* XXX */ \ 1301.5Sthorpej} while (/*CONSTCOND*/0) 1311.5Sthorpej 1321.5Sthorpej#define _SIGCONTEXT_TO_MCONTEXT(sc, uc) \ 1331.5Sthorpejdo { \ 1341.5Sthorpej memcpy(&(uc)->uc_mcontext.__gregs[_REG_PR], &(sc)->sc_pr, \ 1351.5Sthorpej 17 * sizeof(unsigned int)); \ 1361.5Sthorpej (uc)->uc_mcontext.__gregs[_REG_PC] = (sc)->sc_spc; \ 1371.5Sthorpej (uc)->uc_mcontext.__gregs[_REG_SR] = (sc)->sc_ssr; \ 1381.5Sthorpej (uc)->uc_mcontext.__gregs[_REG_EXPEVT] = (sc)->sc_expevt; \ 1391.5Sthorpej} while (/*CONSTCOND*/0) 1401.1Sitojun 1411.6Sbjh21#endif /* _NETBSD_SOURCE */ 1421.1Sitojun#endif /* !_SH3_SIGNAL_H_ */ 143