xref: /csrg-svn/sys/i386/include/frame.h (revision 63359)
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