141058Swilliam /*- 2*63359Sbostic * Copyright (c) 1990, 1993 3*63359Sbostic * The Regents of the University of California. All rights reserved. 441058Swilliam * 541058Swilliam * This code is derived from software contributed to Berkeley by 641058Swilliam * William Jolitz. 741058Swilliam * 846006Swilliam * %sccs.include.redist.c% 941058Swilliam * 10*63359Sbostic * @(#)frame.h 8.1 (Berkeley) 06/11/93 1141058Swilliam */ 1240457Sbill 1340457Sbill /* 1441058Swilliam * System stack frames. 1540457Sbill */ 1641058Swilliam 1741058Swilliam /* 1841058Swilliam * Exception/Trap Stack Frame 1941058Swilliam */ 2041058Swilliam 2141058Swilliam struct trapframe { 2241058Swilliam int tf_es; 2341058Swilliam int tf_ds; 2441058Swilliam int tf_edi; 2541058Swilliam int tf_esi; 2641058Swilliam int tf_ebp; 2741058Swilliam int tf_isp; 2841058Swilliam int tf_ebx; 2941058Swilliam int tf_edx; 3041058Swilliam int tf_ecx; 3141058Swilliam int tf_eax; 3241058Swilliam int tf_trapno; 3341058Swilliam /* below portion defined in 386 hardware */ 3441058Swilliam int tf_err; 3541058Swilliam int tf_eip; 3641058Swilliam int tf_cs; 3741058Swilliam int tf_eflags; 3841058Swilliam /* below only when transitting rings (e.g. user to kernel) */ 3941058Swilliam int tf_esp; 4041058Swilliam int tf_ss; 4140457Sbill }; 4241058Swilliam 4341058Swilliam /* Interrupt stack frame */ 4441058Swilliam 4541058Swilliam struct intrframe { 4641058Swilliam int if_vec; 4741058Swilliam int if_ppl; 4841058Swilliam int if_es; 4941058Swilliam int if_ds; 5041058Swilliam int if_edi; 5141058Swilliam int if_esi; 5241058Swilliam int if_ebp; 5341058Swilliam int :32; 5441058Swilliam int if_ebx; 5541058Swilliam int if_edx; 5641058Swilliam int if_ecx; 5741058Swilliam int if_eax; 5841058Swilliam int :32; /* for compat with trap frame - trapno */ 5941058Swilliam int :32; /* for compat with trap frame - err */ 6041058Swilliam /* below portion defined in 386 hardware */ 6141058Swilliam int if_eip; 6241058Swilliam int if_cs; 6341058Swilliam int if_eflags; 6441058Swilliam /* below only when transitting rings (e.g. user to kernel) */ 6541058Swilliam int if_esp; 6641058Swilliam int if_ss; 6741058Swilliam }; 6841058Swilliam 6941058Swilliam /* 7041058Swilliam * Call Gate/System Call Stack Frame 7141058Swilliam */ 7241058Swilliam 7341058Swilliam struct syscframe { 7441058Swilliam int sf_edi; 7541058Swilliam int sf_esi; 7641058Swilliam int sf_ebp; 7741058Swilliam int :32; /* redundant save of isp */ 7841058Swilliam int sf_ebx; 7941058Swilliam int sf_edx; 8041058Swilliam int sf_ecx; 8141058Swilliam int sf_eax; 8241058Swilliam int sf_eflags; 8341058Swilliam /* below portion defined in 386 hardware */ 8441058Swilliam /* int sf_args[N]; /* if call gate copy args enabled!*/ 8541058Swilliam int sf_eip; 8641058Swilliam int sf_cs; 8741058Swilliam /* below only when transitting rings (e.g. user to kernel) */ 8841058Swilliam int sf_esp; 8941058Swilliam int sf_ss; 9041058Swilliam }; 91