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