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