1 /*        $NetBSD: signal.h,v 1.26 2021/10/28 23:41:06 thorpej Exp $ */
2 
3 /*
4  * Copyright (c) 1992, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * This software was developed by the Computer Systems Engineering group
8  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
9  * contributed to Berkeley.
10  *
11  * All advertising materials mentioning features or use of this software
12  * must display the following acknowledgement:
13  *        This product includes software developed by the University of
14  *        California, Lawrence Berkeley Laboratory.
15  *
16  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions
18  * are met:
19  * 1. Redistributions of source code must retain the above copyright
20  *    notice, this list of conditions and the following disclaimer.
21  * 2. Redistributions in binary form must reproduce the above copyright
22  *    notice, this list of conditions and the following disclaimer in the
23  *    documentation and/or other materials provided with the distribution.
24  * 3. Neither the name of the University nor the names of its contributors
25  *    may be used to endorse or promote products derived from this software
26  *    without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38  * SUCH DAMAGE.
39  *
40  *        @(#)signal.h        8.1 (Berkeley) 6/11/93
41  */
42 
43 #ifndef   _SPARC_SIGNAL_H_
44 #define _SPARC_SIGNAL_H_
45 
46 #include <sys/featuretest.h>
47 
48 #define   __HAVE_STRUCT_SIGCONTEXT
49 
50 #ifndef _LOCORE
51 typedef int sig_atomic_t;
52 #endif
53 
54 #if defined(_NETBSD_SOURCE)
55 #ifndef _LOCORE
56 #include <sys/sigtypes.h>
57 /*
58  * Information pushed on stack when a signal is delivered.
59  * This is used by the kernel to restore state following
60  * execution of the signal handler.  It is also made available
61  * to the handler to allow it to restore state properly if
62  * a non-standard exit is performed.
63  *
64  * All machines must have an sc_onstack and sc_mask.
65  */
66 #if defined(_KERNEL)
67 struct sigcontext13 {
68           int       sc_onstack;                   /* sigstack state to restore */
69           int       sc_mask;            /* signal mask to restore (old style) */
70           /* begin machine dependent portion */
71           long      sc_sp;                        /* %sp to restore */
72           long      sc_pc;                        /* pc to restore */
73           long      sc_npc;                       /* npc to restore */
74 #ifdef __arch64__
75           long      sc_tstate;                    /* tstate to restore */
76 #else
77           long      sc_psr;                       /* psr to restore */
78 #endif
79           long      sc_g1;                        /* %g1 to restore */
80           long      sc_o0;                        /* %o0 to restore */
81 };
82 #endif /* _KERNEL */
83 
84 struct sigcontext {
85           int                 sc_onstack;         /* sigstack state to restore */
86           int                 __sc_mask13;        /* signal mask to restore (old style) */
87           /* begin machine dependent portion */
88           long                sc_sp;              /* %sp to restore */
89           long                sc_pc;              /* pc to restore */
90           long                sc_npc;             /* npc to restore */
91 #ifdef __arch64__
92           long                sc_tstate;          /* tstate to restore */
93 #else
94           long                sc_psr;             /* psr to restore */
95 #endif
96           long                sc_g1;              /* %g1 to restore */
97           long                sc_o0;              /* %o0 to restore */
98           sigset_t  sc_mask;  /* signal mask to restore (new style) */
99 };
100 
101 #else /* _LOCORE */
102 /* XXXXX These values don't work for _LP64 */
103 #define   SC_SP_OFFSET        8
104 #define   SC_PC_OFFSET        12
105 #define   SC_NPC_OFFSET       16
106 #define   SC_PSR_OFFSET       20
107 #define   SC_G1_OFFSET        24
108 #define   SC_O0_OFFSET        28
109 #endif /* _LOCORE */
110 
111 /*
112  * `Code' arguments to signal handlers.  The names, and the funny numbering.
113  * are defined so as to match up with what SunOS uses; I have no idea why
114  * they did the numbers that way, except maybe to match up with the 68881.
115  */
116 #define   FPE_INTOVF_TRAP               0x01      /* integer overflow */
117 #define   FPE_INTDIV_TRAP               0x14      /* integer divide by zero */
118 #define   FPE_FLTINEX_TRAP    0xc4      /* inexact */
119 #define   FPE_FLTDIV_TRAP               0xc8      /* divide by zero */
120 #define   FPE_FLTUND_TRAP               0xcc      /* underflow */
121 #define   FPE_FLTOPERR_TRAP   0xd0      /* operand error */
122 #define   FPE_FLTOVF_TRAP               0xd4      /* overflow */
123 
124 #endif    /* _NETBSD_SOURCE */
125 #endif    /* !_SPARC_SIGNAL_H_ */
126