Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / i386 / frame.h @ 14

History | View | Annotate | Download (5.83 KB)

1 13 up20180614
/*        $NetBSD: frame.h,v 1.35 2012/02/19 21:06:11 rmind Exp $        */
2
3
/*-
4
 * Copyright (c) 1998 The NetBSD Foundation, Inc.
5
 * All rights reserved.
6
 *
7
 * This code is derived from software contributed to The NetBSD Foundation
8
 * by Charles M. Hannum.
9
 *
10
 * Redistribution and use in source and binary forms, with or without
11
 * modification, are permitted provided that the following conditions
12
 * are met:
13
 * 1. Redistributions of source code must retain the above copyright
14
 *    notice, this list of conditions and the following disclaimer.
15
 * 2. Redistributions in binary form must reproduce the above copyright
16
 *    notice, this list of conditions and the following disclaimer in the
17
 *    documentation and/or other materials provided with the distribution.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
 * POSSIBILITY OF SUCH DAMAGE.
30
 */
31
32
/*-
33
 * Copyright (c) 1990 The Regents of the University of California.
34
 * All rights reserved.
35
 *
36
 * This code is derived from software contributed to Berkeley by
37
 * William Jolitz.
38
 *
39
 * Redistribution and use in source and binary forms, with or without
40
 * modification, are permitted provided that the following conditions
41
 * are met:
42
 * 1. Redistributions of source code must retain the above copyright
43
 *    notice, this list of conditions and the following disclaimer.
44
 * 2. Redistributions in binary form must reproduce the above copyright
45
 *    notice, this list of conditions and the following disclaimer in the
46
 *    documentation and/or other materials provided with the distribution.
47
 * 3. Neither the name of the University nor the names of its contributors
48
 *    may be used to endorse or promote products derived from this software
49
 *    without specific prior written permission.
50
 *
51
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
52
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
53
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
54
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
55
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
56
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
57
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
58
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
59
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
60
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
61
 * SUCH DAMAGE.
62
 *
63
 *        @(#)frame.h        5.2 (Berkeley) 1/18/91
64
 */
65
66
#ifndef _I386_FRAME_H_
67
#define _I386_FRAME_H_
68
69
#include <sys/signal.h>
70
71
/*
72
 * System stack frames.
73
 */
74
75
/*
76
 * Exception/Trap Stack Frame
77
 */
78
struct trapframe {
79
        uint16_t        tf_gs;
80
        uint16_t        tf_gs_pad;
81
        uint16_t        tf_fs;
82
        uint16_t        tf_fs_pad;
83
        uint16_t        tf_es;
84
        uint16_t        tf_es_pad;
85
        uint16_t        tf_ds;
86
        uint16_t        tf_ds_pad;
87
        int        tf_edi;
88
        int        tf_esi;
89
        int        tf_ebp;
90
        int        tf_ebx;
91
        int        tf_edx;
92
        int        tf_ecx;
93
        int        tf_eax;
94
        int        tf_trapno;
95
        /* below portion defined in 386 hardware */
96
        int        tf_err;
97
        int        tf_eip;
98
        int        tf_cs;
99
        int        tf_eflags;
100
        /* below used when transitting rings (e.g. user to kernel) */
101
        int        tf_esp;
102
        int        tf_ss;
103
        /* below used when switching out of VM86 mode */
104
        int        tf_vm86_es;
105
        int        tf_vm86_ds;
106
        int        tf_vm86_fs;
107
        int        tf_vm86_gs;
108
};
109
110
/*
111
 * Interrupt stack frame
112
 */
113
struct intrframe {
114
        int        if_ppl;
115
        int        if_gs;
116
        int        if_fs;
117
        int        if_es;
118
        int        if_ds;
119
        int        if_edi;
120
        int        if_esi;
121
        int        if_ebp;
122
        int        if_ebx;
123
        int        if_edx;
124
        int        if_ecx;
125
        int        if_eax;
126
        uint32_t __if_trapno;        /* for compat with trap frame - trapno */
127
        uint32_t __if_err;        /* for compat with trap frame - err */
128
        /* below portion defined in 386 hardware */
129
        int        if_eip;
130
        int        if_cs;
131
        int        if_eflags;
132
        /* below only when transitting rings (e.g. user to kernel) */
133
        int        if_esp;
134
        int        if_ss;
135
};
136
137
/*
138
 * Stack frame inside cpu_switchto()
139
 */
140
struct switchframe {
141
        int        sf_edi;
142
        int        sf_esi;
143
        int        sf_ebx;
144
        int        sf_eip;
145
};
146
147
#if defined(_KERNEL) || defined(__minix)
148
/*
149
 * Old-style signal frame
150
 */
151
struct sigframe_sigcontext {
152
#if defined(__minix)
153
        /* ret addr + stackframe for handler */
154
        int        sf_ra_sigreturn;        /* first return to sigreturn */
155
#else
156
        int        sf_ra;                        /* return address for handler */
157
#endif /* defined(__minix) */
158
        int        sf_signum;                /* "signum" argument for handler */
159
        int        sf_code;                /* "code" argument for handler */
160
        struct        sigcontext *sf_scp;        /* "scp" argument for handler */
161
#if defined(__minix)
162
        /* ret addr + stackframe for sigreturn */
163
        uint32_t sf_fp;                        /* saved FP */
164
        int        sf_ra;                        /* actual return address for handler */
165
        struct        sigcontext *sf_scpcopy;        /* minix scp copy */
166
#endif /* defined(__minix) */
167
        struct        sigcontext sf_sc;        /* actual saved context */
168
};
169
#endif
170
171
/*
172
 * New-style signal frame
173
 */
174
struct sigframe_siginfo {
175
        int                sf_ra;                /* return address for handler */
176
        int                sf_signum;        /* "signum" argument for handler */
177
        siginfo_t        *sf_sip;        /* "sip" argument for handler */
178
        ucontext_t        *sf_ucp;        /* "ucp" argument for handler */
179
        siginfo_t        sf_si;                /* actual saved siginfo */
180
        ucontext_t        sf_uc;                /* actual saved ucontext */
181
};
182
183
#ifdef _KERNEL
184
void *getframe(struct lwp *, int, int *);
185
void buildcontext(struct lwp *, int, void *, void *);
186
void sendsig_sigcontext(const ksiginfo_t *, const sigset_t *);
187
#endif
188
189
#endif  /* _I386_FRAME_H_ */