1*41058Swilliam /*- 2*41058Swilliam * Copyright (c) 1990 The Regents of the University of California. 3*41058Swilliam * All rights reserved. 4*41058Swilliam * 5*41058Swilliam * This code is derived from software contributed to Berkeley by 6*41058Swilliam * William Jolitz. 7*41058Swilliam * 8*41058Swilliam * %sccs.include.noredist.c% 9*41058Swilliam * 10*41058Swilliam * @(#)frame.h 5.1 (Berkeley) 04/24/90 11*41058Swilliam */ 1240457Sbill 1340457Sbill /* 14*41058Swilliam * System stack frames. 1540457Sbill */ 16*41058Swilliam 17*41058Swilliam /* 18*41058Swilliam * Exception/Trap Stack Frame 19*41058Swilliam */ 20*41058Swilliam 21*41058Swilliam struct trapframe { 22*41058Swilliam int tf_es; 23*41058Swilliam int tf_ds; 24*41058Swilliam int tf_edi; 25*41058Swilliam int tf_esi; 26*41058Swilliam int tf_ebp; 27*41058Swilliam int tf_isp; 28*41058Swilliam int tf_ebx; 29*41058Swilliam int tf_edx; 30*41058Swilliam int tf_ecx; 31*41058Swilliam int tf_eax; 32*41058Swilliam int tf_trapno; 33*41058Swilliam /* below portion defined in 386 hardware */ 34*41058Swilliam int tf_err; 35*41058Swilliam int tf_eip; 36*41058Swilliam int tf_cs; 37*41058Swilliam int tf_eflags; 38*41058Swilliam /* below only when transitting rings (e.g. user to kernel) */ 39*41058Swilliam int tf_esp; 40*41058Swilliam int tf_ss; 4140457Sbill }; 42*41058Swilliam 43*41058Swilliam /* Interrupt stack frame */ 44*41058Swilliam 45*41058Swilliam struct intrframe { 46*41058Swilliam int if_vec; 47*41058Swilliam int if_ppl; 48*41058Swilliam int if_es; 49*41058Swilliam int if_ds; 50*41058Swilliam int if_edi; 51*41058Swilliam int if_esi; 52*41058Swilliam int if_ebp; 53*41058Swilliam int :32; 54*41058Swilliam int if_ebx; 55*41058Swilliam int if_edx; 56*41058Swilliam int if_ecx; 57*41058Swilliam int if_eax; 58*41058Swilliam int :32; /* for compat with trap frame - trapno */ 59*41058Swilliam int :32; /* for compat with trap frame - err */ 60*41058Swilliam /* below portion defined in 386 hardware */ 61*41058Swilliam int if_eip; 62*41058Swilliam int if_cs; 63*41058Swilliam int if_eflags; 64*41058Swilliam /* below only when transitting rings (e.g. user to kernel) */ 65*41058Swilliam int if_esp; 66*41058Swilliam int if_ss; 67*41058Swilliam }; 68*41058Swilliam 69*41058Swilliam /* 70*41058Swilliam * Call Gate/System Call Stack Frame 71*41058Swilliam */ 72*41058Swilliam 73*41058Swilliam struct syscframe { 74*41058Swilliam int sf_edi; 75*41058Swilliam int sf_esi; 76*41058Swilliam int sf_ebp; 77*41058Swilliam int :32; /* redundant save of isp */ 78*41058Swilliam int sf_ebx; 79*41058Swilliam int sf_edx; 80*41058Swilliam int sf_ecx; 81*41058Swilliam int sf_eax; 82*41058Swilliam int sf_eflags; 83*41058Swilliam /* below portion defined in 386 hardware */ 84*41058Swilliam /* int sf_args[N]; /* if call gate copy args enabled!*/ 85*41058Swilliam int sf_eip; 86*41058Swilliam int sf_cs; 87*41058Swilliam /* below only when transitting rings (e.g. user to kernel) */ 88*41058Swilliam int sf_esp; 89*41058Swilliam int sf_ss; 90*41058Swilliam }; 91