1/*	$NetBSD: linux32_signal.h,v 1.2 2009/06/08 14:42:10 njoly Exp $ */
2
3/*-
4 * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software
15 *    must display the following acknowledgement:
16 *	This product includes software developed by Emmanuel Dreyfus
17 * 4. The name of the author may not be used to endorse or promote
18 *    products derived from this software without specific prior written
19 *    permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE THE AUTHOR AND CONTRIBUTORS ``AS IS''
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33#ifndef _AMD64_LINUX32_SIGNAL_H_
34#define _AMD64_LINUX32_SIGNAL_H_
35
36#define native_to_linux32_signo native_to_linux_signo
37#define linux32_to_native_signo linux_to_native_signo
38
39typedef	netbsd32_pointer_t	linux32_handler_t;
40typedef	netbsd32_pointer_t	linux32_restorer_t;
41typedef netbsd32_pointer_t 	linux32_siginfop_t;
42typedef netbsd32_pointer_t 	linux32_ucontextp_t;
43typedef netbsd32_pointer_t 	linux32_sigcontextp_t;
44typedef netbsd32_pointer_t 	linux32_fpstatep_t;
45typedef u_int32_t		linux32_old_sigset_t;
46
47#define LINUX32__NSIG             64
48#define LINUX32__NSIG_BPW         32
49#define LINUX32__NSIG_WORDS       (LINUX32__NSIG / LINUX32__NSIG_BPW)
50
51#define LINUX32_SIG_BLOCK         0
52#define LINUX32_SIG_UNBLOCK       1
53#define LINUX32_SIG_SETMASK       2
54
55#define LINUX32_SA_NOCLDSTOP      0x00000001
56#define LINUX32_SA_NOCLDWAIT      0x00000002
57#define LINUX32_SA_SIGINFO        0x00000004
58#define LINUX32_SA_RESTORER       0x04000000
59#define LINUX32_SA_ONSTACK        0x08000000
60#define LINUX32_SA_RESTART        0x10000000
61#define LINUX32_SA_INTERRUPT      0x20000000
62#define LINUX32_SA_NOMASK         0x40000000
63#define LINUX32_SA_ONESHOT        0x80000000
64#define LINUX32_SA_ALLBITS        0xfc000007
65
66#define LINUX32_SS_ONSTACK        1
67#define LINUX32_SS_DISABLE        2
68
69/*
70 * We only define the ones used in linux32_machdep.c, since they are
71 * the same on i386 and amd64...
72 */
73#define LINUX32_SIGILL	LINUX_SIGILL
74#define LINUX32_SIGFPE	LINUX_SIGFPE
75#define LINUX32_SIGSEGV	LINUX_SIGSEGV
76#define LINUX32_SIGBUS	LINUX_SIGBUS
77#define LINUX32_SIGTRAP	LINUX_SIGTRAP
78#define LINUX32_SIGCHLD	LINUX_SIGCHLD
79#define LINUX32_SIGIO	LINUX_SIGIO
80#define LINUX32_SIGALRM	LINUX_SIGALRM
81#define LINUX32_SIGRTMIN	LINUX_SIGRTMIN
82
83typedef struct {
84	u_int32_t sig[LINUX32__NSIG_WORDS];
85} linux32_sigset_t;
86
87struct linux32_sigaction {
88	linux32_handler_t	linux_sa_handler;
89	u_int32_t		linux_sa_flags;
90	linux32_restorer_t	linux_sa_restorer;
91	linux32_sigset_t	linux_sa_mask;
92};
93
94
95struct linux32_sigaltstack {
96        netbsd32_voidp ss_sp;
97        int ss_flags;
98        netbsd32_size_t ss_size;
99};
100
101struct linux32_sigcontext {
102        int     sc_gs;
103        int     sc_fs;
104        int     sc_es;
105        int     sc_ds;
106        int     sc_edi;
107        int     sc_esi;
108        int     sc_ebp;
109        int     sc_esp;
110        int     sc_ebx;
111        int     sc_edx;
112        int     sc_ecx;
113        int     sc_eax;
114        int     sc_trapno;
115        int     sc_err;
116        int     sc_eip;
117        int     sc_cs;
118        int     sc_eflags;
119        int     sc_esp_at_signal;
120        int     sc_ss;
121        linux32_fpstatep_t sc_387;
122        /* XXX check this */
123        linux32_old_sigset_t sc_mask;
124	int     sc_cr2;
125};
126
127struct linux32_libc_fpreg {
128        unsigned short  significand[4];
129        unsigned short  exponent;
130};
131
132struct linux32_libc_fpstate {
133        u_int32_t cw;
134        u_int32_t sw;
135        u_int32_t tag;
136        u_int32_t ipoff;
137        u_int32_t cssel;
138        u_int32_t dataoff;
139        u_int32_t datasel;
140        struct linux32_libc_fpreg _st[8];
141        u_int32_t status;
142};
143
144struct linux32_ucontext {
145        u_int32_t   uc_flags;
146        linux32_ucontextp_t uc_link;
147        struct linux32_sigaltstack uc_stack;
148        struct linux32_sigcontext uc_mcontext;
149        linux32_sigset_t uc_sigmask;
150        struct linux32_libc_fpstate uc_fpregs_mem;
151};
152
153struct linux32_rt_sigframe {
154        int     sf_sig;
155        linux32_siginfop_t  sf_sip;
156        linux32_ucontextp_t sf_ucp;
157        struct  linux32_siginfo  sf_si;
158        struct  linux32_ucontext sf_uc;
159        linux32_handler_t   sf_handler;
160};
161
162struct linux32_sigframe {
163        int     sf_sig;
164        struct  linux32_sigcontext sf_sc;
165        linux32_handler_t   sf_handler;
166};
167
168#endif /* _AMD64_LINUX32_SIGNAL_H_ */
169